开发者

Error compiling Cuda - expected primary-expression

开发者 https://www.devze.com 2023-03-06 01:41 出处:网络
this program seems be fine but I still getting an erro, some suggestion? Program: #include \"dot.h\" #include <cuda.h>

this program seems be fine but I still getting an erro, some suggestion?

Program:

#include "dot.h"
#include <cuda.h>
#include <cuda_runtime.h>
#include <stdio.开发者_如何学JAVAh>

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;
}

the error:

DotProductCuda.cpp:27: error: expected primary-expression before '<' token

DotProductCuda.cpp:27: error: expected primary-expression before '>' token


The <<< >>> syntax for calling a kernel is not standard C or C++. Those calls must be in a file compiled by the NVCC compiler. Those files are normally named with a .cu extension. Other API calls to CUDA such as cudaMalloc can be in regular .c or .cpp files.


nvcc uses the file extension to determine how to process the contents of the file. If you have CUDA syntax inside the file, it must have a .cu extension, otherwise nvcc will simply pass the file untouched to the host compiler, resulting in the syntax error you are observing.


It seems the compiler cannot recognize the <<<,>>> syntax. I have no experience with CUDA, but I guess you need to compile this file with a special compiler and not an ordinary C compiler.


Maybe you use a host function (printf for example) inside kernel?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号