AMD APP(Accelerated Parallel Processing) 利用 GPU 强大的处理能力,来为广泛的高性能、数据并行计算应用提供服务。AMD APP 系统包括一个软件栈、AMD GPUs 和多核 AMD CPUs。下图描述了 AMD APP 中不同组成部分之间的关系:
AMD APP 软件栈为终端用户和开发人员提供了一套完整、灵活的工具包,以充分利用 AMD GPUs 的处理能力。软件包括下面的部分:
- OpenCL 编译器和运行库;
- 调试和性能分析工具,AMD CodeXL;
- 高性能库。AMD APP 数学库(APPML),以优化 NDRange 相关的算法。
新一代的 AMD GPUs 使用统一着色器架构,可以在同一个硬件上交织运行不同功能类型的程序。可编程的 GPU 计算设备可以执行用户开发的不同程序,对于图形开发人员,我们把这些程序称为着色器程序
;对于并行计算程序的开发人员,我们称作内核程序
。使用数据并行编程模型,GPU 计算设备可以执行和图形无关的功能,这需要将执行的任务映射到计算单元。这种编程模型,称作 AMD APP(Accelerated Parallel Processing)。
运行在计算单元上的内核实例称作工作项。该概念和 Linux 系统环境下进程有些类似,运行在 cpu 上的程序实例称作进程,但是在 Linux 中进程可以作为调度单位,而在 AMD 的 GPU 中,调度单位是 wavefront,新一代的架构中它包含了 64 个工作项。工作项映射到一个 n-维
的索引空间,称作 NDRange。在执行工作项的时候,可以对每个维度的工作项进行单独的引用。
GPU 调度一定数量工作项到一组处理元素(processing element)上处理,直到所有的工作项处理完成。接着,可以执行内核程序,直到应用执行完成。 下图呈现了 AMD APP 的编程模型,以及如何将工作项映射到处理元素:
工作组被分配到计算单元上执行。同一工作组中的所有工作项只能被相同 CU 中的处理元素处理,而且一个处理元素在同一时刻只能处理一个工作项,但是一个 CU 可以处理多个工作组。
OpenCL 把所有将要执行的工作项映射到一个n-维
网格(NDRange)。开发人员可以指定如何将这些工作项划分到不同的工作组中。例如,可以根据任务的属性来指定。AMD 的 GPU 基于 wavefronts 执行(多个工作组在计算单元上以 lock-step 的方式执行),每个工作组包含整数个 wavefronts。如下图所示,在 AMD APP 环境中,硬件调度工作项执行的时候包括一个中间步骤,用来指定一个工作组中的 wavefronts,以在 AMD GPUs 上能获得最大性能。