处理器

数字信号处理器 – 线性代数

TI 线性代数库 (LINALG) 是一款经过优化可用于执行密集线性代数计算的库。它包括经过优化适用于密集线性代数计算的 BLAS(基本线性代数子程序)和 LAPACK(线性代数包)库。

BLAS 库可提供执行基本矢量和矩阵运算的例程。1 级例程提供标量-矢量和矢量-矢量运算,2 级例程提供矩阵-矢量运算,3 级例程提供矢量-矢量运算。TI 经过优化的 BLAS 库支持 CBLAS API,并且基于 BLIS(类似 BLAS 的库实例软件)0.1.6。

使用 f2c 实用程序在 LAPACK 上构建的 LAPACK 库可为求解联立线性方程组以及线性方程组、特征值问题和奇异值问题的最小二乘解提供例程。LAPACK 库依靠 TI 经过优化的 BLAS 库实现加速。

有关 LINALG 的更多详细信息,参见 LINALG 用户指南

主要库特性

  • 支持标准 CBLAS API 和 CLAPACK API。
  • 支持单核和多核 CBLAS 计算。
  • CBLAS 可配置为在 ARM 或 DSP 内核上运行。
  • CLAPACK 仅可在 ARM 内核上运行(不过 CLAPACK 使用的 CBLAS 函数由 DSP 内核加速)。
  • 构建和运行示例。

LINALG 性能

下表显示了在两个不同 TI SoC 中的多核 ARM Cortex-A15 内核和 C66x DSP 内核上测得的 LINALG 例程的示例性能。

1 时间表示在以指定速度运行的器件的所有 ARM Cortex-A15 内核上进行处理的总秒数。
2 时间表示在以指定速度运行的器件的所有 C66x DSP 内核上进行处理的总秒数。时间包括 OpenCL 开销。
有关更多性能信息,请参见 LINALG 用户指南中的“基准测试”部分

使用的硬件平台AM572x EVM66AK2H EVM
具有进行基准测试的内核配置的器件AM572666AK2H12
AM572866AK2H14
进行基准测试的内核2x ARM A152x C66x DSP从 ARM 向 DSP 移动代码时测量到的加速 4x ARM A158x C66x DSP从 ARM 向 DSP 移动代码时测量到的加速
1.5GHz 频率750MHz 频率1.2GHz 频率1.2GHz 频率
LINALG 函数时间(以秒为单位)1时间(以秒为单位)2时间(以秒为单位)1时间(以秒为单位)2
SGEMM (m=n=k=1000)0.270.1571.7x0.1210.0274.5x
DGEMM (m=n=k=1000)0.7860.551.4x0.2940.0843.5x
CGEMM (m=n=k=1000)6.980.63511x2.360.0926.2x
ZGEMM (m=n=k=1000)7.623.832x2.540.5164.9x
CHERK (m=k=1000)3.530.3929x1.20.05322.6x
ZHERK (m=k=1000)3.852.271.7x1.30.333.9x

包含的示例

提供以下示例旨在说明如何结合 CBLAS 和 CLAPACK API 使用 LINALG。这些示例位于 /examples 中:

ARM+DSP 示例

这些示例位于 arm+dsp 文件夹中。所有示例在主机 (ARM) 上运行,并且可能会按照 BLAS 配置将 BLAS 函数卸载到 DSP。

  • 矩阵乘法 (dgemm)
  • 对称矩阵秩 k 运算 (dsyrk)
  • 三角矩阵乘法 (dtrmm)
  • 三角矩阵方程求解器 (dtrsm)
  • 特征分解和矩阵求逆 (eig)
  • LU 分解和矩阵求逆 (ludinv)
  • xGEMM 基准测试 (gemm_bench)

仅针对 DSP 的示例

此示例位于 dsp 文件夹中。此示例通过 CCS 和 JTAG 在 DSP 上运行。

  • 矩阵乘法 (dgemm)

下载 LINALG

LINALG 已移植到下列器件,而且作为 TI 免费处理器 SDK 所包括的一部分,可使用以下链接为下列器件进行下载:

Sitara AM57x

单核/双核 Cortex®-A15 和 C66x DSP

C6000 DSP + ARM 66AK2Hx

高性能多核 C66x DSP + ARM Cortex®-A15。

在处理器 SDK 中,可在以下位置找到 LINALG:

  • 对于处理器 SDK RTOS:<Processor-SDK-RTOS-installation-root>/linalg_<version>
  • 对于处理器 SDK Linux:<Processor-SDK-Linux-installation-root>/linux-devkit/sysroots/cortexa15hf-vfp-neon-linux-gnueabi/usr/share/ti/ti-linalg-tree