2

OpenVX, 运算加速库, 线性代数库

 2 years ago
source link: http://antkillerfarm.github.io/ai/2017/09/05/openvx.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

OpenVX

Khronos Group

Khronos Group是一个行业组织,创建开放标准以实现并行计算、图形、视觉、传感处理和动态媒体在各种平台和设备上的编写和加速。Khronos标准包括Vulkan, OpenGL, OpenGL ES, WebGL, OpenCL, SPIR-V, SYCL, WebCL, OpenVX, EGL, OpenMAX, OpenVG, OpenSL ES, StreamInput, COLLADA和glTF。

OpenSL:音频的硬件加速接口。

简单来说,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/

OpenCL是一个硬件中立标准,原则上和计算机的体系结构无关。当然现实中,我们主要使用GPU进行运算加速。

和OpenGL、OpenVX的专用性不同,OpenCL主要定位于通用数学运算。OpenGL年代久远也就罢了。对于像OpenVX这样的新标准,有的时候其内部实现也有可能依赖于OpenCL。毕竟无论哪个领域的专用计算,最终都可以分解为基本的数学运算。

简单来说,OpenVX的封装粒度在层一级,而OpenCL最多只提供到矩阵运算一级的API

http://blog.csdn.net/leonwei/article/details/8880012

从零开始学习OpenCL开发(一)架构

SYCL是Khronos提供的基于OpenCL的C++接口层。近来有向通用HPC发展的趋势,后端已不再限于OpenCL,开始包括OpenMP/CUDA等。

https://www.khronos.org/sycl

ComputeCpp

ComputeCpp是Codeplay公司提供的SYCL接口的实现。它除了支持OpenCL之外,还支持CUDA和C++AMP。

https://www.codeplay.com/products/computesuite/computecpp

triSYCL:

https://github.com/triSYCL/triSYCL

DPC++:

https://github.com/intel/llvm/tree/sycl

hipSYCL:

https://github.com/illuhad/hipSYCL

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。

Vulkan

Vulkan是OpenGL的升级版本。在OpenGL中Context和单一线程是绑定的,所以所有需要作用于Context的操作,例如改变渲染状态,绑定Shader,调用Draw Call,都只能在单一线程上进行。Vulkan中不再需要依赖于绑定在某个线程上的Context,而是用全新的基于Queue的方式向GPU递交任务,并且提供多种Synchronization的组件让多线程编程更加亲民。

Sample:

https://github.com/KhronosGroup/Vulkan-Samples

https://vulkan-tutorial.com/

RHI:Render Hardware Interface

https://zhuanlan.zhihu.com/p/20712354

Vulkan-高性能渲染

https://www.zhihu.com/people/snowfox-68/posts

一个Vulkan的专栏

运算加速库

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/

GNU scientific library是一个C/C++写的数值计算库。

https://www.gnu.org/software/gsl/

OpenACC

https://www.openacc.org/

PGI是由The Portland Group开发的并行计算库,但后者已于2013年被NVIDIA收购。

https://www.pgroup.com/

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 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才解决了该问题。

Armadillo

Armadillo是一个线性代数和科学计算的C++库。

http://arma.sourceforge.net/

ensmallen

ensmallen是一个基于Armadillo的数学优化方面的C++库。

https://ensmallen.org/

大整数计算

GMP是一个C/C++的大整数计算库。

https://gmplib.org/

TensorFlow+++

https://mp.weixin.qq.com/s/6cFvh0OgouY_Lg7awxv_3g

快速开启你的第一个项目:TensorFlow项目架构模板

https://mp.weixin.qq.com/s/HshYcb98QyW0rR_svFpfUg

如何在TensorFlow中高效使用数据集

https://mp.weixin.qq.com/s/rSt6omyXe57WkBVXwp2AJg

数据载入过慢?这里有一份TensorFlow加速指南

https://mp.weixin.qq.com/s/ffW21oBKTDOc4sB8POhcnw

