Certains d'émission Atomique à ajouter dans CUDA noyau de l'opération
Je vais avoir un problème avec mon noyau.cu classe
Appel nvcc -v kernel.cu -o kernel.o
j'obtiens cette erreur:
kernel.cu(17): error: identifier "atomicAdd" is undefined
Mon code:
#include "dot.h"
#include <cuda.h>
#include "device_functions.h" //might call atomicAdd
__global__ void dot (int *a, int *b, int *c){
__shared__ int temp[THREADS_PER_BLOCK];
int index = threadIdx.x + blockIdx.x * blockDim.x;
temp[threadIdx.x] = a[index] * b[index];
__syncthreads();
if( 0 == threadIdx.x ){
int sum = 0;
for( int i = 0; i<THREADS_PER_BLOCK; i++)
sum += temp[i];
atomicAdd(c, sum);
}
}
Certains le suggèrent?
OriginalL'auteur Custodio | 2011-05-13
Vous devez vous connecter pour publier un commentaire.
Vous devez spécifier une architecture à
nvcc
qui prend en charge atomique opérations de mémoire (l'architecture par défaut est 1.0, qui ne prend pas en charge atomics). Essayez:et voir ce qui se passe.
ÉDITION, en 2015, à noter que par défaut, l'architecture CUDA 7.0 est maintenant 2.0, qui prend en charge atomique opérations de mémoire, donc cela ne devrait pas être un problème dans les plus récentes versions du kit.
En outre, certaines opérations atomiques ne sont pris en charge par des dispositifs de calcul de la capacité de plus que le courant de défaut (par ex. uniquement pris en charge par le cc 3.5, alors que le courant de défaut est 2.0). Dans ces cas, il est toujours nécessaire de spécifier un approprié de l'arche de l'option, par exemple.
-arch=sm_35
, et de plus vous ne pouvez pas spécifier à voûtes multiples options où certains d'entre eux ne respectent pas le minimum nécessaire pour le atomique en cours d'utilisation.OriginalL'auteur talonmies
Aujourd'hui avec la dernière cuda SDK et une boîte à outils cette solution ne fonctionnera pas.
Les gens disent aussi que l'ajout d':
de CUDA dans les Propriétés du Projet dans Visual Studio 2010 fonctionnera. Il n'a pas.
Vous devez indiquer pour l' .cu fichier lui-même dans ses propres propriétés (Sous le C++/CUDA->Périphérique>Génération de Code), dans l'onglet tels que:
nvcc
invocation avec la-arch
option. Qui est encore parfaitement valable avec le CUDA 4.2 boîtes à outils pour Windows 7, Linux et OS X.OriginalL'auteur user1392334