From bee106634fcb2c1f2f393dd4340103b700559866 Mon Sep 17 00:00:00 2001 From: hiaselhans Date: Sat, 25 Apr 2020 10:57:30 +0200 Subject: [PATCH 1/6] Always let the backend choose the binary When there is only one binary available the backend should still choose the binary to avoid misleading cl_error_codes Signed-off-by: hiaselhans --- .../detail/program_manager/program_manager.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index 29e3f94053940..dcf51a2e09cd7 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -680,14 +680,12 @@ RTDeviceBinaryImage &ProgramManager::getDeviceImage(OSModuleHandle M, // Ask the native runtime under the given context to choose the device image // it prefers. - if (Imgs.size() > 1) { - std::vector RawImgs(Imgs.size()); - for (unsigned I = 0; I < Imgs.size(); I++) - RawImgs[I] = const_cast(&Imgs[I]->getRawData()); + std::vector RawImgs(Imgs.size()); + for (unsigned I = 0; I < Imgs.size(); I++) + RawImgs[I] = const_cast(&Imgs[I]->getRawData()); - Ctx->getPlugin().call( - getFirstDevice(Ctx), RawImgs.data(), (cl_uint)RawImgs.size(), &ImgInd); - } + Ctx->getPlugin().call( + getFirstDevice(Ctx), RawImgs.data(), (cl_uint)RawImgs.size(), &ImgInd); Img = Imgs[ImgInd].get(); if (DbgProgMgr > 0) { From b7d6c640eb569daecbfe1d83cfc728bbfa338510 Mon Sep 17 00:00:00 2001 From: hiaselhans Date: Tue, 28 Apr 2020 14:59:21 +0200 Subject: [PATCH 2/6] set image type to spir64 for DynRTDeviceBinaryImage Signed-off-by: hiaselhans --- sycl/source/detail/program_manager/program_manager.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index dcf51a2e09cd7..570b1143b4330 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -665,9 +665,13 @@ void ProgramManager::populateSpecConstRegistry() { RTDeviceBinaryImage &ProgramManager::getDeviceImage(OSModuleHandle M, KernelSetId KSId, const context &Context) { - if (DbgProgMgr > 0) + if (DbgProgMgr > 0){ std::cerr << ">>> ProgramManager::getDeviceImage(" << M << ", \"" << KSId << "\", " << getRawSyclObjImpl(Context) << ")\n"; + + std::cerr << "available device images:\n"; + debugPrintBinaryImages(); + } std::lock_guard Guard(Sync::getGlobalLock()); std::vector &Imgs = *m_DeviceImages[KSId]; const ContextImplPtr Ctx = getSyclObjImpl(Context); @@ -689,8 +693,6 @@ RTDeviceBinaryImage &ProgramManager::getDeviceImage(OSModuleHandle M, Img = Imgs[ImgInd].get(); if (DbgProgMgr > 0) { - std::cerr << "available device images:\n"; - debugPrintBinaryImages(); std::cerr << "selected device image: " << &Img->getRawData() << "\n"; Img->print(); } @@ -992,7 +994,7 @@ DynRTDeviceBinaryImage::DynRTDeviceBinaryImage( Bin = new pi_device_binary_struct(); Bin->Version = PI_DEVICE_BINARY_VERSION; Bin->Kind = PI_DEVICE_BINARY_OFFLOAD_KIND_SYCL; - Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_UNKNOWN; + Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_SPIRV64; Bin->CompileOptions = ""; Bin->LinkOptions = ""; Bin->ManifestStart = nullptr; From 86eb1e9d96de44e1254a74d7afa2ccffa884aba8 Mon Sep 17 00:00:00 2001 From: hiaselhans Date: Tue, 28 Apr 2020 15:06:08 +0200 Subject: [PATCH 3/6] fix clang-format Signed-off-by: hiaselhans --- sycl/source/detail/program_manager/program_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index 570b1143b4330..625b5311741e4 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -665,7 +665,7 @@ void ProgramManager::populateSpecConstRegistry() { RTDeviceBinaryImage &ProgramManager::getDeviceImage(OSModuleHandle M, KernelSetId KSId, const context &Context) { - if (DbgProgMgr > 0){ + if (DbgProgMgr > 0) { std::cerr << ">>> ProgramManager::getDeviceImage(" << M << ", \"" << KSId << "\", " << getRawSyclObjImpl(Context) << ")\n"; From a18ddcdbd75c5601fd48dce084e87e77a79d8f2d Mon Sep 17 00:00:00 2001 From: hiaselhans Date: Tue, 28 Apr 2020 22:01:11 +0200 Subject: [PATCH 4/6] set BinaryImage's DeviceTargetSpec based on Format Signed-off-by: hiaselhans --- sycl/source/detail/program_manager/program_manager.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index 625b5311741e4..f2fc5dc44c9ab 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -994,7 +994,6 @@ DynRTDeviceBinaryImage::DynRTDeviceBinaryImage( Bin = new pi_device_binary_struct(); Bin->Version = PI_DEVICE_BINARY_VERSION; Bin->Kind = PI_DEVICE_BINARY_OFFLOAD_KIND_SYCL; - Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_SPIRV64; Bin->CompileOptions = ""; Bin->LinkOptions = ""; Bin->ManifestStart = nullptr; @@ -1004,6 +1003,15 @@ DynRTDeviceBinaryImage::DynRTDeviceBinaryImage( Bin->EntriesBegin = nullptr; Bin->EntriesEnd = nullptr; Bin->Format = pi::getBinaryImageFormat(Bin->BinaryStart, DataSize); + + switch(Bin->Format) { + case PI_DEVICE_BINARY_TYPE_SPIRV: + Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_SPIRV64; + break; + default: + Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_UNKNOWN; + } + init(Bin); } From 4ef3f918619161fe629ed85197675bfe00486f2e Mon Sep 17 00:00:00 2001 From: hiaselhans Date: Tue, 28 Apr 2020 22:09:24 +0200 Subject: [PATCH 5/6] fix clang-format Signed-off-by: hiaselhans --- sycl/source/detail/program_manager/program_manager.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index f2fc5dc44c9ab..417079502f7f3 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -1005,11 +1005,11 @@ DynRTDeviceBinaryImage::DynRTDeviceBinaryImage( Bin->Format = pi::getBinaryImageFormat(Bin->BinaryStart, DataSize); switch(Bin->Format) { - case PI_DEVICE_BINARY_TYPE_SPIRV: - Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_SPIRV64; - break; - default: - Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_UNKNOWN; + case PI_DEVICE_BINARY_TYPE_SPIRV: + Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_SPIRV64; + break; + default: + Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_UNKNOWN; } init(Bin); From 36270354949f1f740aae8241108b48de64e869fc Mon Sep 17 00:00:00 2001 From: hiaselhans Date: Tue, 28 Apr 2020 22:16:38 +0200 Subject: [PATCH 6/6] another clang-format fix Signed-off-by: hiaselhans --- sycl/source/detail/program_manager/program_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sycl/source/detail/program_manager/program_manager.cpp b/sycl/source/detail/program_manager/program_manager.cpp index 417079502f7f3..d9342a44e03fe 100644 --- a/sycl/source/detail/program_manager/program_manager.cpp +++ b/sycl/source/detail/program_manager/program_manager.cpp @@ -1004,7 +1004,7 @@ DynRTDeviceBinaryImage::DynRTDeviceBinaryImage( Bin->EntriesEnd = nullptr; Bin->Format = pi::getBinaryImageFormat(Bin->BinaryStart, DataSize); - switch(Bin->Format) { + switch (Bin->Format) { case PI_DEVICE_BINARY_TYPE_SPIRV: Bin->DeviceTargetSpec = PI_DEVICE_BINARY_TARGET_SPIRV64; break;