Cray SHMEM中的线程安全与上下文 - 域特性及OpenCL + OpenSHMEM混合编程模型
1. Cray SHMEM的线程支持层次
Cray SHMEM目前支持两种线程级别:SHMEM THREAD SINGLE和SHMEM THREAD MULTIPLE,这与MPI中的线程级别类似。在线程安全特性中,SHMEM THREAD SINGLE每个进程仅允许注册一个线程,而SHMEM THREAD MULTIPLE允许注册多个线程。当有多个线程参与通信时,为确保线程安全,默认会在所有CDM(通信域管理器)中引入锁。
通过修改OSU PUT微基准测试,使用2个不同节点上的PE,每个PE注册32个线程,测试发现无锁实现对于小数据量的性能比有锁实现高4倍。然而,无锁设计假设线程的理想使用情况(即注册线程数等于每个PE可用的CDM数),这是将线程直接映射到网络资源的一个缺点。
2. 网络资源的高效利用
每个节点的可用网络资源数量有限,不同Cray架构对网络资源的需求不断增长,如下表所示:
| 架构 | 每个节点的线程数 | 互连方式 | 每个节点的CDM数 |
| ---- | ---- | ---- | ---- |
| Ivy Bridge | 40+ | Aries with Dragonfly | 120 |
| Haswell | 56+ | Aries with Dragonfly | 120 |
| Broadwell | 70+ | Aries with Dragonfly | 120 |
| Knights Landing | 250+ | Aries with Dragonfly | 120 |
线程安全扩展中使用SHMEM MAX NUM THREADS环境变量提供线程注册数量的提示,但存在不足,无法解决一些场景,例如:
- 即使线程仅在应用程序的特定模块中注册和超额分配,从shmem init线程开始,所有CDM都会引入锁,而不管超额分配发生在哪个模块。
- 即使一次只有主线程活跃,在主线程的所有通信事件中仍会进行锁检查。
上下文 - 域特性有助于将网络资源与线程区分开来。线程和上下文对象是两个独立的实体,上下文直接映射到网络资源,基于域或上下文的资源共享设计。线程可以使用可见的上下文句柄,根据上下文的资源属性进行使用。例如,私有上下文或线程级别为SHMEM THREAD SINGLE的上下文,一次只允许一个线程访问;共享上下文或线程级别为SHMEM THREAD MULTIPLE的上下文,允许多个线程同时访问。创建为SHMEM THREAD SINGLE的上下文类似于无锁设计,性能优于SHMEM THREAD MULTIPLE的上下文。
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef context fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
classDef domain fill:#FFEBEB,stroke:#E68994,stroke-width:2px;
T1(线程1):::process --> C1(上下文1):::context
T2(线程2):::process --> C2(上下文2):::context
T3(线程3):::process --> C3(上下文3):::context
C1 --> D1(域1):::domain
C2 --> D2(域2):::domain
C3 --> D2(域2):::domain
3. 内存排序扩展
线程安全特性允许shmem quiet和shmem fence在一个PE中的所有注册线程之间执行内存排序,而上下文 - 域特性避免了shmem quiet和shmem fence在所有活动上下文中的此功能。为支持行为良好的多线程应用程序,引入了SHMEM THREADED QUIET环境变量,它接受SERIAL、SHARED或INDEPENDENT作为输入:
- SERIAL:shmem quiet不是线程安全的,在SHMEM线程区域内使用需要序列化,这是默认属性。
- SHARED:线程安全,确保所有注册线程之间的内存排序。
- INDEPENDENT:线程安全,功能类似于shmem thread quiet,仅对发起shmem quiet调用的当前线程执行内存排序。
通过修改的OSU Put多线程微基准测试,在2个PE上,每个PE注册16个线程,测试不同数据大小下不同SHMEM THREADED QUIET值的性能。对于小数据量,SERIAL值的延迟和消息速率优于SHARED值。
4. 实验
为分析优化网络资源映射的影响,实现了多线程全对全集体通信模式的不同版本。使用固定数据大小为每个PE 4 MB,每个PE使用32个线程,在不同数量的PE上测量延迟。
有三种不同版本的基准测试:
- 线程安全版本(TS):使用线程安全扩展实现,每个PE注册32个线程进行通信。
- 上下文设计1(CTX1):创建一个线程级别为SINGLE的域(Domain - 1),该域有32个上下文,32个线程各使用一个上下文对象进行通信。
- 上下文设计2(CTX2):创建两个域,Domain - 1线程级别为SINGLE,Domain - 2线程级别为MULTIPLE,每个域有16个上下文,32个线程各使用一个上下文对象进行通信。
实验在具有Aries互连的32核Broadwell机器上进行,结果显示CTX1的性能比TS好18%,比CTX2好7%。
graph LR
classDef version fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
TS(线程安全版本TS):::version -->|性能比较| CTX1(上下文设计1 CTX1):::version
CTX1 -->|性能比较| CTX2(上下文设计2 CTX2):::version
5. 相关工作
- PAMI:并行主动消息接口,用于Blue Gene/Q超级计算机。其上下文对象类似于上下文 - 域扩展,但所有操作不是线程安全的,可视为创建所有上下文的线程级别属性为SHMEM THREAD SINGLE。
- MPI - 3 RMA:Cray - MPICH中的MPI - 3 RMA功能旨在提供无竞争的多线程通信和消息完成,具有高带宽和高消息速率。该功能动态分配网络资源给线程,只要同时驱动通信的线程数不超过可用网络资源数,就不会有竞争。
6. 未来工作
未来将从用户角度研究更多使用线程安全和上下文 - 域特性的多线程OpenSHMEM应用程序,评估这些提议,并研究不同使用场景下各特性的适用性,以及这两个特性的互操作性。
7. 结论
线程安全特性为多线程SHMEM程序增加SHMEM操作的并发性提供了简单方法,而上下文 - 域特性则提供了一种不同且更复杂的方式,有可能实现更高的并发性。这两个特性在SHMEM应用程序的线程区域中可以兼容使用,未来将进一步研究它们的互操作性。
8. OpenCL + OpenSHMEM混合编程模型
Adapteva Epiphany架构是一个二维低功耗RISC核心阵列,通过二维片上网络(NoC)连接,具有高计算能效和并行可扩展性。Epiphany - III作为协处理器可用于配备ARM CPU主机的平台。
OpenCL支持主机CPU将并行工作卸载到协处理器的协同设计编程模型,但OpenCL内存模型与Epiphany内存架构不一致,且缺乏对核心间通信的支持。因此,提出了混合OpenCL + OpenSHMEM编程模型,用OpenSHMEM替代非标准OpenCL扩展,以解决在Epiphany架构中使用OpenCL的不足。
以基于Cannon算法的矩阵 - 矩阵乘法为例,展示了混合模型解决了单独使用OpenCL实现良好基准性能的缺陷。
9. 实验步骤
-
对于Cray SHMEM实验:
- 选择实验环境,如具有Aries互连的32核Broadwell机器。
- 实现多线程全对全集体通信模式的不同版本(TS、CTX1、CTX2)。
- 设置每个PE的线程数为32,固定数据大小为4 MB。
- 在不同数量的PE上测量延迟,进行性能比较。
-
对于OpenCL + OpenSHMEM混合编程模型实验:
- 确定使用Epiphany架构的硬件平台,如包含Epiphany - III协处理器的Parallella迷你计算机。
- 基于Cannon算法实现矩阵 - 矩阵乘法的混合编程模型。
- 进行基准测试,比较混合模型与单独使用OpenCL的性能。
通过这些实验和研究,我们可以更好地理解和应用Cray SHMEM的线程安全与上下文 - 域特性,以及OpenCL + OpenSHMEM混合编程模型,为高性能计算提供更有效的解决方案。
Cray SHMEM中的线程安全与上下文 - 域特性及OpenCL + OpenSHMEM混合编程模型
10. 技术优势分析
10.1 Cray SHMEM特性优势
- 线程安全特性 :线程安全特性为多线程SHMEM程序提供了基本的并发支持。通过引入锁机制,确保了在多线程环境下通信的安全性。虽然锁的引入在一定程度上会带来性能开销,但对于需要保证数据一致性和线程安全的场景来说是必不可少的。例如,在多个线程同时访问共享资源时,锁可以防止数据竞争和不一致的问题。
- 上下文 - 域特性 :上下文 - 域特性将网络资源与线程分离,提供了更细粒度的资源管理和并发控制。通过上下文的创建和使用,线程可以根据上下文的属性灵活地使用网络资源,避免了线程与网络资源的直接映射带来的局限性。这种设计使得资源的分配更加合理,提高了系统的性能和可扩展性。例如,在不同的上下文可以根据其线程级别属性(如SHMEM THREAD SINGLE或SHMEM THREAD MULTIPLE)来决定是否允许多个线程同时访问,从而优化了资源的使用效率。
10.2 OpenCL + OpenSHMEM混合编程模型优势
- 弥补OpenCL不足 :OpenCL在Epiphany架构中存在内存模型不一致和缺乏核心间通信支持的问题。OpenSHMEM的引入弥补了这些不足,使得在该架构下能够更好地利用硬件资源,实现高效的并行计算。例如,在矩阵 - 矩阵乘法的应用中,OpenSHMEM可以有效地管理核心间的通信,提高计算性能。
- 提高性能和可扩展性 :混合编程模型结合了OpenCL和OpenSHMEM的优势,既利用了OpenCL的并行计算能力,又借助OpenSHMEM的远程内存访问和同步机制,实现了更高的性能和可扩展性。通过合理分配任务和资源,可以充分发挥Epiphany架构的计算能力,满足不同规模和复杂度的应用需求。
11. 应用场景分析
11.1 Cray SHMEM特性应用场景
- 多线程数据处理 :在需要处理大量数据的多线程应用中,线程安全和上下文 - 域特性可以确保数据的一致性和并发处理的高效性。例如,在数据分析、机器学习等领域,多个线程可以同时处理不同的数据块,通过合理使用上下文和锁机制,避免数据冲突,提高处理速度。
- 分布式计算 :在分布式计算环境中,不同节点之间的通信和资源管理是关键问题。Cray SHMEM的特性可以有效地管理节点之间的通信和资源分配,实现高效的分布式计算。例如,在大规模科学计算、云计算等领域,多个节点可以通过SHMEM进行数据交换和同步,提高计算效率。
11.2 OpenCL + OpenSHMEM混合编程模型应用场景
- 嵌入式系统和高性能计算 :Epiphany架构的低功耗和高计算能效使其适用于嵌入式系统和高性能计算领域。混合编程模型可以充分发挥该架构的优势,实现高效的计算任务。例如,在智能终端、机器人等嵌入式设备中,可以利用混合编程模型实现实时计算和数据处理。
- 矩阵计算和图形处理 :矩阵 - 矩阵乘法是许多科学计算和图形处理中的核心操作。混合编程模型在处理这类计算密集型任务时具有明显的优势,可以提高计算速度和性能。例如,在计算机图形学、图像处理等领域,混合编程模型可以加速矩阵运算,提高图形渲染的效率。
12. 操作要点总结
12.1 Cray SHMEM操作要点
- 线程级别选择 :根据应用的需求选择合适的线程级别(SHMEM THREAD SINGLE或SHMEM THREAD MULTIPLE)。如果应用只需要一个线程进行通信,选择SHMEM THREAD SINGLE可以避免锁的开销;如果需要多个线程同时进行通信,选择SHMEM THREAD MULTIPLE可以提高并发性能。
- 上下文创建和使用 :根据应用的特点创建合适的上下文,并合理使用上下文的属性。例如,对于需要保证线程安全的操作,可以创建线程级别为SHMEM THREAD SINGLE的上下文;对于需要并发处理的操作,可以创建线程级别为SHMEM THREAD MULTIPLE的上下文。
- 内存排序控制 :通过设置SHMEM THREADED QUIET环境变量,控制shmem quiet和shmem fence的行为,实现不同的内存排序需求。例如,在需要保证所有线程之间内存排序的场景中,可以选择SHARED模式;在只需要对当前线程进行内存排序的场景中,可以选择INDEPENDENT模式。
12.2 OpenCL + OpenSHMEM混合编程模型操作要点
- 硬件平台选择 :选择适合Epiphany架构的硬件平台,如包含Epiphany - III协处理器的Parallella迷你计算机。确保硬件平台能够提供足够的计算资源和通信能力,以支持混合编程模型的运行。
- 算法实现和优化 :根据具体的应用需求,选择合适的算法并进行优化。例如,在矩阵 - 矩阵乘法中,可以采用Cannon算法,并结合混合编程模型的特点进行优化,提高计算性能。
- 资源分配和管理 :合理分配OpenCL和OpenSHMEM的资源,确保任务的高效执行。例如,将计算密集型任务分配给OpenCL进行并行计算,将通信和同步任务分配给OpenSHMEM进行处理,实现资源的最优利用。
13. 总结与展望
本文介绍了Cray SHMEM的线程安全与上下文 - 域特性以及OpenCL + OpenSHMEM混合编程模型。通过实验和分析,我们可以看到这些技术在提高并发性能、优化资源利用和解决特定架构问题方面具有显著的优势。
未来,随着并行计算技术的不断发展,这些技术将在更多的领域得到应用和推广。同时,我们也需要进一步研究和优化这些技术,以适应不断变化的硬件架构和应用需求。例如,进一步提高线程安全和上下文 - 域特性的性能和可扩展性,探索混合编程模型在更多算法和应用中的应用,以及研究这些技术之间的互操作性和协同工作机制等。
希望本文能够为相关领域的研究人员和开发者提供有价值的参考,促进并行计算技术的发展和应用。
graph LR
classDef tech fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef app fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
CraySHMEM(Cray SHMEM特性):::tech -->|应用于| MultiThreadApp(多线程数据处理):::app
CraySHMEM -->|应用于| DistributedApp(分布式计算):::app
OpenCL+OpenSHMEM(OpenCL + OpenSHMEM混合编程模型):::tech -->|应用于| EmbeddedApp(嵌入式系统和高性能计算):::app
OpenCL+OpenSHMEM -->|应用于| MatrixApp(矩阵计算和图形处理):::app
| 技术特性 | 优势 | 应用场景 |
|---|---|---|
| Cray SHMEM线程安全特性 | 保证线程安全,提高并发性能 | 多线程数据处理、分布式计算 |
| Cray SHMEM上下文 - 域特性 | 细粒度资源管理,优化资源利用 | 多线程数据处理、分布式计算 |
| OpenCL + OpenSHMEM混合编程模型 | 弥补OpenCL不足,提高性能和可扩展性 | 嵌入式系统和高性能计算、矩阵计算和图形处理 |
超级会员免费看
18

被折叠的 条评论
为什么被折叠?



