Release Notes for PoCL 7.2¶
Release highlights¶
Conformance results were submitted for OpenCL 3.0 conformance with the CPU x86-64 (AVX512) , CPU RISC-V RV64GC and CPU RISC-V RVA22+RVV1.0 devices, using OpenCL-CTS tag v2026-03-25-00. Conformance testing via OpenCL-CTS passed with both OpenCL C and SPIR-V compilation modes, for all of these devices.
Support for LLVM version 22
CMake changes¶
PoCL now supports configuring LLVM via both llvm-config binary (-DWITH_LLVM_CONFIG=<path>), and LLVMConfig.cmake (-DLLVM_DIR=<path>). Support for cross-compiling was also improved, and requires using both these options, pointing to target & host LLVMs.
LLVM_SPIRV CMake option was replaced by HOST_LLVM_SPIRV
Added POCL_DEBUG_LLVM_OPTS environment variable. This allows directly passing multiple LLVM options for debugging purposes.
Runtime fixes & features¶
OpenCL-CTS updated to upstream tag v2026-03-25-00 and fixed related bugs:
clCreateContext: return error on invalid CL_CONTEXT_INTEROP_USER_SYNC flag
clSetKernelArg: for buffer argument, accept arg_value NULL or pointer to NULL
clSetKernelExecInfo: fix out-of-bounds read of the USM indirect pointer list.
clCreateContextFromType: return error on unknown values of device_type bitfield
clGetDeviceIDs: return error on unknown values of device_type bitfield
clSetKernelArgSVMPointer: return CL_INVALID_ARG_INDEX for some error conditions
clEnqueueNDRange: accept local_size == NULL if required-wg-size is nonzero
clCreateProgramWithIL: return CL_INVALID_OPERATION if no devices support SPIR-V
Fixed an out-of-bounds read in clSetKernelExecInfo when registering indirect USM pointers (CL_KERNEL_EXEC_INFO_USM_PTRS_INTEL): the size of the pointer list was passed on in bytes where a pointer count was expected, causing the runtime to read past the end of the user-provided list.
clGetKernelArgInfo(CL_KERNEL_ARG_NAME) now returns the source argument names for SPIR/SPIR-V binaries on the CPU driver (previously returned CL_KERNEL_ARG_INFO_NOT_AVAILABLE even when the binary contained the names). The llvm-spirv translator preserves SPIR-V OpName decorations on llvm::Argument`s rather than as `!kernel_arg_name metadata, and PoCL now reads them from there.
Driver-specific features¶
Remote driver¶
Fixed various clLinkProgram issues in the remote driver.
Fixed remote driver spuriously reconnecting for no apparent reason.
Added support for event tracing of network commands
CUDA driver¶
Implemented sub_group_{reduce,scan_exclusive,scan_inclusive}_* and sub_group_{all,any,broadcast}. (reduce is only available for PTX6.0+)
Note that CUDA driver does not support LLVM 21, due to a bug in upstream Clang code. Users must use LLVM 18,19,20 or 22 with CUDA. For details see https://github.com/llvm/llvm-project/issues/154772
Fixed pre-mangled subgroup intrinsic names
Implemented support for additional parameters to clGetKernelSubgroupInfo(): CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE, CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE, CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT
Fixed printf to work correctly when using LLVM 19/20 (issue 2021)
OpenASIP (ttasim) driver¶
Upgraded the driver to use OpenASIP v2.2 which uses LLVM 21.
Removed the big endian target support
CPU driver¶
The atomic operations on floats (cl_ext_float_atomic) are now disabled when -DENABLE_CONFORMANCE=ON. When -DENABLE_CONFORMANCE=OFF, cl_ext_float_atomic is enabled. This is due to issues in OpenCL-CTS that prevent passing the testsuite when cl_ext_float_atomic is enabled.
Implemented new extensions: cl_khr_extended_bit_ops, cl_khr_device_uuid, cl_khr_suggested_local_work_size, cl_khr_integer_dot_product
Improved support for FP16 math builtins. Not all of the math builtins are supported yet; approx 15 are still missing.
When using SPIR-V input, extensions cl_khr_spirv_linkonce_odr and cl_khr_spirv_no_integer_wrap_decoration are now supported
Fixed missing support of a few FP16 overloads of vload/vstore/convert_type builtins in SPIRV input
Reported sizes for INTEL_SUB_GROUP_SIZES were reverted to earlier behavior, PoCL now only reports power-of-2 sizes.
Implemented support for cl_khr_kernel_clock (requires Clang support for __builtin_readcyclecounter builtin function)
Re-enabled support for __opencl_c_program_scope_global_variables. This had a problem with SPIR-V input when using certain versions of llvm-spirv translator, however this has now been fixed in the translator.
Mac OS X: statically-linked LLVM symbols are now hidden also when using the CMake-package setup
Fixed kernel-side sub-group queries for non-divisible work-group sizes
Honor intel_reqd_sub_group_size attribute in clGetKernelSubGroupInfo()
SIGFPE handler is now fixed to enable only on x86-64, not all x86
Deprecation/feature removal notices¶
Support for LLVM version 17 was removed, versions 18 to 22 are supported
Experimental and work-in-progress¶
Added a work-in-progress MLIR-based OpenCL C kernel compilation flow for CPUs. The flow supports both Polygeist and ClangIR front-ends. Support for basic features such as local memory and some built-ins is included, but the majority of built-in functions or barriers are not yet supported. Contributions are welcome to increase the test coverage.