ESBMC
Efficient SMT-based Context-Bounded Model Checker
Loading...
Searching...
No Matches
sm_atomic_functions.h
Go to the documentation of this file.
1#if !defined(__SM_ATOMIC_FUNCTIONS_H__)
2# define __SM_ATOMIC_FUNCTIONS_H__
3
4# include "vector_types.h"
5
6/*DEVICE_BUILTIN*/
7extern __device__ int __iAtomicAdd(int *address, int val);
8/*DEVICE_BUILTIN*/
9extern __device__ unsigned int
10__uAtomicAdd(unsigned int *address, unsigned int val);
11/*DEVICE_BUILTIN*/
12extern __device__ int __iAtomicExch(int *address, int val);
13/*DEVICE_BUILTIN*/
14extern __device__ unsigned int
15__uAtomicExch(unsigned int *address, unsigned int val);
16/*DEVICE_BUILTIN*/
17extern __device__ float __fAtomicExch(float *address, float val);
18/*DEVICE_BUILTIN*/
19extern __device__ int __iAtomicMin(int *address, int val);
20/*DEVICE_BUILTIN*/
21extern __device__ unsigned int
22__uAtomicMin(unsigned int *address, unsigned int val);
23/*DEVICE_BUILTIN*/
24extern __device__ int __iAtomicMax(int *address, int val);
25/*DEVICE_BUILTIN*/
26extern __device__ unsigned int
27__uAtomicMax(unsigned int *address, unsigned int val);
28/*DEVICE_BUILTIN*/
29extern __device__ unsigned int
30__uAtomicInc(unsigned int *address, unsigned int val);
31/*DEVICE_BUILTIN*/
32extern __device__ unsigned int
33__uAtomicDec(unsigned int *address, unsigned int val);
34/*DEVICE_BUILTIN*/
35extern __device__ int __iAtomicAnd(int *address, int val);
36/*DEVICE_BUILTIN*/
37extern __device__ unsigned int
38__uAtomicAnd(unsigned int *address, unsigned int val);
39/*DEVICE_BUILTIN*/
40extern __device__ int __iAtomicOr(int *address, int val);
41/*DEVICE_BUILTIN*/
42extern __device__ unsigned int
43__uAtomicOr(unsigned int *address, unsigned int val);
44/*DEVICE_BUILTIN*/
45extern __device__ int __iAtomicXor(int *address, int val);
46/*DEVICE_BUILTIN*/
47extern __device__ unsigned int
48__uAtomicXor(unsigned int *address, unsigned int val);
49/*DEVICE_BUILTIN*/
50extern __device__ int __iAtomicCAS(int *address, int compare, int val);
51/*DEVICE_BUILTIN*/
52extern __device__ unsigned int
53__uAtomicCAS(unsigned int *address, unsigned int compare, unsigned int val);
54
55/***********/
56
57extern __device__ int __iAtomicAdd(int *address, int val)
58{
59 __ESBMC_atomic_begin();
60 int old_value, new_value;
61
62 old_value = *address;
63 new_value = old_value + val;
64 *address = new_value;
65
66 __ESBMC_atomic_end();
67 return old_value;
68}
69
70extern __device__ unsigned int
71__uAtomicAdd(unsigned int *address, unsigned int val)
72{
73 __ESBMC_atomic_begin();
74 unsigned int old_value, new_value;
75
76 old_value = *address;
77 new_value = old_value + val;
78 *address = new_value;
79
80 __ESBMC_atomic_end();
81 return old_value;
82}
83
84extern __device__ int __iAtomicExch(int *address, int val)
85{
86 __ESBMC_atomic_begin();
87 int old_value;
88
89 old_value = *address;
90 *address = val;
91
92 __ESBMC_atomic_end();
93 return old_value;
94}
95
96extern __device__ unsigned int
97__uAtomicExch(unsigned int *address, unsigned int val)
98{
99 __ESBMC_atomic_begin();
100 unsigned int old_value;
101
102 old_value = *address;
103 *address = val;
104
105 __ESBMC_atomic_end();
106 return old_value;
107}
108
109extern __device__ float __fAtomicExch(float *address, float val)
110{
111 __ESBMC_atomic_begin();
112 float old_value;
113
114 old_value = *address;
115 *address = val;
116
117 __ESBMC_atomic_end();
118 return old_value;
119}
120
121extern __device__ int __iAtomicMin(int *address, int val)
122{
123 __ESBMC_atomic_begin();
124 int old_value;
125
126 old_value = *address;
127 if (val < old_value)
128 *address = val;
129
130 __ESBMC_atomic_end();
131 return old_value;
132}
133
134extern __device__ unsigned int
135__uAtomicMin(unsigned int *address, unsigned int val)
136{
137 __ESBMC_atomic_begin();
138 unsigned int old_value;
139
140 old_value = *address;
141 if (val < old_value)
142 *address = val;
143
144 __ESBMC_atomic_end();
145 return old_value;
146}
147
148extern __device__ int __iAtomicMax(int *address, int val)
149{
150 __ESBMC_atomic_begin();
151 int old_value;
152
153 old_value = *address;
154 if (val > old_value)
155 *address = val;
156
157 __ESBMC_atomic_end();
158 return old_value;
159}
160
161extern __device__ unsigned int
162__uAtomicMax(unsigned int *address, unsigned int val)
163{
164 __ESBMC_atomic_begin();
165 unsigned int old_value;
166
167 old_value = *address;
168 if (val > old_value)
169 *address = val;
170
171 __ESBMC_atomic_end();
172 return old_value;
173}
174
175extern __device__ unsigned int
176__uAtomicInc(unsigned int *address, unsigned int val)
177{
178 __ESBMC_atomic_begin();
179 unsigned int old_value;
180
181 old_value = *address;
182
183 // ((old >= val) ? 0 : (old+1))
184 // (old_value >= val) ? (*address = 0) : (*address = (old_value+1));
185
186 if (old_value >= val)
187 *address = 0;
188 else
189 *address = (old_value + 1);
190
191 __ESBMC_atomic_end();
192 return old_value;
193}
194
195extern __device__ unsigned int
196__uAtomicDec(unsigned int *address, unsigned int val)
197{
198 __ESBMC_atomic_begin();
199 unsigned int old_value;
200
201 old_value = *address;
202
203 // (((old == 0) | (old > val)) ? val : (old-1) )
204 // ((old_value == val) | (old_value > val)) ? (*address = val) : (*address =
205 //(old_value-1));
206
207 if ((old_value == val) | (old_value > val))
208 *address = val;
209 else
210 *address = (old_value - 1);
211
212 __ESBMC_atomic_end();
213 return old_value;
214}
215
216extern __device__ int __iAtomicAnd(int *address, int val)
217{
218 __ESBMC_atomic_begin();
219 int old_value;
220 old_value = *address;
221
222 *address = (old_value & val);
223
224 __ESBMC_atomic_end();
225 return old_value;
226}
227
228extern __device__ unsigned int
229__uAtomicAnd(unsigned int *address, unsigned int val)
230{
231 __ESBMC_atomic_begin();
232 unsigned int old_value;
233 old_value = *address;
234
235 *address = (old_value & val);
236
237 __ESBMC_atomic_end();
238 return old_value;
239}
240
241extern __device__ int __iAtomicOr(int *address, int val)
242{
243 __ESBMC_atomic_begin();
244 int old_value;
245 old_value = *address;
246
247 *address = (old_value | val);
248
249 __ESBMC_atomic_end();
250 return old_value;
251}
252
253extern __device__ unsigned int
254__uAtomicOr(unsigned int *address, unsigned int val)
255{
256 __ESBMC_atomic_begin();
257 unsigned int old_value;
258 old_value = *address;
259
260 *address = (old_value | val);
261
262 __ESBMC_atomic_end();
263 return old_value;
264}
265
266extern __device__ int __iAtomicXor(int *address, int val)
267{
268 __ESBMC_atomic_begin();
269 int old_value;
270 old_value = *address;
271
272 *address = (old_value ^ val);
273
274 __ESBMC_atomic_end();
275 return old_value;
276}
277
278extern __device__ unsigned int
279__uAtomicXor(unsigned int *address, unsigned int val)
280{
281 __ESBMC_atomic_begin();
282 int old_value;
283 old_value = *address;
284
285 *address = (old_value ^ val);
286
287 __ESBMC_atomic_end();
288 return old_value;
289}
290
291extern __device__ int __iAtomicCAS(int *address, int compare, int val)
292{
293 __ESBMC_atomic_begin();
294 int old_value;
295 old_value = *address;
296
297 // (old == compare ? val : old)
298 // (old_value == compare ? val : old_value)
299
300 if (old_value == compare)
301 *address = val;
302 else
303 *address = old_value;
304
305 __ESBMC_atomic_end();
306 return old_value;
307}
308
309extern __device__ unsigned int
310__uAtomicCAS(unsigned int *address, unsigned int compare, unsigned int val)
311{
312 __ESBMC_atomic_begin();
313 unsigned int old_value;
314 old_value = *address;
315
316 // (old == compare ? val : old)
317 // (old_value == compare ? val : old_value)
318
319 if (old_value == compare)
320 *address = val;
321 else
322 *address = old_value;
323
324 __ESBMC_atomic_end();
325 return old_value;
326}
327
328/***********/
329
330static __inline__ __device__ int atomicAdd(int *address, int val)
331{
332 return __iAtomicAdd(address, val);
333}
334
335static __inline__ __device__ unsigned int
336atomicAdd(unsigned int *address, unsigned int val)
337{
338 return __uAtomicAdd(address, val);
339}
340
341static __inline__ __device__ int atomicSub(int *address, int val)
342{
343 return __iAtomicAdd(address, -(int)val);
344}
345
346static __inline__ __device__ unsigned int
347atomicSub(unsigned int *address, unsigned int val)
348{
349 return __uAtomicAdd(address, -(unsigned int)val);
350}
351
352static __inline__ __device__ int atomicExch(int *address, int val)
353{
354 return __iAtomicExch(address, val);
355}
356
357static __inline__ __device__ unsigned int
358atomicExch(unsigned int *address, unsigned int val)
359{
360 return __uAtomicExch(address, val);
361}
362
363static __inline__ __device__ float atomicExch(float *address, float val)
364{
365 return __fAtomicExch(address, val);
366}
367
368static __inline__ __device__ int atomicMin(int *address, int val)
369{
370 return __iAtomicMin(address, val);
371}
372
373static __inline__ __device__ unsigned int
374atomicMin(unsigned int *address, unsigned int val)
375{
376 return __uAtomicMin(address, val);
377}
378
379static __inline__ __device__ int atomicMax(int *address, int val)
380{
381 return __iAtomicMax(address, val);
382}
383
384static __inline__ __device__ unsigned int
385atomicMax(unsigned int *address, unsigned int val)
386{
387 return __uAtomicMax(address, val);
388}
389
390static __inline__ __device__ unsigned int
391atomicInc(unsigned int *address, unsigned int val)
392{
393 return __uAtomicInc(address, val);
394}
395
396static __inline__ __device__ unsigned int
397atomicDec(unsigned int *address, unsigned int val)
398{
399 return __uAtomicDec(address, val);
400}
401
402static __inline__ __device__ int atomicAnd(int *address, int val)
403{
404 return __iAtomicAnd(address, val);
405}
406
407static __inline__ __device__ unsigned int
408atomicAnd(unsigned int *address, unsigned int val)
409{
410 return __uAtomicAnd(address, val);
411}
412
413static __inline__ __device__ int atomicOr(int *address, int val)
414{
415 return __iAtomicOr(address, val);
416}
417
418static __inline__ __device__ unsigned int
419atomicOr(unsigned int *address, unsigned int val)
420{
421 return __uAtomicOr(address, val);
422}
423
424static __inline__ __device__ int atomicXor(int *address, int val)
425{
426 return __iAtomicXor(address, val);
427}
428
429static __inline__ __device__ unsigned int
430atomicXor(unsigned int *address, unsigned int val)
431{
432 return __uAtomicXor(address, val);
433}
434
435static __inline__ __device__ int atomicCAS(int *address, int compare, int val)
436{
437 return __iAtomicCAS(address, compare, val);
438}
439
440static __inline__ __device__ unsigned int
441atomicCAS(unsigned int *address, unsigned int compare, unsigned int val)
442{
443 return __uAtomicCAS(address, compare, val);
444}
445
446// sm_12_atomic_functions.h
447
448/*DEVICE_BUILTIN*/
449extern __device__ unsigned long long int
450__ullAtomicAdd(unsigned long long int *address, unsigned long long int val);
451/*DEVICE_BUILTIN*/
452extern __device__ unsigned long long int
453__ullAtomicExch(unsigned long long int *address, unsigned long long int val);
454/*DEVICE_BUILTIN*/
455extern __device__ unsigned long long int __ullAtomicCAS(
456 unsigned long long int *address,
457 unsigned long long int compare,
458 unsigned long long int val);
459
460/*DEVICE_BUILTIN*/
461extern __device__ int __any(int cond);
462/*DEVICE_BUILTIN*/
463extern __device__ int __all(int cond);
464
465/***********/
466
467extern __device__ unsigned long long int
468__ullAtomicAdd(unsigned long long int *address, unsigned long long int val)
469{
470 __ESBMC_atomic_begin();
471 unsigned long long int old_value, new_value;
472
473 old_value = *address;
474 new_value = old_value + val;
475 *address = new_value;
476
477 __ESBMC_atomic_end();
478 return old_value;
479}
480
481extern __device__ unsigned long long int
482__ullAtomicExch(unsigned long long int *address, unsigned long long int val)
483{
484 __ESBMC_atomic_begin();
485 unsigned long long int old_value;
486
487 old_value = *address;
488 *address = val;
489
490 __ESBMC_atomic_end();
491 return old_value;
492}
493
494extern __device__ unsigned long long int __ullAtomicCAS(
495 unsigned long long int *address,
496 unsigned long long int compare,
497 unsigned long long int val)
498{
499 __ESBMC_atomic_begin();
500 unsigned long long int old_value;
501 old_value = *address;
502
503 // (old == compare ? val : old)
504 // (old_value == compare ? val : old_value)
505
506 if (old_value == compare)
507 *address = val;
508 else
509 *address = old_value;
510
511 __ESBMC_atomic_end();
512 return old_value;
513}
514
515/*
516extern __device__ int __any(int cond){}
517
518extern __device__ int __all(int cond){}
519*/
520
521/***********/
522
523static __inline__ __device__ unsigned long long int
524atomicAdd(unsigned long long int *address, unsigned long long int val)
525{
526 return __ullAtomicAdd(address, val);
527}
528
529static __inline__ __device__ unsigned long long int
530atomicExch(unsigned long long int *address, unsigned long long int val)
531{
532 return __ullAtomicExch(address, val);
533}
534
535static __inline__ __device__ unsigned long long int atomicCAS(
536 unsigned long long int *address,
537 unsigned long long int compare,
538 unsigned long long int val)
539{
540 return __ullAtomicCAS(address, compare, val);
541}
542
543static __inline__ __device__ bool any(bool cond)
544{
545 return (bool)__any((int)cond);
546}
547
548static __inline__ __device__ bool all(bool cond)
549{
550 return (bool)__all((int)cond);
551}
552
553// sm_20_atomic_functions.h
554
555/*DEVICE_BUILTIN*/
556extern __device__ float __fAtomicAdd(float *address, float val);
557
558/***********/
559
560extern __device__ float __fAtomicAdd(float *address, float val)
561{
562 __ESBMC_atomic_begin();
563 float old_value, new_value;
564
565 old_value = *address;
566 new_value = old_value + val;
567 *address = new_value;
568
569 __ESBMC_atomic_end();
570 return old_value;
571}
572
573/***********/
574
575static __inline__ __device__ float atomicAdd(float *address, float val)
576{
577 return __fAtomicAdd(address, val);
578}
579
580// sm_32_atomic_functions.h
581
582extern __device__ __device_builtin__ long long
583__illAtomicMin(long long *address, long long val);
584extern __device__ __device_builtin__ long long
585__illAtomicMax(long long *address, long long val);
586extern __device__ __device_builtin__ unsigned long long
587__ullAtomicMin(unsigned long long *address, unsigned long long val);
588extern __device__ __device_builtin__ unsigned long long
589__ullAtomicMax(unsigned long long *address, unsigned long long val);
590extern __device__ __device_builtin__ unsigned long long int
591__ullAtomicAnd(unsigned long long int *address, unsigned long long int val);
592extern __device__ __device_builtin__ unsigned long long
593__ullAtomicOr(unsigned long long *address, unsigned long long val);
594extern __device__ __device_builtin__ unsigned long long
595__ullAtomicXor(unsigned long long *address, unsigned long long val);
596
597/***********/
598
599extern __device__ __device_builtin__ long long
600__illAtomicMin(long long *address, long long val)
601{
602 __ESBMC_atomic_begin();
603 long long old_value;
604
605 old_value = *address;
606 if (val < old_value)
607 *address = val;
608
609 __ESBMC_atomic_end();
610 return old_value;
611}
612
613extern __device__ __device_builtin__ long long
614__illAtomicMax(long long *address, long long val)
615{
616 __ESBMC_atomic_begin();
617 long long old_value;
618
619 old_value = *address;
620 if (val > old_value)
621 *address = val;
622
623 __ESBMC_atomic_end();
624 return old_value;
625}
626
627extern __device__ __device_builtin__ unsigned long long
628__ullAtomicMin(unsigned long long *address, unsigned long long val)
629{
630 __ESBMC_atomic_begin();
631 unsigned long long old_value;
632
633 old_value = *address;
634 if (val < old_value)
635 *address = val;
636
637 __ESBMC_atomic_end();
638 return old_value;
639}
640
641extern __device__ __device_builtin__ unsigned long long
642__ullAtomicMax(unsigned long long *address, unsigned long long val)
643{
644 __ESBMC_atomic_begin();
645 unsigned long long old_value;
646
647 old_value = *address;
648 if (val > old_value)
649 *address = val;
650
651 __ESBMC_atomic_end();
652 return old_value;
653}
654
655extern __device__ __device_builtin__ unsigned long long int
656__ullAtomicAnd(unsigned long long int *address, unsigned long long int val)
657{
658 __ESBMC_atomic_begin();
659 unsigned long long int old_value;
660 old_value = *address;
661
662 *address = (old_value & val);
663
664 __ESBMC_atomic_end();
665 return old_value;
666}
667
668extern __device__ __device_builtin__ unsigned long long
669__ullAtomicOr(unsigned long long *address, unsigned long long val)
670{
671 __ESBMC_atomic_begin();
672 unsigned long long old_value;
673 old_value = *address;
674
675 *address = (old_value | val);
676
677 __ESBMC_atomic_end();
678 return old_value;
679}
680
681extern __device__ __device_builtin__ unsigned long long
682__ullAtomicXor(unsigned long long *address, unsigned long long val)
683{
684 __ESBMC_atomic_begin();
685 unsigned long long old_value;
686 old_value = *address;
687
688 *address = (old_value ^ val);
689
690 __ESBMC_atomic_end();
691 return old_value;
692}
693
694/***********/
695
696static __inline__ __device__ long long
697atomicMin(long long *address, long long val)
698{
699 return __illAtomicMin(address, val);
700}
701
702static __inline__ __device__ long long
703atomicMax(long long *address, long long val)
704{
705 return __illAtomicMax(address, val);
706}
707
708static __inline__ __device__ unsigned long long
709atomicMin(unsigned long long *address, unsigned long long val)
710{
711 return __ullAtomicMin(address, val);
712}
713
714static __inline__ __device__ unsigned long long
715atomicMax(unsigned long long *address, unsigned long long val)
716{
717 return __ullAtomicMax(address, val);
718}
719
720static __inline__ __device__ unsigned long long int
721atomicAnd(unsigned long long int *address, unsigned long long int val)
722{
723 return __ullAtomicAnd(address, val);
724}
725
726static __inline__ __device__ unsigned long long
727atomicOr(unsigned long long *address, unsigned long long val)
728{
729 return __ullAtomicOr(address, val);
730}
731
732static __inline__ __device__ unsigned long long
733atomicXor(unsigned long long *address, unsigned long long val)
734{
735 return __ullAtomicXor(address, val);
736}
737
738#endif /* !__SM_ATOMIC_FUNCTIONS_H__ */
pthread_cond_t cond
Definition cuda.h:50
#define __device_builtin__
Definition host_defines.h:120
#define __device__
Definition host_defines.h:113
#define __inline__
Definition linux.hpp:101
__device__ unsigned long long int __ullAtomicAdd(unsigned long long int *address, unsigned long long int val)
Definition sm_atomic_functions.h:468
__device__ __device_builtin__ unsigned long long __ullAtomicOr(unsigned long long *address, unsigned long long val)
Definition sm_atomic_functions.h:669
__device__ __device_builtin__ unsigned long long __ullAtomicMin(unsigned long long *address, unsigned long long val)
Definition sm_atomic_functions.h:628
__device__ unsigned long long int __ullAtomicCAS(unsigned long long int *address, unsigned long long int compare, unsigned long long int val)
Definition sm_atomic_functions.h:494
__device__ int __iAtomicXor(int *address, int val)
Definition sm_atomic_functions.h:266
__device__ unsigned long long int __ullAtomicExch(unsigned long long int *address, unsigned long long int val)
Definition sm_atomic_functions.h:482
static __inline__ __device__ int atomicAnd(int *address, int val)
Definition sm_atomic_functions.h:402
__device__ int __iAtomicExch(int *address, int val)
Definition sm_atomic_functions.h:84
__device__ int __iAtomicOr(int *address, int val)
Definition sm_atomic_functions.h:241
__device__ __device_builtin__ unsigned long long int __ullAtomicAnd(unsigned long long int *address, unsigned long long int val)
Definition sm_atomic_functions.h:656
__device__ unsigned int __uAtomicOr(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:254
__device__ int __iAtomicAnd(int *address, int val)
Definition sm_atomic_functions.h:216
static __inline__ __device__ int atomicXor(int *address, int val)
Definition sm_atomic_functions.h:424
__device__ __device_builtin__ long long __illAtomicMin(long long *address, long long val)
Definition sm_atomic_functions.h:600
__device__ int __iAtomicAdd(int *address, int val)
Definition sm_atomic_functions.h:57
__device__ int __all(int cond)
static __inline__ __device__ int atomicOr(int *address, int val)
Definition sm_atomic_functions.h:413
__device__ int __any(int cond)
static __inline__ __device__ unsigned int atomicDec(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:397
__device__ unsigned int __uAtomicMin(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:135
__device__ __device_builtin__ unsigned long long __ullAtomicXor(unsigned long long *address, unsigned long long val)
Definition sm_atomic_functions.h:682
__device__ int __iAtomicMin(int *address, int val)
Definition sm_atomic_functions.h:121
static __inline__ __device__ int atomicAdd(int *address, int val)
Definition sm_atomic_functions.h:330
__device__ unsigned int __uAtomicXor(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:279
__device__ __device_builtin__ unsigned long long __ullAtomicMax(unsigned long long *address, unsigned long long val)
Definition sm_atomic_functions.h:642
__device__ float __fAtomicAdd(float *address, float val)
Definition sm_atomic_functions.h:560
__device__ unsigned int __uAtomicAnd(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:229
__device__ int __iAtomicMax(int *address, int val)
Definition sm_atomic_functions.h:148
static __inline__ __device__ unsigned int atomicInc(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:391
static __inline__ __device__ int atomicExch(int *address, int val)
Definition sm_atomic_functions.h:352
static __inline__ __device__ int atomicSub(int *address, int val)
Definition sm_atomic_functions.h:341
__device__ unsigned int __uAtomicInc(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:176
static __inline__ __device__ int atomicCAS(int *address, int compare, int val)
Definition sm_atomic_functions.h:435
__device__ float __fAtomicExch(float *address, float val)
Definition sm_atomic_functions.h:109
__device__ unsigned int __uAtomicDec(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:196
__device__ __device_builtin__ long long __illAtomicMax(long long *address, long long val)
Definition sm_atomic_functions.h:614
__device__ unsigned int __uAtomicExch(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:97
static __inline__ __device__ int atomicMin(int *address, int val)
Definition sm_atomic_functions.h:368
__device__ unsigned int __uAtomicAdd(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:71
__device__ unsigned int __uAtomicCAS(unsigned int *address, unsigned int compare, unsigned int val)
Definition sm_atomic_functions.h:310
static __inline__ __device__ int atomicMax(int *address, int val)
Definition sm_atomic_functions.h:379
__device__ unsigned int __uAtomicMax(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:162
__device__ int __iAtomicCAS(int *address, int compare, int val)
Definition sm_atomic_functions.h:291
static __inline__ __device__ bool any(bool cond)
Definition sm_atomic_functions.h:543
static __inline__ __device__ bool all(bool cond)
Definition sm_atomic_functions.h:548