mirror of
https://github.com/andreinechaev/nvcc4jupyter.git
synced 2026-06-13 18:50:47 +05:30
Feature: Passing arguments to NVCC compiler (#26)
* Add option to give nvcc extra arguments * Add test for nvcc options that changes c++ dialect from c++17 to c++14 * Add make and the english language pack to devcontainer to be able to build the documentation * Update documentation config to automatically import the current version of the package * Document new --compiler-args argument * Improve tests coverage by testing for bad arguments and the error output during a failed compilation * Add IPython to docs requirements to allow the __version__ import for readthedocs env * Change devcontainer base image to have the latest CUDA toolkit * Mock the nsight compute tool with a bash script * Add test to compile with opencv * Add new page to documentation that contains a new notebook that explains compiling with external libraries * Add autodocstring vscode extension to devcontainer * Add function that modifies the default profiler/compiler arguments to allow reusing them in multiple magic command calls * Update pylint exceptions * Update contributing instructions * Change version from 1.0.3 to 1.1.0 due to adding features in a backward-compatible manner * Install latest CUDA toolkit on the test runner to pass the OpenCV compilation test * Install opencv in test runner and update code coverage install * Add CUDA bin to PATH in test and coverage runners * Add cuda bin to path variable in .bashrc * Update way to set environment variable PATH in github action * Change devcontainer base image back to ubuntu:22.04 to match the environment from the test runner
This commit is contained in:
committed by
GitHub
parent
5cd225851b
commit
781ff5b76b
+9
-2
@@ -6,11 +6,18 @@
|
||||
# -- Project information -----------------------------------------------------
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
sys.path.append(os.path.join("..", ".."))
|
||||
from nvcc4jupyter.__init__ import __version__ # noqa: E402
|
||||
|
||||
project = "nvcc4jupyter"
|
||||
copyright = "2024, Andrei Nechaev & Cosmin Stefan Ciocan"
|
||||
author = "Andrei Nechaev & Cosmin Stefan Ciocan"
|
||||
release = "1.0.1"
|
||||
version = "1.0.1"
|
||||
release = __version__
|
||||
version = __version__
|
||||
|
||||
|
||||
# -- General configuration ---------------------------------------------------
|
||||
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
|
||||
|
||||
@@ -10,4 +10,5 @@ which provides CUDA capable GPUs with the CUDA toolkit already installed.
|
||||
:caption: Contents:
|
||||
|
||||
usage
|
||||
notebooks
|
||||
magics
|
||||
|
||||
+21
-4
@@ -21,24 +21,40 @@ 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.
|
||||
- ``%%cude -c "<SPACE SEPARATED COMPILER ARGS"``: Passes additional arguments to "nvcc".
|
||||
- ``%%cuda -t``: Outputs the "timeit" built-in magic results.
|
||||
|
||||
Options
|
||||
-------
|
||||
|
||||
.. _timeit:
|
||||
|
||||
-t, --timeit
|
||||
Boolean. If set, returns the output of the "timeit" built-in
|
||||
ipython magic instead of stdout.
|
||||
|
||||
.. _profile:
|
||||
|
||||
-p, --profile
|
||||
Boolean. If set, runs the NVIDIA Nsight Compute profiler whose
|
||||
output is appended to standard output.
|
||||
|
||||
.. _profiler_args:
|
||||
|
||||
-a, --profiler-args
|
||||
String. Optional profiler arguments that can be space separated
|
||||
by wrapping them in double quotes. See all options here:
|
||||
`Nsight Compute CLI <https://docs.nvidia.com/nsight-compute/NsightComputeCli/index.html#command-line-options>`_
|
||||
|
||||
.. _compiler_args:
|
||||
|
||||
-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 <https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html#nvcc-command-options>`_
|
||||
|
||||
|
||||
.. note::
|
||||
If both "\-\-profile" and "\-\-timeit" are used then no profiling is
|
||||
done.
|
||||
@@ -47,10 +63,11 @@ Examples
|
||||
--------
|
||||
::
|
||||
|
||||
# compile, run, and profile the code in the cell with the Nsight
|
||||
# compute profiler while collecting only metrics from the
|
||||
# "MemoryWorkloadAnalysis" section.
|
||||
%%cuda --profile --profiler-args "--section MemoryWorkloadAnalysis"
|
||||
# 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"
|
||||
|
||||
------
|
||||
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
*********
|
||||
Notebooks
|
||||
*********
|
||||
|
||||
This page provides a list of useful Jupyter notebooks written with the
|
||||
**nvcc4jupyter** library.
|
||||
|
||||
.. note::
|
||||
These notebooks are written for Google's Colab, but you may run them in
|
||||
other environments by installing all expected dependencies. If running in
|
||||
Colab, make sure to set the runtime type to a GPU instance (at the time of
|
||||
writing this, T4 is the GPU offered for free by Colab).
|
||||
|
||||
------
|
||||
|
||||
.. _compiling_with_external_libraries:
|
||||
|
||||
Compiling with external libraries
|
||||
=================================
|
||||
|
||||
[`NOTEBOOK <https://colab.research.google.com/drive/1iuY46DCwv4hy3SqDhJgFeO8kgpHnzjTh?usp=sharing>`_]
|
||||
|
||||
If you need to compile CUDA C++ code that uses external libraries in the host
|
||||
code (e.g. OpenCV for reading and writing images to disk) then this section is
|
||||
for you.
|
||||
|
||||
To achieve this, use the :ref:`compiler-args <compiler_args>` option of the
|
||||
:ref:`cuda <cuda_magic>` magic command to pass the correct compiler options
|
||||
of the OpenCV library to **nvcc** for it to link the OpenCV code with the
|
||||
code in your Jupyter cell. Those compiler options can be provided by the
|
||||
`pkg-config <https://www.freedesktop.org/wiki/Software/pkg-config/>`_ tool.
|
||||
|
||||
In the notebook we show how to use OpenCV to load an image, blur it with a CUDA
|
||||
kernel, and then save it back to disk using OpenCV again.
|
||||
@@ -255,3 +255,47 @@ Running the cell above will compile and execute the vector addition code in the
|
||||
SM Active Cycles cycle 383.65
|
||||
Compute (SM) Throughput % 1.19
|
||||
----------------------- ------------- ------------
|
||||
|
||||
Compiler arguments
|
||||
------------------
|
||||
|
||||
In the same way profiler arguments can be passed to the profiling tool,
|
||||
compiling arguments can be passed to **nvcc**:
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
%cuda_group_run --group "vector_add" --compiler-args "--optimize 3"
|
||||
|
||||
Running the cell above will compile and execute the vector addition code in the
|
||||
"vector_add" group. During compilation, **nvcc** receives the "\-\-optimize"
|
||||
option which specifies the optimization level for host code.
|
||||
|
||||
Set default arguments
|
||||
---------------------
|
||||
|
||||
In the case where you execute multiple magic commands with the same compiler or
|
||||
profiler arguments you can avoid writing them every time by setting the default
|
||||
arguments:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from nvcc4jupyter import set_defaults
|
||||
set_defaults(compiler_args="--optimize 3", profiler_args="--section SpeedOfLight")
|
||||
|
||||
The same effect can be achieved by running "set_defaults" once for each config
|
||||
due to the fact that the default value is not changed if an a value is not
|
||||
given to the "set_defaults" function.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from nvcc4jupyter import set_defaults
|
||||
set_defaults(compiler_args="--optimize 3")
|
||||
set_defaults(profiler_args="--section SpeedOfLight")
|
||||
|
||||
|
||||
Now we can run the following cell without specifying the compiler and profiler
|
||||
arguments once again.
|
||||
|
||||
.. code-block:: c++
|
||||
|
||||
%cuda_group_run --group "vector_add" --profile
|
||||
|
||||
Reference in New Issue
Block a user