vendredi 22 janvier 2016

CUDA C++ shared memory and if-condition

i have a question i couldnt find an answer to myself, and i was hoping some of you could offer me some insight regarding a possible solution. Within a kernel call, i would like to insert an if-condition regarding access to shared memory.

__global__ void GridFillGPU (int * gridGLOB, int n) {
    __shared__ int grid[SIZE];
    int tid = threadIdx.x
        if (tid < n) {
            for ( int k = 0; k < SIZE) { 
                if (grid[k] == 0) {
                    grid[k] = tid;
                    break;
                }
            }
        }
    //... here write grid to global memory gridGLOB
    }

The idea is that, if the element grid[k] has already been written by one thread (with the index tid), it should not be written by another one. My question is: can this even be done in parallel ? I am quite new to Cuda, so i hope this question is not stupid. I know that grid needs to be in shared memory, and that one should avoid if-statements, but i find no other way around at the moment. I am thankful for any help

Aucun commentaire:

Enregistrer un commentaire