60、高性能计算与低端边缘计算加速方案

高性能计算与低端边缘计算加速方案

1. 3D 立方体元素计算与同步

在某些计算场景中,每个进程会使用 26 个相邻立方体的值来计算一个立方体内的元素。由于每个立方体内的元素是连续的,因此可以将立方体视为一个巨大的点。若沿着 x、y 和 z 轴从 0 开始对立方体进行编号,中心的立方体为第 13 个。

1.1 波算法应用

在这种情况下,会应用波算法。具体步骤如下:
- 第一波 :将第 13 个立方体复制到沿 x 轴的相邻立方体。
- 第二波 :将从第 12 个开始的 3 个连续立方体复制到沿 y 轴的相邻立方体。
- 第三波 :将中间层的整个 9 个立方体复制到沿 z 轴的相邻立方体。

1.2 3D 情况的更新代码

与 5 点模板的第一版代码类似,3D 情况下的更新代码如下:

1 //there are N elements in a cube, the size of element is elem size
2 dim D = data(27,1);
3 dim Px = proc(p,1);
4 dim Py = proc(p,p);
5 dim Pz = proc(p,p∗p);
6 dim P = Pz ∗Py ∗Px;
7 dim Point = P ∗get low(cyclic(D,13),1);
8 dim Left = Pz ∗Py ∗cyclic(Px, 1) ∗get low(cyclic(D,12),1);
9 dim Right = Pz ∗Py ∗cyclic(Px,−1) ∗get low(cyclic(D,14),1);
10 copyto(Point, ptr, Left, ptr, elem size∗N);
11 //other direction...

虽然立方体代表三维元素,但可以以一维方式进行操作,以简化描述。

1.3 同步机制

copyto 函数通过使用 MPI Test 包含隐式同步,以确保在进行下一次通信或计算之前完成复制操作。目前没有提供 copyto 的异步版本,但在每一波中有两个 copyto 调用,这些调用可以同时执行,以避免不必要的同步。

2. PADM 工具概述

PADM 是一个轻量级工具包,用于以直观的方式描述分布。它还提供了一个通用的 copyto 函数,以隐藏 MPI 细节和缓冲过程。不过,它仍向用户暴露了与性能相关的因素,包括数据局部性和可配置参数,同时提供转换函数以简化描述。

由于 PADM 基于非阻塞 MPI 操作,程序员可以同时使用 PADM 和 MPI。实际上,MPI 中的常规集体操作可以使用该工具进行描述,例如 MPI Alltoall

1 dim A = proc(p)∗data(p,n)∗data(n);
2 dim B = data(p,n)∗proc(p)∗data(n);
3 copyto(A, ptr a, B, ptr b, elem size);

但 PADM 无法描述非规则的集体通信(如 MPI Alltoallv )和归约操作。其开源代码可在 GitHub 上获取,包含源代码和研究案例,如矩阵乘法和分子动力学模拟。

3. 低端边缘计算面临的挑战

3.1 边缘计算背景

如今的边缘计算工程原理在过去二十年首次提出,当时网络边缘产生的数据越来越多。边缘计算将“边缘”定义为数据源和云数据中心之间路径上的任何计算和网络资源,旨在使计算能够在网络边缘进行,为云服务处理下游数据,为移动和雾服务处理上游数据,从而提高现有网络系统的效率。

3.2 数据并行计算的兴起与问题

随着数据并行方法的普及,计算密集型和新兴应用(如人工智能及其附属领域,如机器学习、深度学习和控制理论)变得廉价且无处不在。这些应用对更快的服务响应时间和更便捷的大数据访问的需求,为在边缘计算中实现数据并行技术提供了机会,并可通过并行编程语言和通用图形处理单元(GPU)加速这一过程。

