Hi,
I have written a code in which all threads in a block update some shared variable and then I use __syncthreads() to make sure that all threads in the block are actually done updating the same shared memory variable.
Now, I want that one global memory variable should be updated with the resultant value of the shared variable. Can it be done ?
I ran the code in emuDebug mode and I get the error following error when I update the global memory:-
[font=“Courier”]Unhandled exception at 0x10012418 in Prog.exe: 0xC0000027: Unwind exception code[/font]
Thanks.
Hi,
I have written a code in which all threads in a block update some shared variable and then I use __syncthreads() to make sure that all threads in the block are actually done updating the same shared memory variable.
Now, I want that one global memory variable should be updated with the resultant value of the shared variable. Can it be done ?
I ran the code in emuDebug mode and I get the error following error when I update the global memory:-
[font=“Courier”]Unhandled exception at 0x10012418 in Prog.exe: 0xC0000027: Unwind exception code[/font]
Thanks.
[snapback]390712[/snapback]
The sample code for the above case looks like:
__global__ void sum_kernel(float *d_array_x, float *d_array_y, float *d_array_z, unsigned int num_elements, float *d_sum)
{
int block_index = blockIdx.x;
int thread_index = threadIdx.x;
__shared__ float sh_sum;
sh_sum = 0;
sh_sum += d_array_x[block_index*blockDim.x + thread_index] + d_array_y[block_index*blockDim.x + thread_index] + d_array_z[block_index*blockDim.x + thread_index];
__syncthreads();
//Updating Global Memory per block
d_sum[block_index] = sh_sum/num_elements;
}
I get an error in the last line of the code, as “unwind exception.”
So I just want to know that am I updating the GMEM in right way? Any help would be appreciated. External Media
JHHPC
June 9, 2008, 7:53am
3
The sample code for the above case looks like:
{
//Updating Global Memory per block
d_sum[block_index] = sh_sum/num_elements;
}
I get an error in the last line of the code, as “unwind exception.”
So I just want to know that am I updating the GMEM in right way? Any help would be appreciated. External Media
[snapback]390723[/snapback]
All threads of one block update this position. You should wrap the last call into an if-statement and specify only one thread id e.g.:
If (threadIdx.x = 0) {
//update
}
I assume you are doing the reduction correctly beforehand, I didn’t check!
Johannes
All threads of one block update this position. You should wrap the last call into an if-statement and specify only one thread id e.g.:
If (threadIdx.x = 0) {
//update
}
I assume you are doing the reduction correctly beforehand, I didn’t check!
Johannes
[snapback]390736[/snapback]
Thanks Johannes…I will try that thread wrapping External Media