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();
|
||||
}
|
||||
deviceBuildInfos[device] = {};
|
||||
if (device->getNumGenericSubDevices() > 1) {
|
||||
for (auto i = 0u; i < device->getNumGenericSubDevices(); i++) {
|
||||
auto subDevice = device->getNearestGenericSubDevice(i);
|
||||
if (isDeviceAssociated(*subDevice)) {
|
||||
deviceBuildInfos[device].associatedSubDevices.push_back(subDevice);
|
||||
}
|
||||
for (auto i = 0u; i < device->getNumSubDevices(); i++) {
|
||||
auto subDevice = device->getSubDevice(i);
|
||||
if (isDeviceAssociated(*subDevice)) {
|
||||
deviceBuildInfos[device].associatedSubDevices.push_back(subDevice);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,9 @@
|
|||
#include "opencl/source/cl_device/cl_device.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_context.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_platform.h"
|
||||
#include "opencl/test/unit_test/mocks/mock_program.h"
|
||||
#include "test.h"
|
||||
|
||||
using namespace NEO;
|
||||
|
@ -876,6 +878,45 @@ HWTEST2_F(EngineInstancedDeviceTests, givenEngineInstancedDeviceWhenProgrammingC
|
|||
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) {
|
||||
auto device = std::make_unique<MockDevice>();
|
||||
device->initializeRootCommandStreamReceiver();
|
||||
|
|
Loading…
Reference in New Issue