I use the OpenCL.NET C# wrapper for OpenCL.
My GPU from GPU-Z is AMD Radeon Barcelo, and specific for OpenCL:
- Platform Version: OpenCL 2.1 AMD-APP (3570.0)
- Device Name: gfx90c
- Device Profile: FULL_PROFILE
- Device Version: OpenCL 2.0 AMD-APP (3570.0)
- Device Version OpenCL C: OpenCL C 2.0
- Device Extensions: cl_khr_fp64 cl_amd_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_fp16 cl_khr_gl_sharing cl_amd_device_attribute_query cl_amd_vec3 cl_amd_printf cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_dx9_media_sharing cl_khr_image2d_from_buffer cl_khr_subgroups cl_khr_gl_event cl_khr_depth_images cl_khr_mipmap_image cl_khr_mipmap_image_writes cl_amd_copy_buffer_p2p cl_amd_planar_yuv
Part of the code:
// probably useless
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
void vector_is_zero_partial(
uint row,
uint row_to,
__global const double *x,
double tolerance,
__global atomic_int *is_zero)
{
for (; row < row_to; ++row)
{
if (fabs(x[row]) > tolerance)
{
atomic_store(is_zero, 0);
break;
}
if (!atomic_load(is_zero)) break;
}
}
The error:
C:\Users\CHAMEL~1\AppData\Local\Temp\\OCL8036T0.cl:264:4: error: implicit declaration of function 'atomic_store' is invalid in C99
atomic_store(is_zero, 0);
^
C:\Users\CHAMEL~1\AppData\Local\Temp\\OCL8036T0.cl:267:8: error: implicit declaration of function 'atomic_load' is invalid in C99
if (!atomic_load(is_zero)) break;
^
2 errors generated.
error: Clang front-end compilation failed!
Frontend phase failed compilation.
Error: Compiling CL to IR
So, atomic extensions exist, OpenCL is v2, BUT atomic_store / atomic_load does not exist.
Did I something wrong here?