我试图编译一个CUDA项目,一旦我尝试运行在单独的.cu文件中定义的函数就会出现255错误
这是定义主内核的地方
#include <curand_kernel.h>
#include <ctime>
#include <stdio.h>
#include "Scene.cuh"
__global__ void fill(float *c, Scene* scene)
{
int index = blockIdx.y * blockDim.x * blockDim.y * gridDim.x +
threadIdx.y * blockDim.x * gridDim.x +
blockIdx.x * blockDim.x + threadIdx.x;
// this is the line which gives the compilation error
float3 result = scene->computeRayFromIndex(index);
c[index * 4 + 0] += 1.0f;
c[index * 4 + 1] += 1.0f;
c[index * 4 + 2] += 1.0f;
c[index * 4 + 3] += 1.0f;
}
这是scene.cuh
#ifndef Scene_h
#define Scene_h
#include "cuda_runtime.h"
class Scene {
public:
Scene();
__host__ __device__ float3 computeRayFromIndex(int);
int width;
int height;
int cameraType;
private:
};
#endif
and scene.cu
#include "Scene.cuh"
Scene::Scene() {
}
__host__ __device__ float3 Scene::computeRayFromIndex(int pixelIndex) {
float3 test;
return test;
}
我正在使用visual studio 2013,我正常从菜单中将cuda文件添加到我的项目中
这是编译错误
Error 10 error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin\nvcc.exe" -gencode=arch=compute_20,code=\"sm_20,compute_20\" --use-local-env --cl-version 2013 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" -G --keep-dir x64\Debug -maxrregcount=0 --machine 64 --compile -cudart static -g -DWIN32 -DWIN64 -D_DEBUG -D_CONSOLE -D_MBCS -Xcompiler "/EHsc /W3 /nologo /Od /FS /Zi /RTC1 /MDd " -o x64\Debug\fillRandomTexture.cu.obj "D:\CUDA\projects\vRay\vRay\fillRandomTexture.cu"" exited with code 255.
如果我发表评论
,项目将构建并运行良好float3 result = scene->computeRayFromIndex(index);
在主内核文件中
答案 0 :(得分:3)
在CUDA中,当我们想要从另一个设备代码函数调用设备代码函数,并且这两个设备代码函数在不同的编译单元中时,在编译这样的时候启用relocatable device code generation and linking是必要的。项目
在visual studio中,可以从项目属性页面为整个项目设置,如here所示:
此外,在使用visual studio和CUDA时,错误&#34; MSB3721&#34;是视觉工作室的一个非特定错误,表示&#34;我跑nvcc
并返回错误&#34;。但是,nvcc
之前的实际错误应该在此之前发生。如果你没有在&#34; MSB3721&#34;之前的编译输出窗口中看到它。错误,那么你的详细程度太低了。你可以增加它,这样做的确切方法会因VS版本而有所不同,所以我建议你搜索一下如何为你的特定版本做这些。