gpt4 book ai didi

c++ - CUDA和C++简单项目

转载 作者:行者123 更新时间:2023-11-30 01:56:10 36 4
gpt4 key购买 nike

我正在尝试创建一个 CUDA + C++ 项目。基本上是一个需要一些 CUDA 内核的 .cpp 项目。所以我简单地按照这里的例子,它基本上添加了两个 vector 。内核做求和工作: 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 目标。

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

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

重建。

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

关于c++ - CUDA和C++简单项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056572/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com