Changeset 3282 in CLRX


Ignore:
Timestamp:
Sep 1, 2017, 8:20:56 PM (16 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmGallium?: Small fixes in applying HSA config to binary. First testcase for Gallium HSA config in AsmGalliumFormats?.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdasm/AsmGalliumFormat.cpp

    r3281 r3282  
    21842184                config.privilegedMode |= hsaConfig.privilegedMode;
    21852185                config.dx10Clamp |= hsaConfig.dx10Clamp;
    2186                 if (hsaConfig.workgroupGroupSegmentSize == BINGEN_DEFAULT) // local size
     2186                if (hsaConfig.workgroupGroupSegmentSize != BINGEN_DEFAULT) // local size
    21872187                    config.localSize = hsaConfig.workgroupGroupSegmentSize;
    2188                 if (hsaConfig.workitemPrivateSegmentSize == BINGEN_DEFAULT) // scratch buffer
     2188                if (hsaConfig.workitemPrivateSegmentSize != BINGEN_DEFAULT) // scratch buffer
    21892189                    config.scratchBufferSize = hsaConfig.workitemPrivateSegmentSize;
    21902190            }
     
    23262326           
    23272327            ::memset(outConfig.controlDirective, 0, 128);
    2328             ::memcpy(asmCSection.content.data() + symbol.value,
    2329                      &outConfig, sizeof(AmdHsaKernelConfig));
     2328            if (asmCSection.content.size() >= symbol.value+256)
     2329                ::memcpy(asmCSection.content.data() + symbol.value,
     2330                        &outConfig, sizeof(AmdHsaKernelConfig));
     2331            else
     2332                assembler.printError(AsmSourcePos(), (
     2333                    std::string("HSA configuration for kernel'")+
     2334                    kinput.kernelName.c_str()+"' out of content").c_str());
    23302335        }
    23312336    }
  • CLRadeonExtender/trunk/tests/amdasm/AsmGalliumFormat.cpp

    r3256 r3282  
    7272}
    7373
    74 static void printGalliumOutput(std::ostream& os, const GalliumInput* output)
     74static void printGalliumOutput(std::ostream& os, const GalliumInput* output, bool amdHsa)
    7575{
    7676    os << "GalliumBinDump:" << std::endl;
     
    100100                    "localSize=" << config.localSize << ", "
    101101                    "scratchBuffer=" << config.scratchBufferSize << std::endl;
     102            if (amdHsa)
     103            {
     104                const AmdHsaKernelConfig& config =
     105                    *reinterpret_cast<const AmdHsaKernelConfig*>(
     106                                output->code + kernel.offset);
     107                os << "    AMD HSA Config:\n"
     108                    "      amdCodeVersion=" << ULEV(config.amdCodeVersionMajor) << "." <<
     109                        ULEV(config.amdCodeVersionMajor) << "\n"
     110                    "      amdMachine=" << ULEV(config.amdMachineKind) << ":" <<
     111                        ULEV(config.amdMachineMajor) << ":" <<
     112                        ULEV(config.amdMachineMinor) << ":" <<
     113                        ULEV(config.amdMachineStepping) << "\n"
     114                    "      kernelCodeEntryOffset=" <<
     115                        ULEV(config.kernelCodeEntryOffset) << "\n"
     116                    "      kernelCodePrefetchOffset=" <<
     117                        ULEV(config.kernelCodePrefetchOffset) << "\n"
     118                    "      kernelCodePrefetchSize=" <<
     119                            ULEV(config.kernelCodePrefetchSize) << "\n"
     120                    "      maxScrachBackingMemorySize=" <<
     121                        ULEV(config.maxScrachBackingMemorySize) << "\n"
     122                    "      computePgmRsrc1=0x" << std::hex <<
     123                            ULEV(config.computePgmRsrc1) << "\n"
     124                    "      computePgmRsrc2=0x" << ULEV(config.computePgmRsrc2) << "\n"
     125                    "      enableSgprRegisterFlags=0x" <<
     126                        ULEV(config.enableSgprRegisterFlags) << "\n"
     127                    "      enableFeatureFlags=0x" <<
     128                        ULEV(config.enableFeatureFlags) << std::dec << "\n"
     129                    "      workitemPrivateSegmentSize=" <<
     130                        ULEV(config.workitemPrivateSegmentSize) << "\n"
     131                    "      workgroupGroupSegmentSize=" <<
     132                        ULEV(config.workgroupGroupSegmentSize) << "\n"
     133                    "      gdsSegmentSize=" << ULEV(config.gdsSegmentSize) << "\n"
     134                    "      kernargSegmentSize=" << ULEV(config.kernargSegmentSize) << "\n"
     135                    "      workgroupFbarrierCount=" <<
     136                            ULEV(config.workgroupFbarrierCount) << "\n"
     137                    "      wavefrontSgprCount=" << ULEV(config.wavefrontSgprCount) << "\n"
     138                    "      workitemVgprCount=" << ULEV(config.workitemVgprCount) << "\n"
     139                    "      reservedVgprFirst=" << ULEV(config.reservedVgprFirst) << "\n"
     140                    "      reservedVgprCount=" << ULEV(config.reservedVgprCount) << "\n"
     141                    "      reservedSgprFirst=" << ULEV(config.reservedSgprFirst) << "\n"
     142                    "      reservedSgprCount=" << ULEV(config.reservedSgprCount) << "\n"
     143                    "      debugWavefrontPrivateSegmentOffsetSgpr=" <<
     144                        ULEV(config.debugWavefrontPrivateSegmentOffsetSgpr) << "\n"
     145                    "      debugPrivateSegmentBufferSgpr=" <<
     146                        ULEV(config.debugPrivateSegmentBufferSgpr) << "\n"
     147                    "      kernargSegmentAlignment=" <<
     148                        cxuint(config.kernargSegmentAlignment) << "\n"
     149                    "      groupSegmentAlignment=" <<
     150                        cxuint(config.groupSegmentAlignment) << "\n"
     151                    "      privateSegmentAlignment=" <<
     152                        cxuint(config.privateSegmentAlignment) << "\n"
     153                    "      wavefrontSize=" << cxuint(config.wavefrontSize) << "\n"
     154                    "      callConvention=0x" << std::hex <<
     155                        ULEV(config.callConvention) << "\n"
     156                    "      runtimeLoaderKernelSymbol=0x" <<
     157                        ULEV(config.runtimeLoaderKernelSymbol) << std::dec << "\n";
     158                os << "      ControlDirective:\n";
     159                printHexData(os, 3, 128, config.controlDirective);
     160            }
    102161        }
    103162        for (const GalliumArgInfo& arg: kernel.argInfos)
     
    368427)ffDXD", false
    369428    },
     429    /* AMD HSA */
     430    /* 1 - gallium (configured proginfo) */
     431    { R"ffDXD(            .gallium
     432        .llvm_version 40000
     433            .kernel aa22
     434            .args
     435            .arg scalar, 8,,,SEXT,griddim
     436            .config
     437            .priority 1
     438            .floatmode 43
     439            .ieeemode
     440            .sgprsnum 36
     441            .vgprsnum 139
     442            .pgmrsrc2 523243
     443            .scratchbuffer 230
     444           
     445            .call_convention 0x34dac
     446            .debug_private_segment_buffer_sgpr 98
     447            .debug_wavefront_private_segment_offset_sgpr 96
     448            .gds_segment_size 100
     449            .kernarg_segment_align 32
     450            .workgroup_group_segment_size 22
     451            .workgroup_fbarrier_count 3324
     452            .hsa_sgprsnum 79
     453           
     454            .kernel aa23
     455            .args
     456            .arg scalar, 8,,,SEXT,griddim
     457            .config
     458            .dims yz
     459            .priority 3
     460            .ieeemode
     461            .pgmrsrc2 0
     462            .group_segment_align 128
     463            .kernarg_segment_align 64
     464            .kernarg_segment_size 228
     465            .kernel_code_entry_offset 256
     466            .kernel_code_prefetch_offset 1002
     467            .kernel_code_prefetch_size 13431
     468            .max_scratch_backing_memory 4212
     469            .reserved_sgprs 12,19
     470            .reserved_vgprs 26,48
     471.text
     472aa22:
     473    .skip 256
     474aa23:
     475    .skip 256
     476)ffDXD",
     477       R"ffDXD(GalliumBinDump:
     478  Kernel: name=aa22, offset=0
     479    Config:
     480      dims=default, SGPRS=36, VGPRS=139, pgmRSRC2=0x7fbeb, ieeeMode=0x1
     481      floatMode=0x2b, priority=1, localSize=0, scratchBuffer=230
     482    AMD HSA Config:
     483      amdCodeVersion=1.1
     484      amdMachine=1:0:0:0
     485      kernelCodeEntryOffset=256
     486      kernelCodePrefetchOffset=0
     487      kernelCodePrefetchSize=0
     488      maxScrachBackingMemorySize=0
     489      computePgmRsrc1=0x8eb662
     490      computePgmRsrc2=0x7fbd1
     491      enableSgprRegisterFlags=0x0
     492      enableFeatureFlags=0x0
     493      workitemPrivateSegmentSize=230
     494      workgroupGroupSegmentSize=22
     495      gdsSegmentSize=100
     496      kernargSegmentSize=16
     497      workgroupFbarrierCount=3324
     498      wavefrontSgprCount=79
     499      workitemVgprCount=139
     500      reservedVgprFirst=0
     501      reservedVgprCount=0
     502      reservedSgprFirst=0
     503      reservedSgprCount=0
     504      debugWavefrontPrivateSegmentOffsetSgpr=96
     505      debugPrivateSegmentBufferSgpr=98
     506      kernargSegmentAlignment=5
     507      groupSegmentAlignment=4
     508      privateSegmentAlignment=4
     509      wavefrontSize=6
     510      callConvention=0x34dac
     511      runtimeLoaderKernelSymbol=0x0
     512      ControlDirective:
     513      0000000000000000000000000000000000000000000000000000000000000000
     514      0000000000000000000000000000000000000000000000000000000000000000
     515      0000000000000000000000000000000000000000000000000000000000000000
     516      0000000000000000000000000000000000000000000000000000000000000000
     517    Arg: scalar, true, griddim, size=8, tgtSize=8, tgtAlign=8
     518  Kernel: name=aa23, offset=256
     519    Config:
     520      dims=6, SGPRS=12, VGPRS=3, pgmRSRC2=0x0, ieeeMode=0x1
     521      floatMode=0xc0, priority=3, localSize=0, scratchBuffer=0
     522    AMD HSA Config:
     523      amdCodeVersion=1.1
     524      amdMachine=1:0:0:0
     525      kernelCodeEntryOffset=256
     526      kernelCodePrefetchOffset=1002
     527      kernelCodePrefetchSize=13431
     528      maxScrachBackingMemorySize=4212
     529      computePgmRsrc1=0x8c0c40
     530      computePgmRsrc2=0x1310
     531      enableSgprRegisterFlags=0x0
     532      enableFeatureFlags=0x0
     533      workitemPrivateSegmentSize=0
     534      workgroupGroupSegmentSize=0
     535      gdsSegmentSize=0
     536      kernargSegmentSize=228
     537      workgroupFbarrierCount=0
     538      wavefrontSgprCount=12
     539      workitemVgprCount=3
     540      reservedVgprFirst=26
     541      reservedVgprCount=23
     542      reservedSgprFirst=12
     543      reservedSgprCount=8
     544      debugWavefrontPrivateSegmentOffsetSgpr=0
     545      debugPrivateSegmentBufferSgpr=0
     546      kernargSegmentAlignment=6
     547      groupSegmentAlignment=7
     548      privateSegmentAlignment=4
     549      wavefrontSize=6
     550      callConvention=0x0
     551      runtimeLoaderKernelSymbol=0x0
     552      ControlDirective:
     553      0000000000000000000000000000000000000000000000000000000000000000
     554      0000000000000000000000000000000000000000000000000000000000000000
     555      0000000000000000000000000000000000000000000000000000000000000000
     556      0000000000000000000000000000000000000000000000000000000000000000
     557    Arg: scalar, true, griddim, size=8, tgtSize=8, tgtAlign=8
     558  Comment:
     559  nullptr
     560  GlobalData:
     561  nullptr
     562  Code:
     563  0100000000000000010000000000000000010000000000000000000000000000
     564  0000000000000000000000000000000062b68e00d1fb070000000000e6000000
     565  16000000640000001000000000000000fc0c00004f008b000000000000000000
     566  6000620005040406ac4d03000000000000000000000000000000000000000000
     567  0000000000000000000000000000000000000000000000000000000000000000
     568  0000000000000000000000000000000000000000000000000000000000000000
     569  0000000000000000000000000000000000000000000000000000000000000000
     570  0000000000000000000000000000000000000000000000000000000000000000
     571  010000000000000001000000000000000001000000000000ea03000000000000
     572  77340000000000007410000000000000400c8c00101300000000000000000000
     573  0000000000000000e400000000000000000000000c0003001a0017000c000800
     574  0000000006070406000000000000000000000000000000000000000000000000
     575  0000000000000000000000000000000000000000000000000000000000000000
     576  0000000000000000000000000000000000000000000000000000000000000000
     577  0000000000000000000000000000000000000000000000000000000000000000
     578  0000000000000000000000000000000000000000000000000000000000000000
     579)ffDXD", "", true
     580    },
    370581};
    371582
     
    378589    Assembler assembler("test.s", input, (ASM_ALL|ASM_TESTRUN)&~ASM_ALTMACRO,
    379590            BinaryFormat::AMD, GPUDeviceType::CAPE_VERDE, errorStream, printStream);
     591    assembler.setLLVMVersion(0);
    380592    bool good = assembler.assemble();
    381593   
     
    384596        // get format handler and their output
    385597        printGalliumOutput(dumpOss, static_cast<const AsmGalliumHandler*>(
    386                     assembler.getFormatHandler())->getOutput());
     598                    assembler.getFormatHandler())->getOutput(),
     599                    assembler.getLLVMVersion() >= 40000U);
    387600    /* compare results */
    388601    char testName[30];
Note: See TracChangeset for help on using the changeset viewer.