OpenCL异构扩展
OpenCL異構擴展并不是OpenCL標準的一部分,它是指device支持某種特性,且在默認狀態下,所有的擴展都是禁止的。但是OpenCL通過擴展,廠商可以給device增加一些新的功能,且不用考慮兼容性的問題。
就目前市場行情來看,各個廠商在OpenCL的實現中或多或少的使用了自己的擴展,體現了特殊性。
一般來說擴展的類型分為三種情況,如下所示:
1、以cl_khr作為擴展名屬于Khronos OpenCL工作組批準的擴展,需要經過一致性測試。比如:#pragma OPENCL EXTENSION命令控制OpenCL編譯器在語言擴展方面的行為。該命令的定義如下,其中extension_name是擴展的名字。
#pragma OPENCL EXTENSIONextension_name: behavior??
#pragma OPENCL EXTENSION all :behavior??
behavior: enable or disable?
extension_name的格式為cl_khr_<name>,同時有一個形如cl_<vendor_name>_<name>的名字作為供應商擴展。擴展必須得到OpenCL工作組的允許。標志all表示編譯器支持的所有擴展。
enable使extension_name所代表的擴展有效。如果不支持extension_name或者使用all,則報告一個錯誤。
disable擴展extension_name排除在語言定義外。如果使用all,編譯器把代碼作為無擴展的核心版本處理,如果不支持extension_name,就會產生警告提示信息。
#pragma OPENCL EXTENSION cl_khr_fp64 : enable??
double x = 2.0;?
指令#pragma OPENCL EXTENSION是設置每個語言擴展行為的、簡單的、低級的機制。它沒有定義那些組合是合適的,這些是在其他地方定義的。需要注意的是,此類命令的順序會影響結果,后出現的命令會覆蓋前面的命令。
2、以cl_ext為擴展名的外部擴展。這種擴展是由2個或2個以上的廠商發起,并不需要進行一致性測試。比如cl_ext_device_fission擴展,通過該擴展把一個設備分成多個子設備,每一個設備都有自己的隊列,主要是多核cpu以及Cell Broadband Engine使用,該擴展由AMD,Apple,Intel以及IBM四家聯合提出。
對于每個子設備,都有自己的queue,把不同任務發送到兩個子設備中,這里需要注意的是,把設備拆分為子設備,首先要了解該設備的架構,然后根據任務及device架構進行拆分。
3、廠商自己的擴展,比如GPU printf擴展,主要用來debug kernel代碼。
enum cudaLimit {?
?cudaLimitStackSize ?= 0x00, ?// GPU thread stack size
?cudaLimitPrintfFifoSize = 0x01, ?// GPU printf FIFOsize?
?cudaLimitMallocHeapSize = 0x02??// GPU malloc heapsize?
};?
?
OpenCL擴展了GPU用于圖形生成之外的能力,支持新數據類型,比如三維矢量和新增圖像格式,支持處理多Host指令以及跨設備Buffer處理,如想對OpenCL有更深入的了解,還需自己動手實踐。
轉載于:https://www.cnblogs.com/lifan3a/articles/4818549.html
總結
以上是生活随笔為你收集整理的OpenCL异构扩展的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 启动和停止Oracle服务bat脚本
- 下一篇: Liunx UID and GID