OpenVX, 运算加速库, NVIDIA
OpenVX
Khronos Group
Khronos Group是一個行業組織,創建開放標準以實現并行計算、圖形、視覺、傳感處理和動態媒體在各種平臺和設備上的編寫和加速。Khronos標準包括Vulkan, OpenGL, OpenGL ES, WebGL, OpenCL, SPIR, SYCL, WebCL, OpenVX, EGL, OpenMAX, OpenVG, OpenSL ES, StreamInput, COLLADA和glTF。
OpenSL:音頻的硬件加速接口。
Vulkan:OpenGL的升級版本。在OpenGL中Context和單一線程是綁定的,所以所有需要作用于Context的操作,例如改變渲染狀態,綁定Shader,調用Draw Call,都只能在單一線程上進行。Vulkan中不再需要依賴于綁定在某個線程上的Context,而是用全新的基于Queue的方式向GPU遞交任務,并且提供多種Synchronization的組件讓多線程編程更加親民。
簡單來說,Khronos的任務就是創建一個統一的硬件和軟件之間的API,這樣無論軟件廠商,還是硬件廠商,都能各行其道,互不干擾了。
概述
官網:
https://www.khronos.org/openvx/
上圖給出了OpenVX的主要用途,以及它和Khronos其他兄弟項目之間的關系。
OpenVX本身也是一個系列標準。它包括:
OpenVX:一個傳統的CV接口。提供包括直方圖、Harris、Canny等特征算子的API。
OpenVX SC(Safety Critical):安全版的OpenVX。
OpenVX NN Extension:專門用于提供NN加速方面的API。目前主要集中于CNN的加速,即卷積、池化等操作,對其他NN支持有限。此外,這些API主要用于預測,而非訓練。
Khronos官方提供了一個OpenVX的軟件參考實現,用于軟硬件廠商的測試工作。
相關API文檔和參考實現(sample code)參見:
https://www.khronos.org/registry/OpenVX/
Host & Device
和OpenGL類似,一般將CPU稱作Host,而將GPU稱作Device。App運行在Host上,而硬件加速由Device實現。
Device上的內存一般不能直接訪問,需要使用vxCreateScalar、vxCreateTensor之類的API,將相關數據傳到Device上。
類似的,有些API也分為Host版本和Device版本,前者用于Host和Device之間的數據交換,而后者用于Device內部數據的交換。
比如,vxCreateTensorAddressing和vxCreateTensorView,都是選擇tensor的某一部分,前者是Host API,而后者是Device API。
數組的存儲格式
和OpenGL一樣,OpenVX中的tensor,也是列優先存儲的。而C語言是行優先存儲的。
行優先/列優先的概念參見:
http://blog.csdn.net/zhoxier/article/details/8058176
數組按行/列存儲
OpenCL
官網:
https://www.khronos.org/opencl/
按照Michael J. Flynn的分類方法,計算機的體系結構可分為如下四類:
Single instruction stream single data stream (SISD)
Single instruction stream, multiple data streams (SIMD)
Multiple instruction streams, single data stream (MISD)
Multiple instruction streams, multiple data streams (MIMD)
原圖地址:
https://en.wikipedia.org/wiki/Flynn's_taxonomy
CPU通常是SISD和SIMD的,而GPU則是MISD的,超級計算機則是MIMD的。
OpenCL是一個硬件中立標準,原則上和計算機的體系結構無關。當然現實中,我們主要使用GPU進行運算加速。
和OpenGL、OpenVX的專用性不同,OpenCL主要定位于通用數學運算。OpenGL年代久遠也就罷了。對于像OpenVX這樣的新標準,有的時候其內部實現也有可能依賴于OpenCL。畢竟無論哪個領域的專用計算,最終都可以分解為基本的數學運算。
簡單來說,OpenVX的封裝粒度在層一級,而OpenCL最多只提供到矩陣運算一級的API。
術語:
Shared Virtual Memory,SVM
Memory consistency model
Multisample anti-aliasing,MSAA
參考:
http://blog.csdn.net/leonwei/article/details/8880012
從零開始學習OpenCL開發(一)架構
SYCL
SYCL是Khronos提供的基于OpenCL的C++接口層。
官網:
https://www.khronos.org/sycl
ComputeCpp
ComputeCpp是Codeplay公司提供的SYCL接口的實現。它除了支持OpenCL之外,還支持CUDA和C++AMP。
官網:
https://www.codeplay.com/products/computesuite/computecpp
OpenVG
OpenVG是針對諸如Flash和SVG的矢量圖形算法庫提供底層硬件加速界面的免授權費、跨平臺應用程序接口API。
官網:
https://www.khronos.org/openvg/
OpenVG和OpenGL 3D的差異:
1.OpenVG能實現的功能,OpenGL 3D都能實現,后者的功能要強大的多。
2.OpenGL 3D的基本圖元是三角形,而OpenVG的基本圖元是Path,也就是閉合曲線。通常來說,Path的頂點要遠少于三角形。例如,繪制一個圓形,要用很多三角形擬合,但使用Path的話,用3段Bézier curve就可以表示了。
3.OpenVG支持物體任意縮放而不失真,而OpenGL 3D中的物體在大分辨率下會有鋸齒。
上圖是OpenVG的pipeline。
運算加速庫
MKL
Intel Math Kernel Library是一套經過高度優化和廣泛線程化的數學例程,專為需要極致性能的科學、工程及金融等領域的應用而設計。
官網:
https://software.intel.com/zh-cn/mkl
Neon
Neon是個大路貨的名字,在數值計算領域ARM和Intel都有叫Neon的硬件或技術。
ARM的Neon是適用于ARM Cortex-A系列處理器的一種128位SIMD擴展結構。它主要聚焦于矩陣運算,當然也可用于DL領域。
官網:
https://developer.arm.com/technologies/neon
Intel的Neon專為DL設計。
官網:
https://ai.intel.com/neon/
OpenACC
官網:
https://www.openacc.org/
PGI
PGI是由The Portland Group開發的并行計算庫,但后者已于2013年被NVIDIA收購。
官網:
https://www.pgroup.com/
HSA
HSA (Heterogeneous System Architecture)是AMD推出的異構系統架構。
官網:
http://www.amd.com/zh-cn/innovations/software-technologies/hsa
NetLib
NetLib是一個數學方面的網站,收集了大量的數學軟件和論文。官網:
http://www.netlib.org/
知名軟件LAPACK(Linear Algebra PACKage)和BLAS (Basic Linear Algebra Subprograms)的官網就在NetLib:
http://www.netlib.org/lapack/index.html
http://www.netlib.org/blas/index.html
LAPACK和BLAS的歷史非常悠久,是用Fortran語言編寫的。
常用線性代數庫
ATLAS(Automatically Tuned Linear Algebra Soft)
代碼:
https://sourceforge.net/projects/math-atlas/
安裝:
sudo apt-get install libatlas-base-dev
OpenBLAS
官網:
http://www.openblas.net/
代碼:
https://github.com/xianyi/OpenBLAS
作者:張先軼,北京理工大學本碩(2005年、2007年)+中科院博士(2014年)。PerfXLab(澎峰科技)創始人。
 個人主頁:
 http://xianyi.github.io/index_cn.htm
