Changeset 3281 in CLRX


Ignore:
Timestamp:
Sep 1, 2017, 7:01:00 PM (10 months ago)
Author:
matszpk
Message:

CLRadeonExtender: AsmGallium?: Apply HSA configuration to Gallium binary.

File:
1 edited

Legend:

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

    r3280 r3281  
    21522152        {   // requires amdhsa-gcn (with HSA header)
    21532153            // hotfix
    2154             GalliumKernelConfig& config = output.kernels[ki].config;
     2154            GalliumKernelConfig config = output.kernels[ki].config;
    21552155            AmdHsaKernelConfig outConfig;
     2156            ::memset(&outConfig, 0xff, 128); // fill by defaults
     2157            outConfig.enableSgprRegisterFlags =
     2158                    uint16_t(AMDHSAFLAG_USE_PRIVATE_SEGMENT_BUFFER|
     2159                        AMDHSAFLAG_USE_DISPATCH_PTR|AMDHSAFLAG_USE_KERNARG_SEGMENT_PTR);
     2160            outConfig.enableFeatureFlags = uint16_t(AMDHSAFLAG_USE_PTR64|2);
     2161           
     2162            const Kernel& kernel = *kernelStates[ki];
     2163            if (kernel.config != nullptr)
     2164            {   // replace by HSA config
     2165                ::memcpy(&outConfig, kernel.config.get(),
     2166                        sizeof(AmdHsaKernelConfig));
     2167                // set config from HSA config
     2168                const AsmAmdHsaKernelConfig& hsaConfig = *kernel.config.get();
     2169                if (hsaConfig.usedSGPRsNum != BINGEN_DEFAULT)
     2170                    config.usedSGPRsNum = hsaConfig.usedSGPRsNum;
     2171                if (hsaConfig.usedVGPRsNum != BINGEN_DEFAULT)
     2172                    config.usedVGPRsNum = hsaConfig.usedVGPRsNum;
     2173                if (hsaConfig.userDataNum != BINGEN8_DEFAULT)
     2174                    config.userDataNum = hsaConfig.userDataNum;
     2175                config.dimMask |= hsaConfig.dimMask;
     2176                config.pgmRSRC1 |= hsaConfig.computePgmRsrc1;
     2177                config.pgmRSRC2 |= hsaConfig.computePgmRsrc2;
     2178                config.ieeeMode |= hsaConfig.ieeeMode;
     2179                config.floatMode |= hsaConfig.floatMode;
     2180                config.priority = std::max(hsaConfig.priority, config.priority);
     2181                config.exceptions |= hsaConfig.exceptions;
     2182                config.tgSize |= hsaConfig.tgSize;
     2183                config.debugMode |= hsaConfig.debugMode;
     2184                config.privilegedMode |= hsaConfig.privilegedMode;
     2185                config.dx10Clamp |= hsaConfig.dx10Clamp;
     2186                if (hsaConfig.workgroupGroupSegmentSize == BINGEN_DEFAULT) // local size
     2187                    config.localSize = hsaConfig.workgroupGroupSegmentSize;
     2188                if (hsaConfig.workitemPrivateSegmentSize == BINGEN_DEFAULT) // scratch buffer
     2189                    config.scratchBufferSize = hsaConfig.workitemPrivateSegmentSize;
     2190            }
    21562191           
    21572192            uint32_t dimValues = 0;
     
    21872222            }
    21882223            argSegmentSize += 16; // gridOffset and gridDim
    2189             SULEV(outConfig.amdCodeVersionMajor, 1);
    2190             SULEV(outConfig.amdCodeVersionMinor, 0);
    2191             SULEV(outConfig.amdMachineKind, 1);
    2192             SULEV(outConfig.amdMachineMajor, amdGpuArchValues.major);
    2193             SULEV(outConfig.amdMachineMinor, amdGpuArchValues.minor);
    2194             SULEV(outConfig.amdMachineStepping, amdGpuArchValues.stepping);
    2195             SULEV(outConfig.kernelCodeEntryOffset, 256);
    2196             SULEV(outConfig.kernelCodePrefetchOffset, 0);
    2197             SULEV(outConfig.kernelCodePrefetchSize, 0);
    2198             SULEV(outConfig.maxScrachBackingMemorySize, 0);
    2199             SULEV(outConfig.computePgmRsrc1, pgmRSRC1);
    2200             SULEV(outConfig.computePgmRsrc2, pgmRSRC2);
    2201             SULEV(outConfig.enableSgprRegisterFlags,
    2202                     uint16_t(AMDHSAFLAG_USE_PRIVATE_SEGMENT_BUFFER|
    2203                         AMDHSAFLAG_USE_DISPATCH_PTR|AMDHSAFLAG_USE_KERNARG_SEGMENT_PTR));
    2204             SULEV(outConfig.enableFeatureFlags, uint16_t(AMDHSAFLAG_USE_PTR64|2));
    2205             SULEV(outConfig.workitemPrivateSegmentSize, config.scratchBufferSize);
    2206             SULEV(outConfig.workgroupGroupSegmentSize, config.localSize);
    2207             SULEV(outConfig.gdsSegmentSize, 0);
    2208             SULEV(outConfig.kernargSegmentSize, argSegmentSize);
    2209             SULEV(outConfig.workgroupFbarrierCount, 0);
    2210             SULEV(outConfig.wavefrontSgprCount, config.usedSGPRsNum);
    2211             SULEV(outConfig.workitemVgprCount, config.usedVGPRsNum);
    2212             SULEV(outConfig.reservedVgprFirst, 0);
    2213             SULEV(outConfig.reservedVgprCount, 0);
    2214             SULEV(outConfig.reservedSgprFirst, 0);
    2215             SULEV(outConfig.reservedSgprCount, 0);
    2216             SULEV(outConfig.debugWavefrontPrivateSegmentOffsetSgpr, 0);
    2217             SULEV(outConfig.debugPrivateSegmentBufferSgpr, 0);
    2218             outConfig.kernargSegmentAlignment = 4;
    2219             outConfig.groupSegmentAlignment = 4;
    2220             outConfig.privateSegmentAlignment = 4;
    2221             outConfig.wavefrontSize = 6;
    2222             SULEV(outConfig.callConvention, 0);
    2223             SULEV(outConfig.reserved1[0], 0);
    2224             SULEV(outConfig.reserved1[1], 0);
    2225             SULEV(outConfig.reserved1[2], 0);
    2226             SULEV(outConfig.runtimeLoaderKernelSymbol, 0);
     2224           
     2225            if (outConfig.amdCodeVersionMajor == BINGEN_DEFAULT)
     2226                outConfig.amdCodeVersionMajor = 1;
     2227            if (outConfig.amdCodeVersionMinor == BINGEN_DEFAULT)
     2228                outConfig.amdCodeVersionMinor = 0;
     2229            if (outConfig.amdMachineKind == BINGEN16_DEFAULT)
     2230                outConfig.amdMachineKind = 1;
     2231            if (outConfig.amdMachineMajor == BINGEN16_DEFAULT)
     2232                outConfig.amdMachineMajor = amdGpuArchValues.major;
     2233            if (outConfig.amdMachineMinor == BINGEN16_DEFAULT)
     2234                outConfig.amdMachineMinor = amdGpuArchValues.minor;
     2235            if (outConfig.amdMachineStepping == BINGEN16_DEFAULT)
     2236                outConfig.amdMachineStepping = amdGpuArchValues.stepping;
     2237            if (outConfig.kernelCodeEntryOffset == BINGEN64_DEFAULT)
     2238                outConfig.kernelCodeEntryOffset = 256;
     2239            if (outConfig.kernelCodePrefetchOffset == BINGEN64_DEFAULT)
     2240                outConfig.kernelCodePrefetchOffset = 0;
     2241            if (outConfig.kernelCodePrefetchSize == BINGEN64_DEFAULT)
     2242                outConfig.kernelCodePrefetchSize = 0;
     2243            if (outConfig.maxScrachBackingMemorySize == BINGEN64_DEFAULT) // ??
     2244                outConfig.maxScrachBackingMemorySize = 0;
     2245            outConfig.computePgmRsrc1 = pgmRSRC1;
     2246            outConfig.computePgmRsrc2 = pgmRSRC2;
     2247            if (outConfig.workitemPrivateSegmentSize == BINGEN_DEFAULT) // scratch buffer
     2248                outConfig.workitemPrivateSegmentSize = config.scratchBufferSize;
     2249            if (outConfig.workgroupGroupSegmentSize == BINGEN_DEFAULT)
     2250                outConfig.workgroupGroupSegmentSize = config.localSize;
     2251            if (outConfig.gdsSegmentSize == BINGEN_DEFAULT)
     2252                outConfig.gdsSegmentSize = 0;
     2253            if (outConfig.kernargSegmentSize == BINGEN64_DEFAULT)
     2254                outConfig.kernargSegmentSize = argSegmentSize;
     2255            if (outConfig.workgroupFbarrierCount == BINGEN_DEFAULT)
     2256                outConfig.workgroupFbarrierCount = 0;
     2257            if (outConfig.wavefrontSgprCount == BINGEN16_DEFAULT)
     2258                outConfig.wavefrontSgprCount = config.usedSGPRsNum;
     2259            if (outConfig.workitemVgprCount == BINGEN16_DEFAULT)
     2260                outConfig.workitemVgprCount = config.usedVGPRsNum;
     2261            if (outConfig.reservedVgprFirst == BINGEN16_DEFAULT)
     2262                outConfig.reservedVgprFirst = 0;
     2263            if (outConfig.reservedVgprCount == BINGEN16_DEFAULT)
     2264                outConfig.reservedVgprCount = 0;
     2265            if (outConfig.reservedSgprFirst == BINGEN16_DEFAULT)
     2266                outConfig.reservedSgprFirst = 0;
     2267            if (outConfig.reservedSgprCount == BINGEN16_DEFAULT)
     2268                outConfig.reservedSgprCount = 0;
     2269            if (outConfig.debugWavefrontPrivateSegmentOffsetSgpr == BINGEN16_DEFAULT)
     2270                outConfig.debugWavefrontPrivateSegmentOffsetSgpr = 0;
     2271            if (outConfig.debugPrivateSegmentBufferSgpr == BINGEN16_DEFAULT)
     2272                outConfig.debugPrivateSegmentBufferSgpr = 0;
     2273            if (outConfig.kernargSegmentAlignment == BINGEN8_DEFAULT)
     2274                outConfig.kernargSegmentAlignment = 4;
     2275            if (outConfig.groupSegmentAlignment == BINGEN8_DEFAULT)
     2276                outConfig.groupSegmentAlignment = 4;
     2277            if (outConfig.privateSegmentAlignment == BINGEN8_DEFAULT)
     2278                outConfig.privateSegmentAlignment = 4;
     2279            if (outConfig.wavefrontSize == BINGEN8_DEFAULT)
     2280                outConfig.wavefrontSize = 6;
     2281            if (outConfig.callConvention == BINGEN_DEFAULT)
     2282                outConfig.callConvention = 0;
     2283            outConfig.reserved1[0] = 0;
     2284            outConfig.reserved1[1] = 0;
     2285            outConfig.reserved1[2] = 0;
     2286            if (outConfig.runtimeLoaderKernelSymbol == BINGEN64_DEFAULT)
     2287                outConfig.runtimeLoaderKernelSymbol = 0;
     2288           
     2289            // to little endian
     2290            SLEV(outConfig.amdCodeVersionMajor, outConfig.amdCodeVersionMajor);
     2291            SLEV(outConfig.amdCodeVersionMinor, outConfig.amdCodeVersionMinor);
     2292            SLEV(outConfig.amdMachineKind, outConfig.amdMachineKind);
     2293            SLEV(outConfig.amdMachineMajor, outConfig.amdMachineMajor);
     2294            SLEV(outConfig.amdMachineMinor, outConfig.amdMachineMinor);
     2295            SLEV(outConfig.amdMachineStepping, outConfig.amdMachineStepping);
     2296            SLEV(outConfig.kernelCodeEntryOffset, outConfig.kernelCodeEntryOffset);
     2297            SLEV(outConfig.kernelCodePrefetchOffset, outConfig.kernelCodePrefetchOffset);
     2298            SLEV(outConfig.kernelCodePrefetchSize, outConfig.kernelCodePrefetchSize);
     2299            SLEV(outConfig.maxScrachBackingMemorySize, outConfig.maxScrachBackingMemorySize);
     2300            SLEV(outConfig.computePgmRsrc1, outConfig.computePgmRsrc1);
     2301            SLEV(outConfig.computePgmRsrc2, outConfig.computePgmRsrc2);
     2302            SLEV(outConfig.enableSgprRegisterFlags, outConfig.enableSgprRegisterFlags);
     2303            SLEV(outConfig.enableFeatureFlags, outConfig.enableFeatureFlags);
     2304            SLEV(outConfig.workitemPrivateSegmentSize, outConfig.workitemPrivateSegmentSize);
     2305            SLEV(outConfig.workgroupGroupSegmentSize, outConfig.workgroupGroupSegmentSize);
     2306            SLEV(outConfig.gdsSegmentSize, outConfig.gdsSegmentSize);
     2307            SLEV(outConfig.kernargSegmentSize, outConfig.kernargSegmentSize);
     2308            SLEV(outConfig.workgroupFbarrierCount, outConfig.workgroupFbarrierCount);
     2309            SLEV(outConfig.wavefrontSgprCount, outConfig.wavefrontSgprCount);
     2310            SLEV(outConfig.workitemVgprCount, outConfig.workitemVgprCount);
     2311            SLEV(outConfig.reservedVgprFirst, outConfig.reservedVgprFirst);
     2312            SLEV(outConfig.reservedVgprCount, outConfig.reservedVgprCount);
     2313            SLEV(outConfig.reservedSgprFirst, outConfig.reservedSgprFirst);
     2314            SLEV(outConfig.reservedSgprCount, outConfig.reservedSgprCount);
     2315            SLEV(outConfig.debugWavefrontPrivateSegmentOffsetSgpr,
     2316                outConfig.debugWavefrontPrivateSegmentOffsetSgpr);
     2317            SLEV(outConfig.debugPrivateSegmentBufferSgpr,
     2318                 outConfig.debugPrivateSegmentBufferSgpr);
     2319            SLEV(outConfig.callConvention, outConfig.callConvention);
     2320            SLEV(outConfig.runtimeLoaderKernelSymbol, outConfig.runtimeLoaderKernelSymbol);
     2321            // put control directive section to config
     2322            if (kernel.ctrlDirSection!=ASMSECT_NONE &&
     2323                assembler.sections[kernel.ctrlDirSection].content.size()==128)
     2324                ::memcpy(outConfig.controlDirective,
     2325                    assembler.sections[kernel.ctrlDirSection].content.data(), 128);
    22272326           
    22282327            ::memset(outConfig.controlDirective, 0, 128);
Note: See TracChangeset for help on using the changeset viewer.