Skip to content

Commit 7a9335d

Browse files
authored
[SYCL][LIBCLC][HIP] Add get_sub_group_local_id() to HIP libclc (#4775)
1 parent 2fdf940 commit 7a9335d

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

libclc/amdgcn-amdhsa/libspirv/SOURCES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ workitem/get_num_groups.cl
1212
workitem/get_max_sub_group_size.cl
1313
workitem/get_num_sub_groups.cl
1414
workitem/get_sub_group_id.cl
15+
workitem/get_sub_group_local_id.cl
1516
workitem/get_sub_group_size.cl
1617
misc/sub_group_shuffle.cl

libclc/amdgcn-amdhsa/libspirv/workitem/get_sub_group_id.cl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ _CLC_DEF _CLC_OVERLOAD uint __spirv_SubgroupId() {
1414
size_t id_z = __spirv_LocalInvocationId_z();
1515
size_t size_x = __spirv_WorkgroupSize_x();
1616
size_t size_y = __spirv_WorkgroupSize_y();
17-
size_t size_z = __spirv_WorkgroupSize_z();
1817
uint sg_size = __spirv_SubgroupMaxSize();
1918
return (id_z * size_y * size_x + id_y * size_x + id_x) / sg_size;
2019
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//===----------------------------------------------------------------------===//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
9+
#include <spirv/spirv.h>
10+
11+
_CLC_DEF _CLC_OVERLOAD uint __spirv_SubgroupLocalInvocationId() {
12+
size_t id_x = __spirv_LocalInvocationId_x();
13+
size_t id_y = __spirv_LocalInvocationId_y();
14+
size_t id_z = __spirv_LocalInvocationId_z();
15+
size_t size_x = __spirv_WorkgroupSize_x();
16+
size_t size_y = __spirv_WorkgroupSize_y();
17+
uint sg_size = __spirv_SubgroupMaxSize();
18+
return (id_z * size_y * size_x + id_y * size_x + id_x) % sg_size;
19+
}

0 commit comments

Comments
 (0)