Skip to content

Commit df52c01

Browse files
committed
Rework program and kernel implementation
1 parent 0ca7527 commit df52c01

File tree

8 files changed

+51
-322
lines changed

8 files changed

+51
-322
lines changed

offload/liboffload/API/Enqueue.td

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ def : Function {
9797
let params = [
9898
Param<"ol_queue_handle_t", "Queue", "handle of the queue", PARAM_IN>,
9999
Param<"ol_kernel_handle_t", "Kernel", "handle of the kernel", PARAM_IN>,
100+
Param<"const void*", "ArgumentsData", "pointer to the kernel argument struct", PARAM_IN>,
101+
Param<"size_t", "ArgumentsSize", "size of the kernel argument struct", PARAM_IN>,
100102
Param<"const ol_kernel_launch_size_args_t*", "LaunchSizeArgs", "pointer to the struct containing launch size parameters", PARAM_IN>,
101103
Param<"ol_event_handle_t*", "EventOut", "optional recorded event for the enqueued operation", PARAM_OUT_OPTIONAL>
102104
];

offload/liboffload/API/Kernel.td

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -43,34 +43,3 @@ def : Function {
4343
];
4444
let returns = [];
4545
}
46-
47-
def : Function {
48-
let name = "olSetKernelArgValue";
49-
let desc = "Set the value of a single kernel argument at the given index";
50-
let details = [
51-
"The implementation will construct and lay out the backing storage for the kernel arguments."
52-
"The effects of calls to this function on a kernel are lost if olSetKernelArgsData is called."
53-
];
54-
let params = [
55-
Param<"ol_kernel_handle_t", "Kernel", "handle of the kernel", PARAM_IN>,
56-
Param<"uint32_t", "Index", "index of the argument", PARAM_IN>,
57-
Param<"size_t", "Size", "size of the argument data", PARAM_IN>,
58-
Param<"void*", "ArgData", "pointer to the argument data", PARAM_IN>
59-
];
60-
let returns = [];
61-
}
62-
63-
def : Function {
64-
let name = "olSetKernelArgsData";
65-
let desc = "Set the entire argument data for a kernel";
66-
let details = [
67-
"Previous calls to olSetKernelArgValue on the same kernel are invalidated by this function"
68-
"The data pointed to by ArgsData is assumed to be laid out correctly according to the requirements of the backend API"
69-
];
70-
let params = [
71-
Param<"ol_kernel_handle_t", "Kernel", "handle of the kernel", PARAM_IN>,
72-
Param<"void*", "ArgsData", "pointer to the argument data", PARAM_IN>,
73-
Param<"size_t", "ArgsDataSize", "size of the argument data", PARAM_IN>
74-
];
75-
let returns = [];
76-
}

offload/liboffload/include/generated/OffloadAPI.h

