CUDA和C++的简单项目
CUDA and C++ simple project
我正在尝试创建一个CUDA+C++项目。基本上是一个.cpp项目,它调用一些CUDA内核。所以我只是简单地按照这里的例子,它基本上添加了两个向量。内核完成求和工作: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:ProjectsCUDATest001x64DebugCUDATest001.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:ProjectsCUDATest001x64DebugCUDATest001.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
来获得一个应该在不做任何修改的情况下编译的项目。
相关文章:
- 我怎样才能简单地将opencv 包含在我的项目中与CMake
- 如何在一个简单的C++项目中使用Poco库
- 有没有一种简单的方法可以在C++中获取特定索引之后向量中的所有项目?
- 简单的cmake项目,在Windows上使用nmake构建没有调试符号
- 为简单的src,include,libs文件夹项目编写Makefile
- C++简单的暴力项目密码输入方法
- 为项目和循环创建简单的控制菜单会比预期打印提示的次数更多
- "port" Visual Studio C++项目以在 Linux 上编译的最简单方法是什么?
- 优化项目Euler 16的简单代码
- 在使用Qt Creator创建一个非常简单的项目时,在Qt中遇到"segmentation fault"
- 为什么我的简单C++项目在我可以看到之前就终止于日食?我如何让它停止
- 使用libsodium构建一个简单的项目
- Qt C++项目的简单安装程序,仅针对Windows
- 可以't运行简单的Visual Studio 2013项目
- 有没有一种简单的方法可以将多个资源添加到 Win32/C++ 项目
- 在Raspberry Pi上运行OSX openFrameworks项目的最简单方法是什么?
- 简单的 netbean C++项目无法编译
- CUDA和C++的简单项目
- c++简单项目中未定义的引用
- 简单项目无法编译