JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:C 用户指南     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  C 编译器介绍

2.  特定于 C 编译器实现的信息

3.  并行化 C 代码

3.1 并行化概述

3.2 OpenMP 并行化

3.2.1 处理 OpenMP 运行时警告

3.2.2 环境变量

3.2.3 在并行代码中使用 restrict

3.3 数据依赖性和干扰

3.3.1 并行执行模型

3.3.2 私有标量和私有数组

3.3.3 返回存储

3.3.4 约简变量

3.4 加速

3.4.1 Amdahl 定律

3.4.1.1 开销

3.4.1.2 Gustafson 定律

3.5 负载平衡和循环调度

3.5.1 静态调度或块调度

3.5.2 自我调度

3.5.3 引导自我调度

3.6 循环变换

3.6.1 循环分布

3.6.2 循环合并

3.6.3 循环交换

3.7 别名和并行化

3.7.1 数组引用和指针引用

3.7.2 受限指针

3.8 内存边界内部函数

4.  lint 源代码检验器

5.  基于类型的别名分析

6.  转换为 ISO C

7.  转换应用程序以适用于 64 位环境

8.  cscope:交互检查 C 程序

A.  按功能分组的编译器选项

B.  C 编译器选项参考

C.  实现定义的 ISO/IEC C99 行为

D.  C99 的功能

E.  实现定义的 ISO/IEC C90 行为

F.  ISO C 数据表示法

G.  性能调节

H.  Oracle Solaris Studio C:K&R C 与 ISO C 之间的差异

索引

3.5 负载平衡和循环调度

循环调度是将并行循环的迭代分布到多个线程的进程。为获得最大加速,应在线程间均匀地分布工作同时不产生太大开销。编译器针对不同情况提供多种调度类型。

3.5.1 静态调度或块调度

为了得到最佳结果,当循环的不同迭代执行的工作相同时,将工作均匀地分摊在系统上不同的线程之间。此方法称为静态调度。

示例 3-13 静态调度的良好循环

for (i=1; i < 1000; i++) {
    sum += a[i]*b[i];       /* S1 */
}

在静态调度或块调度中,每个线程将获取相同次数的迭代。使用四个线程时,每个线程将得到 250 个迭代。假设未发生中断,并且每个线程的进度相同,则所有线程将同时完成。

3.5.2 自我调度

一般说来,当每次迭代执行的工作不同时,静态调度不会达到良好的负载平衡。在静态调度中,每个线程获取同一迭代块。除主线程之外,每个线程在完成自己的块时,将等待参与下一个并行循环的执行。主线程将继续执行程序。在自我调度中,每个线程获取不同的小迭代块,并且在完成为其分配的块之后,尝试从同一循环中获取更多块。

3.5.3 引导自我调度

在引导自我调度 (guided self scheduling, GSS) 中,每个线程获取连续变少的块。如果每次迭代的大小不同,GSS 有助于平衡负载。