W szczególności, moim problemem jest to, że mam kod CUDA, który potrzebuje <curand_kernel.h>
do uruchomienia. Ta opcja nie jest domyślnie włączona w NVRTC. Przypuszczalnie wtedy, tworząc kontekst programu (to jest wywołanie nvrtcCreateProgram
), muszę wysłać nazwę pliku (curand_kernel.h
), a także kod źródłowy curand_kernel.h
? Czuję, że nie powinienem tego robić.W jaki sposób dołączyć standardowe biblioteki CUDA do połączenia z kodem NVRTC?
Trudno powiedzieć; Nie udało mi się znaleźć przykładu z NVIDIA kogoś, kto potrzebuje standardowych plików CUDA, jak ten, jako źródła, więc naprawdę nie rozumiem, czym jest ta składnia. Niektóre problemy: curand_kernel.h
zawiera również ... Czy muszę zrobić to samo dla każdego z nich? Nie jestem nawet pewien, czy kompilator NVRTC będzie działał poprawnie pod numerem curand_kernel.h
, ponieważ istnieją pewne funkcje językowe, których nie obsługuje, prawda?
Następnie: jeśli wysłałeś kod źródłowy pliku nagłówkowego do nvrtcCreateProgram
, czy nadal muszę to zrobić z #include
w kodzie do wykonania/czy spowoduje to błąd, jeśli to zrobię?
Link do przykładowego kodu, który to robi lub coś podobnego, byłby doceniony znacznie bardziej niż prosta odpowiedź; Naprawdę nie udało mi się znaleźć żadnego.
Hmmm. Więc muszę się trochę zastanowić, jak to osiągnąć. Wstępne skompilowanie kodu, który używa curandu do PTX, nie jest możliwe ... Wstępne generowanie spławów na CPU nie jest możliwe, ponieważ musiałoby być o wiele za dużo ... Tak więc jestem pozostawiony z działaniem przez bibliotekę curand uzyskać części, które muszę skompilować przy użyciu NVRTC, i znaleźć inną implementację rand. Jak wszystko, czego naprawdę potrzebuję od curanda, to standardowe jednolite PRNG od 0 do 1, myślę, że rozwiązaniem jest znalezienie kolejnego PRNG, który jest łatwiejszy do kompilacji za pomocą NVRTC, dziękuję! –
Hmm. Implementacje GPU PRNG są trudne do zdobycia. Może będę musiał jakoś przystosować CURAND ... –
@BillySmith Najbardziej bezpośrednim rozwiązaniem jest zbudowanie dużego bufora i wypełnienie go rand() lub podobną stroną CPU, a następnie przesłanie go do hosta. Zachowaj zmienną indeksową wskazującą, która wartość jest "następna" w buforze. Po naciśnięciu końca bufora spłucz i powtórz. –