2010-12-02 4 views
4

J'utilise CUDA pour lancer un problème où j'ai besoin d'une équation complexe avec de nombreuses matrices d'entrée. Chaque matrice a un ID en fonction de son ensemble (entre 1 et 30, il y a 100 000 matrices) et le résultat de chaque matrice est stocké dans un tableau float [N] où N est le nombre de matrices d'entrée. Après cela, le résultat que je veux est la somme de chaque flottant dans ce tableau pour chaque ID, donc avec 30 ID, il y a 30 flottants de résultats.CUDA: sommation des résultats

Des suggestions sur comment je devrais faire cela?

En ce moment, je lis le tableau du flotteur (400kb) à l'hôte de l'appareil et exécuter sur l'hôte:

// Allocate result_array for 100,000 floats on the device 
// CUDA process input matrices 
// Read from the device back to the host into result_array 
float result[10] = { 0 }; 
for (int i = 0; i < N; i++) 
{ 
    result[input[i].ID] += result_array[i]; 
} 

Mais je me demande s'il y a une meilleure façon.

+1

Cela ressemble à une réduction - étudiez l'exemple de réduction dans le SDK CUDA. –

+0

Merci, je ne connaissais pas le mot, je vais y jeter un coup d'oeil. – Dmi

Répondre

3

Pour ce faire, vous pouvez utiliser cublasSasum() - ceci est un peu plus facile que d'adapter l'une des réductions du SDK (mais moins générale bien sûr). Consultez les exemples CUBLAS dans le SDK CUDA.