Magics API

Note

Arguments for profilers and the nvcc compiler can be passed in double quotes so they can contain spaces and dashes.


cuda

Magic command that compiles, runs, and profiles CUDA C++ code in the cell.

Usage

  • %%cuda: Compile and run this cell.

  • %%cuda -p: Also runs the Nsight Compute profiler.

  • %%cuda -p -a "<SPACE SEPARATED PROFILER ARGS>": Also runs the Nsight Compute profiler.

  • %%cuda -c "<SPACE SEPARATED COMPILER ARGS": Passes additional arguments to “nvcc”.

  • %%cuda -t: Outputs the “timeit” built-in magic results.

Options

-t, --timeit

Boolean. If set, returns the output of the “timeit” built-in ipython magic instead of stdout.

-p, --profile

Boolean. If set, runs the NVIDIA Nsight Compute (or NVIDIA Nsight Systems if changed via the --profiler option) profiler whose output is appended to standard output.

-l, --profiler

String. Can either be “ncu” (the default) to use NVIDIA Nsight Compute profiling tool, or “nsys” to use NVIDIA Nsight Systems profiling tool.

-a, --profiler-args

String. Optional profiler arguments that can be space separated by wrapping them in double quotes. Will be passed to the profiler selected by the --profiler option.. See profiler options here: Nsight Compute or Nsight Systems.

-c, --compiler-args

String. Optional compiler arguments that can be space separated by wrapping them in double quotes. They will be passed to “nvcc”. See all options here: NVCC Options

Note

If both “--profile” and “--timeit” are used then no profiling is done.

Examples

# compile, run, and profile the code in the cell with the Nsight compute
# profiler while collecting only metrics from the "MemoryWorkloadAnalysis"
# section; also provides the "--optimize 3" option to "nvcc" during
# compilation to optimize host code
%%cuda -p -a "--section MemoryWorkloadAnalysis" -c "--optimize 3"

cuda_group_save

Magic command that saves CUDA C++ code in the cell for later compilation and execution with possibly more source files.

Usage

  • %%cuda_group_save -n <FILENAME> -g <GROUPNAME>: Save the code in the current cell to a group of source files.

Options

-n, --name

String. Required file name of the saved source file. Must have either the “.cu” or “.h” extension. In order to import a header file saved with this magic you can simply add ‘#include “<name>”’.

-g, --group

String. Required group name to which to add the saved source file. Groups are source files that get compiled together and do not interact with other groups. This allows you to have multiple unrelated CUDA programs within the same jupyter notebook. Adding files to a group named “shared” will make them available to all other source file groups. One use case for the shared group is for sharing error handling code which should be present in all CUDA programs.

Examples

# jupyter cell 1
%%cuda_group_save -n "error_handling.h" -g "shared"
<ERROR HANDLING CODE>

# jupyter cell 2
%%cuda_group_save -n "main.cu" -g "example_group"
#include "error_handling.h"
<YOUR CODE HERE>

cuda_group_run

Line magic command that compiles, runs, and profiles all source files in a group.

Usage

  • %%cuda_group_run -g <GROUPNAME>: Compiles, runs, and profiles the sources files in the given group.

Options

-g, --group

String. Required group name whose source files should be deleted.

Note

All options from the “%%cuda” cell magic are inherited.

Examples

# jupyter cell 1
%%cuda_group_save -n "error_handling.h" -g "shared"
<ERROR HANDLING CODE>

# jupyter cell 2
%%cuda_group_save -n "main.cu" -g "example_group"
#include "error_handling.h"
<YOUR CODE HERE>

# jupyter cell 3
%cuda_group_run -g "example_group" --profile

cuda_group_delete

Line magic command that deletes all source files in a group.

Usage

  • %%cuda_group_delete -g <GROUPNAME>: Removes all source files in the given group.

Options

-g, --group

String. Required group name whose source files should be deleted.

Examples

# jupyter cell 1
%%cuda_group_save -n "error_handling.h" -g "shared"
<ERROR HANDLING CODE>

# jupyter cell 2 - here we delete the error shared group; in
# practice this would be helpful if you want to overwrite some
# functionality that was defined earlier in the notebook
%cuda_group_delete -g "shared"