CUDA和C++简单项目

2023-12-02

我正在尝试创建一个 CUDA + C++ 项目。基本上是一个需要一些 CUDA 内核的 .cpp 项目。所以我只是按照这里的例子,基本上添加了两个向量。内核完成求和工作:http://blog.norture.com/2012/10/gpu-parallel-programming-in-vs2012-with-nvidia-cuda/

这是代码,

#include <iostream>
#include "cuda_runtime.h"
#include "cuda.h"
#include "device_launch_parameters.h"

using namespace std;

__global__ void saxpy(int n, float a, float *x, float *y)
{
  int i = blockIdx.x*blockDim.x + threadIdx.x;
  if (i < n) y[i] = a*x[i] + y[i];
}

int main(void)
{
  int N = 1<<20;
  float *x, *y, *d_x, *d_y;
  x = (float*)malloc(N*sizeof(float));
  y = (float*)malloc(N*sizeof(float));

  cudaMalloc(&d_x, N*sizeof(float));
  cudaMalloc(&d_y, N*sizeof(float));

  for (int i = 0; i < N; i++) {
    x[i] = 1.0f;
    y[i] = 2.0f;
  }

  cudaMemcpy(d_x, x, N*sizeof(float), cudaMemcpyHostToDevice);
  cudaMemcpy(d_y, y, N*sizeof(float), cudaMemcpyHostToDevice);

  // Perform SAXPY on 1M elements
  saxpy<<<(N+255)/256, 256>>>(N, 2.0, d_x, d_y);

  cudaMemcpy(y, d_y, N*sizeof(float), cudaMemcpyDeviceToHost);

  float maxError = 0.0f;
  for (int i = 0; i < N; i++)
    maxError = max(maxError, abs(y[i]-4.0f));
  cout << "Max error: " << maxError;
}

当我构建时,我收到此错误:

1>------ Rebuild All started: Project: CUDATest001, Configuration: Debug x64 ------
1>  CUDATestZeroZeroOne.cpp
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol threadIdx
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol blockIdx
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol blockDim
1>D:\Projects\CUDATest001\x64\Debug\CUDATest001.exe : fatal error LNK1120: 3 unresolved externals
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

如果线saxpy<<<(N+255)/256, 256>>>(N, 2.0, d_x, d_y);被注释掉了,然后就出现了这个错误:

1>------ Rebuild All started: Project: CUDATest001, Configuration: Debug x64 ------
1>  CUDATestZeroZeroOne.cpp
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol threadIdx
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol blockIdx
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol blockDim
1>D:\Projects\CUDATest001\x64\Debug\CUDATest001.exe : fatal error LNK1120: 3 unresolved externals
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

我使用的是vs2012 + CUDA 5.5。我从一个空的 C++ win32 控制台项目开始,添加了一个 .cpp 文件,其中包含上面的所有代码。我现在甚至不确定它应该是 .cu 还是 .cpp 文件?

有人知道如何进行这项工作吗?谢谢。


在项目的上下文菜单中,单击Build Customizations。打开CUDA 5.5 target.

在您的上下文菜单中.cpp文件,单击Rename并将其重命名为.cu.

在您的上下文菜单中.cu文件(您刚刚重命名的),选择Properties。然后去General并确保Item Type被设定为CUDA C/C++.

Rebuild.

当你开始一个新的CUDA项目时,你可以选择Templates > NVIDIA > CUDA 5.5 > CUDA 5.5 Runtime获得无需任何修改即可编译的项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CUDA和C++简单项目 的相关文章

随机推荐