Domanda

Sto cercando di sfruttare la potenza della GPU (nVidia Quadro NVS140M) per accelerare alcuni calcoli di matrice nel mio progetto. Sto leggendo qualche documentazione (guide di programmazione, guida alle best practice, e manuale di riferimento), ma non è sicuro che la sezione (s) dovrei concentrarmi su. Sarebbe bello se posso ricevere alcuni consigli su questo.

Inoltre, mi chiedo se ci sono terze parti mantenuto SDK, come CuBLAS.net, che possono semplificare il processo di sviluppo cublas prima di bastone con le caratteristiche di cublas offrivo che mi avrebbe aiutato a raggiungere i miei obiettivi con il mio progetto . Ancora una volta, grazie in anticipo per i commenti.

È stato utile?

Soluzione

La maggior parte della documentazione fornita con il toolkit CUDA & download dell'SDK sono circa CUDA in generale, non specificamente CuBLAS. Iniziare con il file CUBLAS_Library_2.3.pdf se si sta solo andando a utilizzare CuBLAS - non sarà necessario per scrivere i propri kernel CUDA. Se si sta già utilizzando una CPU BLAS, CuBLAS non dovrebbe essere difficile da raccogliere. (E se non siete, quindi prendere in considerazione cercando un una CPU ottimizzata prima CuBLAS, in quanto sarà più facile da programmare).

Se stai codifica su .NET, quindi il modo più semplice per utilizzare CuBLAS è probabilmente attraverso la piattaforma-richiamare chiamate in cublas.dll. Essere sicuri di mantenere dritto che gli array sono in serie memoria (CPU), e che sono in un dispositivo di memoria (GPU).

Tenete a mente che CUDA & CuBLAS non sono proiettili magici. Le prestazioni dipendono da molti fattori (in particolare i trasferimenti attraverso il bus PCIe), e semplicemente scambiando CUBLAS richiede CPU-BLAS chiama non si può dare incrementi nella velocità. Potrebbe essere necessario apportare ulteriori modifiche sostanziali il proprio codice per ottenere miglioramenti delle prestazioni. Quelle altre guide di cui parli sono molto utili per comprendere l'architettura CUDA e dei suoi colli di bottiglia.

EDIT: Non ero chiaro il confine tra codice utente e codice del kernel. CUBLAS è una libreria di kernel CUDA, pre-costruiti ottimizzati. Se avete solo bisogno funzionalità BLAS, non è necessario scrivere il proprio kernel. Invece, basta chiamare funzioni CUBLAS. Quando l'ottimizzazione delle prestazioni, non dovrebbe essere necessario modificare i kernel CUBLAS, ma potrebbe essere necessario cambiare come e quando li chiami, e come si utilizza la memoria, in modo da ridurre al minimo il numero di trasferimenti in tutto il bus PCI Express.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top