Changeset 4950 in CLRX


Ignore:
Timestamp:
Sep 7, 2019, 4:12:50 PM (2 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCmBin: Change generateROCmMetadataMsgPack definition. Add stuff to generateROCmMetadataMsgPack.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/CLRX/amdbin/ROCmBinaries.h

    r4947 r4950  
    538538
    539539void generateROCmMetadataMsgPack(const ROCmMetadata& mdInfo,
    540                     const ROCmKernelConfig** kconfigs, std::vector<cxbyte>& output);
     540                    const ROCmKernelDescriptor** kdescs, std::vector<cxbyte>& output);
    541541
    542542void parseROCmMetadata(size_t metadataSize, const char* metadata,
  • CLRadeonExtender/trunk/amdbin/ROCmMetadataMP.cpp

    r4949 r4950  
    716716        sizeof(rocmValueTypeNamesMap) / sizeof(std::pair<const char*, ROCmValueType>);
    717717
    718 static const char* rocmAddrSpaceTypesTbl[] =
    719 { "Private", "Global", "Constant", "Local", "Generic", "Region" };
     718static const char* rocmMPAddrSpaceTypesTbl[] =
     719{ "private", "global", "constant", "local", "generic", "region" };
    720720
    721721static void parseROCmMetadataKernelArgMsgPack(MsgPackArrayParser& argsParser,
     
    752752                size_t aspaceIndex = 0;
    753753                for (; aspaceIndex < 6; aspaceIndex++)
    754                     if (::strcasecmp(rocmAddrSpaceTypesTbl[aspaceIndex],
     754                    if (::strcasecmp(rocmMPAddrSpaceTypesTbl[aspaceIndex],
    755755                                aspace.c_str())==0)
    756756                        break;
     
    980980            mainMap.skipValue();
    981981    }
     982}
     983
     984void ROCmMetadata::parseMsgPack(size_t metadataSize, const cxbyte* metadata)
     985{
     986    parseROCmMetadataMsgPack(metadataSize, metadata, *this);
    982987}
    983988
     
    12451250}
    12461251
    1247 
    1248 void ROCmMetadata::parseMsgPack(size_t metadataSize, const cxbyte* metadata)
    1249 {
    1250     parseROCmMetadataMsgPack(metadataSize, metadata, *this);
    1251 }
     1252static const char* rocmMPValueKindNames[] =
     1253{
     1254    "by_value", "global_buffer", "dynamic_shared_pointer", "sampler", "image", "pipe",
     1255    "queue", "hidden_Global_offset_x", "hidden_global_offset_y",
     1256    "hidden_global_offset_z", "hidden_none", "hidden_printf_buffer",
     1257    "hidden_default_queue", "hidden_completion_action", "hidden_multigrid_sync_arg"
     1258};
     1259
     1260static const char* rocmMPValueTypeNames[] =
     1261{
     1262    "struct", "i8", "u8", "i16", "u16", "f16", "i32", "u32", "f32", "i64", "u64", "f64"
     1263};
     1264
     1265
    12521266
    12531267void CLRX::generateROCmMetadataMsgPack(const ROCmMetadata& mdInfo,
    1254                     const ROCmKernelConfig** kconfigs, std::vector<cxbyte>& output)
    1255 {
    1256 }
     1268                    const ROCmKernelDescriptor** kdescs, std::vector<cxbyte>& output)
     1269{
     1270    output.clear();
     1271    MsgPackArrayWriter kernelsWriter(mdInfo.kernels.size(), output);
     1272    for (size_t i = 0; i < mdInfo.kernels.size(); i++)
     1273    {
     1274        const ROCmKernelMetadata& kernelMD = mdInfo.kernels[i];
     1275        const size_t mapSize = 15 + (!kernelMD.deviceEnqueueSymbol.empty()) +
     1276                (kernelMD.reqdWorkGroupSize[0]!=0 ||
     1277                 kernelMD.reqdWorkGroupSize[1]!=0 ||
     1278                 kernelMD.reqdWorkGroupSize[2]!=0) +
     1279                (!kernelMD.vecTypeHint.empty()) +
     1280                (kernelMD.workGroupSizeHint[0]!=0 ||
     1281                 kernelMD.workGroupSizeHint[1]!=0 ||
     1282                 kernelMD.workGroupSizeHint[2]!=0);
     1283        MsgPackMapWriter kwriter = kernelsWriter.putMap(mapSize);
     1284        kwriter.putKeyString(".args");
     1285        // kernel arguments
     1286        {
     1287        MsgPackArrayWriter kargsWriter = kwriter.putValueArray(kernelMD.argInfos.size());
     1288        for (const ROCmKernelArgInfo& arg: kernelMD.argInfos)
     1289        {
     1290            const bool hasAccess = (arg.accessQual != ROCmAccessQual::DEFAULT &&
     1291                     (arg.valueKind==ROCmValueKind::IMAGE ||
     1292                      arg.valueKind==ROCmValueKind::PIPE));
     1293            const bool hasActualAccess = (
     1294                     arg.actualAccessQual != ROCmAccessQual::DEFAULT &&
     1295                     (arg.valueKind==ROCmValueKind::GLOBAL_BUFFER ||
     1296                      arg.valueKind==ROCmValueKind::IMAGE ||
     1297                      arg.valueKind==ROCmValueKind::PIPE));
     1298            const bool hasAddrSpace = (arg.addressSpace != ROCmAddressSpace::NONE &&
     1299                     (arg.valueKind==ROCmValueKind::GLOBAL_BUFFER ||
     1300                      arg.valueKind==ROCmValueKind::DYN_SHARED_PTR));
     1301            const size_t amapSize = 4 + (arg.isConst) + (arg.isPipe) +
     1302                    (arg.isRestrict) + (arg.isVolatile) +
     1303                    (!arg.name.empty()) + (!arg.typeName.empty()) +
     1304                     hasAddrSpace + hasAccess + hasActualAccess + (arg.pointeeAlign!=0);
     1305            MsgPackMapWriter argWriter = kargsWriter.putMap(amapSize);
     1306            if (hasAccess)
     1307            {
     1308                if (arg.accessQual > ROCmAccessQual::MAX_VALUE)
     1309                    throw BinGenException("Unknown AccessQualifier");
     1310                argWriter.putKeyString(".access");
     1311                argWriter.putValueString(
     1312                        rocmMPAccessQualifierTbl[cxuint(arg.accessQual)-1]);
     1313            }
     1314            if (hasActualAccess)
     1315            {
     1316                if (arg.actualAccessQual > ROCmAccessQual::MAX_VALUE)
     1317                    throw BinGenException("Unknown ActualAccessQualifier");
     1318                argWriter.putKeyString(".actual_access");
     1319                argWriter.putValueString(
     1320                        rocmMPAccessQualifierTbl[cxuint(arg.actualAccessQual)-1]);
     1321            }
     1322            if (hasAddrSpace)
     1323            {
     1324                if (arg.addressSpace > ROCmAddressSpace::MAX_VALUE ||
     1325                    arg.addressSpace == ROCmAddressSpace::NONE)
     1326                    throw BinGenException("Unknown AddressSpace");
     1327                argWriter.putKeyString(".address_space");
     1328                argWriter.putValueString(
     1329                        rocmMPAddrSpaceTypesTbl[cxuint(arg.addressSpace)-1]);
     1330            }
     1331            if (arg.isConst)
     1332            {
     1333                argWriter.putKeyString(".is_const");
     1334                argWriter.putValueBool(true);
     1335            }
     1336            if (arg.isPipe)
     1337            {
     1338                argWriter.putKeyString(".is_pipe");
     1339                argWriter.putValueBool(true);
     1340            }
     1341            if (arg.isRestrict)
     1342            {
     1343                argWriter.putKeyString(".is_restrict");
     1344                argWriter.putValueBool(true);
     1345            }
     1346            if (arg.isVolatile)
     1347            {
     1348                argWriter.putKeyString(".is_volatile");
     1349                argWriter.putValueBool(true);
     1350            }
     1351            if (!arg.name.empty())
     1352            {
     1353                argWriter.putKeyString(".name");
     1354                argWriter.putValueString(arg.name.c_str());
     1355            }
     1356            argWriter.putKeyString(".offset");
     1357            argWriter.putValueUInt(arg.offset);
     1358            if (arg.pointeeAlign!=0)
     1359            {
     1360                argWriter.putKeyString(".pointee_align");
     1361                argWriter.putValueUInt(arg.pointeeAlign);
     1362            }
     1363            argWriter.putKeyString(".size");
     1364            argWriter.putValueUInt(arg.size);
     1365            if (!arg.typeName.empty())
     1366            {
     1367                argWriter.putKeyString(".type_name");
     1368                argWriter.putValueString(arg.typeName.c_str());
     1369            }
     1370           
     1371            if (arg.valueKind > ROCmValueKind::MAX_VALUE)
     1372                throw BinGenException("Unknown ValueKind");
     1373            argWriter.putKeyString(".value_kind");
     1374            argWriter.putValueString(rocmMPValueKindNames[cxuint(arg.valueKind)]);
     1375           
     1376            if (arg.valueType > ROCmValueType::MAX_VALUE)
     1377                throw BinGenException("Unknown ValueType");
     1378            argWriter.putKeyString(".value_type");
     1379            argWriter.putValueString(rocmMPValueTypeNames[cxuint(arg.valueType)]);
     1380        }
     1381        } //
     1382    }
     1383}
Note: See TracChangeset for help on using the changeset viewer.