-
Notifications
You must be signed in to change notification settings - Fork 124
/
Copy pathnativecpu_state.hpp
executable file
·69 lines (65 loc) · 2.31 KB
/
nativecpu_state.hpp
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
//===-------------- nativecpu_state.hpp - SYCL Native CPU state -------===//
//
// Copyright (C) 2023 Intel Corporation
//
// Part of the Unified-Runtime Project, under the Apache License v2.0 with LLVM
// Exceptions. See LICENSE.TXT
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#pragma once
#include <cstdlib>
namespace native_cpu {
struct state {
size_t MGlobal_id[3];
size_t MGlobal_range[3];
size_t MWorkGroup_size[3];
size_t MWorkGroup_id[3];
size_t MLocal_id[3];
size_t MNumGroups[3];
size_t MGlobalOffset[3];
uint32_t NumSubGroups, SubGroup_id, SubGroup_local_id, SubGroup_size;
inline state(size_t globalR0, size_t globalR1, size_t globalR2, size_t localR0,
size_t localR1, size_t localR2, size_t globalO0, size_t globalO1,
size_t globalO2)
: MGlobal_range{globalR0, globalR1, globalR2}, MWorkGroup_size{localR0,
localR1,
localR2},
MNumGroups{globalR0 / localR0, globalR1 / localR1, globalR2 / localR2},
MGlobalOffset{globalO0, globalO1, globalO2} {
MGlobal_id[0] = 0;
MGlobal_id[1] = 0;
MGlobal_id[2] = 0;
MWorkGroup_id[0] = 0;
MWorkGroup_id[1] = 0;
MWorkGroup_id[2] = 0;
MLocal_id[0] = 0;
MLocal_id[1] = 0;
MLocal_id[2] = 0;
NumSubGroups = 32;
SubGroup_id = 0;
SubGroup_local_id = 0;
SubGroup_size = 1;
}
inline void update(size_t group0, size_t group1, size_t group2, size_t local0,
size_t local1, size_t local2) {
MWorkGroup_id[0] = group0;
MWorkGroup_id[1] = group1;
MWorkGroup_id[2] = group2;
MLocal_id[0] = local0;
MLocal_id[1] = local1;
MLocal_id[2] = local2;
MGlobal_id[0] =
MWorkGroup_size[0] * MWorkGroup_id[0] + MLocal_id[0] + MGlobalOffset[0];
MGlobal_id[1] =
MWorkGroup_size[1] * MWorkGroup_id[1] + MLocal_id[1] + MGlobalOffset[1];
MGlobal_id[2] =
MWorkGroup_size[2] * MWorkGroup_id[2] + MLocal_id[2] + MGlobalOffset[2];
}
inline void update(size_t group0, size_t group1, size_t group2) {
MWorkGroup_id[0] = group0;
MWorkGroup_id[1] = group1;
MWorkGroup_id[2] = group2;
}
};
} // namespace native_cpu