Extend scratch implementation

Change-Id: I1bbc0c9be287b1411276b1e61a7ec1c8db238f3f
This commit is contained in:
Kamil Diedrich
2020-10-05 11:39:15 +02:00
committed by sys_ocldev
parent bd9695a19a
commit ce7e293a99
13 changed files with 61 additions and 19 deletions

View File

@@ -280,6 +280,7 @@ CompletionStamp CommandStreamReceiverHw<GfxFamily>::flushTask(
bool checkVfeStateDirty = false;
if (requiredScratchSize || requiredPrivateScratchSize) {
scratchSpaceController->setRequiredScratchSpace(ssh.getCpuBase(),
0u,
requiredScratchSize,
requiredPrivateScratchSize,
this->taskCount,

View File

@@ -21,6 +21,8 @@ class MemoryManager;
struct HardwareInfo;
class OsContext;
using HeapContainer = std::vector<IndirectHeap *>;
namespace ScratchSpaceConstants {
constexpr size_t scratchSpaceOffsetFor64Bit = 4096u;
}
@@ -37,6 +39,7 @@ class ScratchSpaceController {
return privateScratchAllocation;
}
virtual void setRequiredScratchSpace(void *sshBaseAddress,
uint32_t scratchSlot,
uint32_t requiredPerThreadScratchSize,
uint32_t requiredPerThreadPrivateScratchSize,
uint32_t currentTaskCount,
@@ -47,6 +50,14 @@ class ScratchSpaceController {
virtual uint64_t getScratchPatchAddress() = 0;
virtual void reserveHeap(IndirectHeap::Type heapType, IndirectHeap *&indirectHeap) = 0;
virtual void programHeaps(HeapContainer &heapContainer,
uint32_t scratchSlot,
uint32_t requiredPerThreadScratchSize,
uint32_t requiredPerThreadPrivateScratchSize,
uint32_t currentTaskCount,
OsContext &osContext,
bool &stateBaseAddressDirty,
bool &vfeStateDirty) = 0;
protected:
MemoryManager *getMemoryManager() const;

View File

@@ -23,6 +23,7 @@ ScratchSpaceControllerBase::ScratchSpaceControllerBase(uint32_t rootDeviceIndex,
}
void ScratchSpaceControllerBase::setRequiredScratchSpace(void *sshBaseAddress,
uint32_t scratchSlot,
uint32_t requiredPerThreadScratchSize,
uint32_t requiredPerThreadPrivateScratchSize,
uint32_t currentTaskCount,
@@ -80,4 +81,13 @@ void ScratchSpaceControllerBase::reserveHeap(IndirectHeap::Type heapType, Indire
}
}
void ScratchSpaceControllerBase::programHeaps(HeapContainer &heapContainer,
uint32_t offset,
uint32_t requiredPerThreadScratchSize,
uint32_t requiredPerThreadPrivateScratchSize,
uint32_t currentTaskCount,
OsContext &osContext,
bool &stateBaseAddressDirty,
bool &vfeStateDirty) {
}
} // namespace NEO

View File

@@ -15,6 +15,7 @@ class ScratchSpaceControllerBase : public ScratchSpaceController {
ScratchSpaceControllerBase(uint32_t rootDeviceIndex, ExecutionEnvironment &environment, InternalAllocationStorage &allocationStorage);
void setRequiredScratchSpace(void *sshBaseAddress,
uint32_t scratchSlot,
uint32_t requiredPerThreadScratchSize,
uint32_t requiredPerThreadPrivateScratchSize,
uint32_t currentTaskCount,
@@ -25,6 +26,14 @@ class ScratchSpaceControllerBase : public ScratchSpaceController {
uint64_t getScratchPatchAddress() override;
void reserveHeap(IndirectHeap::Type heapType, IndirectHeap *&indirectHeap) override;
void programHeaps(HeapContainer &heapContainer,
uint32_t scratchSlot,
uint32_t requiredPerThreadScratchSize,
uint32_t requiredPerThreadPrivateScratchSize,
uint32_t currentTaskCount,
OsContext &osContext,
bool &stateBaseAddressDirty,
bool &vfeStateDirty) override;
protected:
void createScratchSpaceAllocation();