2016-04-16 71 views

回答

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

主要.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結構是編譯器不接受的。它是否有任何可能引發警告/錯誤消息的初始化程序或字段?

+0

Thx爲您的想法!看起來非常有趣! –

+0

它回答你的問題嗎? –

+0

nope,但它給了我很棒的想法,現在我可以在所需的地方使用常量內存 –