blob: 6fdab30ae4f7e56093ebfdeba058e839f4178730 (
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
73
74
75
76
77
78
79
80
|
#include "kernel.h"
__thread Coal::CPUKernelWorkGroup *g_work_group;
static size_t get_global_id(cl_uint dimindx)
{
return g_work_group->getGlobalId(dimindx);
}
static cl_uint get_work_dim()
{
return g_work_group->getWorkDim();
}
static size_t get_global_size(uint dimindx)
{
return g_work_group->getGlobalSize(dimindx);
}
static size_t get_local_size(uint dimindx)
{
return g_work_group->getLocalSize(dimindx);
}
static size_t get_local_id(uint dimindx)
{
return g_work_group->getLocalID(dimindx);
}
static size_t get_num_groups(uint dimindx)
{
return g_work_group->getNumGroups(dimindx);
}
static size_t get_group_id(uint dimindx)
{
return g_work_group->getGroupID(dimindx);
}
static size_t get_global_offset(uint dimindx)
{
return g_work_group->getGlobalOffset(dimindx);
}
/*
* Utility functions
*/
void setThreadLocalWorkGroup(Coal::CPUKernelWorkGroup *current)
{
g_work_group = current;
}
static void unimplemented_stub()
{
}
void *getBuiltin(const std::string &name)
{
if (name == "get_global_id")
return (void *)&get_global_id;
else if (name == "get_work_dim")
return (void *)&get_work_dim;
else if (name == "get_global_size")
return (void *)&get_global_size;
else if (name == "get_local_size")
return (void *)&get_local_size;
else if (name == "get_local_id")
return (void *)&get_local_id;
else if (name == "get_num_groups")
return (void *)&get_num_groups;
else if (name == "get_group_id")
return (void *)&get_group_id;
else if (name == "get_global_offset")
return (void *)&get_global_offset;
// Function not found
g_work_group->builtinNotFound(name);
return (void *)&unimplemented_stub;
}
|