Erreur de compilation Cuda - expected primary-expression
ce programme semble être bien, mais j'ai toujours une erreur, une certaine suggestion?
Programme:
#include "dot.h"
#include <cuda.h>
#include <cuda_runtime.h>
#include <stdio.h>
int main(int argc, char** argv)
{
int *a, *b, *c;
int *dev_a, *dev_b, *dev_c;
int size = N * sizeof(int);
cudaMalloc((void**)&dev_a, size);
cudaMalloc((void**)&dev_b, size);
cudaMalloc((void**)&dev_c, sizeof(int));
a = (int *)malloc (size);
b = (int *)malloc (size);
c = (int *)malloc (sizeof(int));
random_ints(a, N);
random_ints(b, N);
cudaMemcpy(dev_a, a, size, cudaMemcpyHostToDevice);
cudaMemcpy(dev_b, b, size, cudaMemcpyHostToDevice);
int res = N/THREADS_PER_BLOCK;
dot<<< res, THREADS_PER_BLOCK >>> (dev_a, dev_b, dev_c);
//helloWorld<<< dimGrid, dimBlock >>>(d_str);
cudaMemcpy (c, dev_c, sizeof(int), cudaMemcpyDeviceToHost);
free(a); free(b); free(c);
cudaFree(dev_a);
cudaFree(dev_b);
cudaFree(dev_c);
return 0;
}
l'erreur:
DotProductCuda.rpc:27: erreur: primaire-expression avant
'<'
jeton
DotProductCuda.rpc:27: erreur: primaire-expression avant'>'
jeton
OriginalL'auteur Custodio | 2011-05-13
Vous devez vous connecter pour publier un commentaire.
La
<<< >>>
syntaxe pour appeler un noyau n'est pas de série C ou C++. Ces appels doivent être dans un fichier compilé par le compilateur NVCC. Ces fichiers sont normalement nommés avec un .cu extension. D'autres appels d'API CUDA commecudaMalloc
peut être régulière .c ou .fichiers cpp.DotProductCuda.cu(26): error: a host function call can not be configured
une idée?Oui, vous n'avez pas déclaré la dot comme un noyau de nvcc, de sorte qu'il est de la traiter comme une implicitement défini en fonction d'hôte.
Je l'ai trouvé. Je ne suis pas déclarer point que global méthode. Fonctions Cuda sont quelque chose comme
__global__ void dot....
OriginalL'auteur Steve Fallows
Il semble que le compilateur ne peut pas reconnaître le <<<,>>> syntaxe. Je n'ai aucune expérience avec CUDA, mais je suppose que vous avez besoin de compiler ce fichier avec un compilateur et pas un simple compilateur C.
OriginalL'auteur Christian Rau
nvcc
utilise l'extension de fichier afin de déterminer comment traiter le contenu du fichier. Si vous avez CUDA de syntaxe dans le fichier, il doit en avoir un .cu extension, sinon nvcc va tout simplement passer le fichier intact à l'hôte compilateur, résultant dans l'erreur de syntaxe que vous observez.OriginalL'auteur talonmies
Peut-être que vous utilisez une fonction d'hôte (printf par exemple) à l'intérieur du noyau?
OriginalL'auteur amanda