英特尔多线程应用开发指南

The Intel Guide for Developing Multithreaded Applications (PDF 2.86MB)

本文是英特尔® 现代代码开发人员社区文档的一部分,该文档通过介绍系统、详细的优化框架方法,帮助开发人员充分利用代码的应用性能。 本文的重点是:并行化。

 

目录:

应用线程化

本章节将涵盖并行性能领域的常见主题,同时也会偶尔涉及针对 API 的问题。

1-1 - 预测和测量并行性能
1-2 - 循环修改增强数据并行性能
1-3 - 粒度与并行性能
1-4 - 负载平衡与并行性能
1-5 - 通过避免或消除人工依赖性实现并行性
1-6 - 使用任务(而非线程)
1-7 - 利用有序的数据流中的数据并行性
1-8 - 在不编写 AVX 代码的情况下使用 AVX -

同步

本章节将主要谈论采用哪些技术来降低同步处理对性能的负面影响。

2-1 - 管理锁争用 — 大、小关键代码段 (Critical Section)
2-2 - 使用线程化 API 提供的同步例程,而非手工编写同步例程
2-3 - 选择合适的同步基元以最大限度地减少开销
2-4 - 如有可能可使用非阻塞锁

内存管理

线程为内存管理开辟了另外一个不容忽视的新空间。 本章节将涵盖对于多线程应用至关重要的内存问题。

3-1 - 避免线程之间发生堆冲突
3-2 - 借助线程局部存储减少同步处理
3-3 - 检测线程化应用中的内存带宽饱和度
3-4 - 避免并发现线程之间的假共享
3-5 - 优化面向 NUMA 的应用 -

编程工具

本章节将说明如何利用英特尔软件产品开发、调试和优化多线程应用。

4-1 - 借助英特尔® 编译器实现自动并行化
4-2 - 英特尔® 数学核心函数库中的并行性
4-3 - 线程化与英特尔® IPP 高效多媒体函数库
4-4 - 使用英特尔® Inspector XE 2011 发现多线程代码中的数据竞跑 - 修订
4-5 - 借助英特尔® Parallel Amplifier 修复线程失衡
4-6 - 使用英特尔® Parallel Composer 在代码中添加并行执行能力 - 修订
4-7 - 优化数据结构和内存访问模式以改进数据局部性 -

 

2010 年 3 月 9 日,并行编程社区(2015 年 7 月更名为英特尔现代代码开发人员社区) 发布了一系列技术文章,旨在为软件开发人员提供应用线程化、同步处理、内存管理和编程工具领域的最新技术信息。 这些线程化技术对英特尔® 至强™ 和 英特尔® 至强融核™ 协处理器实现高性能非常重要。 我们期待看到您提出自己的想法和建议,希望您通过并行架构现代代码论坛参与讨论,并提出您的疑问。

1.1 目的
《英特尔® 多线程应用开发指南》的目标是为开发人员在基于英特尔® 架构的对称多处理器 (SMP) 和/或支持英特尔® 超线程 (HT) 技术的系统上,开发高效多线程应用提供一些有用的指导。 应用开发人员可以在本文建议下提高当前及未来支持英特尔® 处理器的 SMP 架构上的多线程处理性能,最大限度减少意外出现的性能故障。

本指南针对如何改进多线程性能提供了各种建议。 文中有意保留了通过优化硬件提高线程性能的方法。 但在本指南的更新版中将涵盖此硬件优化法,为那些愿意牺牲可移植性换取更高性能的开发人员提供一个参考。

1.2 前提条件
读者应具备使用高级编程语言(最好是 C、C++ 和/或 Fortran)编程的经验,尽管本文所提供的许多建议同样适用于 Java、C# 和 Perl 等编程语言。 同时,读者还必须了解基本并行编程知识,熟悉一种以上线程化方法,最好是 OpenMP*、POSIX 线程(又名 Pthreads)或 Win32* 线程化 API。

1.3 范围
本指南的主要目的是为开发人员在英特尔® 平台上开发多线程应用提供快速设计和优化参考指导。 本文不应用作多线程教材,也不是向英特尔平台实施迁移的指南。

1.4 结构
《英特尔® 多线程应用开发指南》涵盖从适用于所有多线程方法的一般性建议到英特尔® 软件产品在应对 API 有关问题时的使用指南在内的各类主题。 涉及每个主题的文章之间互相独立,可用作单独的参考文章。 所有主题可分为四类: 应用线程化、同步处理、内存管理与编程工具。 尽管每个主题是对各个关键线程问题的独立探讨,这些主题之间却会形成内容互补。 读者可以在阅读这一系列文章时交叉参考相关主题。

1.5 作者与编者
参与《英特尔® 多线程应用开发指南》的撰稿、审核以及编辑工作的英特尔工程师和技术专家如下: Henry Gabb、Martyn Corden、Todd Rosenquist、Paul Fischer、Julia Fedorova、Clay Breshears、Thomas Zipplies、Vladimir Tsymbal、Levent Akyil、Anton Pegushin、Alexey Kukanov、Paul Petersen、Mike Voss、Aaron Tersteeg 和 Jay Hoeflinger

1.6 并行编程人员有关英特尔多线程应用开发指南的意见
Tom Spyrou 在以编程工具为主题的文章借助英特尔® Parallel Amplifier 修复线程失衡中提出了如何调优分配给线程的任务,并在以假共享为主题的文章避免并发现线程之间的假共享中分享了有关检测由于主内存的带宽问题造成程序出现瓶颈问题的经验。

Asaf Shelly 在文章避免线程之间发生堆冲突中探讨了如何通过为每条线程分配属于自己的堆来正确使用内存分配。

Clay Breshears 撰写了一篇与粒度与并行性能有关的文章《吹雪的艺术》。

有关编译器优化的更完整信息,请参阅优化通知
类别: