Add option to use NVIDIA Nsight Compute CLI profiler (#21)

* Use NVIDIA Nsight Compute CLI profiler

* Add profile and profiler-args options to argument parser.

* Add missing comma to profiler-args option.

* Use profile args in version 1 of the plugin

* Change profiler-args option to take all remaining arguments

* Change profiler_args type from string to list of strings

* Add profile option to version 2 of the plugin

* Add profiler usage instructions
This commit is contained in:
Ștefan-Cosmin Ciocan
2023-12-27 10:00:14 +01:00
committed by GitHub
parent 98c9faf45c
commit 887c809d07
4 changed files with 47 additions and 11 deletions
+8 -4
View File
@@ -7,6 +7,7 @@ from IPython.core.magic import Magics, cell_magic, magics_class
from common import helper
compiler = '/usr/local/cuda/bin/nvcc'
profiler = '/usr/local/cuda/bin/ncu'
ext = '.cu'
@@ -23,15 +24,18 @@ class NVCCPlugin(Magics):
subprocess.check_output(
[compiler, file_path + ext, "-o", file_path + ".out", '-Wno-deprecated-gpu-targets'], stderr=subprocess.STDOUT)
def run(self, file_path, timeit=False):
def run(self, file_path, timeit=False, profile=False, profiler_args=[]):
if timeit:
stmt = f"subprocess.check_output(['{file_path}.out'], stderr=subprocess.STDOUT)"
output = self.shell.run_cell_magic(
magic_name="timeit", line="-q -o import subprocess", cell=stmt)
output = str(output) # convert TimeitResult object to human readable string
else:
output = subprocess.check_output(
[file_path + ".out"], stderr=subprocess.STDOUT)
run_args = []
if profile:
run_args.extend([profiler] + profiler_args)
run_args.append(file_path + ".out")
output = subprocess.check_output(run_args, stderr=subprocess.STDOUT)
output = output.decode('utf8')
helper.print_out(output)
@@ -51,7 +55,7 @@ class NVCCPlugin(Magics):
f.write(cell)
try:
self.compile(file_path)
output = self.run(file_path, timeit=args.timeit)
output = self.run(file_path, timeit=args.timeit, profile=args.profile, profiler_args=args.profiler_args)
except subprocess.CalledProcessError as e:
helper.print_out(e.output.decode("utf8"))
output = None