-1

CUDA C コードをコンパイルしようとすると、nvcc で未定義の識別子エラーが表示されます。識別子 "cudamalloc" は未定義、識別子 "cudamemcpy" は未定義です。

Visual Studio 10 と CUDA Toolkit 4.0 で Windows 7 を実行しています。

ドライブ「C」にCudaを、ドライブ「E」に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 をすべて使用しました。

4

1 に答える 1

3

ドキュメントを読むと、API 呼び出しがcudaMallocおよびであることがわかりますcudaMemcpy。C および C++ は大文字と小文字を区別する言語であり、名前が正しくありません。

于 2013-09-29T16:39:35.650 に答える