Lines changed: 8 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -815,12 +815,17 @@ typedef struct ol_kernel_launch_size_args_t {
815815
/// + `NULL == Queue`
816816
/// + `NULL == Kernel`
817817
/// - ::OL_ERRC_INVALID_NULL_POINTER
818+
/// + `NULL == ArgumentsData`
818819
/// + `NULL == LaunchSizeArgs`
819820
OL_APIEXPORT ol_result_t OL_APICALL olEnqueueKernelLaunch(
820821
// [in] handle of the queue
821822
ol_queue_handle_t Queue,
822823
// [in] handle of the kernel
823824
ol_kernel_handle_t Kernel,
825+
// [in] pointer to the kernel argument struct
826+
const void *ArgumentsData,
827+
// [in] size of the kernel argument struct
828+
size_t ArgumentsSize,
824829
// [in] pointer to the struct containing launch size parameters
825830
const ol_kernel_launch_size_args_t *LaunchSizeArgs,
826831
// [out][optional] optional recorded event for the enqueued operation
@@ -942,56 +947,6 @@ OL_APIEXPORT ol_result_t OL_APICALL olReleaseKernel(
942947
// [in] handle of the kernel
943948
ol_kernel_handle_t Kernel);
944949

945-
///////////////////////////////////////////////////////////////////////////////
946-
/// @brief Set the value of a single kernel argument at the given index
947-
///
948-
/// @details
949-
/// - The implementation will construct and lay out the backing storage for
950-
/// the kernel arguments.The effects of calls to this function on a kernel
951-
/// are lost if olSetKernelArgsData is called.
952-
///
953-
/// @returns
954-
/// - ::OL_RESULT_SUCCESS
955-
/// - ::OL_ERRC_UNINITIALIZED
956-
/// - ::OL_ERRC_DEVICE_LOST
957-
/// - ::OL_ERRC_INVALID_NULL_HANDLE
958-
/// + `NULL == Kernel`
959-
/// - ::OL_ERRC_INVALID_NULL_POINTER
960-
/// + `NULL == ArgData`
961-
OL_APIEXPORT ol_result_t OL_APICALL olSetKernelArgValue(
962-
// [in] handle of the kernel
963-
ol_kernel_handle_t Kernel,
964-
// [in] index of the argument
965-
uint32_t Index,
966-
// [in] size of the argument data
967-
size_t Size,
968-
// [in] pointer to the argument data
969-
void *ArgData);
970-
971-
///////////////////////////////////////////////////////////////////////////////
972-
/// @brief Set the entire argument data for a kernel
973-
///
974-
/// @details
975-
/// - Previous calls to olSetKernelArgValue on the same kernel are
976-
/// invalidated by this functionThe data pointed to by ArgsData is assumed to
977-
/// be laid out correctly according to the requirements of the backend API
978-
///
979-
/// @returns
980-
/// - ::OL_RESULT_SUCCESS
981-
/// - ::OL_ERRC_UNINITIALIZED
982-
/// - ::OL_ERRC_DEVICE_LOST
983-
/// - ::OL_ERRC_INVALID_NULL_HANDLE
984-
/// + `NULL == Kernel`
985-
/// - ::OL_ERRC_INVALID_NULL_POINTER
986-
/// + `NULL == ArgsData`
987-
OL_APIEXPORT ol_result_t OL_APICALL olSetKernelArgsData(
988-
// [in] handle of the kernel
989-
ol_kernel_handle_t Kernel,
990-
// [in] pointer to the argument data
991-
void *ArgsData,
992-
// [in] size of the argument data
993-
size_t ArgsDataSize);
994-
995950
///////////////////////////////////////////////////////////////////////////////
996951
/// @brief Function parameters for olGetPlatform
997952
/// @details Each entry is a pointer to the parameter passed to the function;
@@ -1191,6 +1146,8 @@ typedef struct ol_enqueue_memcpy_dto_d_params_t {
11911146
typedef struct ol_enqueue_kernel_launch_params_t {
11921147
ol_queue_handle_t *pQueue;
11931148
ol_kernel_handle_t *pKernel;
1149+
const void **pArgumentsData;
1150+
size_t *pArgumentsSize;
11941151
const ol_kernel_launch_size_args_t **pLaunchSizeArgs;
11951152
ol_event_handle_t **pEventOut;
11961153
} ol_enqueue_kernel_launch_params_t;
@@ -1242,25 +1199,6 @@ typedef struct ol_release_kernel_params_t {
12421199
ol_kernel_handle_t *pKernel;
12431200
} ol_release_kernel_params_t;
12441201

1245-
///////////////////////////////////////////////////////////////////////////////
1246-
/// @brief Function parameters for olSetKernelArgValue
1247-
/// @details Each entry is a pointer to the parameter passed to the function;
1248-
typedef struct ol_set_kernel_arg_value_params_t {
1249-
ol_kernel_handle_t *pKernel;
1250-
uint32_t *pIndex;
1251-
size_t *pSize;
1252-
void **pArgData;
1253-
} ol_set_kernel_arg_value_params_t;
1254-
1255-
///////////////////////////////////////////////////////////////////////////////
1256-
/// @brief Function parameters for olSetKernelArgsData
1257-
/// @details Each entry is a pointer to the parameter passed to the function;
1258-
typedef struct ol_set_kernel_args_data_params_t {
1259-
ol_kernel_handle_t *pKernel;
1260-
void **pArgsData;
1261-
size_t *pArgsDataSize;
1262-
} ol_set_kernel_args_data_params_t;
1263-
12641202
///////////////////////////////////////////////////////////////////////////////
12651203
/// @brief Variant of olInit that also sets source code location information
12661204
/// @details See also ::olInit
@@ -1447,6 +1385,7 @@ OL_APIEXPORT ol_result_t OL_APICALL olEnqueueMemcpyDtoDWithCodeLoc(
14471385
/// @details See also ::olEnqueueKernelLaunch
14481386
OL_APIEXPORT ol_result_t OL_APICALL olEnqueueKernelLaunchWithCodeLoc(
14491387
ol_queue_handle_t Queue, ol_kernel_handle_t Kernel,
1388+
const void *ArgumentsData, size_t ArgumentsSize,
14501389
const ol_kernel_launch_size_args_t *LaunchSizeArgs,
14511390
ol_event_handle_t *EventOut, ol_code_location_t *CodeLocation);
14521391

@@ -1494,22 +1433,6 @@ OL_APIEXPORT ol_result_t OL_APICALL olRetainKernelWithCodeLoc(
14941433
OL_APIEXPORT ol_result_t OL_APICALL olReleaseKernelWithCodeLoc(
14951434
ol_kernel_handle_t Kernel, ol_code_location_t *CodeLocation);
14961435

1497-
///////////////////////////////////////////////////////////////////////////////
1498-
/// @brief Variant of olSetKernelArgValue that also sets source code location
1499-
/// information
1500-
/// @details See also ::olSetKernelArgValue
1501-
OL_APIEXPORT ol_result_t OL_APICALL olSetKernelArgValueWithCodeLoc(
1502-
ol_kernel_handle_t Kernel, uint32_t Index, size_t Size, void *ArgData,
1503-
ol_code_location_t *CodeLocation);
1504-
1505-
///////////////////////////////////////////////////////////////////////////////
1506-
/// @brief Variant of olSetKernelArgsData that also sets source code location
1507-
/// information
1508-
/// @details See also ::olSetKernelArgsData
1509-
OL_APIEXPORT ol_result_t OL_APICALL olSetKernelArgsDataWithCodeLoc(
1510-
ol_kernel_handle_t Kernel, void *ArgsData, size_t ArgsDataSize,
1511-
ol_code_location_t *CodeLocation);
1512-
15131436
#if defined(__cplusplus)
15141437
} // extern "C"
15151438
#endif

offload/liboffload/include/generated/OffloadEntryPoints.inc

Lines changed: 15 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,7 @@ ol_result_t olEnqueueMemcpyDtoDWithCodeLoc(ol_queue_handle_t Queue,
10771077
///////////////////////////////////////////////////////////////////////////////
10781078
ol_impl_result_t
10791079
olEnqueueKernelLaunch_val(ol_queue_handle_t Queue, ol_kernel_handle_t Kernel,
1080+
const void *ArgumentsData, size_t ArgumentsSize,
10801081
const ol_kernel_launch_size_args_t *LaunchSizeArgs,
10811082
ol_event_handle_t *EventOut) {
10821083
if (true /*enableParameterValidation*/) {
@@ -1088,26 +1089,33 @@ olEnqueueKernelLaunch_val(ol_queue_handle_t Queue, ol_kernel_handle_t Kernel,
10881089
return OL_ERRC_INVALID_NULL_HANDLE;
10891090
}
10901091

1092+
if (NULL == ArgumentsData) {
1093+
return OL_ERRC_INVALID_NULL_POINTER;
1094+
}
1095+
10911096
if (NULL == LaunchSizeArgs) {
10921097
return OL_ERRC_INVALID_NULL_POINTER;
10931098
}
10941099
}
10951100

1096-
return olEnqueueKernelLaunch_impl(Queue, Kernel, LaunchSizeArgs, EventOut);
1101+
return olEnqueueKernelLaunch_impl(Queue, Kernel, ArgumentsData, ArgumentsSize,
1102+
LaunchSizeArgs, EventOut);
10971103
}
10981104
OL_APIEXPORT ol_result_t OL_APICALL
10991105
olEnqueueKernelLaunch(ol_queue_handle_t Queue, ol_kernel_handle_t Kernel,
1106+
const void *ArgumentsData, size_t ArgumentsSize,
11001107
const ol_kernel_launch_size_args_t *LaunchSizeArgs,
11011108
ol_event_handle_t *EventOut) {
11021109
if (offloadConfig().TracingEnabled) {
11031110
std::cerr << "---> olEnqueueKernelLaunch";
11041111
}
11051112

1106-
ol_result_t Result =
1107-
olEnqueueKernelLaunch_val(Queue, Kernel, LaunchSizeArgs, EventOut);
1113+
ol_result_t Result = olEnqueueKernelLaunch_val(
1114+
Queue, Kernel, ArgumentsData, ArgumentsSize, LaunchSizeArgs, EventOut);
11081115

11091116
if (offloadConfig().TracingEnabled) {
1110-
ol_enqueue_kernel_launch_params_t Params = {&Queue, &Kernel,
1117+
ol_enqueue_kernel_launch_params_t Params = {&Queue, &Kernel,
1118+
&ArgumentsData, &ArgumentsSize,
11111119
&LaunchSizeArgs, &EventOut};
11121120
std::cerr << "(" << &Params << ")";
11131121
std::cerr << "-> " << Result << "\n";
@@ -1119,11 +1127,12 @@ olEnqueueKernelLaunch(ol_queue_handle_t Queue, ol_kernel_handle_t Kernel,
11191127
}
11201128
ol_result_t olEnqueueKernelLaunchWithCodeLoc(
11211129
ol_queue_handle_t Queue, ol_kernel_handle_t Kernel,
1130+
const void *ArgumentsData, size_t ArgumentsSize,
11221131
const ol_kernel_launch_size_args_t *LaunchSizeArgs,
11231132
ol_event_handle_t *EventOut, ol_code_location_t *CodeLocation) {
11241133
currentCodeLocation() = CodeLocation;
1125-
ol_result_t Result =
1126-
olEnqueueKernelLaunch(Queue, Kernel, LaunchSizeArgs, EventOut);
1134+
ol_result_t Result = olEnqueueKernelLaunch(
1135+
Queue, Kernel, ArgumentsData, ArgumentsSize, LaunchSizeArgs, EventOut);
11271136

11281137
currentCodeLocation() = nullptr;
11291138
return Result;
@@ -1376,93 +1385,3 @@ ol_result_t olReleaseKernelWithCodeLoc(ol_kernel_handle_t Kernel,
13761385
currentCodeLocation() = nullptr;
13771386
return Result;
13781387
}
1379-
1380-
///////////////////////////////////////////////////////////////////////////////
1381-
ol_impl_result_t olSetKernelArgValue_val(ol_kernel_handle_t Kernel,
1382-
uint32_t Index, size_t Size,
1383-
void *ArgData) {
1384-
if (true /*enableParameterValidation*/) {
1385-
if (NULL == Kernel) {
1386-
return OL_ERRC_INVALID_NULL_HANDLE;
1387-
}
1388-
1389-
if (NULL == ArgData) {
1390-
return OL_ERRC_INVALID_NULL_POINTER;
1391-
}
1392-
}
1393-
1394-
return olSetKernelArgValue_impl(Kernel, Index, Size, ArgData);
1395-
}
1396-
OL_APIEXPORT ol_result_t OL_APICALL olSetKernelArgValue(
1397-
ol_kernel_handle_t Kernel, uint32_t Index, size_t Size, void *ArgData) {
1398-
if (offloadConfig().TracingEnabled) {
1399-
std::cerr << "---> olSetKernelArgValue";
1400-
}
1401-
1402-
ol_result_t Result = olSetKernelArgValue_val(Kernel, Index, Size, ArgData);
1403-
1404-
if (offloadConfig().TracingEnabled) {
1405-
ol_set_kernel_arg_value_params_t Params = {&Kernel, &Index, &Size,
1406-
&ArgData};
1407-
std::cerr << "(" << &Params << ")";
1408-
std::cerr << "-> " << Result << "\n";
1409-
if (Result && Result->Details) {
1410-
std::cerr << " *Error Details* " << Result->Details << " \n";
1411-
}
1412-
}
1413-
return Result;
1414-
}
1415-
ol_result_t olSetKernelArgValueWithCodeLoc(ol_kernel_handle_t Kernel,
1416-
uint32_t Index, size_t Size,
1417-
void *ArgData,
1418-
ol_code_location_t *CodeLocation) {
1419-
currentCodeLocation() = CodeLocation;
1420-
ol_result_t Result = olSetKernelArgValue(Kernel, Index, Size, ArgData);
1421-
1422-
currentCodeLocation() = nullptr;
1423-
return Result;
1424-
}
1425-
1426-
///////////////////////////////////////////////////////////////////////////////
1427-
ol_impl_result_t olSetKernelArgsData_val(ol_kernel_handle_t Kernel,
1428-
void *ArgsData, size_t ArgsDataSize) {
1429-
if (true /*enableParameterValidation*/) {
1430-
if (NULL == Kernel) {
1431-
return OL_ERRC_INVALID_NULL_HANDLE;
1432-
}
1433-
1434-
if (NULL == ArgsData) {
1435-
return OL_ERRC_INVALID_NULL_POINTER;
1436-
}
1437-
}
1438-
1439-
return olSetKernelArgsData_impl(Kernel, ArgsData, ArgsDataSize);
1440-
}
1441-
OL_APIEXPORT ol_result_t OL_APICALL olSetKernelArgsData(
1442-
ol_kernel_handle_t Kernel, void *ArgsData, size_t ArgsDataSize) {
1443-
if (offloadConfig().TracingEnabled) {
1444-
std::cerr << "---> olSetKernelArgsData";
1445-
}
1446-
1447-
ol_result_t Result = olSetKernelArgsData_val(Kernel, ArgsData, ArgsDataSize);
1448-
1449-
if (offloadConfig().TracingEnabled) {
1450-
ol_set_kernel_args_data_params_t Params = {&Kernel, &ArgsData,
1451-
&ArgsDataSize};
1452-
std::cerr << "(" << &Params << ")";
1453-
std::cerr << "-> " << Result << "\n";
1454-
if (Result && Result->Details) {
1455-
std::cerr << " *Error Details* " << Result->Details << " \n";
1456-
}
1457-
}
1458-
return Result;
1459-
}
1460-
ol_result_t olSetKernelArgsDataWithCodeLoc(ol_kernel_handle_t Kernel,
1461-
void *ArgsData, size_t ArgsDataSize,
1462-
ol_code_location_t *CodeLocation) {
1463-
currentCodeLocation() = CodeLocation;
1464-
ol_result_t Result = olSetKernelArgsData(Kernel, ArgsData, ArgsDataSize);
1465-
1466-
currentCodeLocation() = nullptr;
1467-
return Result;
1468-
}

offload/liboffload/include/generated/OffloadFuncs.inc

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@ OFFLOAD_FUNC(olReleaseProgram)
4141
OFFLOAD_FUNC(olCreateKernel)
4242
OFFLOAD_FUNC(olRetainKernel)
4343
OFFLOAD_FUNC(olReleaseKernel)
44-
OFFLOAD_FUNC(olSetKernelArgValue)
45-
OFFLOAD_FUNC(olSetKernelArgsData)
4644
OFFLOAD_FUNC(olInitWithCodeLoc)
4745
OFFLOAD_FUNC(olShutDownWithCodeLoc)
4846
OFFLOAD_FUNC(olGetPlatformWithCodeLoc)
@@ -74,7 +72,5 @@ OFFLOAD_FUNC(olReleaseProgramWithCodeLoc)
7472
OFFLOAD_FUNC(olCreateKernelWithCodeLoc)
7573
OFFLOAD_FUNC(olRetainKernelWithCodeLoc)
7674
OFFLOAD_FUNC(olReleaseKernelWithCodeLoc)
77-
OFFLOAD_FUNC(olSetKernelArgValueWithCodeLoc)
78-
OFFLOAD_FUNC(olSetKernelArgsDataWithCodeLoc)
7975

8076
#undef OFFLOAD_FUNC

offload/liboffload/include/generated/OffloadImplFuncDecls.inc

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ ol_impl_result_t olEnqueueMemcpyDtoD_impl(ol_queue_handle_t Queue,
8383

8484
ol_impl_result_t
8585
olEnqueueKernelLaunch_impl(ol_queue_handle_t Queue, ol_kernel_handle_t Kernel,
86+
const void *ArgumentsData, size_t ArgumentsSize,
8687
const ol_kernel_launch_size_args_t *LaunchSizeArgs,
8788
ol_event_handle_t *EventOut);
8889

@@ -101,10 +102,3 @@ ol_impl_result_t olCreateKernel_impl(ol_program_handle_t Program,
101102
ol_impl_result_t olRetainKernel_impl(ol_kernel_handle_t Kernel);
102103

103104
ol_impl_result_t olReleaseKernel_impl(ol_kernel_handle_t Kernel);
104-
105-
ol_impl_result_t olSetKernelArgValue_impl(ol_kernel_handle_t Kernel,
106-
uint32_t Index, size_t Size,
107-
void *ArgData);
108-
109-
ol_impl_result_t olSetKernelArgsData_impl(ol_kernel_handle_t Kernel,
110-
void *ArgsData, size_t ArgsDataSize);

0 commit comments

Comments
 (0)