Ошибка компиляции Cuda - ожидаемое первичное выражение - PullRequest
10 голосов
/ 13 мая 2011

эта программа вроде бы в порядке, но я все еще получаю ошибку, некоторые предложения?

Программа:

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

ошибка:

DotProductCuda.cpp: 27: ошибка: ожидаемое первичное выражение до '<' токен
DotProductCuda.cpp: 27: ошибка: ожидаемое первичное выражение до '>' токен

Ответы [ 4 ]

13 голосов
/ 13 мая 2011

Синтаксис <<< >>> для вызова ядра не является стандартным C или C ++.Эти вызовы должны быть в файле, скомпилированном компилятором NVCC.Эти файлы обычно называются с расширением .cu.Другие вызовы API для CUDA, такие как cudaMalloc, могут быть в обычных файлах .c или .cpp.

4 голосов
/ 13 мая 2011

Кажется, компилятор не может распознать синтаксис <<<, >>>.У меня нет опыта работы с CUDA, но я думаю, вам нужно скомпилировать этот файл с помощью специального компилятора, а не обычного компилятора Си.

3 голосов
/ 13 мая 2011

nvcc использует расширение файла, чтобы определить, как обрабатывать содержимое файла.Если у вас есть синтаксис CUDA внутри файла, он должен иметь расширение .cu, иначе nvcc просто передаст файл нетронутым компилятору хоста, что приведет к синтаксической ошибке, которую вы наблюдаете.

0 голосов
/ 10 апреля 2012

Может быть, вы используете функцию хоста (например, printf) внутри ядра?

...