Glossary
Terms are listed in the order of the chapter that first explains them. For details, read the chapter given under “First appears”. The original documentation and compiler error messages are in English, so the English terms are listed as well.
I. Setup
Term |
English |
Description |
First appears |
|---|---|---|---|
compile |
compile |
The stage that translates each source file into machine code and produces an object file |
|
link |
link |
The stage that joins object files and libraries to produce an executable |
|
object file |
object file |
The file produced as the result of compilation ( |
|
header (file) |
header (file) |
A file that holds declarations and definitions and is read in with |
|
header-only |
header-only |
A form in which all definitions are written in headers, so it can be used without building a library beforehand. MISO takes this form |
|
target |
target |
The name of something CMake builds (an executable or a library) |
|
cache variable |
cache variable |
A setting passed with |
|
build type |
build type |
A combination of optimization and debug information, such as Release or Debug |
|
FetchContent |
FetchContent |
A CMake mechanism that fetches the source of dependency libraries at the configure stage |
|
unit test |
unit test |
A program that checks the behavior of each component |
|
environment variable |
environment variable |
A “name=value” setting passed from the shell to commands |
|
virtual environment (venv) |
virtual environment (venv) |
A Python execution environment independent of others |
|
doctest |
doctest |
The C++ testing library used for MISO unit tests |
|
machine epsilon |
machine epsilon |
The difference between 1 and the next representable floating-point number |
|
rounding error |
rounding error |
The error caused by rounding to a finite number of digits |
|
cancellation |
cancellation |
The loss of significant digits when subtracting nearly equal values |
II. C++ Basics
Term |
English |
Description |
First appears |
|---|---|---|---|
declaration |
declaration |
Telling the compiler a name and its type |
|
initialization |
initialization |
Giving a variable its first value when it is created |
|
implicit conversion |
implicit conversion |
A conversion the compiler performs automatically, for example in an expression that mixes values of different types |
|
static_cast |
static_cast |
A way of writing a type conversion at compile time |
|
type alias |
type alias |
Another name given to an existing type, as in |
|
enumeration |
enumeration ( |
A type that represents one of a fixed set of choices (such as |
|
block |
block |
A group of statements enclosed in |
|
short-circuit evaluation |
short-circuit evaluation |
With |
|
conditional operator |
conditional operator |
|
|
return value |
return value |
The value a function returns with |
|
pass by value |
pass by value |
Passing a copy of the value as a function argument |
|
default argument |
default argument |
The argument value used when it is omitted |
|
overload |
overload |
Defining several functions with the same name but different argument types or numbers |
|
inline |
inline |
A specifier that allows the same definition to appear in several source files. Needed for functions in headers |
|
namespace |
namespace |
A mechanism that divides names into groups ( |
|
standard library |
standard library |
The set of components that come with C++ (such as |
|
exception |
exception |
An error notification that is thrown with |
|
preprocessor / macro |
preprocessor / macro |
Text replacement done before compilation ( |
|
reference |
reference |
Another name for an existing variable ( |
|
pass by reference |
pass by reference |
Receiving a function argument by reference |
|
output parameter |
output parameter |
An argument a function receives as the place to write its result |
|
address |
address |
A number that represents a location in memory |
|
pointer |
pointer |
A variable whose value is an address ( |
|
dereference |
dereference |
Using what a pointer points to, as in |
|
null pointer |
null pointer ( |
A pointer that points to nothing |
|
pointer arithmetic |
pointer arithmetic |
Pointing to the element |
|
undefined behavior |
undefined behavior |
An operation whose result the language does not guarantee. Anything may happen |
|
scope |
scope |
The range in which a name can be used |
|
lifetime |
lifetime |
The period during which a variable or object actually exists |
|
dangling reference / pointer |
dangling reference / pointer |
A reference or pointer that still points to something whose lifetime has ended |
|
memory leak |
memory leak |
Forgetting to free allocated memory |
|
smart pointer |
smart pointer |
A pointer that frees automatically when its lifetime ends ( |
|
class / struct |
class / struct |
A type that bundles data and functions. For |
|
member variable / member function |
member variable / member function |
Variables and functions declared inside a class |
|
object / instance |
object / instance |
An entity created according to a type that stores values |
|
encapsulation |
encapsulation |
Deciding which operations are public and not letting the data inside be touched directly |
|
constructor |
constructor |
A function called automatically when an object is created |
|
member initializer list |
member initializer list |
The list of member initializations written after the |
|
explicit |
explicit |
A specifier that forbids implicit type conversion by a constructor |
|
const member function |
const member function |
A function that promises not to modify members (the trailing |
|
this |
this |
A pointer to the object on which the member function was called |
|
destructor |
destructor |
A cleanup function called automatically when the lifetime ends |
|
RAII |
Resource Acquisition Is Initialization |
A technique that ties the acquisition and release of resources to the lifetime of an object |
|
copy constructor |
copy constructor |
A constructor that creates an object from another object of the same type |
|
move |
move |
Transferring ownership of the contents ( |
|
|
deleted / defaulted function |
A specifier that forbids the use of a function / a specifier that uses the compiler’s default definition |
|
operator overloading |
operator overloading |
Defining a class-specific meaning for operators such as |
|
ownership |
ownership |
Being responsible for cleaning up a resource |
|
View |
view |
A lightweight object that neither allocates nor frees memory and only holds the starting address and the size (such as |
|
friend |
friend |
A declaration that allows a specified class or function to use private members |
|
inheritance / base class / derived class |
inheritance / base class / derived class |
Creating a new class (derived) that inherits the members of an existing class (base) |
|
protected |
protected |
An access level that cannot be used from outside but can be used from derived classes |
|
name hiding |
name hiding |
A function in a derived class hiding a base-class function of the same name |
|
virtual function / override |
virtual function / override |
A function chosen at run time according to the actual type of the object, and its redefinition. MISO does not use them |
|
CRTP |
Curiously Recurring Template Pattern |
A pattern that passes the derived class itself as a template argument of the base class. MISO’s |
|
template |
template |
A mechanism that creates functions, classes, and variables by specifying types or values later |
|
template argument |
template argument |
The types or values given inside |
|
template argument deduction |
template argument deduction |
Determining template arguments from the types of function arguments |
|
instantiation |
instantiation |
Applying types to create a concrete function or class at compile time |
|
variable template |
variable template |
A constant that has a value for each type ( |
|
member function template |
member function template |
A member function made into a template |
|
tag type |
tag type |
An empty struct whose type alone serves as a marker for selection ( |
|
tag dispatch |
tag dispatch |
A way of choosing which function (overload) to call by a tag-type argument |
|
specialization |
specialization |
A separate definition used only for specific template arguments |
|
explicit (full) specialization |
explicit (full) specialization |
A specialization that fixes all the arguments ( |
|
partial specialization |
partial specialization |
A specialization that fixes only some of the arguments |
|
primary template |
primary template |
The first declaration, on which specializations are based |
|
type trait |
type trait |
A class template that returns a property of a type through |
|
SFINAE |
Substitution Failure Is Not An Error |
A rule that removes a candidate whose template-argument substitution fails from the candidates instead of reporting an error |
III. Parallel Computing in MISO
Term |
English |
Description |
First appears |
|---|---|---|---|
row-major / column-major |
row-major / column-major |
A layout in which the last index (C++, MISO) or the first index (Fortran) is contiguous in memory |
|
lambda expression |
lambda expression |
A nameless function written in place, at the position of an expression |
|
capture |
capture |
A lambda expression taking in outer variables by value ( |
|
half-open interval |
half-open interval |
A range |
|
reduction |
reduction |
An operation that computes a single value, such as the sum or the maximum, from all elements ( |
|
identity element |
identity element |
A value that leaves the other operand unchanged when combined with |
|
FMA |
fused multiply-add |
An instruction that performs a multiplication and an addition with a single rounding. It can cause slightly different results on the CPU and the GPU |
|
process |
process |
A unit of program execution that runs with its own memory |
|
rank |
rank |
The 0-based number given to a process within a communicator |
|
communicator |
communicator |
The group of processes that take part in communication (such as |
|
SPMD |
Single Program, Multiple Data |
A form in which each process runs the same program on different data |
|
domain decomposition |
domain decomposition |
Dividing the computational domain and assigning the parts to the processes |
|
ghost cell |
ghost cell |
Cells added at both ends of an array to hold the neighbor’s values or boundary-condition values |
|
halo exchange |
halo exchange |
Communication that fills ghost cells with values from the neighboring rank |
|
tag |
tag |
In MPI, an integer that matches a send with a receive |
|
deadlock |
deadlock |
A state in which processes wait for each other and cannot proceed |
|
non-blocking communication |
non-blocking communication |
Communication that only starts and returns, and waits for completion later ( |
|
collective communication |
collective communication |
Communication in which all processes of a communicator take part ( |
|
pack / unpack |
pack / unpack |
Packing values into a send buffer / restoring them from the received buffer into an array |
|
physical / internal boundary |
physical / internal boundary |
A boundary at the edge of the computational domain / a boundary with a neighboring rank |
|
MPI_PROC_NULL |
MPI_PROC_NULL |
A rank value meaning there is no partner. Sending to or receiving from it does nothing |
|
MCA |
Modular Component Architecture |
A mechanism for selecting Open MPI internal components (environment variables |
|
host |
host |
The CPU side and its memory |
|
device |
device |
The GPU side and its memory |
|
kernel |
kernel |
A function marked with |
|
thread |
thread |
The smallest unit that executes a kernel |
|
(thread) block |
(thread) block |
A group of threads. Shared memory and |
|
grid |
grid |
All the blocks arranged in a single launch |
|
shared memory |
shared memory |
Small, fast memory shared by the threads of the same block |
|
extended lambda |
extended lambda |
A lambda marked with |
|
asynchronous / synchronization |
asynchronous / synchronization |
The host moving on without waiting for the launched GPU work / waiting for that work to complete |
|
stream |
stream |
A queue of work for the GPU. Work in it is executed in the order submitted |
|
CUDA-aware MPI |
CUDA-aware MPI |
MPI that can send and receive GPU memory addresses directly |
|
compute capability |
compute capability |
A number that represents the GPU generation. Used for |
|
HMM |
Heterogeneous Memory Management |
A mechanism that lets the GPU read host memory. In environments where it is enabled, mistakes in capturing |
IV. Capstone Practice and Reading the MISO Source
Term |
English |
Description |
First appears |
|---|---|---|---|
heat equation |
heat equation |
\(\partial u/\partial t = \kappa\,\partial^2 u/\partial x^2\). The equation by which temperature diffuses |
|
analytical solution |
analytical solution |
An exact solution that can be written as a formula |
|
central difference |
central difference |
A difference that approximates the derivative using the left and right neighbors |
|
explicit method |
explicit method |
A method that computes the values at the next time from the values at the current time only |
|
forward Euler method |
forward Euler method |
A first-order method that approximates the time derivative with a forward difference |
|
diffusion number |
diffusion number |
\(r = \kappa\Delta t/\Delta x^2\). It appears in the stability condition |
|
stability condition |
stability condition |
The upper limit of \(\Delta t\) for which the calculation does not diverge (\(r \le 1/2\) for the explicit method for heat conduction) |
|
amplification factor |
amplification factor |
The factor applied to the amplitude of a wave in one step |
|
discrete solution |
discrete solution |
The exact solution of the difference equation itself |
|
truncation error |
truncation error |
The error caused by approximating derivatives with differences |
|
order of convergence |
order of convergence |
The exponent of the rate at which the error decreases as the grid is refined |
|
equation of state (EOS) |
equation of state (EOS) |
The relation that gives the pressure and sound speed from the density and internal energy |
|
(hyperbolic) divergence cleaning |
(hyperbolic) divergence cleaning |
A method that carries the error in \(\nabla\cdot\boldsymbol{B}\) away as a wave with an auxiliary variable \(\phi\) and damps it |
|
CFL condition |
CFL condition |
The condition that sets \(\Delta t\) so that the fastest wave does not cross more than one grid spacing in one step |
|
Alfvén speed |
Alfvén speed |
Speed of waves propagating along the magnetic field, \(\lvert\boldsymbol{B}\rvert/\sqrt{4\pi\rho}\) |
|
artificial viscosity |
artificial viscosity |
A treatment that adds diffusion only near abrupt changes to suppress numerical oscillations |
|
limiter |
limiter |
A function that limits the magnitude of the gradient, for example by taking the smallest slope only when the signs of the slopes agree (such as minmod) |
|
flux |
flux |
The quantity that passes through a cell boundary |
|
source term |
source term |
An external force or heating added to the right-hand side of an equation |
|
hydrostatic equilibrium |
hydrostatic equilibrium |
The state in which gravity and the pressure gradient are balanced |
|
checkpoint |
checkpoint |
The state saved so that a calculation can be restarted |
|
raw string literal |
raw string literal |
A string of the form |