-
Notifications
You must be signed in to change notification settings - Fork 706
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
{compiler}[system/system] Add CodePlay CUDA SYCL plug-in variants for oneAPI 2023.0.0 and newer #21582
base: develop
Are you sure you want to change the base?
{compiler}[system/system] Add CodePlay CUDA SYCL plug-in variants for oneAPI 2023.0.0 and newer #21582
Conversation
Test report by @Thyre Failed due to missed EULA acceptance. |
Test report by @Thyre |
Test report by @Thyre |
88c4855
to
b953ac8
Compare
Test report by @SebastianAchilles |
b953ac8
to
15a377e
Compare
Test report by @Thyre |
@boegelbot please test @ jsc-zen3-a100 |
@SebastianAchilles: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de PR test command '
Test results coming soon (I hope)... - notification for comment with ID 2434678649 processed Message to humans: this is just bookkeeping information for me, |
Test report by @boegelbot |
Test report by @Thyre |
Test report by @Thyre |
15a377e
to
195cadd
Compare
Signed-off-by: Jan André Reuter <[email protected]>
195cadd
to
8b10ca0
Compare
Added additional EasyConfigs for all The plug-in for oneAPI 2025.0.0 has seen some changes in the shared-library name and download path. Additionally, I do not see any headers in the extracted files anymore. Therefore, I removed it for this version. |
8b10ca0
to
8e8b850
Compare
Test report by @Thyre |
Add Intel oneAPI 2024.2.0 compilers with CodePlay SYCL support for NVIDIA GPUs. Signed-off-by: Jan André Reuter <[email protected]>
Signed-off-by: Jan André Reuter <[email protected]>
Signed-off-by: Jan André Reuter <[email protected]>
Signed-off-by: Jan André Reuter <[email protected]>
Signed-off-by: Jan André Reuter <[email protected]>
Signed-off-by: Jan André Reuter <[email protected]>
8e8b850
to
89837fe
Compare
Test report by @Thyre |
Test report by @Thyre |
Here are some testing results with all the versions. I used the sample application described for oneAPI 2023.0.0 here: Code: Click to open#include <sycl/sycl.hpp>
int main() {
// Creating buffer of 4 ints to be used inside the kernel code
sycl::buffer<sycl::cl_int, 1> Buffer(4);
// Creating SYCL queue
sycl::queue Queue;
// Size of index space for kernel
sycl::range<1> NumOfWorkItems{Buffer.size()};
// Submitting command group(work) to queue
Queue.submit([&](sycl::handler &cgh) {
// Getting write only access to the buffer on a device
auto Accessor = Buffer.get_access<sycl::access::mode::write>(cgh);
// Executing kernel
cgh.parallel_for<class FillBuffer>(
NumOfWorkItems, [=](sycl::id<1> WIid) {
// Fill buffer with indexes
Accessor[WIid] = (sycl::cl_int)WIid.get(0);
});
});
// Getting read only access to the buffer on the host.
// Implicit barrier waiting for queue to complete the work.
const auto HostAccessor = Buffer.get_access<sycl::access::mode::read>();
// Check the results
bool MismatchFound = false;
for (size_t I = 0; I < Buffer.size(); ++I) {
if (HostAccessor[I] != I) {
std::cout << "The result is incorrect for element: " << I
<< " , expected: " << I << " , got: " << HostAccessor[I]
<< std::endl;
MismatchFound = true;
}
}
if (!MismatchFound) {
std::cout << "The results are correct!" << std::endl;
}
return MismatchFound;
} For comparison, this is the output when a oneAPI version without this plug-in is used: intel-compilers/2024.2.0 (without plug-in) $ icpx -fsycl -fsycl-targets=nvptx64-nvidia-cuda simple-sycl-app.cpp -o simple-sycl-app
[... several deprecation warnings ...]
$ ONEAPI_DEVICE_SELECTOR="cuda:*" SYCL_UR_TRACE=1 ./simple-sycl-app
terminate called after throwing an instance of 'sycl::_V1::runtime_error'
what(): No device of requested type available. Please check https://software.intel.com/content/www/us/en/develop/articles/intel-oneapi-dpcpp-system-requirements.html -1 (PI_ERROR_DEVICE_NOT_FOUND)
[1] 10673 IOT instruction (core dumped) ONEAPI_DEVICE_SELECTOR="cuda:*" SYCL_UR_TRACE=1 ./simple-sycl-app
SYCL_UR_TRACE=1 sycl-ls
[opencl:cpu][opencl:0] Intel(R) OpenCL, AMD Ryzen 7 7800X3D 8-Core Processor OpenCL 3.0 (Build 0) [2024.18.6.0.02_160000] intel-compilers/2023.0.0-CUDA-11.7.0 For oneAPI 2023.0.0, one may need to use the internal $ /data/EasyBuild-develop/software/intel-compilers/2023.0.0-CUDA-11.7.0/compiler/2023.0.0/linux/bin-llvm/clang++ -fsycl -fsycl-targets=nvptx64-nvidia-cuda simple-sycl-app.cpp -o simple-sycl-app
clang++: warning: CUDA version is newer than the latest supported version 11.5 [-Wunknown-cuda-version]
$ SYCL_DEVICE_FILTER=cuda SYCL_PI_TRACE=1 ./simple-sycl-app
SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_cuda.so [ PluginVersion: 11.15.1 ]
SYCL_PI_TRACE[all]: Selected device: -> final score = 1500
SYCL_PI_TRACE[all]: platform: NVIDIA CUDA BACKEND
SYCL_PI_TRACE[all]: device: NVIDIA GeForce RTX 3070
The results are correct!
$ SYCL_UR_TRACE=1 sycl-ls
[opencl:cpu:0] Intel(R) OpenCL, AMD Ryzen 7 7800X3D 8-Core Processor 3.0 [2022.15.12.0.01_081451]
[ext_oneapi_cuda:gpu:0] NVIDIA CUDA BACKEND, NVIDIA GeForce RTX 3070 0.0 [CUDA 12.7] intel-compilers/2023.1.0-CUDA-12.1.1 $ icpx -fsycl -fsycl-targets=nvptx64-nvidia-cuda simple-sycl-app.cpp -o simple-sycl-app
icpx: warning: CUDA version is newer than the latest partially supported version 11.8 [-Wunknown-cuda-version]
$ SYCL_DEVICE_FILTER=cuda SYCL_PI_TRACE=1 ./simple-sycl-app
WARNING: The enviroment variable SYCL_DEVICE_FILTER is deprecated. Please use ONEAPI_DEVICE_SELECTOR instead.
For more details, please refer to:
https://github.com/intel/llvm/blob/sycl/sycl/doc/EnvironmentVariables.md#oneapi_device_selector
SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_cuda.so [ PluginVersion: 12.21.1 ]
SYCL_PI_TRACE[all]: Requested device_type: info::device_type::automatic
SYCL_PI_TRACE[all]: Requested device_type: info::device_type::automatic
SYCL_PI_TRACE[all]: Selected device: -> final score = 1500
SYCL_PI_TRACE[all]: platform: NVIDIA CUDA BACKEND
SYCL_PI_TRACE[all]: device: Quadro RTX 8000
The results are correct!
$ SYCL_UR_TRACE=1 sycl-ls
[opencl:cpu:0] Intel(R) OpenCL, AMD EPYC 7742 64-Core Processor 3.0 [2023.15.3.0.20_160000]
[ext_oneapi_cuda:gpu:0] NVIDIA CUDA BACKEND, Quadro RTX 8000 0.0 [CUDA 12.6]
[ext_oneapi_cuda:gpu:1] NVIDIA CUDA BACKEND, Quadro RTX 8000 0.0 [CUDA 12.6] intel-compilers/2023.2.1-CUDA-12.2.2 $ icpx -fsycl -fsycl-targets=nvptx64-nvidia-cuda simple-sycl-app.cpp -o simple-sycl-app
[... several deprecation warnings ...]
$ SYCL_DEVICE_FILTER=cuda SYCL_PI_TRACE=1 ./simple-sycl-app
WARNING: The enviroment variable SYCL_DEVICE_FILTER is deprecated. Please use ONEAPI_DEVICE_SELECTOR instead.
For more details, please refer to:
https://github.com/intel/llvm/blob/sycl/sycl/doc/EnvironmentVariables.md#oneapi_device_selector
SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_cuda.so [ PluginVersion: 12.27.1 ]
SYCL_PI_TRACE[all]: Requested device_type: info::device_type::automatic
SYCL_PI_TRACE[all]: Selected device: -> final score = 1500
SYCL_PI_TRACE[all]: platform: NVIDIA CUDA BACKEND
SYCL_PI_TRACE[all]: device: NVIDIA GeForce RTX 3070
The results are correct!
$ SYCL_UR_TRACE=1 sycl-ls
[opencl:cpu:0] Intel(R) OpenCL, AMD Ryzen 7 7800X3D 8-Core Processor 3.0 [2023.16.7.0.21_160000]
[ext_oneapi_cuda:gpu:0] NVIDIA CUDA BACKEND, NVIDIA GeForce RTX 3070 8.8 [CUDA 12.7] intel-compilers/2024.0.0-CUDA-12.3.0 $ icpx -fsycl -fsycl-targets=nvptx64-nvidia-cuda simple-sycl-app.cpp -o simple-sycl-app
[... several deprecation warnings ...]
$ SYCL_DEVICE_FILTER=cuda SYCL_PI_TRACE=1 ./simple-sycl-app
WARNING: The enviroment variable SYCL_DEVICE_FILTER is deprecated. Please use ONEAPI_DEVICE_SELECTOR instead.
For more details, please refer to:
https://github.com/intel/llvm/blob/sycl/sycl/doc/EnvironmentVariables.md#oneapi_device_selector
SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_cuda.so [ PluginVersion: 14.38.1 ]
SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_unified_runtime.so [ PluginVersion: 14.37.1 ]
SYCL_PI_TRACE[all]: Requested device_type: info::device_type::automatic
SYCL_PI_TRACE[all]: Selected device: -> final score = 1500
SYCL_PI_TRACE[all]: platform: NVIDIA CUDA BACKEND
SYCL_PI_TRACE[all]: device: NVIDIA GeForce RTX 3070
The results are correct!
$ SYCL_UR_TRACE=1 sycl-ls
[opencl:cpu:0] Intel(R) OpenCL, AMD Ryzen 7 7800X3D 8-Core Processor OpenCL 3.0 (Build 0) [2023.16.10.0.17_160000]
[ext_oneapi_cuda:gpu:0] NVIDIA CUDA BACKEND, NVIDIA GeForce RTX 3070 8.6 [CUDA 12.7] intel-compilers/2024.2.0-CUDA-12.5.0 $ icpx -fsycl -fsycl-targets=nvptx64-nvidia-cuda simple-sycl-app.cpp -o simple-sycl-app
[... several deprecation warnings ...]
$ SYCL_DEVICE_FILTER=cuda SYCL_PI_TRACE=1 ./simple-sycl-app
WARNING: The enviroment variable SYCL_DEVICE_FILTER is deprecated. Please use ONEAPI_DEVICE_SELECTOR instead.
For more details, please refer to:
https://github.com/intel/llvm/blob/sycl/sycl/doc/EnvironmentVariables.md#oneapi_device_selector
SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_cuda.so [ PluginVersion: 15.49.1 ]
SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_unified_runtime.so [ PluginVersion: 15.47.1 ]
SYCL_PI_TRACE[all]: Requested device_type: info::device_type::automatic
SYCL_PI_TRACE[all]: Selected device: -> final score = 1500
SYCL_PI_TRACE[all]: platform: NVIDIA CUDA BACKEND
SYCL_PI_TRACE[all]: device: NVIDIA GeForce RTX 3070
The results are correct!
$ SYCL_UR_TRACE=1 sycl-ls
[opencl:cpu][opencl:0] Intel(R) OpenCL, AMD Ryzen 7 7800X3D 8-Core Processor OpenCL 3.0 (Build 0) [2024.18.6.0.02_160000]
[cuda:gpu][cuda:0] NVIDIA CUDA BACKEND, NVIDIA GeForce RTX 3070 8.6 [CUDA 12.7] intel-compilers/2025.0.0-CUDA-12.6.0 $ icpx -fsycl -fsycl-targets=nvptx64-nvidia-cuda simple-sycl-app.cpp -o simple-sycl-app
[... several deprecation warnings ...]
$ ONEAPI_DEVICE_SELECTOR="cuda:*" SYCL_UR_TRACE=1 ./simple-sycl-app
<LOADER>[INFO]: loaded adapter 0x0xfe7ec00 (libur_adapter_cuda.so.0)
SYCL_UR_TRACE: Requested device_type: info::device_type::automatic
SYCL_UR_TRACE: Selected device: -> final score = 1500
SYCL_UR_TRACE: platform: NVIDIA CUDA BACKEND
SYCL_UR_TRACE: device: NVIDIA GeForce RTX 3070
The results are correct!
$ SYCL_UR_TRACE=1 sycl-ls
<LOADER>[INFO]: failed to load adapter 'libur_adapter_level_zero.so.0' with error: libumf.so.0: cannot open shared object file: No such file or directory
<LOADER>[INFO]: failed to load adapter '/data/EasyBuild-develop/software/intel-compilers/2025.0.0-CUDA-12.6.0/compiler/2025.0/lib/libur_adapter_level_zero.so.0' with error: libumf.so.0: cannot open shared object file: No such file or directory
<LOADER>[INFO]: failed to load adapter 'libur_adapter_opencl.so.0' with error: libumf.so.0: cannot open shared object file: No such file or directory
<LOADER>[INFO]: failed to load adapter '/data/EasyBuild-develop/software/intel-compilers/2025.0.0-CUDA-12.6.0/compiler/2025.0/lib/libur_adapter_opencl.so.0' with error: libumf.so.0: cannot open shared object file: No such file or directory
<LOADER>[INFO]: loaded adapter 0x0x5757f9e7d7a0 (libur_adapter_cuda.so.0)
<LOADER>[INFO]: failed to load adapter 'libur_adapter_hip.so.0' with error: libur_adapter_hip.so.0: cannot open shared object file: No such file or directory
<LOADER>[INFO]: failed to load adapter '/data/EasyBuild-develop/software/intel-compilers/2025.0.0-CUDA-12.6.0/compiler/2025.0/lib/libur_adapter_hip.so.0' with error: /data/EasyBuild-develop/software/intel-compilers/2025.0.0-CUDA-12.6.0/compiler/2025.0/lib/libur_adapter_hip.so.0: cannot open shared object file: No such file or directory
<LOADER>[INFO]: failed to load adapter 'libur_adapter_native_cpu.so.0' with error: libur_adapter_native_cpu.so.0: cannot open shared object file: No such file or directory
<LOADER>[INFO]: failed to load adapter '/data/EasyBuild-develop/software/intel-compilers/2025.0.0-CUDA-12.6.0/compiler/2025.0/lib/libur_adapter_native_cpu.so.0' with error: /data/EasyBuild-develop/software/intel-compilers/2025.0.0-CUDA-12.6.0/compiler/2025.0/lib/libur_adapter_native_cpu.so.0: cannot open shared object file: No such file or directory
[cuda:gpu][cuda:0] NVIDIA CUDA BACKEND, NVIDIA GeForce RTX 3070 8.6 [CUDA 12.7] |
Test report by @Thyre |
@boegelbot please test @ jsc-zen3-a100 |
@Thyre: Request for testing this PR well received on jsczen3l1.int.jsc-zen3.fz-juelich.de PR test command '
Test results coming soon (I hope)... - notification for comment with ID 2464077770 processed Message to humans: this is just bookkeeping information for me, |
Test report by @boegelbot |
Test report by @Thyre |
CodePlay offers NVIDIA plug-ins for the Intel oneAPI compilers starting with oneAPI 2023.0.0.
Add separate EasyConfigs using these plug-ins by creating a bundle of the basic oneAPI compilers and the plug-in.
Since the plug-in needs to be installed inside the actual oneAPI installation, do not just use the oneAPI installation.
Requires:
Bundle
easyblock to transfer module requirements of components easybuild-easyblocks#3472.Bundle
easyblock to transfer module requirements of components, but do not create logfile in components easybuild-easyblocks#3509EasyBlock
class to allow passing inlogfile
easybuild-framework#4707