Ошибка Visual Studio MSB3721 при компиляции вызова функции __device__ из другого файла

Я пытаюсь скомпилировать проект CUDA, который выдает ошибку 255, как только я пытаюсь запустить функцию, определенную в отдельном файле .cu

Здесь определено основное ядро

#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;
}

Вот сцена.

#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

И 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);

В основном файле ядра

1

Решение

В CUDA, когда мы хотим вызвать функцию кода устройства из другой функции кода устройства, и эти две функции кода устройства находятся в отдельных блоках компиляции, необходимо включить генерация и привязка кода перемещаемого устройства при составлении такого проекта.

В Visual Studio это может быть установлено для всего проекта со страницы свойств проекта, как указано Вот:

введите описание изображения здесь

Кроме того, при работе с Visual Studio и CUDA ошибка «MSB3721» является неспецифической ошибкой от Visual Studio, указывающей «Я запустил nvcc и он вернул ошибку «. Однако фактическая ошибка из nvcc должно произойти до этого. Если вы не видите его в окне вывода компиляции непосредственно перед ошибкой «MSB3721», то ваш уровень детализации слишком низок. Вы можете увеличить его, и точный способ сделать это будет немного отличаться в зависимости от версии VS, поэтому я рекомендую выполнить поиск того, как это сделать, для вашей конкретной версии.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]