在CUDA中,static
全局记忆struct
的定义是否可行?
struct ABC
{
int nIntArray[3];
float rFLoatArray[3];
};
__device__ static ABC xABCStruct = {{1, 2, 3}, {1.f, 2.f, 3.f}};
如何在CUDA内存中查看此结构实例?
提前致谢。
答案 0 :(得分:1)
是的,有可能。查看以下代码,还显示了如何访问它的示例:
#include<stdio.h>
/********************/
/* CUDA ERROR CHECK */
/********************/
#define gpuErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); }
inline void gpuAssert(cudaError_t code, char *file, int line, bool abort=true)
{
if (code != cudaSuccess)
{
fprintf(stderr,"GPUassert: %s %s %d\n", cudaGetErrorString(code), file, line);
if (abort) exit(code);
}
}
struct ABC { int nIntArray[3]; float rFLoatArray[3];};
__device__ static ABC xABCStruct = {{1, 2, 3}, {1.f, 2.f, 3.f}};
__device__ static float test_float = 3.f;
__global__ void kernel1() { printf("%f\n", test_float); }
__global__ void kernel2() {
printf("%i\n", xABCStruct.nIntArray[0]);
printf("%i\n", xABCStruct.nIntArray[1]);
printf("%i\n", xABCStruct.nIntArray[2]);
printf("%f\n", xABCStruct.rFLoatArray[0]);
printf("%f\n", xABCStruct.rFLoatArray[1]);
printf("%f\n", xABCStruct.rFLoatArray[2]);
}
void main() {
kernel1<<<1,1>>>();
gpuErrchk(cudaPeekAtLastError());
gpuErrchk(cudaDeviceSynchronize());
kernel2<<<1,1>>>();
gpuErrchk(cudaPeekAtLastError());
gpuErrchk(cudaDeviceSynchronize());
}