Skip to content

Commit 61d495c

Browse files
KanclerzPiotrigcbot
authored andcommitted
Change how size in payload_arguments in zebin is reported.
Previously size in payload_arguments reported allocated size that was allways aligned to 4. Even for simple and small data types like char. It prevented neo to compute correct argument size for clSetKernelArg. Now this attribute will report the needed space, but the real allocated space can be bigger due to performance reasons.
1 parent e5edd53 commit 61d495c

File tree

5 files changed

+43
-36
lines changed

5 files changed

+43
-36
lines changed

IGC/Compiler/CISACodeGen/OpenCLKernelCodeGen.cpp

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,7 @@ namespace IGC
917917
case KernelArg::ArgType::IMPLICIT_PRIVATE_BASE:
918918
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
919919
zebin::PreDefinedAttrGetter::ArgType::private_base_stateless,
920-
payloadPosition, kernelArg->getAllocateSize());
920+
payloadPosition, kernelArg->getSize());
921921
break;
922922

923923
case KernelArg::ArgType::IMPLICIT_NUM_GROUPS:
@@ -1022,7 +1022,7 @@ namespace IGC
10221022
// this address will be accessed as a value and cannot be de-referenced
10231023
zebin::zeInfoPayloadArgument& arg = zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
10241024
zebin::PreDefinedAttrGetter::ArgType::buffer_address,
1025-
payloadPosition, kernelArg->getAllocateSize());
1025+
payloadPosition, kernelArg->getSize());
10261026
arg.arg_index = arg_idx;
10271027
break;
10281028
}
@@ -1039,14 +1039,14 @@ namespace IGC
10391039

