Skip to content

Commit 4eb870a

Browse files
kgibalaCompute-Runtime-Automation
authored andcommitted
Add Unified Shared Memory API
Related-To: NEO-3317 Change-Id: I9e15ac2dab710e6e410ddded04f0be01694a74d7 Signed-off-by: Krzysztof Gibala <[email protected]>
1 parent e0ed288 commit 4eb870a

File tree

6 files changed

+309
-1
lines changed

6 files changed

+309
-1
lines changed

public/cl_ext_private.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@
4343

4444
using cl_mem_properties_intel = cl_bitfield;
4545
using cl_mem_flags_intel = cl_mem_flags;
46+
using cl_mem_info_intel = cl_uint;
47+
using cl_mem_advice_intel = cl_uint;
48+
using cl_unified_shared_memory_type_intel = cl_uint;
4649

4750
/******************************
4851
* Internal only cl_mem_flags *
@@ -67,4 +70,4 @@ using cl_mem_flags_intel = cl_mem_flags;
6770
#define CL_KERNEL_EXEC_INFO_INDIRECT_HOST_ACCESS_INTEL 0x10000
6871
#define CL_KERNEL_EXEC_INFO_INDIRECT_DEVICE_ACCESS_INTEL 0x10001
6972
#define CL_KERNEL_EXEC_INFO_INDIRECT_SHARED_ACCESS_INTEL 0x10002
70-
#define CL_KERNEL_EXEC_INFO_USM_PTRS_INTEL 0x10003
73+
#define CL_KERNEL_EXEC_INFO_USM_PTRS_INTEL 0x10003

runtime/api/api.cpp

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3357,6 +3357,109 @@ clSetPerformanceConfigurationINTEL(
33573357
return retVal;
33583358
}
33593359

3360+
void *clHostMemAllocINTEL(
3361+
cl_context context,
3362+
cl_mem_properties_intel *properties,
3363+
size_t size,
3364+
cl_uint alignment,
3365+
cl_int *errcodeRet) {
3366+
cl_int retVal = CL_OUT_OF_HOST_MEMORY;
3367+
*errcodeRet = retVal;
3368+
return nullptr;
3369+
}
3370+
3371+
void *clDeviceMemAllocINTEL(
3372+
cl_context context,
3373+
cl_device_id device,
3374+
cl_mem_properties_intel *properties,
3375+
size_t size,
3376+
cl_uint alignment,
3377+
cl_int *errcodeRet) {
3378+
cl_int retVal = CL_OUT_OF_HOST_MEMORY;
3379+
*errcodeRet = retVal;
3380+
return nullptr;
3381+
}
3382+
3383+
void *clSharedMemAllocINTEL(
3384+
cl_context context,
3385+
cl_device_id device,
3386+
cl_mem_properties_intel *properties,
3387+
size_t size,
3388+
cl_uint alignment,
3389+
cl_int *errcodeRet) {
3390+
cl_int retVal = CL_OUT_OF_HOST_MEMORY;
3391+
*errcodeRet = retVal;
3392+
return nullptr;
3393+
}
3394+
3395+
cl_int clMemFreeINTEL(
3396+
cl_context context,
3397+
const void *ptr) {
3398+
return CL_OUT_OF_HOST_MEMORY;
3399+
}
3400+
3401+
cl_int clGetMemAllocInfoINTEL(
3402+
cl_context context,
3403+
const void *ptr,
3404+
cl_mem_info_intel paramName,
3405+
size_t paramValueSize,
3406+
void *paramValue,
3407+
size_t *paramValueSizeRet) {
3408+
return CL_OUT_OF_HOST_MEMORY;
3409+
}
3410+
3411+
cl_int clSetKernelArgMemPointerINTEL(
3412+
cl_kernel kernel,
3413+
cl_uint argIndex,
3414+
const void *argValue) {
3415+
return CL_OUT_OF_HOST_MEMORY;
3416+
}
3417+
3418+
cl_int clEnqueueMemsetINTEL(
3419+
cl_command_queue commandQueue,
3420+
void *dstPtr,
3421+
cl_int value,
3422+
size_t size,
3423+
cl_uint numEventsInWaitList,
3424+
const cl_event *eventWaitList,
3425+
cl_event *event) {
3426+
return CL_OUT_OF_HOST_MEMORY;
3427+
}
3428+
3429+
cl_int clEnqueueMemcpyINTEL(
3430+
cl_command_queue commandQueue,
3431+
cl_bool blocking,
3432+
void *dstPtr,
3433+
const void *srcPtr,
3434+
size_t size,
3435+
cl_uint numEventsInWaitList,
3436+
const cl_event *eventWaitList,
3437+
cl_event *event) {
3438+
return CL_OUT_OF_HOST_MEMORY;
3439+
}
3440+
3441+
cl_int clEnqueueMigrateMemINTEL(
3442+
cl_command_queue commandQueue,
3443+
const void *ptr,
3444+
size_t size,
3445+
cl_mem_migration_flags flags,
3446+
cl_uint numEventsInWaitList,
3447+
const cl_event *eventWaitList,
3448+
cl_event *event) {
3449+
return CL_OUT_OF_HOST_MEMORY;
3450+
}
3451+
3452+
cl_int clEnqueueMemAdviseINTEL(
3453+
cl_command_queue commandQueue,
3454+
const void *ptr,
3455+
size_t size,
3456+
cl_mem_advice_intel advice,
3457+
cl_uint numEventsInWaitList,
3458+
const cl_event *eventWaitList,
3459+
cl_event *event) {
3460+
return CL_OUT_OF_HOST_MEMORY;
3461+
}
3462+
33603463
cl_command_queue CL_API_CALL clCreateCommandQueueWithPropertiesKHR(cl_context context,
33613464
cl_device_id device,
33623465
const cl_queue_properties_khr *properties,
@@ -3553,6 +3656,17 @@ void *CL_API_CALL clGetExtensionFunctionAddress(const char *funcName) {
35533656
RETURN_FUNC_PTR_IF_EXIST(clDisableTracingINTEL);
35543657
RETURN_FUNC_PTR_IF_EXIST(clGetTracingStateINTEL);
35553658

3659+
RETURN_FUNC_PTR_IF_EXIST(clHostMemAllocINTEL);
3660+
RETURN_FUNC_PTR_IF_EXIST(clDeviceMemAllocINTEL);
3661+
RETURN_FUNC_PTR_IF_EXIST(clSharedMemAllocINTEL);
3662+
RETURN_FUNC_PTR_IF_EXIST(clMemFreeINTEL);
3663+
RETURN_FUNC_PTR_IF_EXIST(clGetMemAllocInfoINTEL);
3664+
RETURN_FUNC_PTR_IF_EXIST(clSetKernelArgMemPointerINTEL);
3665+
RETURN_FUNC_PTR_IF_EXIST(clEnqueueMemsetINTEL);
3666+
RETURN_FUNC_PTR_IF_EXIST(clEnqueueMemcpyINTEL);
3667+
RETURN_FUNC_PTR_IF_EXIST(clEnqueueMigrateMemINTEL);
3668+
RETURN_FUNC_PTR_IF_EXIST(clEnqueueMemAdviseINTEL);
3669+
35563670
void *ret = sharingFactory.getExtensionFunctionAddress(funcName);
35573671
if (ret != nullptr) {
35583672
TRACING_EXIT(clGetExtensionFunctionAddress, &ret);

runtime/api/api.h

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,83 @@ extern CL_API_ENTRY cl_program CL_API_CALL clCreateProgramWithILKHR(
915915
const void *il,
916916
size_t length,
917917
cl_int *errcodeRet) CL_API_SUFFIX__VERSION_1_2;
918+
919+
void *clHostMemAllocINTEL(
920+
cl_context context,
921+
cl_mem_properties_intel *properties,
922+
size_t size,
923+
cl_uint alignment,
924+
cl_int *errcodeRet);
925+
926+
void *clDeviceMemAllocINTEL(
927+
cl_context context,
928+
cl_device_id device,
929+
cl_mem_properties_intel *properties,
930+
size_t size,
931+
cl_uint alignment,
932+
cl_int *errcodeRet);
933+
934+
void *clSharedMemAllocINTEL(
935+
cl_context context,
936+
cl_device_id device,
937+
cl_mem_properties_intel *properties,
938+
size_t size,
939+
cl_uint alignment,
940+
cl_int *errcodeRet);
941+
942+
cl_int clMemFreeINTEL(
943+
cl_context context,
944+
const void *ptr);
945+
946+
cl_int clGetMemAllocInfoINTEL(
947+
cl_context context,
948+
const void *ptr,
949+
cl_mem_info_intel paramName,
950+
size_t paramValueSize,
951+
void *paramValue,
952+
size_t *paramValueSizeRet);
953+
954+
cl_int clSetKernelArgMemPointerINTEL(
955+
cl_kernel kernel,
956+
cl_uint argIndex,
957+
const void *argValue);
958+
959+
cl_int clEnqueueMemsetINTEL(
960+
cl_command_queue commandQueue,
961+
void *dstPtr,
962+
cl_int value,
963+
size_t size,
964+
cl_uint numEventsInWaitList,
965+
const cl_event *eventWaitList,
966+
cl_event *event);
967+
968+
cl_int clEnqueueMemcpyINTEL(
969+
cl_command_queue commandQueue,
970+
cl_bool blocking,
971+
void *dstPtr,
972+
const void *srcPtr,
973+
size_t size,
974+
cl_uint numEventsInWaitList,
975+
const cl_event *eventWaitList,
976+
cl_event *event);
977+
978+
cl_int clEnqueueMigrateMemINTEL(
979+
cl_command_queue commandQueue,
980+
const void *ptr,
981+
size_t size,
982+
cl_mem_migration_flags flags,
983+
cl_uint numEventsInWaitList,
984+
const cl_event *eventWaitList,
985+
cl_event *event);
986+
987+
cl_int clEnqueueMemAdviseINTEL(
988+
cl_command_queue commandQueue,
989+
const void *ptr,
990+
size_t size,
991+
cl_mem_advice_intel advice,
992+
cl_uint numEventsInWaitList,
993+
const cl_event *eventWaitList,
994+
cl_event *event);
918995
}
919996

920997
// OpenCL 2.2

unit_tests/api/api_tests_wrapper1.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,4 @@
3535
#include "unit_tests/api/cl_enqueue_map_image_tests.inl"
3636
#include "unit_tests/api/cl_enqueue_marker_tests.inl"
3737
#include "unit_tests/api/cl_enqueue_marker_with_wait_list_tests.inl"
38+
#include "unit_tests/api/cl_unified_shared_memory_tests.inl"

unit_tests/api/cl_get_extension_function_address_tests.inl

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,54 @@ TEST_F(clGetExtensionFunctionAddressTests, GivenClGetTracingStateINTELWhenGettin
9292
auto retVal = clGetExtensionFunctionAddress("clGetTracingStateINTEL");
9393
EXPECT_EQ(retVal, reinterpret_cast<void *>(clGetTracingStateINTEL));
9494
}
95+
96+
TEST_F(clGetExtensionFunctionAddressTests, GivenClHostMemAllocINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
97+
auto retVal = clGetExtensionFunctionAddress("clHostMemAllocINTEL");
98+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clHostMemAllocINTEL));
99+
}
100+
101+
TEST_F(clGetExtensionFunctionAddressTests, GivenClDeviceMemAllocINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
102+
auto retVal = clGetExtensionFunctionAddress("clDeviceMemAllocINTEL");
103+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clDeviceMemAllocINTEL));
104+
}
105+
106+
TEST_F(clGetExtensionFunctionAddressTests, GivenClSharedMemAllocINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
107+
auto retVal = clGetExtensionFunctionAddress("clSharedMemAllocINTEL");
108+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clSharedMemAllocINTEL));
109+
}
110+
111+
TEST_F(clGetExtensionFunctionAddressTests, GivenClMemFreeINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
112+
auto retVal = clGetExtensionFunctionAddress("clMemFreeINTEL");
113+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clMemFreeINTEL));
114+
}
115+
116+
TEST_F(clGetExtensionFunctionAddressTests, GivenClGetMemAllocInfoINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
117+
auto retVal = clGetExtensionFunctionAddress("clGetMemAllocInfoINTEL");
118+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clGetMemAllocInfoINTEL));
119+
}
120+
121+
TEST_F(clGetExtensionFunctionAddressTests, GivenClSetKernelArgMemPointerINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
122+
auto retVal = clGetExtensionFunctionAddress("clSetKernelArgMemPointerINTEL");
123+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clSetKernelArgMemPointerINTEL));
124+
}
125+
126+
TEST_F(clGetExtensionFunctionAddressTests, GivenClEnqueueMemsetINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
127+
auto retVal = clGetExtensionFunctionAddress("clEnqueueMemsetINTEL");
128+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clEnqueueMemsetINTEL));
129+
}
130+
131+
TEST_F(clGetExtensionFunctionAddressTests, GivenClEnqueueMemcpyINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
132+
auto retVal = clGetExtensionFunctionAddress("clEnqueueMemcpyINTEL");
133+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clEnqueueMemcpyINTEL));
134+
}
135+
136+
TEST_F(clGetExtensionFunctionAddressTests, GivenClEnqueueMigrateMemINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
137+
auto retVal = clGetExtensionFunctionAddress("clEnqueueMigrateMemINTEL");
138+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clEnqueueMigrateMemINTEL));
139+
}
140+
141+
TEST_F(clGetExtensionFunctionAddressTests, GivenClEnqueueMemAdviseINTELWhenGettingExtensionFunctionThenCorrectAddressIsReturned) {
142+
auto retVal = clGetExtensionFunctionAddress("clEnqueueMemAdviseINTEL");
143+
EXPECT_EQ(retVal, reinterpret_cast<void *>(clEnqueueMemAdviseINTEL));
144+
}
95145
} // namespace ULT
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Copyright (C) 2019 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include "runtime/api/api.h"
9+
10+
using namespace NEO;
11+
12+
TEST(clUnifiedSharedMemoryTests, whenClHostMemAllocINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
13+
cl_int retVal = CL_SUCCESS;
14+
clHostMemAllocINTEL(0, nullptr, 0, 0, &retVal);
15+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
16+
}
17+
18+
TEST(clUnifiedSharedMemoryTests, whenClDeviceMemAllocINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
19+
cl_int retVal = CL_SUCCESS;
20+
clDeviceMemAllocINTEL(0, 0, nullptr, 0, 0, &retVal);
21+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
22+
}
23+
24+
TEST(clUnifiedSharedMemoryTests, whenClSharedMemAllocINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
25+
cl_int retVal = CL_SUCCESS;
26+
clSharedMemAllocINTEL(0, 0, nullptr, 0, 0, &retVal);
27+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
28+
}
29+
30+
TEST(clUnifiedSharedMemoryTests, whenClMemFreeINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
31+
auto retVal = clMemFreeINTEL(0, nullptr);
32+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
33+
}
34+
35+
TEST(clUnifiedSharedMemoryTests, whenClGetMemAllocInfoINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
36+
auto retVal = clGetMemAllocInfoINTEL(0, nullptr, 0, 0, nullptr, nullptr);
37+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
38+
}
39+
40+
TEST(clUnifiedSharedMemoryTests, whenClSetKernelArgMemPointerINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
41+
auto retVal = clSetKernelArgMemPointerINTEL(0, 0, nullptr);
42+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
43+
}
44+
45+
TEST(clUnifiedSharedMemoryTests, whenclEnqueueMemsetINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
46+
auto retVal = clEnqueueMemsetINTEL(0, nullptr, 0, 0, 0, nullptr, nullptr);
47+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
48+
}
49+
50+
TEST(clUnifiedSharedMemoryTests, whenClEnqueueMemcpyINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
51+
auto retVal = clEnqueueMemcpyINTEL(0, 0, nullptr, nullptr, 0, 0, nullptr, nullptr);
52+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
53+
}
54+
55+
TEST(clUnifiedSharedMemoryTests, whenClEnqueueMigrateMemINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
56+
auto retVal = clEnqueueMigrateMemINTEL(0, nullptr, 0, 0, 0, nullptr, nullptr);
57+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
58+
}
59+
60+
TEST(clUnifiedSharedMemoryTests, whenClEnqueueMemAdviseINTELisCalledThenOutOfHostMemoryErrorIsReturned) {
61+
auto retVal = clEnqueueMemAdviseINTEL(0, nullptr, 0, 0, 0, nullptr, nullptr);
62+
EXPECT_EQ(CL_OUT_OF_HOST_MEMORY, retVal);
63+
}

0 commit comments

Comments
 (0)