ArrayFire中文教程[1]

在做GPU开发设计的时候,遇到了ArrayFire,但我对ArrayFire并不了解。本文档编写的目的是为了学习ArrayFire。同时,该系列文档是我于业余时间来翻译的。原文为ArrayFire的官方文档指南。(链接:http://arrayfire.org/docs/index.htm)在翻译过程中,如果有错误的地方,请后续读者尽早指出,我会尽快改正。

本文档版权属于我个人所有,如需转载,请私信联系。

综述

什么是ArrayFire?

ArrayFire是一个为并行计算而设计的高性能的软件库,具有十分易于使用的API。其基于数组的函数集,使并行计算变得十分便利。

安装 ArrayFire

ArrayFire支持Windows,OSX,以及Linux。具体下载链接,请在ArrayFire官方网站下载。

便于使用

数组对象非常简单。

基于数组的符号,以可读的数学相似符号有效地表达可计算的算法。

任何软件工程师,在使用ArrayFire之前,并不需要具备并行编程方面的专业知识。软件工程师只需要使用ArrayFire的仅仅几行代码,就可以完成在CUDA/OpenCL的Kernel函数中几百行代码需要完成的功能。

应用广泛

ArrayFire的应用非常广泛支持多领域ArrayFire包含数百个跨越各个领域的函数,主要包括:

  • 矢量算法
  • 图像处理
  • 计算机视觉
  • 信号处理
  • 线性代数
  • 统计学
  • 其他

每一个函数都由ArrayFire的开发人员从底层进行手工优化。

支持各种数据类型和大小

ArrayFire可以处理常见的数据类型和大小,包括矢量,矩阵,卷积等。并且它支持通用的数据类型,包括单精度和双精度浮点值,复数,布尔型,以及32bit无符号和有符号整型。

扩展ArrayFire

ArrayFire可以被独立地用来设计成为应用程序,也可以与已有的CUDA或OpenCL程序集成。所有的ArrayFire数组都可以与其他CUDA或OpenCL数据结构互换。

一次编码,随处运行!

ArrayFire代码支持x86,ARM,CUDA,以及OpenCL设备,ArrayFire支持如下全面的设备列表。

ArrayFire在安装时附带:

  • 支持NVIDIA GPU的一个CUDA版本(命名为‘libafcuda’)
  • 支持OpenCL设备的一个OpenCL版本(命名为‘libafopencl’)
  • 当CUDA或OpenCL设备不可用时,一个CPU版本(命名为‘libafcpu’)

ArrayFire非常高效

矢量化和批量操作

ArrayFire支持N维数组的批量操作。批量操作在ArrayFire中是并行运算的,以确保CUDA或OpenCL设备达到最佳的性能。我们可以使用矢量化技术从ArrayFire中获得最佳性能。

ArrayFire也可以使用gfor函数,以并行的方式执行循环迭代。

即时编译

ArrayFire会自动对代码执行运行时的分析以提高运算强度和内存吞吐量,并且能避免不必要的内存临时分配。它有一个内部的高性能编辑器JIT来对目标程序进行优化。

关于ArrayFire JIT,请详细阅读:http://arrayfire.com/performance-of-arrayfire-jit-code-generation/

一个简单的使用ArrayFire的例子

在下面的这个例子中,首先可以大概看到ArrayFire程序的示例。工程师可以在CUDA或OpenCL设备上创建数组,然后就可以在这些数组的基础上使用ArrayFire函数了。

ArrayFire中文教程[1]_第1张图片

你可能感兴趣的:(并行计算)