Files
nvcc/nvcc4jupyter/parsers.py
T
Cosmin Ștefan Ciocan 781ff5b76b 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
2024-02-12 17:29:26 +01:00

118 lines
3.7 KiB
Python

"""
Parsers for the CUDA magic commands.
"""
import argparse
from typing import Callable, Optional
_default_profiler_args: str = ""
_default_compiler_args: str = ""
def set_defaults(
compiler_args: Optional[str] = None, profiler_args: Optional[str] = None
) -> None:
"""
Set the default values for various arguments of the magic commands. These
values will be used if the user does not explicitly provide those arguments
to override this behaviour on a cell by cell basis.
Args:
compiler_args: If not None, this value becomes the new default compiler
config. Defaults to "".
profiler_args: If not None, this value becomes the new default profiler
config. Defaults to "".
"""
# pylint: disable=global-statement
global _default_compiler_args
global _default_profiler_args
if compiler_args is not None:
_default_compiler_args = compiler_args
if profiler_args is not None:
_default_profiler_args = profiler_args
def str_to_lambda(arg: str) -> Callable[[], str]:
"""Convert argparse string to lambda"""
return lambda: arg
def get_parser_cuda() -> argparse.ArgumentParser:
"""
%%cuda magic command parser.
"""
parser = argparse.ArgumentParser(
description=(
"%%cuda magic that compiles and runs CUDA C++ code in this cell."
" See https://nvcc4jupyter.readthedocs.io/en/latest/magics.html#cuda" # noqa: E501
" for usage details."
)
)
parser.add_argument("-t", "--timeit", action="store_true")
parser.add_argument("-p", "--profile", action="store_true")
# --profiler-args and --compiler-args values are lambda functions to allow
# changing the default value at runtime
parser.add_argument(
"-a",
"--profiler-args",
type=str_to_lambda,
default=lambda: _default_profiler_args,
)
parser.add_argument(
"-c",
"--compiler-args",
type=str_to_lambda,
default=lambda: _default_compiler_args,
)
return parser
def get_parser_cuda_group_run() -> argparse.ArgumentParser:
"""
%%cuda_group_run magic command parser.
"""
parser = get_parser_cuda()
parser.description = (
"%%cuda_group_run magic that compiles and runs source files in a given"
" group. See"
" https://nvcc4jupyter.readthedocs.io/en/latest/magics.html#cuda-group-run" # noqa: E501
" for usage details."
)
parser.add_argument("-g", "--group", type=str, required=True)
return parser
def get_parser_cuda_group_save() -> argparse.ArgumentParser:
"""
%%cuda_group_save magic command parser.
"""
parser = argparse.ArgumentParser(
description=(
"%%cuda_group_save magic that saves CUDA C++ code in this cell for"
" later compilation and execution with possibly more source files."
" See https://nvcc4jupyter.readthedocs.io/en/latest/magics.html#cuda-group-save" # noqa: E501
" for usage details."
)
)
parser.add_argument("-n", "--name", type=str, required=True)
parser.add_argument("-g", "--group", type=str, required=True)
return parser
def get_parser_cuda_group_delete() -> argparse.ArgumentParser:
"""
%%cuda_group_delete magic command parser.
"""
parser = argparse.ArgumentParser(
description=(
"%%cuda_group_delete magic that deletes all files in a group. See"
" https://nvcc4jupyter.readthedocs.io/en/latest/magics.html#cuda-group-delete" # noqa: E501
" for usage details."
)
)
parser.add_argument("-g", "--group", type=str, required=True)
return parser