この方法は私にとってはうまくいきました。もっと良い方法があるかもしれません。
#include <stdio.h>
#define N 5
#define Q 3
#define cudaCheckErrors(msg) \
do { \
cudaError_t __err = cudaGetLastError(); \
if (__err != cudaSuccess) { \
fprintf(stderr, "Fatal error: %s (%s at %s:%d)\n", \
msg, cudaGetErrorString(__err), \
__FILE__, __LINE__); \
fprintf(stderr, "*** FAILED - ABORTING\n"); \
exit(1); \
} \
} while (0)
__device__ float *symbolPtr;
__device__ float symbol[N];
__global__ void mykernel(){
for (int i=0; i<N; i++)
symbol[i] = (float) i;
printf("symbol[%d] = %f\n", Q, *symbolPtr);
}
int main(){
float *temp;
cudaGetSymbolAddress((void **)&temp, symbol);
cudaCheckErrors("cudaGetSymbolAddress fail");
temp += Q;
cudaMemcpyToSymbol(symbolPtr, &temp, sizeof(float *));
cudaCheckErrors("cudaMemcpyToSymbol fail");
mykernel<<<1,1>>>();
cudaDeviceSynchronize();
cudaCheckErrors("kernel fail");
return 0;
}