Changeset 3715 in CLRX


Ignore:
Timestamp:
Feb 3, 2018, 9:07:40 PM (15 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCm: First stuff do dump ROCm metadata. Print kernel config if DISASM_METADATA is not enabled.
Set reqWorkGroupSize, maxFlatWorkGroupSize and workGroupSizeHint to 0 by default (if not set).

Location:
CLRadeonExtender/trunk
Files:
4 edited

Legend:

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

    r3698 r3715  
    185185    std::vector<ROCmKernelMetadata> kernels;  ///< kernel metadatas
    186186   
     187    /// initialize metadata info
    187188    void initialize();
     189    /// parse metadata info from metadata string
     190    void parse(size_t metadataSize, const char* metadata);
    188191};
    189192
  • CLRadeonExtender/trunk/amdasm/DisasmROCm.cpp

    r3697 r3715  
    514514}
    515515
     516static void dumpKernelMetadataInfo(std::ostream& output, const ROCmKernelMetadata& kernel)
     517{
     518    output.write("        .md_symname ", 20);
     519    output.write(kernel.symbolName.c_str(), kernel.symbolName.size());
     520    output.write("\n", 1);
     521    output.write("        .md_language \"", 22);
     522    {
     523        std::string langName = escapeStringCStyle(kernel.language);
     524        output.write(langName.c_str(), langName.size());
     525    }
     526    size_t bufSize = 0;
     527    char buf[100];
     528    if (kernel.langVersion[0] != BINGEN_NOTSUPPLIED)
     529    {
     530        output.write("\", ", 3);
     531        bufSize = snprintf(buf, 100, "%u, %u\n",
     532                           kernel.langVersion[0], kernel.langVersion[1]);
     533        output.write(buf, bufSize);
     534    }
     535    else // version not supplied
     536        output.write("\"\n", 2);
     537   
     538    if (!kernel.vecTypeHint.empty())
     539    {
     540        output.write("        .vectypehint ", 21);
     541        output.write(kernel.vecTypeHint.c_str(), kernel.vecTypeHint.size());
     542        output.write("\n", 1);
     543    }
     544}
     545
    516546void CLRX::disassembleROCm(std::ostream& output, const ROCmDisasmInput* rocmInput,
    517547           ISADisassembler* isaDisassembler, Flags flags)
     
    524554    const cxuint maxSgprsNum = getGPUMaxRegistersNum(arch, REGTYPE_SGPR, 0);
    525555   
     556    ROCmMetadata metadataInfo;
     557    bool haveMetadataInfo = false;
     558    if (doDumpConfig && rocmInput->metadata!=nullptr)
     559    {
     560        metadataInfo.parse(rocmInput->metadataSize, rocmInput->metadata);
     561        haveMetadataInfo = true;
     562    }
     563   
    526564    {
    527565        // print AMD architecture version
     
    567605    }
    568606   
     607    Array<std::pair<CString, size_t> > sortedMdKernelIndices;
     608   
     609    if (doDumpConfig && haveMetadataInfo)
     610    {
     611        // main metadata info dump
     612        char buf[100];
     613        size_t bufSize;
     614        if (metadataInfo.version[0] != BINGEN_NOTSUPPLIED)
     615        {
     616            bufSize = snprintf(buf, 100, ".md_version %u, %u\n", metadataInfo.version[0],
     617                    metadataInfo.version[1]);
     618            output.write(buf, bufSize);
     619        }
     620        for (const ROCmPrintfInfo& printfInfo: metadataInfo.printfInfos)
     621        {
     622            bufSize = snprintf(buf, 100, ".printf %u", printfInfo.id);
     623            output.write(buf, bufSize);
     624            for (uint32_t argSize: printfInfo.argSizes)
     625            {
     626                bufSize = snprintf(buf, 100, ", %u", argSize);
     627                output.write(buf, bufSize);
     628            }
     629            output.write(", \"", 3);
     630            std::string format = escapeStringCStyle(printfInfo.format);
     631            output.write(format.c_str(), format.size());
     632            output.write("\"\n", 2);
     633        }
     634        // prepare order of rocm metadata kernels
     635        sortedMdKernelIndices.resize(metadataInfo.kernels.size());
     636        for (size_t i = 0; i < sortedMdKernelIndices.size(); i++)
     637            sortedMdKernelIndices[i] = std::make_pair(metadataInfo.kernels[i].name, i);
     638        mapSort(sortedMdKernelIndices.begin(), sortedMdKernelIndices.end());
     639    }
     640   
    569641    // dump kernel config
    570642    for (const ROCmDisasmRegionInput& rinput: rocmInput->regions)
     
    576648            if (rinput.type == ROCmRegionType::FKERNEL)
    577649                output.write("    .fkernel\n", 13);
    578             if (doMetadata && doDumpConfig)
     650            if (doDumpConfig)
     651            {
    579652                dumpKernelConfig(output, maxSgprsNum, arch,
    580653                     *reinterpret_cast<const ROCmKernelConfig*>(
    581654                             rocmInput->code + rinput.offset));
     655               
     656                if (!haveMetadataInfo)
     657                    continue; // no metatadata info
     658                auto it = binaryMapFind(sortedMdKernelIndices.begin(),
     659                        sortedMdKernelIndices.end(), rinput.regionName);
     660                if (it == sortedMdKernelIndices.end())
     661                    continue; // not found
     662                // dump kernel metadata config
     663                dumpKernelMetadataInfo(output, metadataInfo.kernels[it->second]);
     664            }
    582665        }
    583666   
  • CLRadeonExtender/trunk/amdbin/ROCmBinaries.cpp

    r3706 r3715  
    4343{
    4444    langVersion[0] = langVersion[1] = BINGEN_NOTSUPPLIED;
    45     reqdWorkGroupSize[0] = reqdWorkGroupSize[1] =
    46             reqdWorkGroupSize[2] = BINGEN_NOTSUPPLIED;
    47     workGroupSizeHint[0] = workGroupSizeHint[1] =
    48             workGroupSizeHint[2] = BINGEN_NOTSUPPLIED;
     45    reqdWorkGroupSize[0] = reqdWorkGroupSize[1] = reqdWorkGroupSize[2] = 0;
     46    workGroupSizeHint[0] = workGroupSizeHint[1] = workGroupSizeHint[2] = 0;
    4947    kernargSegmentSize = BINGEN64_NOTSUPPLIED;
    5048    groupSegmentFixedSize = BINGEN64_NOTSUPPLIED;
     
    5553    vgprsNum = BINGEN_NOTSUPPLIED;
    5654    maxFlatWorkGroupSize = BINGEN64_NOTSUPPLIED;
    57     fixedWorkGroupSize[0] = fixedWorkGroupSize[1] =
    58             fixedWorkGroupSize[2] = BINGEN_NOTSUPPLIED;
     55    fixedWorkGroupSize[0] = fixedWorkGroupSize[1] = fixedWorkGroupSize[2] = 0;
    5956    spilledSgprs = BINGEN_NOTSUPPLIED;
    6057    spilledVgprs = BINGEN_NOTSUPPLIED;
     
    967964                    canToNextLevel = true;
    968965                    // initialize kernel attributes values
    969                     kernel.reqdWorkGroupSize[0] = BINGEN_NOTSUPPLIED;
    970                     kernel.reqdWorkGroupSize[1] = BINGEN_NOTSUPPLIED;
    971                     kernel.reqdWorkGroupSize[2] = BINGEN_NOTSUPPLIED;
    972                     kernel.workGroupSizeHint[0] = BINGEN_NOTSUPPLIED;
    973                     kernel.workGroupSizeHint[1] = BINGEN_NOTSUPPLIED;
    974                     kernel.workGroupSizeHint[2] = BINGEN_NOTSUPPLIED;
     966                    kernel.reqdWorkGroupSize[0] = 0;
     967                    kernel.reqdWorkGroupSize[1] = 0;
     968                    kernel.reqdWorkGroupSize[2] = 0;
     969                    kernel.workGroupSizeHint[0] = 0;
     970                    kernel.workGroupSizeHint[1] = 0;
     971                    kernel.workGroupSizeHint[2] = 0;
    975972                    kernel.runtimeHandle.clear();
    976973                    kernel.vecTypeHint.clear();
     
    988985                    kernel.spilledVgprs = BINGEN_NOTSUPPLIED;
    989986                    kernel.maxFlatWorkGroupSize = BINGEN64_DEFAULT;
    990                     kernel.fixedWorkGroupSize[0] = BINGEN_NOTSUPPLIED;
    991                     kernel.fixedWorkGroupSize[1] = BINGEN_NOTSUPPLIED;
    992                     kernel.fixedWorkGroupSize[2] = BINGEN_NOTSUPPLIED;
     987                    kernel.fixedWorkGroupSize[0] = 0;
     988                    kernel.fixedWorkGroupSize[1] = 0;
     989                    kernel.fixedWorkGroupSize[2] = 0;
    993990                    inKernelCodeProps = true;
    994991                    canToNextLevel = true;
     
    12291226}
    12301227
     1228void ROCmMetadata::parse(size_t metadataSize, const char* metadata)
     1229{
     1230    parseROCmMetadata(metadataSize, metadata, *this);
     1231}
     1232
    12311233/*
    12321234 * ROCm binary reader and generator
  • CLRadeonExtender/trunk/tests/amdbin/ROCmMetadata.cpp

    r3706 r3715  
    157157                    },
    158158                    "OpenCL C", { 1, 2 },
    159                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
    160                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     159                    { 0, 0, 0 },
     160                    { 0, 0, 0 },
    161161                    "", "", 64, 0, 0, 8, 64,
    162162                    14, 11, 256,
    163                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     163                    { 0, 0, 0 },
    164164                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
    165165                }
     
    743743                    },
    744744                    "OpenCL C", { 1, 2 },
    745                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
    746                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     745                    { 0, 0, 0 },
     746                    { 0, 0, 0 },
    747747                    "", "", 64, 0, 0, 8, 64,
    748748                    14, 11, 256,
    749                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     749                    { 0, 0, 0 },
    750750                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
    751751                }
     
    856856                    { },
    857857                    "OpenCL C", { 1, 2 },
    858                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
    859                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     858                    { 0, 0, 0 },
     859                    { 0, 0, 0 },
    860860                    "", "", 64, 0, 0, 8, 64,
    861861                    14, 11, 256,
    862                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     862                    { 0, 0, 0 },
    863863                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
    864864                },
     
    867867                    { },
    868868                    "OpenCL C", { 1, 2 },
    869                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
    870                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     869                    { 0, 0, 0 },
     870                    { 0, 0, 0 },
    871871                    "", "", 64, 0, 0, 8, 64,
    872872                    14, 11, 256,
    873                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     873                    { 0, 0, 0 },
    874874                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
    875875                },
     
    878878                    { },
    879879                    "OpenCL C", { 1, 2 },
    880                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
    881                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     880                    { 0, 0, 0 },
     881                    { 0, 0, 0 },
    882882                    "", "", 64, 0, 0, 8, 64,
    883883                    14, 11, 256,
    884                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     884                    { 0, 0, 0 },
    885885                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
    886886                },
     
    889889                    { },
    890890                    "OpenCL C", { 1, 2 },
    891                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
    892                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     891                    { 0, 0, 0 },
     892                    { 0, 0, 0 },
    893893                    "", "", 64, 0, 0, 8, 64,
    894894                    14, 11, 256,
    895                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     895                    { 0, 0, 0 },
    896896                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
    897897                },
     
    900900                    { },
    901901                    "OpenCL C", { 1, 2 },
    902                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
    903                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     902                    { 0, 0, 0 },
     903                    { 0, 0, 0 },
    904904                    "", "", 64, 0, 0, 8, 64,
    905905                    14, 11, 256,
    906                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     906                    { 0, 0, 0 },
    907907                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
    908908                }
     
    10681068                    },
    10691069                    "OpenCL C", { 1, 2 },
    1070                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
    1071                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     1070                    { 0, 0, 0 },
     1071                    { 0, 0, 0 },
    10721072                    "", "", 64, 0, 0, 8, 64,
    10731073                    14, 11, 256,
    1074                     { BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED },
     1074                    { 0, 0, 0 },
    10751075                    BINGEN_NOTSUPPLIED, BINGEN_NOTSUPPLIED
    10761076                }
Note: See TracChangeset for help on using the changeset viewer.