10401040
zebin::zeInfoPayloadArgument& arg =
10411041
zebin::ZEInfoBuilder::addPayloadArgumentByPointer(m_kernelInfo.m_zePayloadArgs,
1042-
payloadPosition, kernelArg->getAllocateSize(), arg_idx, addr_mode,
1042+
payloadPosition, kernelArg->getSize(), arg_idx, addr_mode,
10431043
addr_space, access_type);
10441044
arg.is_pipe = arg_idx < funcMD.m_OpenCLArgTypeQualifiers.size() && funcMD.m_OpenCLArgTypeQualifiers[arg_idx] == "pipe";
10451045
break;
10461046
}
10471047
case KernelArg::ArgType::PTR_LOCAL:
10481048
zebin::ZEInfoBuilder::addPayloadArgumentByPointer(m_kernelInfo.m_zePayloadArgs,
1049-
payloadPosition, kernelArg->getAllocateSize(),
1049+
payloadPosition, kernelArg->getSize(),
10501050
kernelArg->getAssociatedArgNo(),
10511051
zebin::PreDefinedAttrGetter::ArgAddrMode::slm,
10521052
zebin::PreDefinedAttrGetter::ArgAddrSpace::local,
@@ -1056,7 +1056,7 @@ namespace IGC
10561056
// by value arguments
10571057
case KernelArg::ArgType::CONSTANT_REG:
10581058
zebin::ZEInfoBuilder::addPayloadArgumentByValue(m_kernelInfo.m_zePayloadArgs,
1059-
payloadPosition, kernelArg->getAllocateSize(),
1059+
payloadPosition, kernelArg->getSize(),
10601060
kernelArg->getAssociatedArgNo(), kernelArg->getStructArgOffset(),
10611061
kernelArg->isScalarAsPointer());
10621062
break;
@@ -1097,14 +1097,14 @@ namespace IGC
10971097
zebin::zeInfoPayloadArgument& arg =
10981098
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(
10991099
m_kernelInfo.m_zePayloadArgs, argTy, payloadPosition,
1100-
kernelArg->getAllocateSize());
1100+
kernelArg->getSize());
11011101
arg.addrmode = zebin::PreDefinedAttrGetter::get(zebin::PreDefinedAttrGetter::ArgAddrMode::bindless);
11021102
}
11031103
else
11041104
{
11051105
zebin::ZEInfoBuilder::addPayloadArgumentByPointer(
11061106
m_kernelInfo.m_zePayloadArgs, payloadPosition,
1107-
kernelArg->getAllocateSize(), argidx,
1107+
kernelArg->getSize(), argidx,
11081108
zebin::PreDefinedAttrGetter::ArgAddrMode::bindless,
11091109
std::get<0>(attrs), std::get<1>(attrs));
11101110
}
@@ -1156,7 +1156,7 @@ namespace IGC
11561156
arg_addrmode =
11571157
zebin::PreDefinedAttrGetter::ArgAddrMode::bindless;
11581158
arg_off = payloadPosition;
1159-
arg_size = kernelArg->getAllocateSize();
1159+
arg_size = kernelArg->getSize();
11601160
} else {
11611161
// add bti index for this arg if it's stateful
11621162
SOpenCLKernelInfo::SResourceInfo resInfo = getResourceInfo(arg_idx);
@@ -1190,103 +1190,103 @@ namespace IGC
11901190
zebin::zeInfoPayloadArgument& arg =
11911191
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
11921192
zebin::PreDefinedAttrGetter::ArgType::image_height,
1193-
payloadPosition, kernelArg->getAllocateSize());
1193+
payloadPosition, kernelArg->getSize());
11941194
arg.arg_index = kernelArg->getAssociatedArgNo();
11951195
break;
11961196
}
11971197
case KernelArg::ArgType::IMPLICIT_IMAGE_WIDTH: {
11981198
zebin::zeInfoPayloadArgument& arg =
11991199
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12001200
zebin::PreDefinedAttrGetter::ArgType::image_width,
1201-
payloadPosition, kernelArg->getAllocateSize());
1201+
payloadPosition, kernelArg->getSize());
12021202
arg.arg_index = kernelArg->getAssociatedArgNo();
12031203
break;
12041204
}
12051205
case KernelArg::ArgType::IMPLICIT_IMAGE_DEPTH: {
12061206
zebin::zeInfoPayloadArgument& arg =
12071207
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12081208
zebin::PreDefinedAttrGetter::ArgType::image_depth,
1209-
payloadPosition, kernelArg->getAllocateSize());
1209+
payloadPosition, kernelArg->getSize());
12101210
arg.arg_index = kernelArg->getAssociatedArgNo();
12111211
break;
12121212
}
12131213
case KernelArg::ArgType::IMPLICIT_IMAGE_NUM_MIP_LEVELS: {
12141214
zebin::zeInfoPayloadArgument& arg =
12151215
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12161216
zebin::PreDefinedAttrGetter::ArgType::image_num_mip_levels,
1217-
payloadPosition, kernelArg->getAllocateSize());
1217+
payloadPosition, kernelArg->getSize());
12181218
arg.arg_index = kernelArg->getAssociatedArgNo();
12191219
break;
12201220
}
12211221
case KernelArg::ArgType::IMPLICIT_IMAGE_CHANNEL_DATA_TYPE: {
12221222
zebin::zeInfoPayloadArgument& arg =
12231223
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12241224
zebin::PreDefinedAttrGetter::ArgType::image_channel_data_type,
1225-
payloadPosition, kernelArg->getAllocateSize());
1225+
payloadPosition, kernelArg->getSize());
12261226
arg.arg_index = kernelArg->getAssociatedArgNo();
12271227
break;
12281228
}
12291229
case KernelArg::ArgType::IMPLICIT_IMAGE_CHANNEL_ORDER: {
12301230
zebin::zeInfoPayloadArgument& arg =
12311231
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12321232
zebin::PreDefinedAttrGetter::ArgType::image_channel_order,
1233-
payloadPosition, kernelArg->getAllocateSize());
1233+
payloadPosition, kernelArg->getSize());
12341234
arg.arg_index = kernelArg->getAssociatedArgNo();
12351235
break;
12361236
}
12371237
case KernelArg::ArgType::IMPLICIT_IMAGE_SRGB_CHANNEL_ORDER: {
12381238
zebin::zeInfoPayloadArgument& arg =
12391239
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12401240
zebin::PreDefinedAttrGetter::ArgType::image_srgb_channel_order,
1241-
payloadPosition, kernelArg->getAllocateSize());
1241+
payloadPosition, kernelArg->getSize());
12421242
arg.arg_index = kernelArg->getAssociatedArgNo();
12431243
break;
12441244
}
12451245
case KernelArg::ArgType::IMPLICIT_IMAGE_ARRAY_SIZE: {
12461246
zebin::zeInfoPayloadArgument& arg =
12471247
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12481248
zebin::PreDefinedAttrGetter::ArgType::image_array_size,
1249-
payloadPosition, kernelArg->getAllocateSize());
1249+
payloadPosition, kernelArg->getSize());
12501250
arg.arg_index = kernelArg->getAssociatedArgNo();
12511251
break;
12521252
}
12531253
case KernelArg::ArgType::IMPLICIT_IMAGE_NUM_SAMPLES: {
12541254
zebin::zeInfoPayloadArgument& arg =
12551255
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12561256
zebin::PreDefinedAttrGetter::ArgType::image_num_samples,
1257-
payloadPosition, kernelArg->getAllocateSize());
1257+
payloadPosition, kernelArg->getSize());
12581258
arg.arg_index = kernelArg->getAssociatedArgNo();
12591259
break;
12601260
}
12611261
case KernelArg::ArgType::IMPLICIT_FLAT_IMAGE_BASEOFFSET: {
12621262
zebin::zeInfoPayloadArgument& arg =
12631263
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12641264
zebin::PreDefinedAttrGetter::ArgType::flat_image_baseoffset,
1265-
payloadPosition, kernelArg->getAllocateSize());
1265+
payloadPosition, kernelArg->getSize());
12661266
arg.arg_index = kernelArg->getAssociatedArgNo();
12671267
break;
12681268
}
12691269
case KernelArg::ArgType::IMPLICIT_FLAT_IMAGE_HEIGHT: {
12701270
zebin::zeInfoPayloadArgument& arg =
12711271
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12721272
zebin::PreDefinedAttrGetter::ArgType::flat_image_height,
1273-
payloadPosition, kernelArg->getAllocateSize());
1273+
payloadPosition, kernelArg->getSize());
12741274
arg.arg_index = kernelArg->getAssociatedArgNo();
12751275
break;
12761276
}
12771277
case KernelArg::ArgType::IMPLICIT_FLAT_IMAGE_WIDTH: {
12781278
zebin::zeInfoPayloadArgument& arg =
12791279
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12801280
zebin::PreDefinedAttrGetter::ArgType::flat_image_width,
1281-
payloadPosition, kernelArg->getAllocateSize());
1281+
payloadPosition, kernelArg->getSize());
12821282
arg.arg_index = kernelArg->getAssociatedArgNo();
12831283
break;
12841284
}
12851285
case KernelArg::ArgType::IMPLICIT_FLAT_IMAGE_PITCH: {
12861286
zebin::zeInfoPayloadArgument& arg =
12871287
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
12881288
zebin::PreDefinedAttrGetter::ArgType::flat_image_pitch,
1289-
payloadPosition, kernelArg->getAllocateSize());
1289+
payloadPosition, kernelArg->getSize());
12901290
arg.arg_index = kernelArg->getAssociatedArgNo();
12911291
break;
12921292
}
@@ -1305,7 +1305,7 @@ namespace IGC
13051305
arg_addrmode =
13061306
zebin::PreDefinedAttrGetter::ArgAddrMode::bindless;
13071307
arg_off = payloadPosition;
1308-
arg_size = kernelArg->getAllocateSize();
1308+
arg_size = kernelArg->getSize();
13091309
}
13101310

