Create separate command stream receiver for every device.

Change-Id: I8073380941e2a3bfe57610e6e437bdc177dcc2d5
This commit is contained in:
Mrozek, Michal
2018-09-11 15:55:04 +02:00
committed by sys_ocldev
parent 3f6a94175b
commit 8e33ec04c5
11 changed files with 113 additions and 72 deletions

View File

@ -41,29 +41,32 @@ void ExecutionEnvironment::initGmm(const HardwareInfo *hwInfo) {
gmmHelper.reset(new GmmHelper(hwInfo));
}
}
bool ExecutionEnvironment::initializeCommandStreamReceiver(const HardwareInfo *pHwInfo) {
if (this->commandStreamReceiver) {
bool ExecutionEnvironment::initializeCommandStreamReceiver(const HardwareInfo *pHwInfo, uint32_t deviceIndex) {
if (deviceIndex + 1 > commandStreamReceivers.size()) {
commandStreamReceivers.resize(deviceIndex + 1);
}
if (this->commandStreamReceivers[deviceIndex]) {
return true;
}
CommandStreamReceiver *commandStreamReceiver = createCommandStream(pHwInfo, *this);
std::unique_ptr<CommandStreamReceiver> commandStreamReceiver(createCommandStream(pHwInfo, *this));
if (!commandStreamReceiver) {
return false;
}
if (pHwInfo->capabilityTable.ftrRenderCompressedBuffers || pHwInfo->capabilityTable.ftrRenderCompressedImages) {
commandStreamReceiver->createPageTableManager();
}
this->commandStreamReceiver.reset(commandStreamReceiver);
this->commandStreamReceivers[deviceIndex] = std::move(commandStreamReceiver);
return true;
}
void ExecutionEnvironment::initializeMemoryManager(bool enable64KBpages, bool enableLocalMemory) {
void ExecutionEnvironment::initializeMemoryManager(bool enable64KBpages, bool enableLocalMemory, uint32_t deviceIndex) {
if (this->memoryManager) {
commandStreamReceiver->setMemoryManager(this->memoryManager.get());
commandStreamReceivers[deviceIndex]->setMemoryManager(this->memoryManager.get());
return;
}
memoryManager.reset(commandStreamReceiver->createMemoryManager(enable64KBpages, enableLocalMemory));
commandStreamReceiver->setMemoryManager(memoryManager.get());
memoryManager.reset(commandStreamReceivers[deviceIndex]->createMemoryManager(enable64KBpages, enableLocalMemory));
commandStreamReceivers[deviceIndex]->setMemoryManager(memoryManager.get());
DEBUG_BREAK_IF(!this->memoryManager);
}
void ExecutionEnvironment::initSourceLevelDebugger(const HardwareInfo &hwInfo) {

View File

@ -24,6 +24,7 @@
#include "runtime/utilities/reference_tracked_object.h"
#include <mutex>
#include <vector>
namespace OCLRT {
class GmmHelper;
@ -48,8 +49,8 @@ class ExecutionEnvironment : public ReferenceTrackedObject<ExecutionEnvironment>
~ExecutionEnvironment() override;
void initGmm(const HardwareInfo *hwInfo);
bool initializeCommandStreamReceiver(const HardwareInfo *pHwInfo);
void initializeMemoryManager(bool enable64KBpages, bool enableLocalMemory);
bool initializeCommandStreamReceiver(const HardwareInfo *pHwInfo, uint32_t deviceIndex);
void initializeMemoryManager(bool enable64KBpages, bool enableLocalMemory, uint32_t deviceIndex);
void initSourceLevelDebugger(const HardwareInfo &hwInfo);
GmmHelper *getGmmHelper() const;
@ -58,7 +59,7 @@ class ExecutionEnvironment : public ReferenceTrackedObject<ExecutionEnvironment>
std::unique_ptr<OSInterface> osInterface;
std::unique_ptr<MemoryManager> memoryManager;
std::unique_ptr<CommandStreamReceiver> commandStreamReceiver;
std::vector<std::unique_ptr<CommandStreamReceiver>> commandStreamReceivers;
std::unique_ptr<BuiltIns> builtins;
std::unique_ptr<CompilerInterface> compilerInterface;
std::unique_ptr<SourceLevelDebugger> sourceLevelDebugger;