Skip to content

Commit 2ca47e3

Browse files
authored
[SYCL] spir-v vars should not be defined for GPU targets (#18676)
For AMD/Cuda item queries are provided by libclc.
1 parent 97f50ed commit 2ca47e3

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

libdevice/crt_wrapper.cpp

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,24 @@ int memcmp(const void *s1, const void *s2, size_t n) {
5151
DEVICE_EXTERN_C_INLINE
5252
int rand() {
5353
size_t gid =
54+
#if defined(__NVPTX__) || defined(__AMDGCN__)
55+
(__spirv_GlobalInvocationId_x() * __spirv_GlobalSize_y() *
56+
__spirv_GlobalSize_z()) +
57+
(__spirv_GlobalInvocationId_y() * __spirv_GlobalSize_z()) +
58+
__spirv_GlobalInvocationId_z();
59+
#else
5460
(__spirv_BuiltInGlobalInvocationId.x * __spirv_BuiltInGlobalSize.y *
5561
__spirv_BuiltInGlobalSize.z) +
5662
(__spirv_BuiltInGlobalInvocationId.y * __spirv_BuiltInGlobalSize.z) +
5763
__spirv_BuiltInGlobalInvocationId.z;
58-
size_t global_size = __spirv_BuiltInGlobalSize.x *
59-
__spirv_BuiltInGlobalSize.y *
60-
__spirv_BuiltInGlobalSize.z;
64+
#endif
65+
size_t global_size =
66+
#if defined(__NVPTX__) || defined(__AMDGCN__)
67+
__spirv_GlobalSize_x() * __spirv_GlobalSize_y() * __spirv_GlobalSize_z();
68+
#else
69+
__spirv_BuiltInGlobalSize.x * __spirv_BuiltInGlobalSize.y *
70+
__spirv_BuiltInGlobalSize.z;
71+
#endif
6172
size_t gid1 =
6273
(global_size > RAND_NEXT_LEN) ? (gid & (RAND_NEXT_LEN - 1)) : gid;
6374
if (RAND_NEXT_ACC[gid1] == 0)
@@ -73,13 +84,24 @@ int rand() {
7384
DEVICE_EXTERN_C_INLINE
7485
void srand(unsigned int seed) {
7586
size_t gid =
87+
#if defined(__NVPTX__) || defined(__AMDGCN__)
88+
(__spirv_GlobalInvocationId_x() * __spirv_GlobalSize_y() *
89+
__spirv_GlobalSize_z()) +
90+
(__spirv_GlobalInvocationId_y() * __spirv_GlobalSize_z()) +
91+
__spirv_GlobalInvocationId_z();
92+
#else
7693
(__spirv_BuiltInGlobalInvocationId.x * __spirv_BuiltInGlobalSize.y *
7794
__spirv_BuiltInGlobalSize.z) +
7895
(__spirv_BuiltInGlobalInvocationId.y * __spirv_BuiltInGlobalSize.z) +
7996
__spirv_BuiltInGlobalInvocationId.z;
80-
size_t global_size = __spirv_BuiltInGlobalSize.x *
81-
__spirv_BuiltInGlobalSize.y *
82-
__spirv_BuiltInGlobalSize.z;
97+
#endif
98+
size_t global_size =
99+
#if defined(__NVPTX__) || defined(__AMDGCN__)
100+
__spirv_GlobalSize_x() * __spirv_GlobalSize_y() * __spirv_GlobalSize_z();
101+
#else
102+
__spirv_BuiltInGlobalSize.x * __spirv_BuiltInGlobalSize.y *
103+
__spirv_BuiltInGlobalSize.z;
104+
#endif
83105
size_t gid1 =
84106
(global_size > RAND_NEXT_LEN) ? (gid & (RAND_NEXT_LEN - 1)) : gid;
85107
RAND_NEXT_ACC[gid1] = seed;

libdevice/spirv_vars.h

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,23 @@
1010
#define __LIBDEVICE_SPIRV_VARS_H
1111

1212
#include "device.h"
13+
#include <cstddef>
1314

14-
#if defined(__SPIR__) || defined(__SPIRV__) || defined(__NVPTX__) || \
15-
defined(__AMDGCN__)
15+
#if defined(__NVPTX__) || defined(__AMDGCN__)
16+
// For AMD/Cuda those symbols will be provided by libclc.
17+
DEVICE_EXTERNAL size_t __spirv_GlobalInvocationId_x();
18+
DEVICE_EXTERNAL size_t __spirv_GlobalInvocationId_y();
19+
DEVICE_EXTERNAL size_t __spirv_GlobalInvocationId_z();
20+
DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_x();
21+
DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_y();
22+
DEVICE_EXTERNAL size_t __spirv_LocalInvocationId_z();
23+
DEVICE_EXTERNAL size_t __spirv_GlobalSize_x();
24+
DEVICE_EXTERNAL size_t __spirv_GlobalSize_y();
25+
DEVICE_EXTERNAL size_t __spirv_GlobalSize_z();
26+
#endif // __NVPTX__ || __AMDGCN__
27+
28+
#if defined(__SPIR__) || defined(__SPIRV__)
1629

17-
#include <cstddef>
1830
#include <cstdint>
1931

2032
#define __SPIRV_VAR_QUALIFIERS EXTERN_C const
@@ -63,5 +75,5 @@ const size_t_vec __spirv_BuiltInGlobalInvocationId{};
6375
const size_t_vec __spirv_BuiltInLocalInvocationId{};
6476
#endif // !__SPIR__ && !__SPIRV__
6577

66-
#endif // __SPIR__ || __SPIRV__ || __NVPTX__ || __AMDGCN__
78+
#endif // __SPIR__ || __SPIRV__
6779
#endif // __LIBDEVICE_SPIRV_VARS_H

0 commit comments

Comments
 (0)