From 97d4fdf57b903a4a865a9b995a2a70d63174ea10 Mon Sep 17 00:00:00 2001 From: Sergey Kanaev Date: Tue, 29 Jun 2021 17:28:50 +0300 Subject: [PATCH 1/2] Allocate device binary images in-place, not in cache Signed-off-by: Sergey Kanaev --- sycl/unittests/helpers/PiImage.hpp | 40 ++++++------------- sycl/unittests/misc/KernelBuildOptions.cpp | 2 +- .../program_manager/itt_annotations.cpp | 2 +- sycl/unittests/scheduler/RequiredWGSize.cpp | 2 +- .../spec_constants/DefaultValues.cpp | 2 +- 5 files changed, 16 insertions(+), 32 deletions(-) diff --git a/sycl/unittests/helpers/PiImage.hpp b/sycl/unittests/helpers/PiImage.hpp index f55d4ccaaafe9..80cb7baec8d43 100644 --- a/sycl/unittests/helpers/PiImage.hpp +++ b/sycl/unittests/helpers/PiImage.hpp @@ -233,46 +233,30 @@ class PiImage { /// Convenience wrapper around pi_device_binaries_struct, that manages mock /// device images' lifecycle. +template class PiImageArray { public: - /// Constructs an array of device images from a single image and registers - /// it with SYCL runtime. - PiImageArray(PiImage Image) { - MImages.push_back(std::move(Image)); - convertImages(); - MAllBinaries = pi_device_binaries_struct{ - PI_DEVICE_BINARIES_VERSION, - 1, // num binaries - MNativeImages.data(), - nullptr, // not used, for compatibility with OpenMP - nullptr // not used, for compatibility with OpenMP - }; - __sycl_register_lib(&MAllBinaries); - } + static constexpr size_t NumberOfImages = __NumberOfImages; + + PiImageArray(const PiImage *Imgs) { + for (size_t Idx = 0; Idx < NumberOfImages; ++Idx) + MNativeImages[Idx] = Imgs[Idx].convertToNativeType(); - /// Constructs an array of device images and registers it with SYCL runtime. - PiImageArray(std::vector Images) : MImages(std::move(Images)) { - convertImages(); MAllBinaries = pi_device_binaries_struct{ PI_DEVICE_BINARIES_VERSION, - static_cast(MNativeImages.size()), // num binaries - MNativeImages.data(), - nullptr, // not used, for compatibility with OpenMP - nullptr // not used, for compatibility with OpenMP + NumberOfImages, + MNativeImages, + nullptr, // not used, put here for compatibility with OpenMP + nullptr, // not used, put here for compatibility with OpenMP }; + __sycl_register_lib(&MAllBinaries); } ~PiImageArray() { __sycl_unregister_lib(&MAllBinaries); } private: - void convertImages() { - std::transform( - MImages.begin(), MImages.end(), std::back_inserter(MNativeImages), - [](const PiImage &Img) { return Img.convertToNativeType(); }); - } - std::vector MImages; - std::vector MNativeImages; + pi_device_binary_struct MNativeImages[NumberOfImages]; pi_device_binaries_struct MAllBinaries; }; diff --git a/sycl/unittests/misc/KernelBuildOptions.cpp b/sycl/unittests/misc/KernelBuildOptions.cpp index f97c599deeaa0..eeaf9b827226e 100644 --- a/sycl/unittests/misc/KernelBuildOptions.cpp +++ b/sycl/unittests/misc/KernelBuildOptions.cpp @@ -208,7 +208,7 @@ static sycl::unittest::PiImage generateDefaultImage() { } sycl::unittest::PiImage Img = generateDefaultImage(); -sycl::unittest::PiImageArray ImgArray{Img}; +sycl::unittest::PiImageArray<1> ImgArray{&Img}; TEST(KernelBuildOptions, KernelBundleBasic) { sycl::platform Plt{sycl::default_selector()}; diff --git a/sycl/unittests/program_manager/itt_annotations.cpp b/sycl/unittests/program_manager/itt_annotations.cpp index 3f06fd5653aa1..4b86bc239f266 100644 --- a/sycl/unittests/program_manager/itt_annotations.cpp +++ b/sycl/unittests/program_manager/itt_annotations.cpp @@ -239,7 +239,7 @@ static sycl::unittest::PiImage generateDefaultImage() { } sycl::unittest::PiImage Img = generateDefaultImage(); -sycl::unittest::PiImageArray ImgArray{Img}; +sycl::unittest::PiImageArray<1> ImgArray{&Img}; TEST(ITTNotify, UseKernelBundle) { set_env(ITTProfileEnvVarName, "1"); diff --git a/sycl/unittests/scheduler/RequiredWGSize.cpp b/sycl/unittests/scheduler/RequiredWGSize.cpp index 2bb65b673390e..23607bfe0064c 100644 --- a/sycl/unittests/scheduler/RequiredWGSize.cpp +++ b/sycl/unittests/scheduler/RequiredWGSize.cpp @@ -226,7 +226,7 @@ static sycl::unittest::PiImage generateDefaultImage() { } sycl::unittest::PiImage Img = generateDefaultImage(); -sycl::unittest::PiImageArray ImgArray{Img}; +sycl::unittest::PiImageArray<1> ImgArray{&Img}; static void performChecks() { sycl::platform Plt{sycl::default_selector()}; diff --git a/sycl/unittests/spec_constants/DefaultValues.cpp b/sycl/unittests/spec_constants/DefaultValues.cpp index a5605124a533a..54c22de03c4a2 100644 --- a/sycl/unittests/spec_constants/DefaultValues.cpp +++ b/sycl/unittests/spec_constants/DefaultValues.cpp @@ -203,7 +203,7 @@ static sycl::unittest::PiImage generateDefaultImage() { } sycl::unittest::PiImage Img = generateDefaultImage(); -sycl::unittest::PiImageArray ImgArray{Img}; +sycl::unittest::PiImageArray<1> ImgArray{&Img}; TEST(DefaultValues, DISABLED_DefaultValuesAreSet) { sycl::platform Plt{sycl::default_selector()}; From b497bbb429a0fef27fd9bc2ba61b6c0c73379ea9 Mon Sep 17 00:00:00 2001 From: Sergey Kanaev Date: Tue, 29 Jun 2021 17:51:37 +0300 Subject: [PATCH 2/2] Fix style issue Signed-off-by: Sergey Kanaev --- sycl/unittests/helpers/PiImage.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sycl/unittests/helpers/PiImage.hpp b/sycl/unittests/helpers/PiImage.hpp index 80cb7baec8d43..d951ebbcf93a5 100644 --- a/sycl/unittests/helpers/PiImage.hpp +++ b/sycl/unittests/helpers/PiImage.hpp @@ -233,8 +233,7 @@ class PiImage { /// Convenience wrapper around pi_device_binaries_struct, that manages mock /// device images' lifecycle. -template -class PiImageArray { +template class PiImageArray { public: static constexpr size_t NumberOfImages = __NumberOfImages;