在CUDA中静态分配的全局内存结构

时间:2014-09-15 01:55:06

标签: memory-management cuda

在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内存中查看此结构实例?

提前致谢。

1 个答案:

答案 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());
}