Ignore:
Timestamp:
Jan 31, 2018, 3:16:49 PM (23 months ago)
Author:
matszpk
Message:

CLRadeonExtender: ROCmBin: Detect end of metadata YAML document. Integrate ROCm metadata parser with ROCmBinary class.
Add ROCmBinary::getKernelInfo.

File:
1 edited

Legend:

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

    r3682 r3683  
    720720{ "Default", "ReadOnly", "WriteOnly", "ReadWrite" };
    721721
    722 void parseROCmMetadata(size_t metadataSize, const char* metadata,
     722static void parseROCmMetadata(size_t metadataSize, const char* metadata,
    723723                ROCmMetadata& metadataInfo)
    724724{
     
    797797        if (curLevel == 0)
    798798        {
     799            if (ptr+3 <= end && *ptr=='.' && ptr[1]=='.' && ptr[2]=='.' &&
     800                (ptr+3==end || (ptr+3 < end && ptr[3]=='\n')))
     801                break; // end of the document
     802           
    799803            const size_t keyIndex = parseYAMLKey(ptr, end, lineNo,
    800804                        mainMetadataKeywordsNum, mainMetadataKeywords);
     
    12541258        mapSort(regionsMap.begin(), regionsMap.end());
    12551259    }
     1260   
     1261    if (hasMetadataInfo() && metadata != nullptr && metadataSize != 0)
     1262    {
     1263        metadataInfo.reset(new ROCmMetadata());
     1264        parseROCmMetadata(metadataSize, metadata, *metadataInfo);
     1265       
     1266        if (hasKernelInfoMap())
     1267        {
     1268            const std::vector<ROCmKernelMetadata>& kernels = metadataInfo->kernels;
     1269            kernelInfosMap.resize(kernels.size());
     1270            for (size_t i = 0; i < kernelInfosMap.size(); i++)
     1271                kernelInfosMap[i] = std::make_pair(kernels[i].name, i);
     1272            // sort region map
     1273            mapSort(kernelInfosMap.begin(), kernelInfosMap.end());
     1274        }
     1275    }
    12561276}
    12571277
     
    13051325        throw BinException("Can't find region name");
    13061326    return regions[it->second];
     1327}
     1328
     1329const ROCmKernelMetadata& ROCmBinary::getKernelInfo(const char* name) const
     1330{
     1331    if (!hasMetadataInfo())
     1332        throw BinException("Can't find kernel info name");
     1333    RegionMap::const_iterator it = binaryMapFind(kernelInfosMap.begin(),
     1334                             kernelInfosMap.end(), name);
     1335    if (it == kernelInfosMap.end())
     1336        throw BinException("Can't find kernel info name");
     1337    return metadataInfo->kernels[it->second];
    13071338}
    13081339
Note: See TracChangeset for help on using the changeset viewer.