Fehler der Kompilierung der Cuda - expected primary-expression
dieses Programm scheint in Ordnung sein, aber ich bin noch immer ein erro, einen Vorschlag?
Programm:
#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;
}
den Fehler:
DotProductCuda.cpp:27: error: expected primary-expression before
'<'
token
DotProductCuda.cpp:27: error: expected primary-expression before'>'
token
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
<<< >>>
syntax für den Aufruf eines Kernels ist nicht standard C oder C++. Diese Aufrufe müssen in einer Datei zusammengestellt von der NVCC-compiler. Diese Dateien werden normalerweise mit dem Namen mit ein .cu-Erweiterung. Andere API-Aufrufe zu CUDA wiecudaMalloc
können, werden in regelmäßigen .c oder .cpp-Dateien.DotProductCuda.cu(26): error: a host function call can not be configured
irgendeine Idee?__global__ void dot....
Scheint es der compiler nicht erkennen, die <<<,>>> syntax. Ich habe keine Erfahrung mit CUDA, aber ich denke, Sie müssen zum kompilieren dieser Datei mit einem speziellen compiler und nicht mit einem normalen C-compiler.
nvcc
anhand der Dateiendung zu bestimmen, wie der Prozess den Inhalt der Datei. Wenn Sie CUDA-syntax in der Datei muss eine .cu Erweiterung, sonst nvcc wird, übergeben Sie einfach die Datei unangetastet zu der host-compiler, was in der syntax-Fehler, den Sie beobachten.Vielleicht verwenden Sie ein host-Funktion (printf () zum Beispiel) im inneren kernel?