2015-12-14 2 views
-1

Я работаю над проектом CUDA C, добавляя новые функции шаг за шагом. Все шло хорошо, пока я не добавил код в конкретное ядро: теперь компилятор nvcc дает мне 4 ошибки, все связанные с одним и тем же ядром (новое). Вот ошибка, генерирующая линия:Ошибки компиляции в проекте CUDA C (nvcc-компилятор)

__global__ void update(float* original, float* new, float* current, int nhalf) { // line 104 
    int i = threadIdx.x + blockDim.x*blockIdx.x; // line 105 
    if (i < nhalf) { // line 106 
    current[i] /= nhalf; // line 107 
    new[i] = (original[i] < current[i]) ? current[i] : original[i]; // line 108 
    } 
} 

Поскольку я пишу тело ядра до основной функции, я не использую прототип.

В основной функции я запускаю ядро ​​в строке 384:

update<<<p->gridSize,p->blockSize>>>(p->deviceEnv, p->deviceTrueEnv, p->deviceSmoothTrueEnv, Nhalf); 

Первые три аргумента являются указателями, чтобы плавать, в то время как четвертый аргумент это просто целое число.

При попытке компиляции с NVCC я получаю следующие ошибки:

project.cu(106): error: expected a ")" 
project.cu(107): error: identifier "current" is undefined 
project.cu(108): error: expected a type specifier 
project.cu(384): error: too many arguments in function call 

я использую следующую команду Баша для компиляции:

nvcc -O0 -shared -o libproject.so project.cu -Xcompiler "-fPIC" -I$HOME/include/csound -arch=sm_30 -I/usr/local/cuda/include -L/usr/local/cuda/lib -lcufft -g -G 

Я действительно путаю, и потому, что в том же самом проект У меня есть много других ядер, которые очень похожи, и они скомпилируются. Я запускаю их без каких-либо проблем точно так же. Может кто-нибудь, пожалуйста, помогите мне определить проблему здесь? Спасибо заранее.

PS: Я использую инструментарий cuda 7.0 на Ubuntu.

+3

'new' - зарезервированное ключевое слово в C++. Измените это имя параметра на что-то еще, например 'my_new', как на параметр, так и на использование в теле функции' update'. –

+0

Aaargh, так просто! Большое спасибо! –

+0

@RobertCrovella, кстати, как вы думаете, есть лучший способ найти элемент-макс из двух массивов? Мне интересно, это решение с низкой производительностью или нет ... (еще раз спасибо за ответы на все связанные с cuda вопросы) –

ответ

1

Это было вызвано использованием переменной в ядре, имя которого противоречило зарезервированному ключевому слову (new в этом случае).

[Этот ответ wiki сообщества был добавлен из комментариев, чтобы получить этот вопрос из оставшегося без ответа списка].

Смежные вопросы