implementering - Sådan implementeres CUDA programmer på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et program der forbinder cuda, cublas og cudart.


Er der en måde at installere det på uden at tvinge brugerne til at installere de nyeste nvidia drivere?


Når jeg bare kopierer de nævnte dll'er til startvejen, starter programmet ikke og klager over en ikke-eksisterende procedure i nvcuda.dll. Selvom jeg også leverer dette, virker programmet mærkeligt. Nylige drivere er installeret, alt fungerer fint.


Beslægtet spørgsmål ... Hvordan kan jeg kontrollere, at cuda understøttes (+ opdateret), og hvis dette ikke er tilfældet, er tilbagesendelsen i mit tilfælde BLAS/LAPACK? Hvis jeg giver de dlls prog. misbehaves, hvis jeg ikke leverer dem, kan det ikke engang starte.


Thx!

Bedste reference


Forsøg du ikke at forbinde CUDA dlls, men indlæs dynamisk og ring cudaGetDeviceCount ()? Sådan her:


typedef cudaError\_t (*FnGetDeviceCount )    (   int *   count    ) ;
HMODULE hCuda=LoadLibrary("cudart32\_40\_17.dll");
if( !hCuda ) return ; // ERROR: cannot load dll, DllMain must have failed because cudart only depends on Kernel dll implicitly. Or cannot find dll in curent directory or in the path.
FnGetDeviceCount fnGetDeviceCount=(FnGetDeviceCount)GetProcAddress(hCuda, "cudaGetDeviceCount");
if( !fnGetDeviceCount) return; // ERROR: cudart has no entry point for cudaGetDeviceCount ?!
int count = 0;
if( cudaSuccess != (*fnGetDeviceCount)(&count) ) return ;// ERROR: we don't wanna use CUDA if even device enumeration fails
if( !count ) return; // FALLBACK: CUDA has no devices, don't try to use it, fallback to some other BLAS


Det er ubelejligt, fordi du ikke kan forbinde cudart eller andre biblioteker, men det kan tillade dig at falde tilbage til BLAS uden at brugerne ser forfærdelige opstartsfejl. Ansvarsfraskrivelse: Jeg testede eller endda ikke compilere denne kode, lad os vide, hvis du bruger det, og det virker :)


Denne tråd foreslår, at du skal omfordele dll'er fra din bestemte version af CUDA-værktøjssætet (f.eks. Cudart64\_40\_17.dll), så det er fint. [6]