Возможно, что проблема в компиляторе:
Использую Visual Studio 2010
Просмотрел несколько туториалов, все выглядят примерно одинаково, но сделав те шаги о которых там пишут пока к успеху не привели.
Если функция main() находиться в .cu файле то всё работает без проблем, но когда пытаюсь её вызвать из файла .cpp то появляются проблемы при компиляции.
Ниже проедставлю пример:
//test.cu
#include <stdio.h>
#include "hello.cuh"
int main()
{
hello();
system("pause");
return 0;
}
и
//hello.cuh
#include <cuda.h>
#include <stdio.h>
__global__ void helloWorld(char* str)
{
int idx = blockIdx.x * blockDim.x + threadIdx.x;
str[idx] += idx;
}
void hello()
{
int i;
char str[] = "Start!";
for(i = 0; i < 6; i++)
str[i] -= i;
char *d_str;
int size = sizeof(str);
cudaMalloc((void**)&d_str, size);
cudaMemcpy(d_str, str, size, cudaMemcpyHostToDevice);
dim3 dimGrid(2);
dim3 dimBlock(3);
helloWorld<<< dimGrid, dimBlock >>>(d_str);
cudaMemcpy(str, d_str, size, cudaMemcpyDeviceToHost);
cudaFree(d_str);
printf("\n%s\n", str);
}
Всё работает нормально. Но если я пытаюсь создать новый
.cpp вайл и вставить туда тот же код из
test.cu, то появляются ошибки выписанные внизу:
1> main.cpp
1>e:\inzynierka\v5\hello.cuh(4): error C2144: syntax error : 'void' should be preceded by ';'
1>e:\inzynierka\v5\hello.cuh(4): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>e:\inzynierka\v5\hello.cuh(7): error C2065: 'blockIdx' : undeclared identifier
1>e:\inzynierka\v5\hello.cuh(7): error C2228: left of '.x' must have class/struct/union
1> type is ''unknown-type''
1>e:\inzynierka\v5\hello.cuh(7): error C2065: 'blockDim' : undeclared identifier
1>e:\inzynierka\v5\hello.cuh(7): error C2228: left of '.x' must have class/struct/union
1> type is ''unknown-type''
1>e:\inzynierka\v5\hello.cuh(7): error C2065: 'threadIdx' : undeclared identifier
1>e:\inzynierka\v5\hello.cuh(7): error C2228: left of '.x' must have class/struct/union
1> type is ''unknown-type''
1>e:\inzynierka\v5\hello.cuh(20): error C3861: 'cudaMalloc': identifier not found
1>e:\inzynierka\v5\hello.cuh(21): error C2065: 'cudaMemcpyHostToDevice' : undeclared identifier
1>e:\inzynierka\v5\hello.cuh(21): error C3861: 'cudaMemcpy': identifier not found
1>e:\inzynierka\v5\hello.cuh(22): error C2065: 'dim3' : undeclared identifier
1>e:\inzynierka\v5\hello.cuh(22): error C2146: syntax error : missing ';' before identifier 'dimGrid'
1>e:\inzynierka\v5\hello.cuh(22): error C3861: 'dimGrid': identifier not found
1>e:\inzynierka\v5\hello.cuh(23): error C2065: 'dim3' : undeclared identifier
1>e:\inzynierka\v5\hello.cuh(23): error C2146: syntax error : missing ';' before identifier 'dimBlock'
1>e:\inzynierka\v5\hello.cuh(23): error C3861: 'dimBlock': identifier not found
1>e:\inzynierka\v5\hello.cuh(24): error C2059: syntax error : '<'
1>e:\inzynierka\v5\hello.cuh(25): error C2065: 'cudaMemcpyDeviceToHost' : undeclared identifier
1>e:\inzynierka\v5\hello.cuh(25): error C3861: 'cudaMemcpy': identifier not found
1>e:\inzynierka\v5\hello.cuh(26): error C3861: 'cudaFree': identifier not found
1>
1>Build FAILED.
В разных туториалах пишут о файле
usertype.dat который должен убрать все подчёркивания неизвестных символов( вроде __global__ или blockIdx.x ), так вот этого файла я не нашёл, но по сути он не на что не должен влиять.
Я знаю что много туториалов, но уже n-часов просидел наж этой проблемой и пока без результатов, что-то я делаю не так.
P.S. При попытке запустить
CUDA_VS_Wizard выскакивает ошибка
Can't find Visual Studio install directory