我有这个常量的头文件
__constant__ er_t SERIES_PREC;
__constant__ er_t ONE;
__constant__ er_t HALF;
我不能在任何* .cu文件中包含此头文件 - 错误链接。 在这种情况下如何使用常量内存?
答案 0 :(得分:1)
尝试重现此问题,我对以下内容没有任何疑问:
头文件:
#pragma once
__constant__ int mystuff ;
__constant__ int othersuff ;
__global__ void f(int* val);
__global__ void g(int* val);
首先.cu文件:
#include "constants.cuh"
__global__ void f(int* val) { *val = mystuff ; }
第二个.cu文件:
#include "constants.cuh"
__global__ void g(int* val) { *val = mystuff ; }
Main .cu文件:
#include "constants.cuh"
int main()
{
int* g_out ;
cudaMalloc ((void**)&g_out, sizeof(int));
f<<<1,1>>>(g_out);
g<<<1,1>>>(g_out);
....
没有问题(CUDA 7.5,Visual Studio 2012)。也许你的er_t结构有些东西是编译器不接受的。它是否有任何可能引发警告/错误消息的初始值设定项或字段?