[ROCm][TCT][HIP] cooperative stream test case is failing.

Make sure lockXfer() in the blit manager returns a valid value.
Port the latest PAL backend logic into the ROCr backend.
This change doesn't fix the issue, reported in the ticket.

Change-Id: I54101a824f49a2dcfbbf5414cb5b3af41745306d
Этот коммит содержится в:
German Andryeyev
2020-04-23 15:01:02 -04:00
родитель a3f163be6a
Коммит 89133a7301
3 изменённых файлов: 7 добавлений и 12 удалений
+1 -8
Просмотреть файл
@@ -707,7 +707,7 @@ KernelBlitManager::KernelBlitManager(VirtualGPU& gpu, Setup setup)
program_(nullptr),
constantBuffer_(nullptr),
xferBufferSize_(0),
lockXferOps_(nullptr) {
lockXferOps_("Transfer Ops Lock", true) {
for (uint i = 0; i < BlitTotal; ++i) {
kernels_[i] = nullptr;
}
@@ -733,8 +733,6 @@ KernelBlitManager::~KernelBlitManager() {
if (nullptr != constantBuffer_) {
constantBuffer_->release();
}
delete lockXferOps_;
}
bool KernelBlitManager::create(amd::Device& device) {
@@ -797,11 +795,6 @@ bool KernelBlitManager::createProgram(Device& device) {
return false;
}
lockXferOps_ = new amd::Monitor("Transfer Ops Lock", true);
if (nullptr == lockXferOps_) {
return false;
}
return result;
}
+3 -1
Просмотреть файл
@@ -396,6 +396,8 @@ class KernelBlitManager : public DmaBlitManager {
bool RunGwsInit(uint32_t value //!< Initial value for GWS resource
) const;
virtual amd::Monitor* lockXfer() const { return &lockXferOps_; }
private:
static const size_t MaxXferBuffers = 2;
static const uint TransferSplitSize = 1;
@@ -448,7 +450,7 @@ class KernelBlitManager : public DmaBlitManager {
amd::Kernel* kernels_[BlitTotal]; //!< GPU kernels for blit
amd::Memory* constantBuffer_; //!< An internal CB for blits
size_t xferBufferSize_; //!< Transfer buffer size
amd::Monitor* lockXferOps_; //!< Lock transfer operation
mutable amd::Monitor lockXferOps_; //!< Lock transfer operation
};
static const char* BlitName[KernelBlitManager::BlitTotal] = {
+3 -3
Просмотреть файл
@@ -2300,15 +2300,15 @@ bool VirtualGPU::submitKernelInternal(const amd::NDRangeContainer& sizes, const
*/
void VirtualGPU::submitKernel(amd::NDRangeKernelCommand& vcmd) {
if (vcmd.cooperativeGroups() || vcmd.cooperativeMultiDeviceGroups()) {
// Wait for the execution on the current queue, since the coop groups will use the device queue
releaseGpuMemoryFence();
// Get device queue for exclusive GPU access
VirtualGPU* queue = dev().xferQueue();
// Lock the queue, using the blit manager lock
amd::ScopedLock lock(queue->blitMgr().lockXfer());
// Wait for the execution on the current queue, since the coop groups will use the device queue
releaseGpuMemoryFence();
queue->profilingBegin(vcmd);
if (vcmd.cooperativeGroups()) {