2013-09-29 47 views
-1

我有一個CUDA C代碼,當我嘗試編譯它時,nvcc給了我一個未定義標識符錯誤的錯誤:標識符「cudamalloc」未定義,標識符「cudamemcpy」未定義。Cuda編譯錯誤:標識符「cudamalloc」未定義

我運行Windows 7和Visual Studio 10和CUDA工具包4.0

我已經安裝Cuda的驅動器上的「C」和Visual Studio的驅動器「E」但林不知道,這就是問題所在。

我使用這個命令編譯:

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調用爲cudaMalloccudaMemcpy。 C和C++是區分大小寫的語言,並且名稱不正確。