Skip to content

Commit d6496f9

Browse files
Jaime ArteagaCompute-Runtime-Automation
authored andcommitted
Add support for floating point atomics properties extension
Signed-off-by: Jaime Arteaga <jaime.a.arteaga.molina@intel.com>
1 parent dc9b856 commit d6496f9

File tree

14 files changed

+181
-16
lines changed

14 files changed

+181
-16
lines changed

level_zero/core/source/device/device_imp.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,6 @@ static constexpr ze_device_fp_flags_t defaultFpFlags = static_cast<ze_device_fp_
302302
ZE_DEVICE_FP_FLAG_FMA);
303303

304304
ze_result_t DeviceImp::getKernelProperties(ze_device_module_properties_t *pKernelProperties) {
305-
memset(pKernelProperties, 0, sizeof(ze_device_module_properties_t));
306305
const auto &hardwareInfo = this->neoDevice->getHardwareInfo();
307306
const auto &deviceInfo = this->neoDevice->getDeviceInfo();
308307
auto &hwHelper = NEO::HwHelper::get(hardwareInfo.platform.eRenderCoreFamily);
@@ -349,6 +348,19 @@ ze_result_t DeviceImp::getKernelProperties(ze_device_module_properties_t *pKerne
349348

350349
pKernelProperties->printfBufferSize = static_cast<uint32_t>(this->neoDevice->getDeviceInfo().printfBufferSize);
351350

351+
if (pKernelProperties->pNext) {
352+
ze_base_desc_t *extendedProperties = reinterpret_cast<ze_base_desc_t *>(pKernelProperties->pNext);
353+
if (extendedProperties->stype == ZE_STRUCTURE_TYPE_FLOAT_ATOMIC_EXT_PROPERTIES) {
354+
ze_float_atomic_ext_properties_t *floatProperties =
355+
reinterpret_cast<ze_float_atomic_ext_properties_t *>(extendedProperties);
356+
auto &hwInfo = this->getHwInfo();
357+
auto &hwInfoConfig = *NEO::HwInfoConfig::get(hwInfo.platform.eProductFamily);
358+
hwInfoConfig.getKernelExtendedProperties(&floatProperties->fp16Flags,
359+
&floatProperties->fp32Flags,
360+
&floatProperties->fp64Flags);
361+
}
362+
}
363+
352364
return ZE_RESULT_SUCCESS;
353365
}
354366

level_zero/core/source/driver/driver_handle_imp.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ struct DriverHandleImp : public DriverHandle {
9494
std::vector<Device *> devices;
9595
// Spec extensions
9696
const std::vector<std::pair<std::string, uint32_t>> extensionsSupported = {
97+
{ZE_FLOAT_ATOMICS_EXT_NAME, ZE_FLOAT_ATOMICS_EXT_VERSION_CURRENT},
9798
{ZE_RELAXED_ALLOCATION_LIMITS_EXP_NAME, ZE_RELAXED_ALLOCATION_LIMITS_EXP_VERSION_CURRENT},
9899
{ZE_MODULE_PROGRAM_EXP_NAME, ZE_MODULE_PROGRAM_EXP_VERSION_CURRENT},
99100
{ZE_GLOBAL_OFFSET_EXP_NAME, ZE_GLOBAL_OFFSET_EXP_VERSION_CURRENT}};

level_zero/core/test/unit_tests/gen11/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright (C) 2020 Intel Corporation
2+
# Copyright (C) 2020-2021 Intel Corporation
33
#
44
# SPDX-License-Identifier: MIT
55
#
@@ -10,5 +10,6 @@ if(TESTS_GEN11)
1010
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
1111
${CMAKE_CURRENT_SOURCE_DIR}/enable_l0_mocks_gen11.cpp
1212
${CMAKE_CURRENT_SOURCE_DIR}/test_cmdqueue_thread_arbitration_policy_gen11.cpp
13+
${CMAKE_CURRENT_SOURCE_DIR}/test_module_gen11.cpp
1314
)
1415
endif()
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright (C) 2021 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include "test.h"
9+
10+
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
11+
12+
namespace L0 {
13+
namespace ult {
14+
15+
using KernelPropertyTest = Test<DeviceFixture>;
16+
17+
HWTEST2_F(KernelPropertyTest, givenKernelExtendedPropertiesStructureWhenKernelPropertiesCalledThenPropertiesAreCorrectlySet, IsGen11HP) {
18+
ze_device_module_properties_t kernelProperties = {};
19+
ze_float_atomic_ext_properties_t kernelExtendedProperties = {};
20+
kernelExtendedProperties.stype = ZE_STRUCTURE_TYPE_FLOAT_ATOMIC_EXT_PROPERTIES;
21+
kernelProperties.pNext = &kernelExtendedProperties;
22+
ze_result_t res = device->getKernelProperties(&kernelProperties);
23+
EXPECT_EQ(res, ZE_RESULT_SUCCESS);
24+
25+
EXPECT_EQ(0u, kernelExtendedProperties.fp16Flags);
26+
EXPECT_EQ(0u, kernelExtendedProperties.fp32Flags);
27+
EXPECT_EQ(0u, kernelExtendedProperties.fp64Flags);
28+
}
29+
30+
} // namespace ult
31+
} // namespace L0

level_zero/core/test/unit_tests/gen12lp/CMakeLists.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright (C) 2020 Intel Corporation
2+
# Copyright (C) 2020-2021 Intel Corporation
33
#
44
# SPDX-License-Identifier: MIT
55
#
@@ -11,6 +11,7 @@ if(TESTS_GEN12LP)
1111
${CMAKE_CURRENT_SOURCE_DIR}/enable_l0_mocks_gen12lp.cpp
1212
${CMAKE_CURRENT_SOURCE_DIR}/test_device_gen12lp.cpp
1313
${CMAKE_CURRENT_SOURCE_DIR}/test_events_gen12lp.cpp
14+
${CMAKE_CURRENT_SOURCE_DIR}/test_module_gen12lp.cpp
1415
)
1516