然而,低端边缘设备(如 Arduino 和 Raspberry Pi 硬件)在数据并行计算方面面临诸多问题,主要包括:
- 功耗大 :能源(电池寿命)是低端边缘设备的最大限制因素,计算密集型工作负载是否能带来与能耗相匹配的性能提升并不明确。
- 资源受限 :低端(甚至无)GPU 的设备会极大限制数据并行计算在边缘环境中的可行性。
- 运行时不兼容 :并行执行(如在非 NVIDIA GPU 运行时的 CUDA)容易出错,往往依赖串行 CPU 执行。

3.3 现有解决方案的不足

将通用计算卸载到云端已被证明是提高低端硬件系统性能的有效解决方案,但现有研究往往侧重于线程或进程迁移,关键问题在于需要将所有引用数据同时卸载到云端,这与边缘计算的初衷相悖。因此,需要一种解决方案,既能解决上述问题,又能保留边缘计算的优势。

4. edgeBoost 解决方案介绍

4.1 edgeBoost 概述

edgeBoost 专注于 C 内核功能的抽象、实例化和执行。通过跨设备绑定器进程间通信(IPC),它实现了跨内核并行编程,并能在运行时将计算密集型代码区域在远程 GPU 上执行,从而提高时间效率、内存使用和能源开销。其优化策略与云卸载类似,但对数据传输和额外工程努力的要求更低。

4.2 edgeBoost 平台组件

edgeBoost 由三个主要组件组成,如下表所示:
| 组件 | 描述 |
| — | — |
| 跨内核 RPC 执行 | 旨在构建一个环境,使低端边缘设备中引用的内核功能能够在远程服务器机器上正确执行。但目前编译器(如 OpenCL 或 CUDA 编译器)主要支持单设备内的 RPC 执行,因此 edgeBoost 需要解决跨内核绑定器 IPC 和跨设备 RPC 执行等挑战。 |
| 功能抽象和实例化 | 在跨内核 RPC 执行工作流中,edgeBoost 会找到计算密集型代码区域,通过功能抽象和实例化扩展内核函数的默认绑定器 IPC,创建跨设备绑定器 IPC 连接,同时提供设备内 IPC 的假象。 |
| 网络连接安全 | edgeBoost 允许服务器和多个边缘设备通过网络协作工作,因此会面临各种安全问题。为保护其免受潜在攻击,通过 SSL 协议在客户端和服务器之间建立安全连接。 |

4.3 edgeBoost 工作流程

graph LR
    A[客户端] --> B[目标内核代码选择]
    B --> C[跨设备绑定器 IPC]
    C --> D[服务器]
    D --> E[执行计算密集型代码]

在客户端的 RPC 执行有两个主要阶段:
- 目标内核代码选择 :使用启发式目标选择算法。
- 跨设备绑定器 IPC :将选择的代码通过跨设备绑定器 IPC 发送到服务器执行。

目前,edgeBoost 为 OpenCL 或 CUDA C 内核应用提供了可扩展的支持,无需大规模重写代码。程序员可以通过提供的 API 简单地将计算密集型代码区域指定到服务器。

5. C 内核在并行计算中的应用与挑战

5.1 C 内核在并行计算中的特点

在过去几十年里,开发者们有了许多友好的并行编程语言可供选择,而 C 内核编程作为一种开放且广泛采用的标准,具有显著优势。如今,C 内核编程是一种静态编译语言,这在 CPU - GPU 系统协同设计中是一个重要特性。

以 OpenCL 为例,它是 C 语言的扩展,用于加速并行计算。程序员编写的应用代码分为两部分:一部分是在 CPU 主机上执行的函数,另一部分是在 GPU 设备上执行的函数。设备代码的入口函数会用 CL 关键字标记,这些函数被称为 C 内核。C 内核在单指令多线程(SIMT)模型下,通过一组并行线程并行执行。由于主机和设备代码在不同的内存空间中执行,主机代码必须包含特殊调用,以实现主机到设备以及设备到主机的数据传输。

以下是一个典型 OpenCL 调用的步骤序列:
1. 编写主机代码和设备代码。
2. 主机代码将数据传输到设备内存。
3. 主机代码启动 C 内核在设备上执行。
4. 设备执行 C 内核并处理数据。
5. 设备将处理后的数据传输回主机内存。