13111311
int arg_idx = kernelArg->getAssociatedArgNo();
@@ -1321,23 +1321,23 @@ namespace IGC
13211321
zebin::zeInfoPayloadArgument& arg =
13221322
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
13231323
zebin::PreDefinedAttrGetter::ArgType::sampler_address,
1324-
payloadPosition, kernelArg->getAllocateSize());
1324+
payloadPosition, kernelArg->getSize());
13251325
arg.arg_index = kernelArg->getAssociatedArgNo();
13261326
break;
13271327
}
13281328
case KernelArg::ArgType::IMPLICIT_SAMPLER_NORMALIZED: {
13291329
zebin::zeInfoPayloadArgument& arg =
13301330
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
13311331
zebin::PreDefinedAttrGetter::ArgType::sampler_normalized,
1332-
payloadPosition, kernelArg->getAllocateSize());
1332+
payloadPosition, kernelArg->getSize());
13331333
arg.arg_index = kernelArg->getAssociatedArgNo();
13341334
break;
13351335
}
13361336
case KernelArg::ArgType::IMPLICIT_SAMPLER_SNAP_WA: {
13371337
zebin::zeInfoPayloadArgument& arg =
13381338
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
13391339
zebin::PreDefinedAttrGetter::ArgType::sampler_snap_wa,
1340-
payloadPosition, kernelArg->getAllocateSize());
1340+
payloadPosition, kernelArg->getSize());
13411341
arg.arg_index = kernelArg->getAssociatedArgNo();
13421342
break;
13431343
}
@@ -1351,45 +1351,45 @@ namespace IGC
13511351
IGC_ASSERT_MESSAGE(it != resAllocMD.inlineSamplersMD.end(), "Inline sampler isn't found in metadata.");
13521352
zebin::ZEInfoBuilder::addPayloadArgumentImplicitInlineSampler(
13531353
m_kernelInfo.m_zePayloadArgs, zebin::PreDefinedAttrGetter::ArgType::inline_sampler, payloadPosition,
1354-
kernelArg->getAllocateSize(), it->index);
1354+
kernelArg->getSize(), it->index);
13551355
break;
13561356
}
13571357

