【问题标题】:Detect OpenCL device vendor in kernel code在内核代码中检测 OpenCL 设备供应商
【发布时间】:2015-12-17 01:28:07
【问题描述】:

我正在编写一些特定于平台的优化,虽然我知道我可以解析主机代码中的供应商字符串并使用-D 选项将其发送到内核,但这样可能更方便直接检测内核中的供应商,无需主机参与(这样即使不访问主机源代码也可以优化内核,...)。

到目前为止,我想出了以下几点:

#ifdef __NV_CL_C_VERSION
/**
 *  @def NVIDIA
 *  @brief defined when compiling on NVIDIA GPUs
 */
#define NVIDIA
#endif // __NV_CL_C_VERSION

#if defined(__WinterPark__) || defined(__BeaverCreek__) || defined(__Turks__) || \
    defined(__Caicos__) || defined(__Tahiti__) || defined(__Pitcairn__) || \
    defined(__Capeverde__) || defined(__Cayman__) || defined(__Barts__) || \
    defined(__Cypress__) || defined(__Juniper__) || defined(__Redwood__) || \
    defined(__Cedar__) || defined(__ATI_RV770__) || defined(__ATI_RV730__) || \
    defined(__ATI_RV710__) || defined(__Loveland__) || defined(__GPU__) || \
    defined(__Hawaii__)
#define AMD
/**
 *  @def AMD
 *  @brief defined when compiling on AMD GPUs
 *  @note This list was originally found at https://github.com/magnumripper/JohnTheRipper/wiki/Predefined-macros-in-OpenCL-(standard-and-proprietary) and copied shamelessly. It is most definitely incomplete and contains the troubling  __GPU__.
 *  @note AMD also defines __CPU__ when compiling for CL_DEVICE_TYPE_CPU.
 */
#endif // ...

有什么补充或更正吗?有谁知道英特尔的定义?

【问题讨论】:

    标签: macros opencl


    【解决方案1】:

    我刚刚在 AMD Fury X 上试用了 1912.5 驱动程序。以下三个测试都打印了消息:

    #ifdef cl_amd_device_attribute_query
    #pragma message "here goes AMD"
    #endif
    
    #ifdef __GPU__
    #pragma message "here goes AMD GPU"
    #endif
    
    #ifdef __Fiji__
    #pragma message "here goes Fiji AMD"
    #endif
    

    但是,请注意,cl_amd_device_attribute_query 不是对 AMD 设备的良好测试,因为 AMD 平台还包括 Intel CPU 作为设备并为其提供了相同的扩展。无赖。

    我正在浏览amdocl64.dll 并注意到以下内容:

    -cl-std=CL2.0
    #define __clang__ 1
    #define __clang_major__ 3
    #define __clang_minor__ 6
    #define __ENDIAN_LITTLE__ 1
    #define __SPIR32 1
    #define __SPIR32__ 1
    #define __STDC__ 1
    #define __STDC_HOSTED__ 1
    #define __STDC_VERSION__ 199901L
    #define __STDC_UTF_16__ 1
    #define __STDC_UTF_32__ 1
    #define __OPENCL_C_VERSION__ 200
    #define __OPENCL_VERSION__ 200
    -Wf,--force_disable_spir
    -fno-lib-no-inline
    -fno-sc-keep-calls
    -fno-enable-dump
    -cl-internal-kernel
    -cl-std=CL
    -cl-std=CL1.2
    -just-kernel=
    -DFP_FAST_FMAF=1
    -DFP_FAST_FMA=1
    -cl-denorms-are-zero
    cl-kernel-arg-info
    -fno-bin-llvmir
    -fno-image-support
    -mfast-fmaf
    -mfast-fma kernel-arg-alignment
    

    请注意,在此 dll 中找不到 __GPU____Fiji__。否则似乎是一堆有趣的选择。请注意,并非所有这些都有效,其中一些可能需要以 - 为前缀。

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2023-01-30
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多