Eine Single-Header-C++-Bibliothek zur Vereinfachung der Verwendung von CUDA Runtime Compilation (NVRTC).
Die Integration von NVRTC in vorhandenen und/oder vorlagenbasierten CUDA-Code kann schwierig sein. Jitify zielt darauf ab, diesen Prozess zu vereinfachen, indem es die Komplexität hinter einer einfachen, übergeordneten Schnittstelle verbirgt.
const char * program_source = " my_program n "
" template n "
" __global__ n "
" void my_kernel(T* data) { n "
" T data0 = data[0]; n "
" for( int i=0; in "
" data[0] *= data0; n "
" } n "
" } n " ;
static jitify::JitCache kernel_cache;
jitify::Program program = kernel_cache.program(program_source);
// ...set up data etc.
dim3 grid ( 1 );
dim3 block ( 1 );
using jitify::reflection::type_of;
program.kernel( " my_kernel " )
.instantiate( 3 , type_of(*data))
.configure(grid, block)
.launch(data);
Jitify stellt/kümmert sich um folgende Dinge:
Dinge, die Sie mit Jitify und NVRTC tun können:
Jitify ist nur eine einzelne Header-Datei:
# include < jitify.hpp >
Kompilieren mit: -pthread
(nicht erforderlich, wenn JITIFY_THREAD_SAFE auf 0 definiert ist)
Link mit: -lcuda -lcudart -lnvrtc
Zum Konvertieren von Textdateien in C-String-Literale ist ein kleines Dienstprogramm namens stringify enthalten, das eine bequeme Möglichkeit bietet, JIT-kompilierte Quellen in einen Build zu integrieren.
Tests können mit dem folgenden Befehl ausgeführt werden:
$ make test
Dadurch wird automatisch die GoogleTest-Bibliothek heruntergeladen und erstellt. Dazu muss CMake auf dem System verfügbar sein.
Unter jitify_example.cpp finden Sie einige Beispiele für die Verwendung der Bibliothek. Das Makefile demonstriert außerdem, wie das bereitgestellte Dienstprogramm stringify verwendet wird.
GTC 2017 Vortrag von Ben Barsdell und Kate Clark
Die Doxygen-Dokumentation kann durch Ausführen von Folgendes generiert werden:
$ make doc
Die HTML- und LaTeX-Ergebnisse werden im Unterverzeichnis doc/ abgelegt.
BSD-3-Klausel
Ben Barsdell (NVIDIA, bbarsdell bei nvidia dot com)
Kate Clark (NVIDIA, mclark bei nvidia dot com)