2011-04-03 3 views
9

Qualcuno ha esperienza nell'implementazione di una mappa hash su un dispositivo CUDA? Nello specifico, mi chiedo come si possa procedere allocando memoria sul dispositivo e copiando il risultato sull'host o se ci siano librerie utili che possono facilitare questa operazione.CUDA - Implementazione della mappa hash del dispositivo?

Sembra che avrei bisogno di conoscere la dimensione massima della mappa di hash a priori per allocare la memoria del dispositivo. Tutti i miei precedenti sforzi CUDA hanno utilizzato matrici e memcpys e quindi sono stati abbastanza semplici.

Qualsiasi comprensione di questo problema è apprezzata. Grazie.

risposta

8

Esiste un'implementazione Hash Table GPU presentata in "CUDA dall'esempio", di Jason Sanders e Edward Kandrot.

Fortunatamente, è possibile ottenere informazioni su questo libro e scaricare il codice sorgente esempi liberamente in questa pagina:
http://developer.nvidia.com/object/cuda-by-example.html

In questa implementazione, la tabella è pre-assegnati sulla CPU e l'accesso multithread sicura è assicurato da una funzione di blocco basata sulla funzione atomica atomicCAS (Compare and Swap).

Inoltre, la generazione di hardware più recente (da 2.0) combinata con CUDA> = 4.0 dovrebbe essere in grado di utilizzare direttamente gli operatori di nuova/eliminazione sulla GPU (http://developer.nvidia.com/object/cuda_4_0_RC_downloads.html?utm_source=http://forums.nvidia.com&utm_medium=http://forums.nvidia.com&utm_term=Developers&utm_content=Developers&utm_campaign=CUDA4), che potrebbero servire alla vostra implementazione. Non ho ancora testato queste funzionalità.

3

Ricordo che qualcuno ha sviluppato un'implementazione di mappa hash semplice sopra a thrust. C'è del codice per questo here, anche se non funziona se funziona con le attuali versioni di thrust. Potrebbe almeno darti qualche idea.

+0

Aggiornamento: Poiché la piattaforma di codice di Google sta per essere chiusa, puoi farlo in questo repository GitHub: https://github.com/djebm2/cuda-thrust-extensions/tree/master/hash%20map – Madhatter

1

AFAIK, la tabella hash fornita in "Cuda da Example" non funziona molto bene. Attualmente, credo che la tabella hash più veloce su CUDA sia data in Dan Alcantara's PhD dissertation. Guarda il capitolo 6.