Changeset 4959 in CLRX


Ignore:
Timestamp:
Sep 12, 2019, 11:24:58 AM (6 days ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCmBin: First testcase for generateROCmMetadataMsgPack. Store whole main object of the metadata.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdbin/ROCmMetadataMP.cpp

    r4955 r4959  
    12141214{
    12151215    "by_value", "global_buffer", "dynamic_shared_pointer", "sampler", "image", "pipe",
    1216     "queue", "hidden_Global_offset_x", "hidden_global_offset_y",
     1216    "queue", "hidden_global_offset_x", "hidden_global_offset_y",
    12171217    "hidden_global_offset_z", "hidden_none", "hidden_printf_buffer",
    12181218    "hidden_default_queue", "hidden_completion_action", "hidden_multigrid_sync_arg"
     
    12311231{ return value!=BINGEN64_NOTSUPPLIED && value!=BINGEN64_DEFAULT; }
    12321232
     1233static std::string escapePrintfFormat(const std::string& fmt)
     1234{
     1235    std::string out;
     1236    out.reserve(fmt.size());
     1237    for (char c: fmt)
     1238        if (c!=':')
     1239            out.push_back(c);
     1240        else
     1241            out += "\\72";
     1242    return out;
     1243}
     1244
    12331245void CLRX::generateROCmMetadataMsgPack(const ROCmMetadata& mdInfo,
    12341246                    const ROCmKernelDescriptor** kdescs, std::vector<cxbyte>& output)
    12351247{
    12361248    output.clear();
    1237     MsgPackArrayWriter kernelsWriter(mdInfo.kernels.size(), output);
     1249    MsgPackMapWriter writer(2 + (!mdInfo.printfInfos.empty()), output);
     1250    writer.putKeyString("amdhsa.kernels");
     1251    MsgPackArrayWriter kernelsWriter = writer.putValueArray(mdInfo.kernels.size());
    12381252    for (size_t i = 0; i < mdInfo.kernels.size(); i++)
    12391253    {
     
    13241338            argWriter.putKeyString(".offset");
    13251339            argWriter.putValueUInt(arg.offset);
     1340            argWriter.putKeyString(".size");
     1341            argWriter.putValueUInt(arg.size);
    13261342            if (arg.pointeeAlign!=0)
    13271343            {
     
    13291345                argWriter.putValueUInt(arg.pointeeAlign);
    13301346            }
    1331             argWriter.putKeyString(".size");
    1332             argWriter.putValueUInt(arg.size);
    13331347            if (!arg.typeName.empty())
    13341348            {
     
    13981412        kwriter.putKeyString(".sgpr_spill_count");
    13991413        kwriter.putValueUInt(kernelMD.spilledSgprs);
     1414        kwriter.putKeyString(".symbol");
     1415        kwriter.putValueString(kernelMD.symbolName.c_str());
    14001416        if (!kernelMD.vecTypeHint.empty())
    14011417        {
     
    14191435        }
    14201436    }
    1421 }
     1437    if (!mdInfo.printfInfos.empty())
     1438    {
     1439        writer.putKeyString("amdhsa.printf");
     1440        MsgPackArrayWriter pwriter = writer.putValueArray(mdInfo.printfInfos.size());
     1441        std::unordered_set<cxuint> printfIds;
     1442        for (const ROCmPrintfInfo& printfInfo: mdInfo.printfInfos)
     1443            if (printfInfo.id!=BINGEN_DEFAULT)
     1444                if (!printfIds.insert(printfInfo.id).second)
     1445                    throw BinGenException("Duplicate of printf id");
     1446        // printfs
     1447        uint32_t freePrintfId = 1;
     1448        char numBuf[24];
     1449        for (const ROCmPrintfInfo& printfInfo: mdInfo.printfInfos)
     1450        {
     1451            // skip used printfids;
     1452            uint32_t printfId = printfInfo.id;
     1453            if (printfId == BINGEN_DEFAULT)
     1454            {
     1455                // skip used printfids
     1456                for (; printfIds.find(freePrintfId) != printfIds.end(); ++freePrintfId);
     1457                // just use this free printfid
     1458                printfId = freePrintfId++;
     1459            }
     1460           
     1461            std::string prStr;
     1462            itocstrCStyle(printfId, numBuf, 24);
     1463            prStr += numBuf;
     1464            prStr += ':';
     1465            itocstrCStyle(printfInfo.argSizes.size(), numBuf, 24);
     1466            prStr += numBuf;
     1467            prStr += ':';
     1468            for (size_t argSize: printfInfo.argSizes)
     1469            {
     1470                itocstrCStyle(argSize, numBuf, 24);
     1471                prStr += numBuf;
     1472                prStr += ':';
     1473            }
     1474            // printf format
     1475            std::string escaped = escapePrintfFormat(printfInfo.format.c_str());
     1476            prStr += escaped;
     1477            pwriter.putString(prStr.c_str());
     1478        }
     1479    }
     1480    writer.putKeyString("amdhsa.version");
     1481    MsgPackArrayWriter vwriter = writer.putValueArray(2);
     1482    vwriter.putUInt(mdInfo.version[0]);
     1483    vwriter.putUInt(mdInfo.version[1]);
     1484}
  • CLRadeonExtender/trunk/tests/amdbin/ROCmMsgPackWrite.cpp

    r4957 r4959  
    228228}
    229229
     230struct ROCmMsgPackMDTestCase
     231{
     232    ROCmMetadata input;
     233    Array<ROCmKernelDescriptor> inputKDescs;
     234    size_t expectedSize;
     235    const cxbyte* expected;      // input metadata string
     236    bool good;
     237    const char* error;
     238};
     239
     240static const cxbyte rocmMsgPackInput0[] =
     241{
     242    0x83,
     243    0xae, 'a', 'm', 'd', 'h', 's', 'a', '.', 'k', 'e', 'r', 'n', 'e', 'l', 's',
     244    0x91,
     245    // kernel A
     246    0xde, 0x00, 0x13,
     247    0xa5, '.', 'a', 'r', 'g', 's',
     248    // kernel args
     249    0xdc, 0x00, 0x16,
     250    0x88,   // 0
     251        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     252            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
     253        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
     254        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '0',
     255        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x00,
     256        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     257        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     258            0xa7, 'i', 'n', 't', '8', '_', 't', '*',
     259        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     260            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
     261        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa2, 'i', '8',
     262    0x88,   // 1
     263        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     264            0xa8, 'c', 'o', 'n', 's', 't', 'a', 'n', 't',
     265        0xac, '.', 'i', 's', '_', 'v', 'o', 'l', 'a', 't', 'i', 'l', 'e', 0xc3,
     266        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '1',
     267        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x08,
     268        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     269        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     270            0xa6, 'u', 'c', 'h', 'a', 'r', '*',
     271        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     272            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
     273        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa2, 'u', '8',
     274    0x88,   // 2
     275        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     276            0xa7, 'p', 'r', 'i', 'v', 'a', 't', 'e',
     277        0xac, '.', 'i', 's', '_', 'r', 'e', 's', 't', 'r', 'i', 'c', 't', 0xc3,
     278        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '2',
     279        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x10,
     280        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     281        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     282            0xa6, 'i', 'n', 't', '1', '6', '*',
     283        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     284            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
     285        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '1', '6',
     286    0x88,   // 3
     287        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     288            0xa5, 'l', 'o', 'c', 'a', 'l',
     289        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
     290        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '3',
     291        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x18,
     292        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     293        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     294            0xa9, 'u', 'i', 'n', 't', '1', '6', '_', 't', '*',
     295        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     296            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
     297        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'u', '1', '6',
     298    0x89,   // 4
     299        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     300            0xa5, 'l', 'o', 'c', 'a', 'l',
     301        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
     302        0xa5, '.', 'n', 'a', 'm', 'e', 0xa4, 'i', 'n', '3', 'x',
     303        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x20,
     304        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     305        0xae, '.', 'p', 'o', 'i', 'n', 't', 'e', 'e', '_', 'a', 'l', 'i', 'g', 'n', 0x08,
     306        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     307            0xa5, 'h', 'a', 'l', 'f', '*',
     308        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     309            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
     310        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'f', '1', '6',
     311    0x88,   // 5
     312        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     313            0xa7, 'g', 'e', 'n', 'e', 'r', 'i', 'c',
     314        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
     315        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '4',
     316        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x28,
     317        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     318        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     319            0xa6, 'i', 'n', 't', '3', '2', '*',
     320        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     321            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
     322        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '3', '2',
     323    0x88,   // 6
     324        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     325            0xa6, 'r', 'e', 'g', 'i', 'o', 'n',
     326        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
     327        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '5',
     328        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x30,
     329        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     330        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     331            0xa7, 'u', 'i', 'n', 't', '3', '2', '*',
     332        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     333            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
     334        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'u', '3', '2',
     335    0x87,   // 7
     336        0xa9, '.', 'i', 's', '_', 'c', 'o', 'n', 's', 't', 0xc3,
     337        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '6',
     338        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x38,
     339        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     340        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     341            0xa6, 'f', 'l', 'o', 'a', 't', '*',
     342        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     343            0xa5, 'q', 'u', 'e', 'u', 'e',
     344        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'f', '3', '2',
     345    0x88,   // 8
     346        0xa7, '.', 'a', 'c', 'c', 'e', 's', 's',
     347            0xa9, 'r', 'e', 'a', 'd', '_', 'o', 'n', 'l', 'y',
     348        0xa8, '.', 'i', 's', '_', 'p', 'i', 'p', 'e', 0xc3,
     349        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '7',
     350        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x40,
     351        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     352        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     353            0xa5, 'l', 'o', 'n', 'g', '*',
     354        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     355            0xa4, 'p', 'i', 'p', 'e',
     356        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
     357    0x87,   // 9
     358        0xa7, '.', 'a', 'c', 'c', 'e', 's', 's',
     359            0xaa, 'r', 'e', 'a', 'd', '_', 'w', 'r', 'i', 't', 'e',
     360        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '8',
     361        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x48,
     362        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     363        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     364            0xa9, 'i', 'm', 'a', 'g', 'e', '2', 'd', '_', 't',
     365        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     366            0xa5, 'i', 'm', 'a', 'g', 'e',
     367        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'u', '6', '4',
     368    0x86,   // 10
     369        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', '9',
     370        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x50,
     371        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     372        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     373            0xa9, 's', 'a', 'm', 'p', 'l', 'e', 'r', '_', 't',
     374        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     375            0xa7, 's', 'a', 'm', 'p', 'l', 'e', 'r',
     376        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'f', '6', '4',
     377    0x87,   // 11
     378        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     379            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
     380        0xa5, '.', 'n', 'a', 'm', 'e', 0xa4, 'i', 'n', '1', '0',
     381        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x58,
     382        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     383        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     384            0xa6, 's', 't', 'r', 'u', 'c', '*',
     385        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     386            0xb6, 'd', 'y', 'n', 'a', 'm', 'i', 'c', '_', 's', 'h', 'a', 'r', 'e', 'd', '_',
     387                'p', 'o', 'i', 'n', 't', 'e', 'r',
     388        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e',
     389            0xa6, 's', 't', 'r', 'u', 'c', 't',
     390    0x86,   // 12
     391        0xa5, '.', 'n', 'a', 'm', 'e', 0xa1, 'n',
     392        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x60,
     393        0xa5, '.', 's', 'i', 'z', 'e', 0x04,
     394        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e', 0xa3, 'i', 'n', 't',
     395        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     396            0xa8, 'b', 'y', '_', 'v', 'a', 'l', 'u', 'e',
     397        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '3', '2',
     398    0x84,   // 13
     399        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x70,
     400        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     401        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     402            0xb6, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_',
     403            'o', 'f', 'f', 's', 'e', 't', '_', 'x',
     404        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
     405    0x84,   // 14
     406        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0x78,
     407        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     408        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     409            0xb6, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_',
     410            'o', 'f', 'f', 's', 'e', 't', '_', 'y',
     411        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
     412    0x84,   // 15
     413        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0x80,
     414        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     415        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     416            0xb6, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_',
     417            'o', 'f', 'f', 's', 'e', 't', '_', 'z',
     418        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
     419    0x84,   // 16
     420        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0x88,
     421        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     422        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     423            0xb4, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'p', 'r', 'i', 'n', 't', 'f', '_',
     424            'b', 'u', 'f', 'f', 'e', 'r',
     425        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
     426    0x84,   // 17
     427        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0x90,
     428        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     429        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     430            0xb4, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'd', 'e', 'f', 'a', 'u', 'l', 't',
     431            '_', 'q', 'u', 'e', 'u', 'e',
     432        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
     433    0x84,   // 18
     434        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0x98,
     435        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     436        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     437            0xb8, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'c', 'o', 'm', 'p', 'l', 'e', 't',
     438            'i', 'o', 'n', '_', 'a', 'c', 't', 'i', 'o', 'n',
     439        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
     440    0x84,   // 19
     441        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0xa0,
     442        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     443        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     444            0xb9, 'h', 'i', 'd', 'd', 'e', 'n', '_', 'm', 'u', 'l', 't', 'i', 'g', 'r',
     445            'i', 'd', '_', 's', 'y', 'n', 'c', '_', 'a', 'r', 'g',
     446        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa3, 'i', '6', '4',
     447    0x88,   // 20
     448        0xae, '.', 'a', 'c', 't', 'u', 'a', 'l', '_', 'a', 'c', 'c', 'e', 's', 's',
     449            0xaa, 'w', 'r', 'i', 't', 'e', '_', 'o', 'n', 'l', 'y',
     450        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     451            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
     452        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'x', '0',
     453        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0xa8,
     454        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     455        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     456            0xa7, 'i', 'n', 't', '8', '_', 't', '*',
     457        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     458            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
     459        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa2, 'i', '8',
     460    0x88,   // 21
     461        0xae, '.', 'a', 'c', 't', 'u', 'a', 'l', '_', 'a', 'c', 'c', 'e', 's', 's',
     462            0xaa, 'r', 'e', 'a', 'd', '_', 'w', 'r', 'i', 't', 'e',
     463        0xae, '.', 'a', 'd', 'd', 'r', 'e', 's', 's', '_', 's', 'p', 'a', 'c', 'e',
     464            0xa6, 'g', 'l', 'o', 'b', 'a', 'l',
     465        0xa5, '.', 'n', 'a', 'm', 'e', 0xa3, 'i', 'x', '1',
     466        0xa7, '.', 'o', 'f', 'f', 's', 'e', 't', 0xcc, 0xb0,
     467        0xa5, '.', 's', 'i', 'z', 'e', 0x08,
     468        0xaa, '.', 't', 'y', 'p', 'e', '_', 'n', 'a', 'm', 'e',
     469            0xa7, 'i', 'n', 't', '8', '_', 't', '*',
     470        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 'k', 'i', 'n', 'd',
     471            0xad, 'g', 'l', 'o', 'b', 'a', 'l', '_', 'b', 'u', 'f', 'f', 'e', 'r',
     472        0xab, '.', 'v', 'a', 'l', 'u', 'e', '_', 't', 'y', 'p', 'e', 0xa2, 'i', '8',
     473    0xb6, '.', 'd', 'e', 'v', 'i', 'c', 'e', '_', 'e', 'n', 'q', 'u', 'e', 'u', 'e', '_',
     474        's', 'y', 'm', 'b', 'o', 'l', 0xa4, 'a', 'b', 'c', 'd',
     475    0xb9, '.', 'g', 'r', 'o', 'u', 'p', '_', 's', 'e', 'g', 'm', 'e', 'n', 't', '_',
     476        'f', 'i', 'x', 'e', 'd', '_', 's', 'i', 'z', 'e', 0x48,
     477    0xb6, '.', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's', 'e', 'g', 'm', 'e', 'n', 't',
     478        '_', 'a', 'l', 'i', 'g', 'n', 0x10,
     479    0xb5, '.', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's', 'e', 'g', 'm', 'e', 'n', 't',
     480        '_', 's', 'i', 'z', 'e', 0xcc, 0xc0,
     481    0xa9, '.', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e',
     482        0xa8, 'O', 'p', 'e', 'n', 'C', 'L', ' ', 'C',
     483    0xb1, '.', 'l', 'a', 'n', 'g', 'u', 'a', 'g', 'e', '_',
     484        'v', 'e', 'r', 's', 'i', 'o', 'n', 0x92, 0x03, 0x02,
     485    0xb8, '.', 'm', 'a', 'x', '_', 'f', 'l', 'a', 't', '_', 'w', 'o', 'r', 'k',
     486        'g', 'r', 'o', 'u', 'p', '_', 's', 'i', 'z', 'e', 0xcd, 0x01, 0x8c,
     487    0xa5, '.', 'n', 'a', 'm', 'e', 0xa8, 't', 'e', 's', 't', 'e', 'r', 'e', 'k',
     488    0xbb, '.', 'p', 'r', 'i', 'v', 'a', 't', 'e', '_', 's', 'e', 'g', 'm', 'e', 'n', 't',
     489        '_', 'f', 'i', 'x', 'e', 'd', '_', 's', 'i', 'z', 'e', 0x20,
     490    0xb4, '.', 'r', 'e', 'q', 'd', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_',
     491            's', 'i', 'z', 'e', 0x93, 0x06, 0x09, 0x11,
     492    0xab, '.', 's', 'g', 'p', 'r', '_', 'c', 'o', 'u', 'n', 't', 0x2b,
     493    0xb1, '.', 's', 'g', 'p', 'r', '_', 's', 'p', 'i', 'l', 'l', '_',
     494            'c', 'o', 'u', 'n', 't', 0x05,
     495    0xa7, '.', 's', 'y', 'm', 'b', 'o', 'l',
     496        0xab, 't', 'e', 's', 't', 'e', 'r', 'e', 'k', '.', 'k', 'd',
     497    0xae, '.', 'v', 'e', 'c', '_', 't', 'y', 'p', 'e', '_', 'h', 'i', 'n', 't',
     498        0xa5, 'i', 'n', 't', '1', '6',
     499    0xab, '.', 'v', 'g', 'p', 'r', '_', 'c', 'o', 'u', 'n', 't', 0x09,
     500    0xb1, '.', 'v', 'g', 'p', 'r', '_', 's', 'p', 'i', 'l', 'l', '_',
     501            'c', 'o', 'u', 'n', 't', 0x08,
     502    0xaf, '.', 'w', 'a', 'v', 'e', 'f', 'r', 'o', 'n', 't', '_', 's', 'i', 'z', 'e', 0x40,
     503    0xb4, '.', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_', 's', 'i', 'z', 'e', '_',
     504            'h', 'i', 'n', 't', 0x93, 0x04, 0x0b, 0x05,
     505    // printf infos
     506    0xad, 'a', 'm', 'd', 'h', 's', 'a', '.', 'p', 'r', 'i', 'n', 't', 'f', 0x92,
     507        0xd9, 0x20, '2', ':', '4', ':', '4', ':', '4', ':', '4', ':', '4', ':','i', '=',
     508        '%', 'd', ',', 'a', '=', '%', 'f', ',', 'b', '=', '%', 'f', ',',
     509        'c', '=', '%', 'f', 0x0a,
     510        0xaf, '1', ':', '1', ':', '4', ':', 'i', 'n', 'd', 'e', 'x', 'a', '%', 'd', 0x0a,
     511    // version
     512    0xae, 'a', 'm', 'd', 'h', 's', 'a', '.', 'v', 'e', 'r', 's', 'i', 'o', 'n',
     513        0x92, 0x27, 0x34
     514};
     515
     516static const ROCmMsgPackMDTestCase rocmMsgPackMDTestCases[] =
     517{
     518    {   // testcase 0
     519        {
     520            { 39, 52 },
     521            {   // printfInfos
     522                { 2, { 4, 4, 4, 4 }, "i=%d,a=%f,b=%f,c=%f\n" },
     523                { 1, { 4 }, "indexa%d\n" },
     524            },
     525            {   // kernels
     526                { // kernel 1
     527                    "testerek", "testerek.kd",
     528                    {   // args
     529                        { "in0", "int8_t*", 8, 0, 0, ROCmValueKind::GLOBAL_BUFFER,
     530                            ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
     531                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     532                            true, false, false, false },
     533                        { "in1", "uchar*", 8, 8, 0, ROCmValueKind::GLOBAL_BUFFER,
     534                            ROCmValueType::UINT8, ROCmAddressSpace::CONSTANT,
     535                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     536                            false, false, true, false },
     537                        { "in2", "int16*", 8, 16, 0, ROCmValueKind::GLOBAL_BUFFER,
     538                            ROCmValueType::INT16, ROCmAddressSpace::PRIVATE,
     539                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     540                            false, true, false, false },
     541                        { "in3", "uint16_t*", 8, 24, 0, ROCmValueKind::GLOBAL_BUFFER,
     542                            ROCmValueType::UINT16, ROCmAddressSpace::LOCAL,
     543                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     544                            true, false, false, false },
     545                        { "in3x", "half*", 8, 32, 8, ROCmValueKind::GLOBAL_BUFFER,
     546                            ROCmValueType::FLOAT16, ROCmAddressSpace::LOCAL,
     547                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     548                            true, false, false, false },
     549                        { "in4", "int32*", 8, 40, 0, ROCmValueKind::GLOBAL_BUFFER,
     550                            ROCmValueType::INT32, ROCmAddressSpace::GENERIC,
     551                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     552                            true, false, false, false },
     553                        { "in5", "uint32*", 8, 48, 0, ROCmValueKind::GLOBAL_BUFFER,
     554                            ROCmValueType::UINT32, ROCmAddressSpace::REGION,
     555                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     556                            true, false, false, false },
     557                        { "in6", "float*", 8, 56, 0, ROCmValueKind::QUEUE,
     558                            ROCmValueType::FLOAT32, ROCmAddressSpace::GLOBAL,
     559                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     560                            true, false, false, false },
     561                        { "in7", "long*", 8, 64, 0, ROCmValueKind::PIPE,
     562                            ROCmValueType::INT64, ROCmAddressSpace::GLOBAL,
     563                            ROCmAccessQual::READ_ONLY, ROCmAccessQual::DEFAULT,
     564                            false, false, false, true },
     565                        { "in8", "image2d_t", 8, 72, 0, ROCmValueKind::IMAGE,
     566                            ROCmValueType::UINT64, ROCmAddressSpace::GLOBAL,
     567                            ROCmAccessQual::READ_WRITE, ROCmAccessQual::DEFAULT,
     568                            false, false, false, false },
     569                        { "in9", "sampler_t", 8, 80, 0, ROCmValueKind::SAMPLER,
     570                            ROCmValueType::FLOAT64, ROCmAddressSpace::GLOBAL,
     571                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     572                            false, false, false, false },
     573                        { "in10", "struc*", 8, 88, 0, ROCmValueKind::DYN_SHARED_PTR,
     574                            ROCmValueType::STRUCTURE, ROCmAddressSpace::GLOBAL,
     575                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     576                            false, false, false, false },
     577                        { "n", "int", 4, 96, 0, ROCmValueKind::BY_VALUE,
     578                            ROCmValueType::INT32, ROCmAddressSpace::NONE,
     579                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     580                            false, false, false, false },
     581                        { "", "", 8, 112, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_X,
     582                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
     583                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     584                            false, false, false, false },
     585                        { "", "", 8, 120, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Y,
     586                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
     587                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     588                            false, false, false, false },
     589                        { "", "", 8, 128, 0, ROCmValueKind::HIDDEN_GLOBAL_OFFSET_Z,
     590                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
     591                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     592                            false, false, false, false },
     593                        { "", "", 8, 136, 0, ROCmValueKind::HIDDEN_PRINTF_BUFFER,
     594                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
     595                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     596                            false, false, false, false },
     597                        { "", "", 8, 144, 0, ROCmValueKind::HIDDEN_DEFAULT_QUEUE,
     598                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
     599                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     600                            false, false, false, false },
     601                        { "", "", 8, 152, 0, ROCmValueKind::HIDDEN_COMPLETION_ACTION,
     602                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
     603                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     604                            false, false, false, false },
     605                        { "", "", 8, 160, 0, ROCmValueKind::HIDDEN_MULTIGRID_SYNC_ARG,
     606                            ROCmValueType::INT64, ROCmAddressSpace::NONE,
     607                            ROCmAccessQual::DEFAULT, ROCmAccessQual::DEFAULT,
     608                            false, false, false, false },
     609                        { "ix0", "int8_t*", 8, 168, 0, ROCmValueKind::GLOBAL_BUFFER,
     610                            ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
     611                            ROCmAccessQual::READ_ONLY, ROCmAccessQual::WRITE_ONLY,
     612                            false, false, false, false },
     613                        { "ix1", "int8_t*", 8, 176, 0, ROCmValueKind::GLOBAL_BUFFER,
     614                            ROCmValueType::INT8, ROCmAddressSpace::GLOBAL,
     615                            ROCmAccessQual::WRITE_ONLY, ROCmAccessQual::READ_WRITE,
     616                            false, false, false, false }
     617                    },
     618                    "OpenCL C", { 3, 2 }, { 6, 9, 17 }, { 4, 11, 5 }, "int16", "",
     619                    192, 72, 32, 16, 64, 43, 9, 396, { 0, 0, 0 }, 5, 8, "abcd"
     620                }
     621            }
     622        },
     623        {
     624            {
     625                BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, 0, 0, 0, { },
     626                0, 0, 0, 0, { }
     627            }
     628        },
     629        sizeof(rocmMsgPackInput0), rocmMsgPackInput0,
     630        true, ""
     631    }
     632};
     633
     634static void testParseROCmMsgPackMDCase(cxuint testId, const ROCmMsgPackMDTestCase& testCase)
     635{
     636    std::vector<const ROCmKernelDescriptor*> kdescs(testCase.inputKDescs.size());
     637    for (size_t i = 0; i < testCase.inputKDescs.size(); i++)
     638        kdescs[i] = testCase.inputKDescs.data()+i;
     639   
     640    bool good = true;
     641    std::string error;
     642    std::vector<cxbyte> result;
     643    try
     644    { generateROCmMetadataMsgPack(testCase.input, kdescs.data(), result); }
     645    catch(const std::exception& ex)
     646    {
     647        good = false;
     648        error = ex.what();
     649    }
     650   
     651    char testName[30];
     652    snprintf(testName, 30, "Test #%u", testId);
     653    assertValue(testName, "good", testCase.good, good);
     654    assertString(testName, "error", testCase.error, error.c_str());
     655    if (!good)
     656        // do not check if test failed
     657        return;
     658   
     659    assertArray(testName, "result", Array<cxbyte>(testCase.expected,
     660                        testCase.expected + testCase.expectedSize), result);
     661}
     662
    230663int main(int argc, const char** argv)
    231664{
    232665    int retVal = 0;
    233666    retVal |= callTest(testMsgPackBytesWrite);
     667    for (cxuint i = 0; i < sizeof(rocmMsgPackMDTestCases)/
     668                            sizeof(ROCmMsgPackMDTestCase); i++)
     669        try
     670        { testParseROCmMsgPackMDCase(i, rocmMsgPackMDTestCases[i]); }
     671        catch(const std::exception& ex)
     672        {
     673            std::cerr << ex.what() << std::endl;
     674            retVal = 1;
     675        }
    234676    return retVal;
    235677}
Note: See TracChangeset for help on using the changeset viewer.