Skip to content

Key Concepts

Rmagine aims to perform computations flexible on selectable computing devices (CPU, GPU, ...). It also provides mechanisms to minimize graphical overheads and unnecessary copies between devices.

Structure

Rmagine has the following top-level structure of directories:

  • Math - rmagine/math
  • Types - rmagine/types
  • Utilility - rmagine/util
  • Map - rmagine/map
  • Simulation - rmagine/simulation
  • Noise - rmagine/noise

Math

Contains all math related types and functions. All math datatypes are completely CUDA compatible. See rmagine/math/types.h for all types. See Math section for more details.

Types

Fundamental types required for simulations, e.g. sensor models. Depends on math types.

Util

Utility functions. For exaple, including rmagine/util/prints.h lets you print every math types via std::cout.

#include <iostream>
#include <rmagine/math/types.h>
#include <rmagine/util/prints.h>

namespace rm = rmagine;

int main(int argc, char* argv)
{
    rm::Transform T = rm::Transform::Identity();
    std::cout << "my transformation: " << T << std::endl;
    return 0;
}

The Stopwatch in rmagine/util/StopWatch.hpp lets you easily stop the runtime of a Code section.

#include <iostream>
#include <rmagine/util/StopWatch.hpp>

namespace rm = rmagine;

void demanding_function()
{
    // ...
}

int main(int argc, char* argv)
{
    rm::StopWatch sw;
    double el;

    sw();
    demanding_function();
    el = sw();
    std::cout << "Demanding Function took " << el << " s" << std::endl;

    return 0;
}

Map

All classes and functions that relate to map construction and map modifications. See Getting Started - Maps for a introduction to map loading. Go to Library - Maps for a more detailed descriptions of how to build Rmagine maps.

Simulation

All classes and functions that relate to the actual simulations.

Noise

All classes and functions that relate to postprocessed noising.