aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/compute/skc/atomic_cl.h
blob: c196c36390fce8b076f69ab2070ab885f9b46d4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 * Copyright 2017 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can
 * be found in the LICENSE file.
 *
 */

#ifndef SKC_ONCE_ATOMIC_CL
#define SKC_ONCE_ATOMIC_CL

//
// git cl upload is bleating about needing an #include before and #if
// so we're unneccesarily reloading the types and OpenCL header
//

#include "types.h"

#if (__OPENCL_C_VERSION__ <= 120 /*CL_VERSION_1_2*/)

#define SKC_ATOMIC_UINT                             uint
#define SKC_ATOMIC_INT                              int

#define SKC_ATOMIC_ADD_LOCAL_RELAXED_DEVICE(p,v)    atomic_add(p,v)
#define SKC_ATOMIC_ADD_LOCAL_RELAXED_SUBGROUP(p,v)  atomic_add(p,v)

#define SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(p,v)   atomic_add(p,v)
#define SKC_ATOMIC_ADD_GLOBAL_RELAXED_SUBGROUP(p,v) atomic_add(p,v)

#else // __OPENCL_C_VERSION__ > __CL_VERSION_1_2

//
// REMOVE THESE DEFINES ASAP -- ONLY HERE BECAUSE THE INTEL CODE
// BUILDER UTILITY DOESN'T SUPPORT CREATING AN ATOMIC TYPE BUFFER
//

#ifdef SKC_SUPPORT_BROKEN_INTEL_CODE_BUILDER

#define SKC_ATOMIC_UINT                             uint
#define SKC_ATOMIC_CAST_LOCAL(p)                    (__local  atomic_uint volatile * restrict const)(p)
#define SKC_ATOMIC_CAST_GLOBAL(p)                   (__global atomic_uint volatile * restrict const)(p)

#else

#define SKC_ATOMIC_UINT                             atomic_uint
#define SKC_ATOMIC_CAST_LOCAL(p)                    (p)
#define SKC_ATOMIC_CAST_GLOBAL(p)                   (p)

#endif


#define SKC_ATOMIC_ADD_LOCAL_RELAXED_DEVICE(p,v)    atomic_fetch_add_explicit(SKC_ATOMIC_CAST_LOCAL(p), \
                                                                              v,memory_order_relaxed,memory_scope_device)
#define SKC_ATOMIC_ADD_LOCAL_RELAXED_SUBGROUP(p,v)  atomic_fetch_add_explicit(SKC_ATOMIC_CAST_LOCAL(p), \
                                                                              v,memory_order_relaxed,memory_scope_sub_group)

#define SKC_ATOMIC_ADD_GLOBAL_RELAXED_DEVICE(p,v)   atomic_fetch_add_explicit(SKC_ATOMIC_CAST_GLOBAL(p), \
                                                                              v,memory_order_relaxed,memory_scope_device)
#define SKC_ATOMIC_ADD_GLOBAL_RELAXED_SUBGROUP(p,v) atomic_fetch_add_explicit(SKC_ATOMIC_CAST_GLOBAL(p), \
                                                                              v,memory_order_relaxed,memory_scope_sub_group)

#endif

//
//
//

#endif // SKC_ONCE_ATOMIC_CL

//
//
//