1
votes

My workstation configuration:

  • Intel(R) Xeon(R) CPU E5-2609 v2 @ 2.50GHz (x2)
  • AMD FirePro W9100 (x2)

Operating system:

  • Windows Server 2012 R2 Standard

I use lwjgl's OpenCL demo (link) to list the platforms and devices.

Problem 1)

After installing AMD drivers on my workstation AMD Accelerated Parallel Processing platform list Intel(R) Xeon(R) CPU E5-2609 v2 @ 2.50GHz as a device. (3rd device listed for AMD platform)

I tested the same code for both AMD and Intel OpenCL driver and Intel's own implementation was much faster for it's own hardware. (no surprise there)

Anyway I don't want an Intel device to be listen under an AMD platform.

Problem 2)

My 2 identical AMD FirePro W9100 (device 1 and 2 under AMD platform) is listed with different level of OpenCL support.

What could cause this problem, and more importantly how can I make my 2nd card use the 2.0 OpenCL driver?

OpenCL demo results:

NEW PLATFORM: [0x7FFE51B57B60]
    CL_PLATFORM_PROFILE = FULL_PROFILE
    CL_PLATFORM_VERSION = OpenCL 2.0 AMD-APP (1642.5)
    CL_PLATFORM_NAME = AMD Accelerated Parallel Processing
    CL_PLATFORM_VENDOR = Advanced Micro Devices, Inc.
    CL_PLATFORM_EXTENSIONS = cl_khr_icd cl_khr_d3d10_sharing cl_khr_d3d11_sharing cl_khr_dx9_media_sharing cl_amd_event_callback cl_amd_offline_devices 
    CL_PLATFORM_ICD_SUFFIX_KHR = AMD


    ** NEW DEVICE: [0x1087BD0]
    OpenCL 2.0 - Extensions: cl_amd_device_attribute_query cl_amd_fp64 cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_amd_printf cl_amd_vec3 cl_ext_atomic_counters_32 cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_depth_images cl_khr_fp64 cl_khr_gl_event cl_khr_gl_sharing cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_image2d_from_buffer cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_spir 
    CL_DEVICE_TYPE = 4
    CL_DEVICE_VENDOR_ID = 4098
    CL_DEVICE_MAX_COMPUTE_UNITS = 44
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 3
    CL_DEVICE_MAX_WORK_GROUP_SIZE = 256
    CL_DEVICE_MAX_CLOCK_FREQUENCY = 930
    CL_DEVICE_ADDRESS_BITS = 64
    CL_DEVICE_AVAILABLE = true
    CL_DEVICE_COMPILER_AVAILABLE = true
    CL_DEVICE_NAME = Hawaii
    CL_DEVICE_VENDOR = Advanced Micro Devices, Inc.
    CL_DRIVER_VERSION = 1642.5 (VM)
    CL_DEVICE_PROFILE = FULL_PROFILE
    CL_DEVICE_VERSION = OpenCL 2.0 AMD-APP (1642.5)
    CL_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_gl_sharing cl_ext_atomic_counters_32 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_spir cl_khr_subgroups cl_khr_gl_event cl_khr_depth_images 
    CL_DEVICE_OPENCL_C_VERSION = OpenCL C 2.0 

        Sub Buffer destructed: 17348816
        Buffer destructed (2): 16864864
        Buffer destructed (1): 16864864

    ** NEW DEVICE: [0x10851E0]
    OpenCL 1.2 - Extensions: cl_amd_device_attribute_query cl_amd_fp64 cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_amd_printf cl_amd_vec3 cl_ext_atomic_counters_32 cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_fp64 cl_khr_gl_event cl_khr_gl_sharing cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_image2d_from_buffer cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_spir 
    CL_DEVICE_TYPE = 4
    CL_DEVICE_VENDOR_ID = 4098
    CL_DEVICE_MAX_COMPUTE_UNITS = 44
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 3
    CL_DEVICE_MAX_WORK_GROUP_SIZE = 256
    CL_DEVICE_MAX_CLOCK_FREQUENCY = 930
    CL_DEVICE_ADDRESS_BITS = 64
    CL_DEVICE_AVAILABLE = true
    CL_DEVICE_COMPILER_AVAILABLE = true
    CL_DEVICE_NAME = Hawaii
    CL_DEVICE_VENDOR = Advanced Micro Devices, Inc.
    CL_DRIVER_VERSION = 1642.5 (VM)
    CL_DEVICE_PROFILE = FULL_PROFILE
    CL_DEVICE_VERSION = OpenCL 1.2 AMD-APP (1642.5)
    CL_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_gl_sharing cl_ext_atomic_counters_32 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_spir cl_khr_gl_event 
    CL_DEVICE_OPENCL_C_VERSION = OpenCL C 1.2 

        Sub Buffer destructed: 17348816
        Buffer destructed (2): 16864864
        Buffer destructed (1): 16864864

    ** NEW DEVICE: [0x5DDFE790]
    OpenCL 1.2 - Extensions: cl_amd_device_attribute_query cl_amd_fp64 cl_amd_media_ops cl_amd_media_ops2 cl_amd_popcnt cl_amd_printf cl_amd_vec3 cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_fp64 cl_khr_gl_event cl_khr_gl_sharing cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_int64_base_atomics cl_khr_int64_extended_atomics cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_spir 
    CL_DEVICE_TYPE = 2
    CL_DEVICE_VENDOR_ID = 4098
    CL_DEVICE_MAX_COMPUTE_UNITS = 8
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 3
    CL_DEVICE_MAX_WORK_GROUP_SIZE = 1024
    CL_DEVICE_MAX_CLOCK_FREQUENCY = 2500
    CL_DEVICE_ADDRESS_BITS = 64
    CL_DEVICE_AVAILABLE = true
    CL_DEVICE_COMPILER_AVAILABLE = true
    CL_DEVICE_NAME =       Intel(R) Xeon(R) CPU E5-2609 v2 @ 2.50GHz
    CL_DEVICE_VENDOR = GenuineIntel
    CL_DRIVER_VERSION = 1642.5 (sse2,avx)
    CL_DEVICE_PROFILE = FULL_PROFILE
    CL_DEVICE_VERSION = OpenCL 1.2 AMD-APP (1642.5)
    CL_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_gl_sharing cl_ext_device_fission 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_spir cl_khr_gl_event 
    CL_DEVICE_OPENCL_C_VERSION = OpenCL C 1.2 
        -TRYING TO EXEC NATIVE KERNEL-
        KERNEL EXEC argument: 1337, should be 1337
        Event callback status: CL_COMPLETE

        EMPTY NATIVE KERNEL AVG EXEC TIME: 28.8072us

        Sub Buffer destructed: 17348816
        Buffer destructed (2): 16864864
        Buffer destructed (1): 16864864

