Harlequin
Harlequin

Reputation: 677

AMD OpenCL driver: 1) detects Intel CPU 2) lists same type of GPU with different OpenCL version

My workstation configuration:

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

Problems:

  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.

  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
    

Upvotes: 1

Views: 955

Answers (2)

Hashman
Hashman

Reputation: 387

  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.

Upvotes: 2

Zoltán Kurucz
Zoltán Kurucz

Reputation: 56

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...

Upvotes: 2

Related Questions