聊一聊TensorFlow的数据导入机制

https://mp.weixin.qq.com/s/nwymOr03cqm0ifpoBjL9Eg

TensorFlow变量保存和恢复

http://www.holmesconan.me/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/2018/04/03/cifar10-vgg.html

CIFAR-10 Estimator之Vgg模型

https://mp.weixin.qq.com/s/5_oCSK6MtsK_4xNU6T76UA

计算机图形学遇上深度学习,针对3D图像的TensorFlow Graphics面世

https://mp.weixin.qq.com/s/ndnbTCr51k_FSDRCLi0UOg

添加新操作

https://mp.weixin.qq.com/s/G3fbhTsHA22b02_B5WCPcg

TensorFlow调试程序(一)

https://mp.weixin.qq.com/s/1mSF2HKa72HgWq_q14HMtQ

TensorFlow调试程序(二)

https://mp.weixin.qq.com/s/OGsvcfU1VlhNZYgEGLimsQ

爱奇艺基于TensorFlow Lite的移动端AR解决方案SmileAR

https://mp.weixin.qq.com/s/sm4D9TBSllAONgeOxOiWkA

TF.Text来啦!

https://mp.weixin.qq.com/s/9etR8QEk4UXtoLqkJFQIHA

深入理解TensorFlow中的tf.metrics算子

https://zhuanlan.zhihu.com/p/27087310

《安娜卡列尼娜》文本生成——利用TensorFlow构建LSTM模型

https://mp.weixin.qq.com/s/6y7AEGz2cs4QUP0Cikhnmw

272页PPT讲述Tensorflow2.0在图形学方面的应用

https://mp.weixin.qq.com/s/w4uo9Uodmud4FhqxRNanUw

TensorFlow指南:GPU的使用

https://mp.weixin.qq.com/s/gnDTOLWuPZiCVzspTk_zCQ

TensorFlow轻度入门

http://gitbook.cn/books/593d71ba4686067a2200aec6/index.html

用TensorFlow实现智能机器人的原理及如何实现一个对话机器人

https://mp.weixin.qq.com/s/lLaSXG1VF9Rys2GNzFP7pw

轻松使用多种预训练卷积网络抽取图像特征

https://mp.weixin.qq.com/s/sbJdU7qMMyrSRuybTh7bKg

开源中文书《TensorFlow内核剖析》,335页pdf

https://mp.weixin.qq.com/s/5wy6yqaW_9pMBhgw8qDdOQ

基于TensorFlow打造强化学习API

https://mp.weixin.qq.com/s/VN2O6faf4spdD3qaqf3aiw

使用AMD显卡加速TensorFlow

https://mp.weixin.qq.com/s/LvN6LkUwyVElWVRrAT9NJA

TensorFlow 2.0迁移学习实践指南

https://mp.weixin.qq.com/s/Rb0Fh9TZJo-IdEoxlgD4gw

如何让模型在生产环境上推理得更快

https://mp.weixin.qq.com/s/EytvywrsgydXAJQhuUqKvg

简易浣熊识别器是如何实现的

http://www.jianshu.com/p/d443aab9bcb1

在TensorFlow上使用LSTM进行情感分析

https://mp.weixin.qq.com/s/gW_KX6eF9XEsSUO1UzJ3WQ

基于LSTM的情感分析

https://mp.weixin.qq.com/s/KZhL477ApHgQfmM2xFrYJw

Tensorlang:基于TensorFlow的可微编程语言

https://mp.weixin.qq.com/s/_9NJ6QLQArUAD1DKb0KRfA

如何使用TensorFlow mobile部署模型到移动设备

https://mp.weixin.qq.com/s/e_TzQxFLAonLMyYAhte6Cg

face-api.js:在浏览器中进行人脸识别的JavaScript接口

https://mp.weixin.qq.com/s/LjdHBEyQhJq3ptMj8XVT-w

TensorFlow在推荐系统中的分布式训练优化实践


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK