Fix assigning SubDevices to Program
Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
parent
90f137c2a1
commit
e096bf881e
|
@ -54,12 +54,10 @@ Program::Program(Context *context, bool isBuiltIn, const ClDeviceVector &clDevic
|
||||||
maxRootDeviceIndex = device->getRootDeviceIndex();
|
maxRootDeviceIndex = device->getRootDeviceIndex();
|
||||||
}
|
}
|
||||||
deviceBuildInfos[device] = {};
|
deviceBuildInfos[device] = {};
|
||||||
if (device->getNumGenericSubDevices() > 1) {
|
for (auto i = 0u; i < device->getNumSubDevices(); i++) {
|
||||||
for (auto i = 0u; i < device->getNumGenericSubDevices(); i++) {
|
auto subDevice = device->getSubDevice(i);
|
||||||
auto subDevice = device->getNearestGenericSubDevice(i);
|
if (isDeviceAssociated(*subDevice)) {
|
||||||
if (isDeviceAssociated(*subDevice)) {
|
deviceBuildInfos[device].associatedSubDevices.push_back(subDevice);
|
||||||
deviceBuildInfos[device].associatedSubDevices.push_back(subDevice);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,9 @@
|
||||||
#include "opencl/source/cl_device/cl_device.h"
|
#include "opencl/source/cl_device/cl_device.h"
|
||||||
#include "opencl/test/unit_test/libult/ult_command_stream_receiver.h"
|
#include "opencl/test/unit_test/libult/ult_command_stream_receiver.h"
|
||||||
#include "opencl/test/unit_test/mocks/mock_cl_device.h"
|
#include "opencl/test/unit_test/mocks/mock_cl_device.h"
|
||||||
|
#include "opencl/test/unit_test/mocks/mock_context.h"
|
||||||
#include "opencl/test/unit_test/mocks/mock_platform.h"
|
#include "opencl/test/unit_test/mocks/mock_platform.h"
|
||||||
|
#include "opencl/test/unit_test/mocks/mock_program.h"
|
||||||
#include "test.h"
|
#include "test.h"
|
||||||
|
|
||||||
using namespace NEO;
|
using namespace NEO;
|
||||||
|
@ -876,6 +878,45 @@ HWTEST2_F(EngineInstancedDeviceTests, givenEngineInstancedDeviceWhenProgrammingC
|
||||||
EXPECT_TRUE(cfeState->getSingleSliceDispatchCcsMode());
|
EXPECT_TRUE(cfeState->getSingleSliceDispatchCcsMode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HWTEST_F(EngineInstancedDeviceTests, givenEngineInstancedDeviceWhenCreatingProgramThenAssignAllSubDevices) {
|
||||||
|
constexpr uint32_t genericDevicesCount = 2;
|
||||||
|
constexpr uint32_t ccsCount = 2;
|
||||||
|
|
||||||
|
if (!createDevices(genericDevicesCount, ccsCount)) {
|
||||||
|
GTEST_SKIP();
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *source = "text";
|
||||||
|
size_t sourceSize = strlen(source);
|
||||||
|
|
||||||
|
auto clRootDevice = std::make_unique<ClDevice>(*rootDevice, nullptr);
|
||||||
|
auto clSubDevice = clRootDevice->getSubDevice(0);
|
||||||
|
auto clSubSubDevice0 = clSubDevice->getSubDevice(0);
|
||||||
|
auto clSubSubDevice1 = clSubDevice->getSubDevice(1);
|
||||||
|
|
||||||
|
cl_device_id device_ids[] = {clSubDevice, clSubSubDevice0, clSubSubDevice1};
|
||||||
|
ClDeviceVector deviceVector{device_ids, 3};
|
||||||
|
MockContext context(deviceVector);
|
||||||
|
|
||||||
|
cl_int retVal = CL_INVALID_PROGRAM;
|
||||||
|
auto program = std::unique_ptr<MockProgram>(Program::create<MockProgram>(
|
||||||
|
&context,
|
||||||
|
1,
|
||||||
|
&source,
|
||||||
|
&sourceSize,
|
||||||
|
retVal));
|
||||||
|
|
||||||
|
ASSERT_NE(nullptr, program.get());
|
||||||
|
ASSERT_EQ(CL_SUCCESS, retVal);
|
||||||
|
|
||||||
|
ASSERT_TRUE(program->deviceBuildInfos.find(clSubDevice) != program->deviceBuildInfos.end());
|
||||||
|
|
||||||
|
auto &associatedSubDevices = program->deviceBuildInfos[clSubDevice].associatedSubDevices;
|
||||||
|
ASSERT_EQ(2u, associatedSubDevices.size());
|
||||||
|
EXPECT_EQ(clSubSubDevice0, associatedSubDevices[0]);
|
||||||
|
EXPECT_EQ(clSubSubDevice1, associatedSubDevices[1]);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(SubDevicesTest, whenInitializeRootCsrThenDirectSubmissionIsNotInitialized) {
|
TEST(SubDevicesTest, whenInitializeRootCsrThenDirectSubmissionIsNotInitialized) {
|
||||||
auto device = std::make_unique<MockDevice>();
|
auto device = std::make_unique<MockDevice>();
|
||||||
device->initializeRootCommandStreamReceiver();
|
device->initializeRootCommandStreamReceiver();
|
||||||
|
|
Loading…
Reference in New Issue