source: CIVL/examples/cuda/deadlockBug.cu

main
Last change on this file was ea777aa, checked in by Alex Wilton <awilton@…>, 3 years ago

Moved examples, include, build_default.properties, common.xml, and README out from dev.civl.com into the root of the repo.

git-svn-id: svn://vsl.cis.udel.edu/civl/trunk@5704 fb995dde-84ed-4084-dfe6-e5aef3e2452c

  • Property mode set to 100644
File size: 940 bytes
RevLine 
[a52ef0f]1#include <cuda.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <civlc.cvh>
5
6__global__ void test_kernel($gbarrier gb)
7{
8 //Added to avoid data race
9 $read_set_push();
10 $write_set_push();
11
12 $barrier barrier = $barrier_create($here, gb, threadIdx.x);
13 $barrier_call_yield(barrier);
14 $barrier_destroy(barrier);
15 //Note that this is not printed
16 printf("Thread %d got through barrier\n", threadIdx.x);
17
18 //Added to avoid data race
19 $read_set_pop();
20 $write_set_pop();
21}
22
23int main(){
24 $gbarrier gb = $gbarrier_create($here, 3);
25 $gbarrier gb_dev = $gbarrier_create($here, 3);
26
27 cudaMemcpy(gb_dev, gb, sizeof(struct _gbarrier), cudaMemcpyHostToDevice);
28 //Barrier of size three will only be called by 2 threads
29 test_kernel<<<1, 2>>>(gb_dev);
30 //There is a bug where the second cudaMemcpy is required
31 cudaMemcpy(gb, gb_dev, sizeof(struct _gbarrier), cudaMemcpyDeviceToHost);
32
33 $gbarrier_destroy(gb);
34 $gbarrier_destroy(gb_dev);
35}
Note: See TracBrowser for help on using the repository browser.