OpenBLAS需要gfortran參與編譯:
sudo apt install gfortran
需要注意gcc的版本和gfortran的版本必須一致。例如,某臺機器為了項目需要,沒有使用ubuntu默認的gcc版本,這樣即使安裝了gfortran,也還是不行。最后,安裝匹配的gfortran才解決了該問題。
NVIDIA
NVIDIA作為行業龍頭,其影響力甚至在Khronos Group之上,它提出的標準很多成為了行業的事實標準。
最近(2018.2),公司副總M給我們講座的時候,回顧他早年在NVIDIA的經歷,當時他曾擁有數萬股NV的股票,可惜早都賣了。這十幾年來,NV股票經過5次分拆,當初的一股現在要值6500美元。他要不賣,現在可能已經是億萬富翁了。。。
術語
iGPU:Integrated Graphics Processing Unit。
dGPU:Discrete Graphics Processing Unit。
CUDA
CUDA是NVIDIA最早推出的通用數學運算庫。除了基本的數學運算之外,還提供了一些工具包:
cuBLAS:線性計算庫。
NVBLAS:多GPU版的cuBLAS。
cuFFT:FFT計算庫。
nvGRAPH:圖計算庫。(這里的圖是數學圖論中的圖,和DL框架中的計算圖是兩回事。)
cuRAND:隨機數生成庫。
cuSPARSE;稀疏矩陣計算庫。
cuSOLVER:解線性方程的計算庫。包括解稠密方程的cuSolverDN、解稀疏方程的cuSolverSP和矩陣分解的cuSolverRF。
Deep Learning SDK
cuDNN:DL計算庫。
NCCL:多結點、多GPU的通信庫。
TensorRT:嵌入式設備上專用于DL inference的計算庫。
NVIDIA DIGITS:一款web應用工具,可在網頁上對Caffe進行圖形化操作和可視化。
參考:
https://mp.weixin.qq.com/s/v8-JHd5tWm41WLqR-h6eKA
使用TensorRT集成加速TensorFlow推理
NVDLA
NVIDIA Deep Learning Accelerator是一個開源的用于inference的芯片方案。官網:
http://nvdla.org/
NVIDIA DALI
NVIDIA DALI是一個GPU加速的數據增強和圖像加載庫,為優化深度學習框架數據pipeline而設計,而其中的NVIDIA nvJPEG是用于JPEG解碼的高性能GPU加速庫。
代碼:
https://github.com/NVIDIA/dali
Tensor Core
https://mp.weixin.qq.com/s/pPjPLqgXZ8iCPS42vXJpuQ
NVIDIA Tensor Core深度學習核心解析
CUDA實戰
安裝:
http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
參考:
http://ishare.iask.sina.com.cn/f/17211495.html
深入淺出談CUDA技術
http://peghoty.blog.163.com/blog/static/493464092013016113254852/
CUDA編程入門
http://blog.csdn.net/xsc_c/article/category/2186063
某人的并行計算專欄
http://tieba.baidu.com/p/2155772860
GPU和Shader技術的基礎知識
http://www.cnblogs.com/geniusalex/archive/2008/12/26/1941766.html
CPU GPU設計工作原理
http://www.jianshu.com/p/8687a040eb48
GPU處理圖像Shader的入門
https://mp.weixin.qq.com/s/bvNnzkOzGYYYewc3G9DOIw
GPU是如何優化運行機器學習算法的?
https://mp.weixin.qq.com/s/nAwxtOUi6HpIjVOREgEfaA
CUDA編程入門極簡教程
https://mp.weixin.qq.com/s/-zdIWkuRZXhsLJmOZljOBw
CUDA編程精品教材分享《基于GPU-多核-集群等并行化編程》
CATIA
CATIA是法國達索公司的產品開發旗艦解決方案。作為PLM協同解決方案的一個重要組成部分,它可以通過建模幫助制造廠商設計他們未來的產品,并支持從項目前階段、具體的設計、分析、模擬、組裝到維護在內的全部工業設計流程。CATIA是GPU在工業上的一個重要的應用案例。
官網:
https://www.3ds.com/products-services/catia/
MLPerf
MLPerf是谷歌、百度、斯坦福等聯手打造的基準測量工具,用于測量機器學習軟件與硬件的執行速度。
它的到來代表著原本市場規模較為有限的AI性能比較方案正式踏上發展正軌。簡而言之就是:以后各大公司發布的AI性能對比不能再王婆賣瓜自賣自夸了。
官網:
https://mlperf.org/
RDMA
RDMA網卡(Remote Direct Memory Access,這是一種硬件的網絡技術,它使得計算機訪問遠程的內存時無需遠程機器上CPU的干預)已經可以提供50~100Gbps的網絡帶寬和微秒級的傳輸延遲。
目前許多以深度學習為目標應用的GPU機群都部署了這樣的網絡。
參考:
https://mp.weixin.qq.com/s/_xcE8RUs0m4gwk3kxpe9jA
基于HTM/RDMA的可擴展內存事務處理系統
總結
以上是生活随笔為你收集整理的OpenVX, 运算加速库, NVIDIA的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 深度学习(二十九)——Normaliza
- 下一篇: word2vec, LSTM Speec
