Changeset 3348 in CLRX


Ignore:
Timestamp:
Sep 10, 2017, 7:46:13 PM (11 months ago)
Author:
matszpk
Message:

CLRadeonExtender: Move routines to calculate PGMRSRC1 and PGMRSRC2 to GPUId code. Apply these function in code.

Location:
CLRadeonExtender/trunk
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/CLRX/utils/GPUId.h

    r3306 r3348  
    157157};
    158158
     159uint32_t calculatePgmRSrc1(GPUArchitecture arch, cxuint vgprsNum, cxuint sgprsNum,
     160            cxuint priority, cxuint floatMode, bool privMode, bool dx10clamp,
     161            bool debugMode, bool ieeeMode);
     162
     163uint32_t calculatePgmRSrc2(GPUArchitecture arch, bool scratchEn, cxuint userDataNum,
     164            bool trapPresent, cxuint dimMask, cxuint defDimValues, bool tgSizeEn,
     165            cxuint ldsSize, cxuint exceptions);
     166
    159167};
    160168
  • CLRadeonExtender/trunk/amdasm/AsmAmdCL2Format.cpp

    r3344 r3348  
    19671967            cxuint vgprsNum = std::max(config.usedVGPRsNum, 1U);
    19681968            // computePGMRSRC1
    1969             config.computePgmRsrc1 |= ((vgprsNum-1)>>2) |
    1970                     (((sgprsNum-1)>>3)<<6) | ((uint32_t(config.floatMode)&0xff)<<12) |
    1971                     (config.ieeeMode?1U<<23:0) | (uint32_t(config.priority&3)<<10) |
    1972                     (config.privilegedMode?1U<<20:0) | (config.dx10Clamp?1U<<21:0) |
    1973                     (config.debugMode?1U<<22:0);
    1974                    
    1975             uint32_t dimValues = 0;
    1976             if (config.dimMask != BINGEN_DEFAULT)
    1977                 dimValues = ((config.dimMask&7)<<7) |
    1978                         (((config.dimMask&4) ? 2 : (config.dimMask&2) ? 1 : 0)<<11);
    1979             else
    1980                 dimValues |= (config.computePgmRsrc2 & 0x1b80U);
     1969            config.computePgmRsrc1 |= calculatePgmRSrc1(arch, vgprsNum, sgprsNum,
     1970                        config.priority, config.floatMode, config.privilegedMode,
     1971                        config.dx10Clamp, config.debugMode, config.ieeeMode);
    19811972            // computePGMRSRC2
    19821973            config.computePgmRsrc2 = (config.computePgmRsrc2 & 0xffffe440U) |
    1983                             (userSGPRsNum<<1) | ((config.tgSize) ? 0x400 : 0) |
    1984                             ((config.workitemPrivateSegmentSize)?1:0) | dimValues |
    1985                             ((uint32_t(config.exceptions)&0x7f)<<24);
     1974                    calculatePgmRSrc2(arch, (config.workitemPrivateSegmentSize != 0),
     1975                            userSGPRsNum, false, config.dimMask,
     1976                            (config.computePgmRsrc2 & 0x1b80U), config.tgSize,
     1977                            0, config.exceptions);
    19861978           
    19871979            if (config.wavefrontSgprCount == BINGEN16_DEFAULT)
  • CLRadeonExtender/trunk/amdasm/AsmGalliumFormat.cpp

    r3344 r3348  
    18061806    const AsmSymbolMap& symbolMap = assembler.getSymbolMap();
    18071807   
    1808     const cxuint ldsShift = arch<GPUArchitecture::GCN1_1 ? 8 : 9;
    1809     const uint32_t ldsMask = (1U<<ldsShift)-1U;
    1810    
    18111808    for (size_t ki = 0; ki < output.kernels.size(); ki++)
    18121809    {
     
    18761873            }
    18771874           
    1878             uint32_t dimValues = 0;
    1879             if (config.dimMask != BINGEN_DEFAULT)
    1880                 dimValues = ((config.dimMask&7)<<7) |
    1881                         (((config.dimMask&4) ? 2 : (config.dimMask&2) ? 1 : 0)<<11);
    1882             else
    1883                 dimValues |= (config.pgmRSRC2 & 0x1b80U);
    18841875            cxuint sgprsNum = std::max(config.usedSGPRsNum, 1U);
    18851876            cxuint vgprsNum = std::max(config.usedVGPRsNum, 1U);
    1886             uint32_t pgmRSRC1 =  (config.pgmRSRC1) | ((vgprsNum-1)>>2) |
    1887                 (((sgprsNum-1)>>3)<<6) | ((uint32_t(config.floatMode)&0xff)<<12) |
    1888                 (config.ieeeMode?1U<<23:0) | (uint32_t(config.priority&3)<<10) |
    1889                 (config.privilegedMode?1U<<20:0) | (config.dx10Clamp?1U<<21:0) |
    1890                 (config.debugMode?1U<<22:0);
     1877            uint32_t pgmRSRC1 =  (config.pgmRSRC1) |
     1878                    calculatePgmRSrc1(arch, vgprsNum, sgprsNum,
     1879                        config.priority, config.floatMode, config.privilegedMode,
     1880                        config.dx10Clamp, config.debugMode, config.ieeeMode);
    18911881           
    18921882            uint32_t pgmRSRC2 = (config.pgmRSRC2 & 0xffffe440U) |
    1893                         (config.userDataNum<<1) | ((config.tgSize) ? 0x400 : 0) |
    1894                         ((config.scratchBufferSize)?1:0) | dimValues |
    1895                         (((config.localSize+ldsMask)>>ldsShift)<<15) |
    1896                         ((uint32_t(config.exceptions)&0x7f)<<24);
     1883                    calculatePgmRSrc2(arch, (config.scratchBufferSize != 0),
     1884                            config.userDataNum, false, config.dimMask,
     1885                            (config.pgmRSRC2 & 0x1b80U), config.tgSize,
     1886                            config.localSize, config.exceptions);
    18971887           
    18981888            size_t argSegmentSize = 0;
  • CLRadeonExtender/trunk/amdasm/AsmROCmFormat.cpp

    r3341 r3348  
    14181418        amdGpuArchValues.stepping = output.archStepping;
    14191419   
    1420     const cxuint ldsShift = arch<GPUArchitecture::GCN1_1 ? 8 : 9;
    1421     const uint32_t ldsMask = (1U<<ldsShift)-1U;
    14221420    // prepare kernels configuration
    14231421    for (size_t i = 0; i < kernelStates.size(); i++)
     
    15441542        cxuint vgprsNum = std::max(config.usedVGPRsNum, 1U);
    15451543        // computePGMRSRC1
    1546         config.computePgmRsrc1 |= ((vgprsNum-1)>>2) |
    1547                 (((sgprsNum-1)>>3)<<6) | ((uint32_t(config.floatMode)&0xff)<<12) |
    1548                 (config.ieeeMode?1U<<23:0) | (uint32_t(config.priority&3)<<10) |
    1549                 (config.privilegedMode?1U<<20:0) | (config.dx10Clamp?1U<<21:0) |
    1550                 (config.debugMode?1U<<22:0);
    1551                
    1552         uint32_t dimValues = 0;
    1553         if (config.dimMask != BINGEN_DEFAULT)
    1554             dimValues = ((config.dimMask&7)<<7) |
    1555                     (((config.dimMask&4) ? 2 : (config.dimMask&2) ? 1 : 0)<<11);
    1556         else
    1557             dimValues |= (config.computePgmRsrc2 & 0x1b80U);
     1544        config.computePgmRsrc1 |= calculatePgmRSrc1(arch, vgprsNum, sgprsNum,
     1545                        config.priority, config.floatMode, config.privilegedMode,
     1546                        config.dx10Clamp, config.debugMode, config.ieeeMode);
    15581547        // computePGMRSRC2
    15591548        config.computePgmRsrc2 = (config.computePgmRsrc2 & 0xffffe440U) |
    1560                         (userSGPRsNum<<1) | ((config.tgSize) ? 0x400 : 0) |
    1561                         ((config.workitemPrivateSegmentSize)?1:0) | dimValues |
    1562                         (((config.workgroupGroupSegmentSize+ldsMask)>>ldsShift)<<15) |
    1563                         ((uint32_t(config.exceptions)&0x7f)<<24);
     1549                calculatePgmRSrc2(arch, (config.workitemPrivateSegmentSize != 0),
     1550                            userSGPRsNum, false, config.dimMask,
     1551                            (config.computePgmRsrc2 & 0x1b80U), config.tgSize,
     1552                            config.workgroupGroupSegmentSize, config.exceptions);
    15641553       
    15651554        if (config.wavefrontSgprCount == BINGEN16_DEFAULT)
  • CLRadeonExtender/trunk/amdbin/AmdBinGen.cpp

    r3306 r3348  
    13851385   
    13861386    const GPUArchitecture arch = getGPUArchitectureFromDeviceType(input->deviceType);
    1387     const cxuint ldsShift = arch<GPUArchitecture::GCN1_1 ? 8 : 9;
    1388     const uint32_t ldsMask = (1U<<ldsShift)-1U;
    13891387    const cxuint localSize = (isLocalPointers) ? 32768 : config.hwLocalSize;
    13901388    uint32_t curPgmRSRC2 = config.pgmRSRC2;
    1391     curPgmRSRC2 = curPgmRSRC2 | ((((localSize+ldsMask)>>ldsShift)&0x1ff)<<15);
    13921389    cxuint pgmUserSGPRsNum = 0;
    13931390    for (cxuint p = 0; p < userDataElemsNum; p++)
     
    13951392                 config.userDatas[p].regStart+config.userDatas[p].regSize);
    13961393    pgmUserSGPRsNum = (pgmUserSGPRsNum != 0) ? pgmUserSGPRsNum : 2;
    1397     uint32_t dimValues = 0;
    1398     if (config.dimMask != BINGEN_DEFAULT)
    1399         dimValues = ((config.dimMask&7)<<7) |
    1400                 (((config.dimMask&4) ? 2 : (config.dimMask&2) ? 1 : 0)<<11);
    1401     else // get from current pgmRSRC2
    1402         dimValues = (curPgmRSRC2 & 0x1b80U);
    1403     curPgmRSRC2 = (curPgmRSRC2 & 0xffffe440U) | ((pgmUserSGPRsNum&0x1f)<<1) |
    1404             (config.scratchBufferSize != 0) | dimValues | (config.tgSize ? 0x400 : 0) |
    1405             ((uint32_t(config.exceptions)&0x7f)<<24);
     1394    curPgmRSRC2 = (curPgmRSRC2 & 0xffffe440U) |
     1395            calculatePgmRSrc2(arch, (config.scratchBufferSize != 0), pgmUserSGPRsNum,
     1396                    false, config.dimMask, (curPgmRSRC2 & 0x1b80U), config.tgSize,
     1397                    localSize, config.exceptions);
    14061398   
    14071399    putProgInfoEntryLE(bos, 0x80001041U, config.usedVGPRsNum);
  • CLRadeonExtender/trunk/amdbin/AmdCL2BinGen.cpp

    r3327 r3348  
    11581158        dimValues |= (config.pgmRSRC2 & 0x1b80U);
    11591159   
    1160     const uint32_t localPart = (storeLocalSize) ? (((config.localSize+511)>>9)<<15) : 0;
    1161    
    11621160    const bool isGCN14 = arch >= GPUArchitecture::GCN1_4;
    11631161    cxuint userDatasNum = isGCN14 ? 6 : 4;
     
    11711169        userDatasNum = isGCN14 ? 8 : 6;
    11721170   
    1173     return (config.pgmRSRC2 & 0xffffe440U) | (userDatasNum<<1) |
    1174             ((config.tgSize) ? 0x400 : 0) | ((config.scratchBufferSize)?1:0) | dimValues |
    1175             (uint32_t(config.exceptions)<<24) | localPart;
     1171    return (config.pgmRSRC2 & 0xffffe440U) |
     1172            calculatePgmRSrc2(arch, (config.scratchBufferSize != 0),
     1173                    userDatasNum, false, BINGEN_DEFAULT, dimValues, config.tgSize,
     1174                    storeLocalSize ? config.localSize : 0, config.exceptions);
    11761175}
    11771176
     
    12231222    cxuint vgprsNum = std::max(config.usedVGPRsNum, 1U);
    12241223    // pgmrsrc1
    1225     SLEV(setupData.pgmRSRC1, config.pgmRSRC1 | ((vgprsNum-1)>>2) |
    1226             (((sgprsNum-1)>>3)<<6) | ((uint32_t(config.floatMode)&0xff)<<12) |
    1227             (newBinaries ? (1U<<21) : 0) /*dx11_clamp */ |
    1228             (config.ieeeMode?1U<<23:0) | (uint32_t(config.priority&3)<<10) |
    1229             (config.privilegedMode?1U<<20:0) | (config.dx10Clamp?1U<<21:0) |
    1230             (config.debugMode?1U<<22:0));
     1224    SLEV(setupData.pgmRSRC1, config.pgmRSRC1 |
     1225            calculatePgmRSrc1(arch, vgprsNum, sgprsNum, config.priority, config.floatMode,
     1226                    config.privilegedMode, config.dx10Clamp | newBinaries,
     1227                    config.debugMode, config.ieeeMode));
    12311228    // pgmrsrc2 - without ldssize
    12321229    uint16_t setup1 = 0x1;
  • CLRadeonExtender/trunk/amdbin/GalliumBinaries.cpp

    r3336 r3348  
    472472    {
    473473        const GPUArchitecture arch = getGPUArchitectureFromDeviceType(input.deviceType);
    474         const cxuint ldsShift = arch<GPUArchitecture::GCN1_1 ? 8 : 9;
    475         const uint32_t ldsMask = (1U<<ldsShift)-1U;
    476        
    477474        const cxuint progInfoEntriesNum = input.isLLVM390 ? 5 : 3;
    478475       
     
    491488               
    492489                uint32_t scratchBlocks = ((config.scratchBufferSize<<6) + 1023)>>10;
    493                 uint32_t dimValues = 0;
    494                 if (config.dimMask != BINGEN_DEFAULT)
    495                     dimValues = ((config.dimMask&7)<<7) |
    496                             (((config.dimMask&4) ? 2 : (config.dimMask&2) ? 1 : 0)<<11);
    497                 else
    498                     dimValues |= (config.pgmRSRC2 & 0x1b80U);
    499490                cxuint sgprsNum = std::max(config.usedSGPRsNum, 1U);
    500491                cxuint vgprsNum = std::max(config.usedVGPRsNum, 1U);
    501                 /// pgmRSRC1
    502                 outEntries[0].value = (config.pgmRSRC1) | ((vgprsNum-1)>>2) |
    503                         (((sgprsNum-1)>>3)<<6) | ((uint32_t(config.floatMode)&0xff)<<12) |
    504                         (config.ieeeMode?1U<<23:0) | (uint32_t(config.priority&3)<<10) |
    505                         (config.privilegedMode?1U<<20:0) | (config.dx10Clamp?1U<<21:0) |
    506                         (config.debugMode?1U<<22:0);
     492                /// pgmRSRC1 and pgmRSRC2
     493                outEntries[0].value = (config.pgmRSRC1) |
     494                    calculatePgmRSrc1(arch, vgprsNum, sgprsNum, config.priority,
     495                            config.floatMode, config.privilegedMode, config.dx10Clamp,
     496                            config.debugMode, config.ieeeMode);
     497                outEntries[1].value = (config.pgmRSRC2 & 0xffffe440U) |
     498                    calculatePgmRSrc2(arch, (config.scratchBufferSize != 0),
     499                            config.userDataNum, false, config.dimMask,
     500                            (config.pgmRSRC2 & 0x1b80U), config.tgSize,
     501                            config.localSize, config.exceptions);
    507502               
    508                 outEntries[1].value = (config.pgmRSRC2 & 0xffffe440U) |
    509                         (config.userDataNum<<1) | ((config.tgSize) ? 0x400 : 0) |
    510                         ((config.scratchBufferSize)?1:0) | dimValues |
    511                         (((config.localSize+ldsMask)>>ldsShift)<<15) |
    512                         ((uint32_t(config.exceptions)&0x7f)<<24);
    513503                outEntries[2].value = (scratchBlocks)<<12;
    514504                if (input.isLLVM390)
  • CLRadeonExtender/trunk/utils/GPUId.cpp

    r3257 r3348  
    2121#include <cstring>
    2222#include <utility>
     23#include <cstdint>
     24#include <climits>
    2325#include <CLRX/utils/Utilities.h>
    2426#include <CLRX/utils/GPUId.h>
     
    244246    return 0;
    245247}
     248
     249uint32_t CLRX::calculatePgmRSrc1(GPUArchitecture arch, cxuint vgprsNum, cxuint sgprsNum,
     250            cxuint priority, cxuint floatMode, bool privMode, bool dx10Clamp,
     251            bool debugMode, bool ieeeMode)
     252{
     253    return ((vgprsNum-1)>>2) | (((sgprsNum-1)>>3)<<6) |
     254            ((uint32_t(floatMode)&0xff)<<12) |
     255            (ieeeMode?1U<<23:0) | (uint32_t(priority&3)<<10) |
     256            (privMode?1U<<20:0) | (dx10Clamp?1U<<21:0) |
     257            (debugMode?1U<<22:0);
     258}
     259
     260uint32_t CLRX::calculatePgmRSrc2(GPUArchitecture arch, bool scratchEn, cxuint userDataNum,
     261            bool trapPresent, cxuint dimMask, cxuint defDimValues, bool tgSizeEn,
     262            cxuint ldsSize, cxuint exceptions)
     263{
     264    const cxuint ldsShift = arch<GPUArchitecture::GCN1_1 ? 8 : 9;
     265    const uint32_t ldsMask = (1U<<ldsShift)-1U;
     266    uint32_t dimValues = 0;
     267    if (dimMask != UINT_MAX)
     268        dimValues = ((dimMask&7)<<7) | (((dimMask&4) ? 2 : (dimMask&2) ? 1 : 0)<<11);
     269    else //
     270        dimValues = defDimValues;
     271    return uint32_t(scratchEn ? 1U : 0U) | (uint32_t(userDataNum)<<1) |
     272            dimValues | (tgSizeEn ? 0x400U : 0U) | (trapPresent ? 0x40U : 0U) |
     273            (((uint32_t(ldsSize+ldsMask)>>ldsShift)&0x1ff)<<15) |
     274            ((uint32_t(exceptions)&0x7f)<<24);
     275}
     276
Note: See TracChangeset for help on using the changeset viewer.