2013-09-29 3 views
-1

У меня есть код CUDA C, когда я пытаюсь его скомпилировать, nvcc дает мне ошибку с неопределенной ошибкой идентификатора: идентификатор «cudamalloc» не определен, идентификатор «cudamemcpy» не определено.Ошибка Cuda при компиляции: идентификатор «cudamalloc» не определен

Я бегу Windows 7 с Visual Studio 10 и CUDA Toolkit 4.0

Я установил Cuda на диске «C» и Visual Studio на диск «Е», но им не уверен, что это проблема.

Я использую эту команду для компиляции:

nvcc -o ej1b ej1b.cu 

и это моя программа:

#include <cuda.h> 
#include <cstdio> 
#include <cuda_runtime_api.h> 
#include <device_functions.h> 
#include "device_launch_parameters.h" 
#include <stdio.h> 
#include <stdlib.h> 

const int N = 512; 
const int C = 5; 


void init_CPU_array(int vec[],const int N){ 
    unsigned int i; 
    for(i = 0; i < N; i++) { 
    vec[i] = i; 
    } 
} 

__global__ void kernel(int vec[],const int N, const int C){ 
    int id = blockIdx.x * blockDim.x + threadIdx.x; 
    if(id<N) 
    vec[id] = vec[id] * C; 
} 

int main(){ 
int vec[N]; 
int vecRES[N]; 
int *vecGPU; 
unsigned int cantaloc=N*sizeof(int); 
init_CPU_array(vec,N); 
cudamalloc((void**)&vecGPU,cantaloc); 
cudamemcpy(vecGPU,vec,cantaloc,cudaMemcpyHostToDevice); 
dim3 dimBlock(64); 
dim3 dimGrid((N + dimBlock.x - 1)/dimBlock.x); 
printf("-> Variable dimBlock.x = %d\n",dimBlock.x); 
kernel<<<dimGrid, dimBlock>>>(vecGPU, N, C); 
cudaThreadSynchronize(); 
cudamemcpy(vecRES,vecGPU,cantaloc,cudaMemcpyDeviceToHost); 
cudaFree(vecGPU); 
printf("%s \n","-> Resultados"); 
int i; 
for(i=0;i<10;i++){ 
    printf("%d  ",vecRES[i]); 
    printf("%d \n",vec[i]); 
} 
return 0; 

Я использовал все эти #include, потому что я не знаю, где проблема.

ответ

3

Если вы читаете documentation, вы найдете вызовы API: cudaMalloc и cudaMemcpy. C и C++ - это регистры, чувствительные к регистру, и у вас неверные имена.

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