13581358
case KernelArg::ArgType::IMPLICIT_BUFFER_OFFSET: {
13591359
zebin::zeInfoPayloadArgument& arg = zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
13601360
zebin::PreDefinedAttrGetter::ArgType::buffer_offset,
1361-
payloadPosition, kernelArg->getAllocateSize());
1361+
payloadPosition, kernelArg->getSize());
13621362
arg.arg_index = kernelArg->getAssociatedArgNo();
13631363
break;
13641364
}
13651365
case KernelArg::ArgType::IMPLICIT_PRINTF_BUFFER:
13661366
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
13671367
zebin::PreDefinedAttrGetter::ArgType::printf_buffer,
1368-
payloadPosition, kernelArg->getAllocateSize());
1368+
payloadPosition, kernelArg->getSize());
13691369
break;
13701370

13711371
case KernelArg::ArgType::IMPLICIT_ARG_BUFFER:
13721372
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
13731373
zebin::PreDefinedAttrGetter::ArgType::implicit_arg_buffer,
1374-
payloadPosition, kernelArg->getAllocateSize());
1374+
payloadPosition, kernelArg->getSize());
13751375
break;
13761376

13771377
case KernelArg::ArgType::IMPLICIT_SYNC_BUFFER:
13781378
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
13791379
zebin::PreDefinedAttrGetter::ArgType::sync_buffer,
1380-
payloadPosition, kernelArg->getAllocateSize());
1380+
payloadPosition, kernelArg->getSize());
13811381
break;
13821382

13831383
case KernelArg::ArgType::IMPLICIT_RT_GLOBAL_BUFFER:
13841384
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
13851385
zebin::PreDefinedAttrGetter::ArgType::rt_global_buffer,
1386-
payloadPosition, kernelArg->getAllocateSize());
1386+
payloadPosition, kernelArg->getSize());
13871387
break;
13881388

13891389
case KernelArg::ArgType::IMPLICIT_ASSERT_BUFFER:
13901390
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
13911391
zebin::PreDefinedAttrGetter::ArgType::assert_buffer,
1392-
payloadPosition, kernelArg->getAllocateSize());
1392+
payloadPosition, kernelArg->getSize());
13931393
break;
13941394