1617
target_include_directories(${TARGET_NAME} PRIVATE ${COMPUTE_RUNTIME_DIR}/level_zero/core/source/gen12lp/definitions${BRANCH_DIR_SUFFIX}/)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright (C) 2020-2021 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include "test.h"
9+
10+
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
11+
12+
namespace L0 {
13+
namespace ult {
14+
15+
using KernelPropertyTest = Test<DeviceFixture>;
16+
17+
HWTEST2_F(KernelPropertyTest, givenKernelExtendedPropertiesStructureWhenKernelPropertiesCalledThenPropertiesAreCorrectlySet, IsGen12LP) {
18+
ze_device_module_properties_t kernelProperties = {};
19+
ze_float_atomic_ext_properties_t kernelExtendedProperties = {};
20+
kernelExtendedProperties.stype = ZE_STRUCTURE_TYPE_FLOAT_ATOMIC_EXT_PROPERTIES;
21+
kernelProperties.pNext = &kernelExtendedProperties;
22+
ze_result_t res = device->getKernelProperties(&kernelProperties);
23+
EXPECT_EQ(res, ZE_RESULT_SUCCESS);
24+
25+
EXPECT_EQ(0u, kernelExtendedProperties.fp16Flags);
26+
EXPECT_EQ(0u, kernelExtendedProperties.fp32Flags);
27+
EXPECT_EQ(0u, kernelExtendedProperties.fp64Flags);
28+
}
29+
30+
} // namespace ult
31+
} // namespace L0

level_zero/core/test/unit_tests/gen9/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ if(TESTS_GEN9)
1313
${CMAKE_CURRENT_SOURCE_DIR}/test_cmdqueue_enqueuecommandlist_gen9.cpp
1414
${CMAKE_CURRENT_SOURCE_DIR}/test_cmdqueue_gen9.cpp
1515
${CMAKE_CURRENT_SOURCE_DIR}/test_device_gen9.cpp
16+
${CMAKE_CURRENT_SOURCE_DIR}/test_module_gen9.cpp
1617
)
1718
endif()

level_zero/core/test/unit_tests/gen9/test_device_gen9.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,6 @@ using ::testing::_;
1616
using ::testing::AnyNumber;
1717
using ::testing::Return;
1818

