cudaMemset() - does it set bytes or integers?

后端 未结 1 1286
甜味超标
甜味超标 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 
    
    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

    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)
提交回复
热议问题