@@ -30,9 +30,21 @@ template <class To, class From> To cast(From value) {
30
30
return (To)(value);
31
31
}
32
32
33
+ // Names of USM functions that are queried from OpenCL
34
+ const char clHostMemAllocName[] = " clHostMemAllocINTEL" ;
35
+ const char clDeviceMemAllocName[] = " clDeviceMemAllocINTEL" ;
36
+ const char clSharedMemAllocName[] = " clSharedMemAllocINTEL" ;
37
+ const char clMemFreeName[] = " clMemFreeINTEL" ;
38
+ const char clSetKernelArgMemPointerName[] = " clSetKernelArgMemPointerINTEL" ;
39
+ const char clEnqueueMemsetName[] = " clEnqueueMemsetINTEL" ;
40
+ const char clEnqueueMemcpyName[] = " clEnqueueMemcpyINTEL" ;
41
+ const char clEnqueueMigrateMemName[] = " clEnqueueMigrateMemINTEL" ;
42
+ const char clEnqueueMemAdviseName[] = " clEnqueueMemAdviseINTEL" ;
43
+ const char clGetMemAllocInfoName[] = " clGetMemAllocInfoINTEL" ;
44
+
33
45
// USM helper function to get an extension function pointer
34
- template <typename T>
35
- pi_result getExtFuncFromContext (pi_context context, const char *func , T *fptr) {
46
+ template <const char *FuncName, typename T>
47
+ static pi_result getExtFuncFromContext (pi_context context, T *fptr) {
36
48
// TODO
37
49
// Potentially redo caching as PI interface changes.
38
50
thread_local static std::map<pi_context, T> FuncPtrs;
@@ -68,11 +80,11 @@ pi_result getExtFuncFromContext(pi_context context, const char *func, T *fptr) {
68
80
return PI_INVALID_CONTEXT;
69
81
}
70
82
71
- T FuncPtr = (T) clGetExtensionFunctionAddressForPlatform (curPlatform,
72
- func);
73
- if (!FuncPtr) {
83
+ T FuncPtr =
84
+ (T)clGetExtensionFunctionAddressForPlatform (curPlatform, FuncName);
85
+
86
+ if (!FuncPtr)
74
87
return PI_INVALID_VALUE;
75
- }
76
88
77
89
*fptr = FuncPtr;
78
90
FuncPtrs[context] = FuncPtr;
@@ -98,24 +110,24 @@ static pi_result USMSetIndirectAccess(pi_kernel kernel) {
98
110
return cast<pi_result>(CLErr);
99
111
}
100
112
101
- getExtFuncFromContext<clHostMemAllocINTEL_fn>(cast<pi_context>(CLContext),
102
- " clHostMemAllocINTEL " , &HFunc);
113
+ getExtFuncFromContext<clHostMemAllocName, clHostMemAllocINTEL_fn>(
114
+ cast<pi_context>(CLContext) , &HFunc);
103
115
if (HFunc) {
104
116
clSetKernelExecInfo (cast<cl_kernel>(kernel),
105
117
CL_KERNEL_EXEC_INFO_INDIRECT_HOST_ACCESS_INTEL,
106
118
sizeof (cl_bool), &TrueVal);
107
119
}
108
120
109
- getExtFuncFromContext<clDeviceMemAllocINTEL_fn>(
110
- cast<pi_context>(CLContext), " clDeviceMemAllocINTEL " , &DFunc);
121
+ getExtFuncFromContext<clDeviceMemAllocName, clDeviceMemAllocINTEL_fn>(
122
+ cast<pi_context>(CLContext), &DFunc);
111
123
if (DFunc) {
112
124
clSetKernelExecInfo (cast<cl_kernel>(kernel),
113
125
CL_KERNEL_EXEC_INFO_INDIRECT_DEVICE_ACCESS_INTEL,
114
126
sizeof (cl_bool), &TrueVal);
115
127
}
116
128
117
- getExtFuncFromContext<clSharedMemAllocINTEL_fn>(
118
- cast<pi_context>(CLContext), " clSharedMemAllocINTEL " , &SFunc);
129
+ getExtFuncFromContext<clSharedMemAllocName, clSharedMemAllocINTEL_fn>(
130
+ cast<pi_context>(CLContext), &SFunc);
119
131
if (SFunc) {
120
132
clSetKernelExecInfo (cast<cl_kernel>(kernel),
121
133
CL_KERNEL_EXEC_INFO_INDIRECT_SHARED_ACCESS_INTEL,
@@ -569,8 +581,8 @@ pi_result OCL(piextUSMHostAlloc)(void **result_ptr, pi_context context,
569
581
570
582
// First we need to look up the function pointer
571
583
clHostMemAllocINTEL_fn FuncPtr = nullptr ;
572
- RetVal = getExtFuncFromContext<clHostMemAllocINTEL_fn>(
573
- context, " clHostMemAllocINTEL " , &FuncPtr);
584
+ RetVal = getExtFuncFromContext<clHostMemAllocName, clHostMemAllocINTEL_fn>(
585
+ context, &FuncPtr);
574
586
575
587
if (FuncPtr) {
576
588
Ptr = FuncPtr (cast<cl_context>(context),
@@ -601,8 +613,9 @@ pi_result OCL(piextUSMDeviceAlloc)(void **result_ptr, pi_context context,
601
613
602
614
// First we need to look up the function pointer
603
615
clDeviceMemAllocINTEL_fn FuncPtr = nullptr ;
604
- RetVal = getExtFuncFromContext<clDeviceMemAllocINTEL_fn>(
605
- context, " clDeviceMemAllocINTEL" , &FuncPtr);
616
+ RetVal =
617
+ getExtFuncFromContext<clDeviceMemAllocName, clDeviceMemAllocINTEL_fn>(
618
+ context, &FuncPtr);
606
619
607
620
if (FuncPtr) {
608
621
Ptr = FuncPtr (cast<cl_context>(context), cast<cl_device_id>(device),
@@ -633,8 +646,9 @@ pi_result OCL(piextUSMSharedAlloc)(void **result_ptr, pi_context context,
633
646
634
647
// First we need to look up the function pointer
635
648
clSharedMemAllocINTEL_fn FuncPtr = nullptr ;
636
- RetVal = getExtFuncFromContext<clSharedMemAllocINTEL_fn>(
637
- context, " clSharedMemAllocINTEL" , &FuncPtr);
649
+ RetVal =
650
+ getExtFuncFromContext<clSharedMemAllocName, clSharedMemAllocINTEL_fn>(
651
+ context, &FuncPtr);
638
652
639
653
if (FuncPtr) {
640
654
Ptr = FuncPtr (cast<cl_context>(context), cast<cl_device_id>(device),
@@ -655,8 +669,8 @@ pi_result OCL(piextUSMFree)(pi_context context, void *ptr) {
655
669
656
670
clMemFreeINTEL_fn FuncPtr = nullptr ;
657
671
pi_result RetVal = PI_INVALID_OPERATION;
658
- RetVal = getExtFuncFromContext<clMemFreeINTEL_fn>(context, " clMemFreeINTEL " ,
659
- &FuncPtr);
672
+ RetVal = getExtFuncFromContext<clMemFreeName, clMemFreeINTEL_fn>(context,
673
+ &FuncPtr);
660
674
661
675
if (FuncPtr) {
662
676
RetVal = cast<pi_result>(FuncPtr (cast<cl_context>(context), ptr));
@@ -687,8 +701,9 @@ pi_result OCL(piextKernelSetArgPointer)(pi_kernel kernel, pi_uint32 arg_index,
687
701
}
688
702
689
703
clSetKernelArgMemPointerINTEL_fn FuncPtr = nullptr ;
690
- pi_result RetVal = getExtFuncFromContext<clSetKernelArgMemPointerINTEL_fn>(
691
- cast<pi_context>(CLContext), " clSetKernelArgMemPointerINTEL" , &FuncPtr);
704
+ pi_result RetVal = getExtFuncFromContext<clSetKernelArgMemPointerName,
705
+ clSetKernelArgMemPointerINTEL_fn>(
706
+ cast<pi_context>(CLContext), &FuncPtr);
692
707
693
708
if (FuncPtr) {
694
709
// OpenCL passes pointers by value not by reference
@@ -727,8 +742,9 @@ pi_result OCL(piextUSMEnqueueMemset)(pi_queue queue, void *ptr, pi_int32 value,
727
742
}
728
743
729
744
clEnqueueMemsetINTEL_fn FuncPtr = nullptr ;
730
- pi_result RetVal = getExtFuncFromContext<clEnqueueMemsetINTEL_fn>(
731
- cast<pi_context>(CLContext), " clEnqueueMemsetINTEL" , &FuncPtr);
745
+ pi_result RetVal =
746
+ getExtFuncFromContext<clEnqueueMemsetName, clEnqueueMemsetINTEL_fn>(
747
+ cast<pi_context>(CLContext), &FuncPtr);
732
748
733
749
if (FuncPtr) {
734
750
RetVal = cast<pi_result>(FuncPtr (cast<cl_command_queue>(queue), ptr, value,
@@ -767,8 +783,9 @@ pi_result OCL(piextUSMEnqueueMemcpy)(pi_queue queue, pi_bool blocking,
767
783
}
768
784
769
785
clEnqueueMemcpyINTEL_fn FuncPtr = nullptr ;
770
- pi_result RetVal = getExtFuncFromContext<clEnqueueMemcpyINTEL_fn>(
771
- cast<pi_context>(CLContext), " clEnqueueMemcpyINTEL" , &FuncPtr);
786
+ pi_result RetVal =
787
+ getExtFuncFromContext<clEnqueueMemcpyName, clEnqueueMemcpyINTEL_fn>(
788
+ cast<pi_context>(CLContext), &FuncPtr);
772
789
773
790
if (FuncPtr) {
774
791
RetVal = cast<pi_result>(
@@ -893,8 +910,9 @@ pi_result OCL(piextUSMGetMemAllocInfo)(pi_context context, const void *ptr,
893
910
size_t *param_value_size_ret) {
894
911
895
912
clGetMemAllocInfoINTEL_fn FuncPtr = nullptr ;
896
- pi_result RetVal = getExtFuncFromContext<clGetMemAllocInfoINTEL_fn>(
897
- context, " clGetMemAllocInfoINTEL" , &FuncPtr);
913
+ pi_result RetVal =
914
+ getExtFuncFromContext<clGetMemAllocInfoName, clGetMemAllocInfoINTEL_fn>(
915
+ context, &FuncPtr);
898
916
899
917
if (FuncPtr) {
900
918
RetVal = cast<pi_result>(FuncPtr (cast<cl_context>(context), ptr, param_name,
0 commit comments