【问题标题】:AMD OpenCL driver: 1) detects Intel CPU 2) lists same type of GPU with different OpenCL versionAMD OpenCL 驱动程序:1) 检测 Intel CPU 2) 列出具有不同 OpenCL 版本的相同类型 GPU
【发布时间】:2015-08-05 12:27:56
【问题描述】:

我的工作站配置:

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

操作系统:

  • Windows Server 2012 R2 标准版

我使用 lwjgl 的 OpenCL 演示 (link) 列出平台和设备。

问题 1)

在我的工作站上安装 AMD 驱动程序后 AMD 加速并行处理 平台列表 Intel(R) Xeon(R) CPU E5-2609 v2 @ 2.50GHz 作为设备。 (为 AMD 平台列出的第 3 台设备)

我为 AMD 和英特尔 OpenCL 驱动程序测试了相同的代码,英特尔自己的实现对于它自己的硬件来说要快得多。 (这并不奇怪

无论如何,我不希望 Intel 设备在 AMD 平台下被监听。

问题 2)

我的2 相同 AMD FirePro W9100(AMD 平台下的设备 1 和 2)被列出,具有不同级别的 OpenCL 支持

什么可能导致这个问题,更重要的是如何让我的第二张卡使用 2.0 OpenCL 驱动程序?

OpenCL 演示结果:

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

【问题讨论】:

  • > 我不希望 Intel 设备在 AMD 平台下被监听。嗯,确实如此,所以你必须处理它。您可以将 CPU 设备过滤为仅由 Intel 平台提供的设备(过滤掉 AMD 平台)。我还看到英特尔驱动程序的性能更快,所以我就是这样做的。

标签: opencl driver lwjgl intel amd


【解决方案1】:

1) 查看您的注册表项(在 local_machine/Software/Krono/vendors 或 software/AMD 下)。这些东西通常由 regkeys 控制。我不确定AMD使用什么。 2) 确保两张卡具有相同的驱动程序版本。否则,由于设备之间潜在的一致性问题,AMD 驱动程序可能只允许在任何机器上安装一个 2.0 设备。 2.0 设备的内核应该支持 SVM,但我不确定跨设备的一致性会发生什么。

【讨论】:

  • 谢谢。 1)不幸的是,regkeys是空的。我搜索了所有注册表,发现了一些其他指向 OpenCL DLL-s 的键,但它们对于 CPU 和 GPU 并不是分开的。 2)是的,驱动程序是相同的。我联系了 AMD 技术支持,希望他们能够提供一些见解。
【解决方案2】:

问题 1)

似乎 AMD 的 OpenCL 实现适用于所有 x86 CPU。我对此没有确凿的事实,只有关于 Khronos forums 的另一个类似讨论。

一个解决方案可能是根据不同平台报告的名称过滤掉设备,但我不知道是否能保证不同平台总是为同一设备报告相同的名称。

问题 2)

我不知道你的第二个问题,它看起来很奇怪......

【讨论】:

  • 对于问题1,您可以通过查看clGetDeviceInfo返回的CL_DEVICE_VENDOR_ID来过滤设备。 AMD 使用0x1002,Nvidia 使用0x10DE,英特尔使用0x8086。按平台名称过滤也对我有用。
猜你喜欢
  • 2018-07-21
  • 1970-01-01
  • 2019-12-31
  • 1970-01-01
  • 2012-05-09
  • 2016-06-21
  • 2013-05-02
  • 2015-04-16
  • 1970-01-01
相关资源
最近更新 更多