13951395
case KernelArg::ArgType::IMPLICIT_CONSTANT_BASE:
@@ -1411,7 +1411,7 @@ namespace IGC
14111411
zebin::zeInfoPayloadArgument& arg =
14121412
zebin::ZEInfoBuilder::addPayloadArgumentImplicit(
14131413
m_kernelInfo.m_zePayloadArgs, zeArgType, payloadPosition,
1414-
kernelArg->getAllocateSize(),
1414+
kernelArg->getSize(),
14151415
kernelArg->isScalarAsPointer());
14161416
SOpenCLKernelInfo::SResourceInfo resInfo =
14171417
getResourceInfo(kernelArg->getAssociatedArgNo());
@@ -1444,7 +1444,7 @@ namespace IGC
14441444
case KernelArg::ArgType::IMPLICIT_BUFFER_SIZE: {
14451445
zebin::zeInfoPayloadArgument& arg = zebin::ZEInfoBuilder::addPayloadArgumentImplicit(m_kernelInfo.m_zePayloadArgs,
14461446
zebin::PreDefinedAttrGetter::ArgType::buffer_size,
1447-
payloadPosition, kernelArg->getAllocateSize());
1447+
payloadPosition, kernelArg->getSize());
14481448
arg.arg_index = kernelArg->getAssociatedArgNo();
14491449
break;
14501450
}

IGC/Compiler/Optimizer/OpenCLPasses/KernelArgs/KernelArgs.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,11 @@ unsigned int KernelArg::getAllocateSize() const
436436
return int_cast<unsigned int>(llvm::alignTo(m_allocateSize, iOpenCL::DATA_PARAMETER_DATA_SIZE));
437437
}
438438

439+
unsigned int KernelArg::getSize() const
440+
{
441+
return m_allocateSize;
442+
}
443+
439444
unsigned int KernelArg::getElemAllocateSize() const
440445
{
441446
return m_elemAllocateSize;

IGC/Compiler/Optimizer/OpenCLPasses/KernelArgs/KernelArgs.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ namespace IGC
217217
AccessQual getAccessQual() const;
218218
unsigned int getNumComponents() const;
219219
unsigned int getAllocateSize() const;
220+
unsigned int getSize() const;
220221
unsigned int getElemAllocateSize() const;
221222
size_t getAlignment() const;
222223
bool isConstantBuf() const;

IGC/ZEBinWriter/zebin/spec/version.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ SPDX-License-Identifier: MIT
77
============================= end_copyright_notice ==========================-->
88

99
# ZEBIN Version
10-
Version 1.50
10+
Version 1.51
1111
=======
1212

1313
## Versioning
@@ -16,6 +16,7 @@ Format: \<_Major number_\>.\<_Minor number_\>
1616
- Minor number: Increase when backward-compatible features are added. For example, add new attributes.
1717

1818
## Change Note
19+
- **Version 1.51**: Attribute size in payload_arguments now shows the the number of bytes needed for allocating the argument. It is no longer aligned to 4.
1920
- **Version 1.50**: Add generateLocalID flag.
2021
- **Version 1.49**: Internal changes.
2122
- **Version 1.48**: Add relocation type "R_SYM_ADDR_16" and update supported relocation types.

IGC/ZEBinWriter/zebin/spec/zeinfo.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ If an attribute is **Required**, it must be present in payload arguments. If it'
170170
| ------ | ------ | ------ | ------ | ----- |
171171
| arg_type | <argument_type> | Required | | |
172172
| offset | int32 | Required | | |
173-
| size | int32 | Required | | |
173+
| size | int32 | Required | | The number of bytes needed for allocating the argument. Allocated size is aligned to 4. |
174174
| arg_index | int32 | Optional | -1 | Present when arg_type is "arg_bypointer", "arg_byvalue", "buffer_offset", or other implicit *image_* and sampler_* types. The value is the index of the associated kernel argument. |
175175
| addrmode | <memory_addressing_mode> | Optional | | Present when arg_type is "arg_bypointer", or when arg_type is "const_base", "global_base", "inline_sampler" |
176176
| addrspace | <address_space> | Optional | | Present when arg_type is "arg_bypointer" or "inline_sampler" |

0 commit comments

Comments
 (0)