I have init function er_const.cu
__device__ __constant__ __extended_range_struct ER_ONE_CONST;
__device__ __constant__ __extended_range_struct ER_HALF_CONST;
__device__ __constant__ __extended_range_struct ER_SERIES_PREC_CONST;
namespace cuda {
void er_const_init() {
er_ptr one_host;
one_host = new __extended_range_struct;
*one_host = (__extended_range_struct) {1.0, 0};
gpuErrchk(cudaMemcpyToSymbol(ER_ONE_CONST, one_host, sizeof(__extended_range_struct)));
gpuErrchk(cudaDeviceSynchronize());
er_ptr half_host;
half_host = new __extended_range_struct;
er_set_d(half_host, 0.5);
gpuErrchk(cudaMemcpyToSymbol(ER_HALF_CONST, half_host, sizeof(__extended_range_struct)));
gpuErrchk(cudaDeviceSynchronize());
er_ptr series_prec_host;
series_prec_host = new __extended_range_struct;
er_set_d(series_prec_host, ER_SERIES_PREC);
gpuErrchk(cudaMemcpyToSymbol(ER_SERIES_PREC_CONST, series_prec_host, sizeof(__extended_range_struct)));
gpuErrchk(cudaDeviceSynchronize());
delete one_host;
delete half_host;
delete series_prec_host;
}
}
__attribute__ ((constructor)) void premain()
{
//cuda::er_const_init();
}
and header file for it er_const.cuh
extern __device__ __constant__ __extended_range_struct ER_ONE_CONST;
extern __device__ __constant__ __extended_range_struct ER_HALF_CONST;
extern __device__ __constant__ __extended_range_struct ER_SERIES_PREC_CONST;
namespace cuda {
void er_const_init();
}
if i call this function in main() it's work, but if i try create function in er_const.cu wich called before main() i have error: "invalid device symbol"