5.2 低端边缘设备计算面临的挑战

以 OpenCL 术语和高通骁龙 805 处理器为例,来探讨 C 内核并行编程模型在低端边缘计算平台上的表现。对于边缘 OpenCL 应用,计算系统芯片(SoC)通常由主机(传统上是 CPU,如骁龙 805 Krait CPU)和一个或多个与主机通信以执行并行计算的设备(如 Adreno GPU)组成。OpenCL 应用的代码包括主机代码(C API 扩展)和设备代码(OpenCL C 内核语言),两者之间的进程间通信(IPC)通过主机程序空间向命令队列发出命令来实现,例如将数据从主机传输到设备内存,或在设备上启动内核执行。

然而,低端边缘设备在 C 内核并行编程中面临诸多挑战:
- 任务粒度匹配问题 :新兴的边缘执行(如机器学习或深度推理)围绕任务进行,自然的做法是让每个 C 内核线程分析一个任务。但推理窗口中的任务数量可达数十甚至数千个,而 SoC 的 GPU 通常需要大量线程才能实现显著的加速。如果 C 内核任务计算过于密集,SoC 可能难以隐藏内存访问或 IPC 延迟,因为在其他线程因内存事务停滞时,无法在就绪的计算线程之间进行切换。
- 软件和硬件支持不足 :先进的并行编程语言(如 CUDA)在低端边缘设备的软件和硬件环境中尚未得到充分支持。用户目前只有有限的工具来优化低端边缘计算的整体性能,现有的技术(如某些优化方案)要求用户采用严格的方案来处理内核任务,甚至可能没有合适的工具可用。此外,通过有限规模的现场测试(如小组评估或内部试用)进行日志分析,在应用广泛采用之前进行性能评估,但这些测试缺乏广泛(特别是全球范围)的应用覆盖。

6. edgeBoost 的具体操作与性能评估

6.1 edgeBoost 的操作步骤

edgeBoost 为解决低端边缘设备在并行计算中的问题提供了一种解决方案,其具体操作步骤如下:
1. 目标内核代码选择 :在客户端,使用启发式目标选择算法,找出计算密集型的内核代码区域。
2. 跨设备绑定器 IPC :通过扩展内核函数的默认绑定器 IPC,创建跨设备绑定器 IPC 连接,将选择的内核代码发送到服务器。
3. 服务器执行 :服务器接收到代码后,在远程 GPU 上执行计算密集型代码区域。
4. 结果返回 :服务器将计算结果返回给客户端。

6.2 edgeBoost 的性能评估

实验结果表明,edgeBoost 在大多数情况下能为低端边缘设备带来显著的性能优化。例如,在平均情况下,它能实现 76% 的时间开销减少和 78% 的能源开销减少。然而,在低传输带宽的约束下,其性能提升可能会受到影响。

以下是一个简单的对比表格,展示 edgeBoost 与默认方案在不同指标上的表现:
| 方案 | 时间开销减少 | 能源开销减少 |
| — | — | — |
| edgeBoost | 76% | 78% |
| 默认方案 | 无显著减少 | 无显著减少 |

6.3 edgeBoost 的安全机制

为了确保 edgeBoost 在网络环境中的安全性,它采用了 SSL 协议建立客户端和服务器之间的安全连接。在多设备场景中,edgeBoost 能够区分多个内核任务实例,从而有效地执行权限检查。同时,SSL 连接可以保护系统免受各种攻击(如 DDoS 攻击),确保服务质量。

graph LR
    A[客户端] -->|选择计算密集型代码| B[跨设备绑定器 IPC]
    B -->|发送代码| C[服务器]
    C -->|执行代码| D[计算结果]
    D -->|返回结果| A
    E[SSL 连接] --> A
    E --> C

综上所述,edgeBoost 通过跨内核功能抽象和远程执行,为低端边缘设备在并行计算中提供了一种有效的解决方案,能够在大多数情况下显著提高性能,同时保证了一定的安全性。但在实际应用中,需要考虑传输带宽等因素对其性能的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值