SWDEV-282397 - Alloc scratch memory on the current queue
Device enqueue has an option to execute scheduler on the current queue and it's enabled by default. Make sure scratch is allocated on the current queue for that case. Add max vgpr tracking per program to adjust scratch size accordingly. Change-Id: I2a6d796913a4551a1e7f343a2465d589eec60d8a
This commit is contained in:
@@ -181,6 +181,7 @@ HSAILProgram::HSAILProgram(Device& device, amd::Program& owner)
|
||||
codeSegGpu_(nullptr),
|
||||
codeSegment_(nullptr),
|
||||
maxScratchRegs_(0),
|
||||
maxVgprs_(0),
|
||||
executable_(nullptr),
|
||||
loaderContext_(this) {
|
||||
assert(device.isOnline());
|
||||
@@ -194,6 +195,7 @@ HSAILProgram::HSAILProgram(NullDevice& device, amd::Program& owner)
|
||||
codeSegGpu_(nullptr),
|
||||
codeSegment_(nullptr),
|
||||
maxScratchRegs_(0),
|
||||
maxVgprs_(0),
|
||||
executable_(nullptr),
|
||||
loaderContext_(this) {
|
||||
assert(!device.isOnline());
|
||||
@@ -317,6 +319,7 @@ bool HSAILProgram::setKernels(amd::option::Options* options, void* binary, size_
|
||||
// with dynamic parallelism, since runtime doesn't know which child kernel will be called
|
||||
maxScratchRegs_ =
|
||||
std::max(static_cast<uint>(aKernel->workGroupInfo()->scratchRegs_), maxScratchRegs_);
|
||||
maxVgprs_ = std::max(static_cast<uint>(aKernel->workGroupInfo()->usedVGPRs_), maxVgprs_);
|
||||
}
|
||||
// Allocate kernel table for device enqueuing
|
||||
if (!isNull() && dynamicParallelism && !allocKernelTable()) {
|
||||
@@ -781,6 +784,7 @@ bool LightningProgram::setKernels(amd::option::Options* options, void* binary, s
|
||||
// with dynamic parallelism, since runtime doesn't know which child kernel will be called
|
||||
maxScratchRegs_ =
|
||||
std::max(static_cast<uint>(kernel->workGroupInfo()->scratchRegs_), maxScratchRegs_);
|
||||
maxVgprs_ = std::max(static_cast<uint>(kernel->workGroupInfo()->usedVGPRs_), maxVgprs_);
|
||||
}
|
||||
DestroySegmentCpuAccess();
|
||||
#endif // defined(USE_COMGR_LIBRARY)
|
||||
|
||||
Reference in New Issue
Block a user