19-
using KernelPropertyTest = Test<DeviceFixture>;
20-
21-
HWTEST2_F(KernelPropertyTest, givenReturnedKernelPropertiesThenExpectedDp4aSupportReturned, IsGen9) {
22-
ze_device_module_properties_t kernelProps;
23-
24-
device->getKernelProperties(&kernelProps);
25-
EXPECT_EQ(0u, kernelProps.flags & ZE_DEVICE_MODULE_FLAG_DP4A);
26-
}
27-
2819
using DevicePropertyTest = Test<DeviceFixture>;
2920

3021
HWTEST2_F(DevicePropertyTest, givenReturnedDevicePropertiesThenExpectedPropertiesFlagsSet, IsGen9) {
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/*
2+
* Copyright (C) 2021 Intel Corporation
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*
6+
*/
7+
8+
#include "test.h"
9+
10+
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
11+
12+
namespace L0 {
13+
namespace ult {
14+
15+
using KernelPropertyTest = Test<DeviceFixture>;
16+
17+
HWTEST2_F(KernelPropertyTest, givenReturnedKernelPropertiesThenExpectedDp4aSupportReturned, IsGen9) {
18+
ze_device_module_properties_t kernelProps = {};
19+
20+
device->getKernelProperties(&kernelProps);
21+
EXPECT_EQ(0u, kernelProps.flags & ZE_DEVICE_MODULE_FLAG_DP4A);
22+
}
23+
24+
HWTEST2_F(KernelPropertyTest, givenKernelExtendedPropertiesStructureWhenKernelPropertiesCalledThenPropertiesAreCorrectlySet, IsGen9) {
25+
ze_device_module_properties_t kernelProperties = {};
26+
ze_float_atomic_ext_properties_t kernelExtendedProperties = {};
27+
kernelExtendedProperties.stype = ZE_STRUCTURE_TYPE_FLOAT_ATOMIC_EXT_PROPERTIES;
28+
kernelProperties.pNext = &kernelExtendedProperties;
29+
ze_result_t res = device->getKernelProperties(&kernelProperties);
30+
EXPECT_EQ(res, ZE_RESULT_SUCCESS);
31+
32+
EXPECT_EQ(0u, kernelExtendedProperties.fp16Flags);
33+
EXPECT_EQ(0u, kernelExtendedProperties.fp32Flags);
34+
EXPECT_EQ(0u, kernelExtendedProperties.fp64Flags);
35+
}
36+
37+
} // namespace ult
38+
} // namespace L0

level_zero/core/test/unit_tests/sources/device/test_device.cpp

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,11 +196,49 @@ TEST_F(DeviceHostPointerTest, givenHostPointerNotAcceptedByKernelThenNewAllocati
196196
delete[] buffer;
197197
}
198198

199+
TEST_F(DeviceTest, givenKernelExtendedPropertiesStructureWhenKernelPropertiesCalledThenSuccessIsReturnedAndPropertiesAreSet) {
200+
ze_device_module_properties_t kernelProperties = {};
201+
202+
ze_float_atomic_ext_properties_t kernelExtendedProperties = {};
203+
kernelExtendedProperties.stype = ZE_STRUCTURE_TYPE_FLOAT_ATOMIC_EXT_PROPERTIES;
204+
uint32_t maxValue = static_cast<ze_device_fp_flags_t>(std::numeric_limits<uint32_t>::max());
205+
kernelExtendedProperties.fp16Flags = maxValue;
206+
kernelExtendedProperties.fp32Flags = maxValue;
207+
kernelExtendedProperties.fp64Flags = maxValue;
208+
209+
kernelProperties.pNext = &kernelExtendedProperties;
210+
ze_result_t res = device->getKernelProperties(&kernelProperties);
211+
EXPECT_EQ(res, ZE_RESULT_SUCCESS);
212+
EXPECT_NE(maxValue, kernelExtendedProperties.fp16Flags);
213+
EXPECT_NE(maxValue, kernelExtendedProperties.fp32Flags);
214+
EXPECT_NE(maxValue, kernelExtendedProperties.fp64Flags);
215+
}
216+
217+
TEST_F(DeviceTest, givenKernelExtendedPropertiesStructureWhenKernelPropertiesCalledWithIncorrectsStypeThenSuccessIsReturnedButPropertiesAreNotSet) {
218+
ze_device_module_properties_t kernelProperties = {};
219+
220+
ze_float_atomic_ext_properties_t kernelExtendedProperties = {};
221+
kernelExtendedProperties.stype = ZE_STRUCTURE_TYPE_FORCE_UINT32;
222+
uint32_t maxValue = static_cast<ze_device_fp_flags_t>(std::numeric_limits<uint32_t>::max());
223+
kernelExtendedProperties.fp16Flags = maxValue;
224+
kernelExtendedProperties.fp32Flags = maxValue;
225+
kernelExtendedProperties.fp64Flags = maxValue;
226+
227+
kernelProperties.pNext = &kernelExtendedProperties;
228+
ze_result_t res = device->getKernelProperties(&kernelProperties);
229+
EXPECT_EQ(res, ZE_RESULT_SUCCESS);
230+
EXPECT_EQ(maxValue, kernelExtendedProperties.fp16Flags);
231+
EXPECT_EQ(maxValue, kernelExtendedProperties.fp32Flags);
232+
EXPECT_EQ(maxValue, kernelExtendedProperties.fp64Flags);
233+
}
234+
199235
TEST_F(DeviceTest, givenKernelPropertiesStructureWhenKernelPropertiesCalledThenAllPropertiesAreAssigned) {
200236
const auto &hardwareInfo = this->neoDevice->getHardwareInfo();
201237

202-
ze_device_module_properties_t kernelProperties, kernelPropertiesBefore;
238+
ze_device_module_properties_t kernelProperties = {};
239+
ze_device_module_properties_t kernelPropertiesBefore = {};
203240
memset(&kernelProperties, std::numeric_limits<int>::max(), sizeof(ze_device_module_properties_t));
241+
kernelProperties.pNext = nullptr;
204242
kernelPropertiesBefore = kernelProperties;
205243
device->getKernelProperties(&kernelProperties);
206244

@@ -592,8 +630,9 @@ struct DeviceHasNoDoubleFp64Test : public ::testing::Test {
592630
};
593631

594632
TEST_F(DeviceHasNoDoubleFp64Test, givenDeviceThatDoesntHaveFp64WhenDbgFlagEnablesFp64ThenReportFp64Flags) {
595-
ze_device_module_properties_t kernelProperties;
633+
ze_device_module_properties_t kernelProperties = {};
596634
memset(&kernelProperties, std::numeric_limits<int>::max(), sizeof(ze_device_module_properties_t));
635+
kernelProperties.pNext = nullptr;
597636

598637
device->getKernelProperties(&kernelProperties);
599638
EXPECT_FALSE(kernelProperties.flags & ZE_DEVICE_MODULE_FLAG_FP64);
@@ -631,8 +670,9 @@ struct DeviceHasNo64BitAtomicTest : public ::testing::Test {
631670
};
632671

633672
TEST_F(DeviceHasNo64BitAtomicTest, givenDeviceWithNoSupportForInteger64BitAtomicsThenFlagsAreSetCorrectly) {
634-
ze_device_module_properties_t kernelProperties;
673+
ze_device_module_properties_t kernelProperties = {};
635674
memset(&kernelProperties, std::numeric_limits<int>::max(), sizeof(ze_device_module_properties_t));
675+
kernelProperties.pNext = nullptr;
636676

637677
device->getKernelProperties(&kernelProperties);
638678
EXPECT_TRUE(kernelProperties.flags & ZE_DEVICE_MODULE_FLAG_FP16);
@@ -658,8 +698,9 @@ struct DeviceHas64BitAtomicTest : public ::testing::Test {
658698
};
659699

660700
TEST_F(DeviceHas64BitAtomicTest, givenDeviceWithSupportForInteger64BitAtomicsThenFlagsAreSetCorrectly) {
661-
ze_device_module_properties_t kernelProperties;
701+
ze_device_module_properties_t kernelProperties = {};
662702
memset(&kernelProperties, std::numeric_limits<int>::max(), sizeof(ze_device_module_properties_t));
703+
kernelProperties.pNext = nullptr;
663704

664705
device->getKernelProperties(&kernelProperties);
665706
EXPECT_TRUE(kernelProperties.flags & ZE_DEVICE_MODULE_FLAG_FP16);

0 commit comments

Comments
 (0)