編集:@talonmiesは正しかった(いつものように)。だから私はCUDA 4.1についての私のコメントを削除しました
さらに、私が与えたコンパイル コマンドは完全に正しくありませんでした。したがって、私の答えを、明らかに機能し、適切な指示があるものに置き換えましょう。
これが機能するには、CUDA 5.0 とコンピューティング機能 2.0 以上のデバイスが必要です。
おそらくもっと良い方法があると思いますが、これは私にとってはうまくいくようです:
com.h:
#ifndef DEVMAIN
extern __device__ int x;
#endif
a.cu:
#include "com.h"
__global__ void a(){
x = -5;
}
b.cu:
#include <stdio.h>
#define DEVMAIN
#include "com.h"
extern __global__ void a();
__device__ int x;
__global__ void b(){
x = 5;
}
int main() {
int temp=7;
cudaMemcpyToSymbol(x,&temp, sizeof(int));
a<<<1,1>>>();
cudaMemcpyFromSymbol(&temp,x,sizeof(int));
printf("in host : %d\n",temp);
b<<<1,1>>>();
cudaMemcpyFromSymbol(&temp,x,sizeof(int));
printf("in host2 : %d\n",temp);
return 0;
}
コンパイル:
nvcc -arch=sm_20 -dc a.cu
nvcc -arch=sm_20 -dc b.cu
nvcc -arch=sm_20 -o ab a.o b.o
出力:
$ ./ab
in host : -5
in host2 : 5
$
以前のエラーで申し訳ありません。