-------------------------
NEW PLATFORM: [0x5DB27010]
    CL_PLATFORM_PROFILE = FULL_PROFILE
    CL_PLATFORM_VERSION = OpenCL 1.2 
    CL_PLATFORM_NAME = Intel(R) OpenCL
    CL_PLATFORM_VENDOR = Intel(R) Corporation
    CL_PLATFORM_EXTENSIONS = cl_khr_icd 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_byte_addressable_store cl_khr_depth_images cl_khr_3d_image_writes cl_intel_exec_by_local_thread cl_khr_spir cl_khr_fp64
    CL_PLATFORM_ICD_SUFFIX_KHR = INTEL


    ** NEW DEVICE: [0x5DB1E8F0]
    OpenCL 1.2 - Extensions: cl_khr_3d_image_writes cl_khr_byte_addressable_store cl_khr_depth_images cl_khr_fp64 cl_khr_global_int32_base_atomics cl_khr_global_int32_extended_atomics cl_khr_icd cl_khr_local_int32_base_atomics cl_khr_local_int32_extended_atomics cl_khr_spir 
    CL_DEVICE_TYPE = 2
    CL_DEVICE_VENDOR_ID = 32902
    CL_DEVICE_MAX_COMPUTE_UNITS = 8
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS = 3
    CL_DEVICE_MAX_WORK_GROUP_SIZE = 8192
    CL_DEVICE_MAX_CLOCK_FREQUENCY = 2500
    CL_DEVICE_ADDRESS_BITS = 64
    CL_DEVICE_AVAILABLE = true
    CL_DEVICE_COMPILER_AVAILABLE = true
    CL_DEVICE_NAME =       Intel(R) Xeon(R) CPU E5-2609 v2 @ 2.50GHz
    CL_DEVICE_VENDOR = Intel(R) Corporation
    CL_DRIVER_VERSION = 5.0.0.57
    CL_DEVICE_PROFILE = FULL_PROFILE
    CL_DEVICE_VERSION = OpenCL 1.2 (Build 57)
    CL_DEVICE_EXTENSIONS = cl_khr_icd 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_byte_addressable_store cl_khr_depth_images cl_khr_3d_image_writes cl_intel_exec_by_local_thread cl_khr_spir cl_khr_fp64 
    CL_DEVICE_OPENCL_C_VERSION = OpenCL C 1.2 
        -TRYING TO EXEC NATIVE KERNEL-
        KERNEL EXEC argument: 1337, should be 1337
        Event callback status: CL_COMPLETE

        EMPTY NATIVE KERNEL AVG EXEC TIME: 9.5031us

        Sub Buffer destructed: 1574991568
        Buffer destructed (2): 1563032880
        Buffer destructed (1): 1563032880
2
> I don't want an Intel device to be listen under an AMD platform. Well, it does, so you'll have to deal with it. You can filter the CPU devices to just those provided by the Intel platform (filtering out the AMD platform). I also saw faster performance with the Intel driver, so that's what I do. - Dithermaster

2 Answers

2
votes

1) Look in your regkeys (under local_machine/Software/Krono/vendors or software/AMD). These things are usually controlled by regkeys. I'm not sure what AMD uses though. 2) Make sure both cards have the same driver version. Otherwise it could be that AMD driver only allows one 2.0 device on any machine due to potential coherence issues between devices. 2.0 devices are supposed to have SVM support with the cores, but I'm not sure what happens with coherence across devices.

2
votes

Problem 1)

It seems that AMD's OpenCL implementation works for all x86 CPUs. I don't have hard facts on this, only another similiar discussion on Khronos forums.

A solution could be to filter out devices based on the name reported by different platforms, but I don't know if it is guaranteed that different platforms will always report the same name for the same device.

Problem 2)

I have no idea on your 2nd problem, it looks bizarre...