2015-12-12 30 views
3

我正在编写一些特定于平台的优化,并且我意识到可以在主机代码中解析供应商字符串并使用-D选项将其发送给内核的事实,在没有主机参与的情况下直接在内核中检测供应商可能会更方便(这样即使不访问主机源代码也可以优化内核,...)。在内核代码中检测OpenCL设备厂商

到目前为止,我想出了以下内容:

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

任何补充或更正?任何人都知道英特尔的定义

回答

0

我刚刚尝试过使用1912.5驱动程序的AMD Fury X.下面的三个测试所有打印的消息:

#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平台还包括英特尔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 

注意,无论是__GPU____Fiji__在此DLL中被发现。否则,看起来像一堆有趣的选项。请注意,并非所有这些工作,其中一些可能需要前缀-