ArrayFire - 通用张量计算库

本文翻译整理自:https://github.com/arrayfire/arrayfire


一、关于 ArrayFire

ArrayFire 是一个通用张量计算库,能够简化针对 CPU、GPU 及其他硬件加速设备中并行架构的软件开发流程。该库服务于各技术计算领域的用户。

商标政策 : “ArrayFire” 文字商标及标识是 AccelerEyes LLC(运营名 ArrayFire)的注册商标。使用前请查阅 商标政策。


相关链接资源

  • github : https://github.com/arrayfire/arrayfire

  • 官网:http://arrayfire.com/

  • 官方文档:http://www.arrayfire.com/docs/index.htm

    快速链接: 函数列表 | 教程 | 示例 | 博客

  • Demo/在线试用:https://github.com/arrayfire/arrayfire/blob/master/examples/

  • Community : https://join.slack.com/t/arrayfire-org/shared_invite/MjI4MjIzMDMzMTczLTE1MDI5ODg4NzYtN2QwNGE3ODA5OQ

  • Blog : http://arrayfire.com/blog/

  • FAQ : https://groups.google.com/forum/#!forum/arrayfire-users

  • License : https://github.com/arrayfire/arrayfire/blob/master/LICENSE

  • Slack | 谷歌论坛 | 企业服务 咨询


关键功能特性

  • 提供数百个加速的张量计算函数,涵盖以下领域:
    • 数组处理
    • 计算机视觉
    • 图像处理
    • 线性代数
    • 机器学习
    • 标准数学运算
    • 信号处理
    • 统计计算
    • 向量算法
  • 简单易用、稳定且文档完善的 API
  • 严格的基准测试确保顶尖性能与数值精度
  • 跨平台支持 CUDA、oneAPI、OpenCL 及原生 CPU(Windows/Mac/Linux)
  • 通过 Forge 提供内置可视化功能
  • 商业友好的开源许可
  • 由 ArrayFire 提供企业级支持

ArrayFire 为开发者提供了加速设备数据的高级抽象对象 af::array。开发者对 ArrayFire 数组执行操作时,这些操作会自动转换为在计算设备上执行的近最优内核。

ArrayFire 支持从低功耗移动设备到高性能 GPU 超级计算机的全系列设备,兼容所有主流厂商的 CPU(Intel/AMD/ARM)及 GPU(AMD/Intel/NVIDIA/Qualcomm),并支持 Windows/Mac/Linux 上的各类加速设备。


二、安装

安装或从源码构建的指南详见 wiki。


三、示例应用

1、康威生命游戏

查看 维基百科页面 了解游戏规则。


ArrayFire - 通用张量计算库_第1张图片


static const float h_kernel[] = { 1, 1, 1, 1, 0, 1, 1, 1, 1 };
static const array kernel(3, 3, h_kernel, afHost);

array state = (randu(128, 128, f32) > 0.5).as(f32); // 初始化状态
Window myWindow(256, 256);
while(!myWindow.close()) {
    array nHood = convolve(state, kernel); // 获取邻居状态
    array C0 = (nHood == 2);  // 生成生存条件
    array C1 = (nHood == 3);
    state = state * C0 + C1;  // 更新状态
    myWindow.image(state);    // 可视化
}

完整源码见:https://github.com/arrayfire/arrayfire/blob/master/examples/graphics/conway_pretty.cpp


2、感知机算法

ArrayFire - 通用张量计算库_第2张图片


array predict(const array &X, const array &W) {
    return sigmoid(matmul(X, W));
}

array train(const array &X, const array &Y,         double alpha = 0.1, double maxerr = 0.05,         int maxiter = 1000, bool verbose = false) {
    array Weights = constant(0, X.dims(1), Y.dims(1));

    for (int i = 0; i < maxiter; i++) {
        array P   = predict(X, Weights);
        array err = Y - P;
        if (mean<float>(abs(err) < maxerr) break;
        Weights += alpha * matmulTN(X, err);
    }
    return Weights;
}
...

array Weights = train(train_feats, train_targets);
array test_outputs  = predict(test_feats, Weights);
display_results<true>(test_images, test_outputs,                       test_targets, 20);

完整源码见:https://github.com/arrayfire/arrayfire/blob/master/examples/machine_learning/perceptron.cpp

更多示例代码请访问 examples/ 目录。


四、语言支持

ArrayFire 提供多种官方及社区维护的语言 API:

官方支持:

  • C++ : http://arrayfire.org/docs/gettingstarted.htm#gettingstarted_api_usage
  • Python : https://github.com/arrayfire/arrayfire-python

社区维护:

  • Rust : https://github.com/arrayfire/arrayfire-rust
  • Julia : https://github.com/JuliaComputing/ArrayFire.jl
  • Nim : https://github.com/bitstormGER/ArrayFire-Nim

开发中封装:

  • .NET : https://github.com/arrayfire/arrayfire-dotnet
  • Fortran : https://github.com/arrayfire/arrayfire-fortran
  • Go : https://github.com/arrayfire/arrayfire-go
  • Java : https://github.com/arrayfire/arrayfire-java
  • Lua : https://github.com/arrayfire/arrayfire-lua
  • NodeJS : https://github.com/arrayfire/arrayfire-js
  • R : https://github.com/arrayfire/arrayfire-r
  • Ruby : https://github.com/arrayfire/arrayfire-rb

伊织 xAI 2025-04-28(一)

你可能感兴趣的:(#,AI,开源项目,python,ai)