cudaMemset() - does it set bytes or integers?

后端 未结 1 1290
甜味超标
甜味超标 2020-12-06 02:27

From online documentation:

cudaError_t cudaMemset (void * devPtr, int value, size_t count )

Fills the first count bytes of the memory area

相关标签:
1条回答
  • 2020-12-06 02:50

    The documentation is correct, and your interpretation of what cudaMemset does is wrong. The function really does set byte values. Your example sets the first 32 bytes to 0x12, not all 32 integers to 0x12, viz:

    #include <cstdio>
    
    int main(void)
    {
        const int n = 32;
        const size_t sz = size_t(n) * sizeof(int);
        int *dJunk;
        cudaMalloc((void**)&dJunk, sz);
        cudaMemset(dJunk, 0, sz);
        cudaMemset(dJunk, 0x12, 32);
    
        int *Junk = new int[n];
    
        cudaMemcpy(Junk, dJunk, sz, cudaMemcpyDeviceToHost);
    
        for(int i=0; i<n; i++) {
            fprintf(stdout, "%d %x\n", i, Junk[i]);
        }
    
        cudaDeviceReset();
        return 0;
    }
    

    produces

    $ nvcc memset.cu 
    $ ./a.out 
    
    0 12121212
    1 12121212
    2 12121212
    3 12121212
    4 12121212
    5 12121212
    6 12121212
    7 12121212
    8 0
    9 0
    10 0
    11 0
    12 0
    13 0
    14 0
    15 0
    16 0
    17 0
    18 0
    19 0
    20 0
    21 0
    22 0
    23 0
    24 0
    25 0
    26 0
    27 0
    28 0
    29 0
    30 0
    31 0
    

    ie. all 128 bytes set to 0, then first 32 bytes set to 0x12. Exactly as described by the documentation.

    0 讨论(0)
提交回复
热议问题