Add multiEngine field to command queue with debug variable to override it.

Change-Id: I3c1e424a7ad545e166e178d1726595e6d9502ca7
This commit is contained in:
Mrozek, Michal
2019-02-12 10:35:22 +01:00
committed by sys_ocldev
parent fbb84476ef
commit 0e7fd2ffed
6 changed files with 28 additions and 0 deletions

View File

@@ -71,6 +71,10 @@ CommandQueue::CommandQueue(Context *context, Device *deviceId, const cl_queue_pr
}
processProperties(properties);
if (DebugManager.flags.ForceMultiEngineQueue.get() > -1) {
this->multiEngineQueue = DebugManager.flags.ForceMultiEngineQueue.get();
}
}
CommandQueue::~CommandQueue() {

View File

@@ -406,6 +406,8 @@ class CommandQueue : public BaseObject<_cl_command_queue> {
return requiresCacheFlushAfterWalker;
}
bool isMultiEngineQueue() { return this->multiEngineQueue; }
// taskCount of last task
uint32_t taskCount = 0;
@@ -456,6 +458,7 @@ class CommandQueue : public BaseObject<_cl_command_queue> {
bool mapDcFlushRequired = false;
bool isSpecialCommandQueue = false;
bool requiresCacheFlushAfterWalker = false;
bool multiEngineQueue = false;
std::unique_ptr<TimestampPacketContainer> timestampPacketContainer;

View File

@@ -122,5 +122,6 @@ DECLARE_DEBUG_VARIABLE(int32_t, NodeOrdinal, -1, "-1: default do not override, 0
DECLARE_DEBUG_VARIABLE(int32_t, OverrideThreadArbitrationPolicy, -1, "-1 (dont override) or any valid config (0: Age Based, 1: Round Robin)")
DECLARE_DEBUG_VARIABLE(int32_t, OverrideAubDeviceId, -1, "-1 dont override, any other: use this value for AUB generation device id")
DECLARE_DEBUG_VARIABLE(int32_t, EnableTimestampPacket, -1, "-1: default, 0: disable, 1:enable. Write Timestamp Packet for each set of gpu walkers")
DECLARE_DEBUG_VARIABLE(int32_t, ForceMultiEngineQueue, -1, "-1 no change, 0: force false 1:force true. Forces multi engine queue flag in command queue")
DECLARE_DEBUG_VARIABLE(bool, UseMaxSimdSizeToDeduceMaxWorkgroupSize, false, "With this flag on, max workgroup size is deduced using SIMD32 instead of SIMD8, this causes the max wkg size to be 4 times bigger")
DECLARE_DEBUG_VARIABLE(bool, ReturnRawGpuTimestamps, false, "Driver returns raw GPU tiemstamps instead of calculated ones.")

View File

@@ -23,6 +23,7 @@
#include "unit_tests/fixtures/memory_management_fixture.h"
#include "unit_tests/fixtures/buffer_fixture.h"
#include "unit_tests/helpers/unit_test_helper.h"
#include "unit_tests/helpers/debug_manager_state_restore.h"
#include "unit_tests/libult/ult_command_stream_receiver.h"
#include "unit_tests/mocks/mock_memory_manager.h"
#include "unit_tests/mocks/mock_command_queue.h"
@@ -976,3 +977,20 @@ TEST(CommandQueueDestructorTest, whenCommandQueueIsDestroyedThenDestroysTimestam
context->release();
EXPECT_EQ(1, context->getRefInternalCount());
}
TEST(CommandQueuePropertiesTests, whenDefaultCommandQueueIsCreatedThenItIsNotMultiEngineQueue) {
MockCommandQueue queue;
EXPECT_FALSE(queue.multiEngineQueue);
EXPECT_FALSE(queue.isMultiEngineQueue());
queue.multiEngineQueue = true;
EXPECT_TRUE(queue.isMultiEngineQueue());
}
TEST(CommandQueuePropertiesTests, whenDebugVariableOverridesMultiEngineVariableThenItIsSetToTrue) {
DebugManagerStateRestore restore;
DebugManager.flags.ForceMultiEngineQueue.set(1u);
MockCommandQueue queue;
EXPECT_TRUE(queue.isMultiEngineQueue());
DebugManager.flags.ForceMultiEngineQueue.set(0u);
MockCommandQueue queue2;
EXPECT_FALSE(queue2.isMultiEngineQueue());
}

View File

@@ -17,6 +17,7 @@ namespace OCLRT {
class MockCommandQueue : public CommandQueue {
public:
using CommandQueue::device;
using CommandQueue::multiEngineQueue;
using CommandQueue::obtainNewTimestampPacketNodes;
using CommandQueue::requiresCacheFlushAfterWalker;
using CommandQueue::throttle;

View File

@@ -108,3 +108,4 @@ EnableCacheFlushAfterWalker = 0
EnableHostPtrTracking = 1
DisableDcFlushInEpilogue = 0
EnableCacheFlushAfterWalkerForAllQueues = 0
ForceMultiEngineQueue = -1