POSIX 线程编程指南(完)

19 篇文章 3 订阅
17 篇文章 4 订阅

Monitoring, Debugging and Performance Analysis Tools for Pthreads


  监视和调试 Pthreads:

  • 调试器处理Pthreads的能力各异. TotalView 调试器是LC(就是Livermore Computing 的缩写)为并行编程推荐的调试器. 无论是监视还是调试线程化的程序它都是合适的.

  • 下面是来自使用线程化代码的TotalView会话示例抓屏.
    1. 堆栈跟踪面板: 显示了正在执行的所选线程的调用栈例程.
    2. 状态条: 显示所选线程以及和它关联进程的状态信息.
    3. 堆栈帧面板:显示选中线程的堆栈变量,寄存器,等等.
    4. 源面板: 显示选中线程的源代码.
    5. 根窗口显示所有线程
    6. 线程面板: 显示选中进程的相关线程

    Example TotalView Pthread Debug Session

  • 更多细节请查看 TotalView Debugger tutorial .

  • Linux 的 ps 命令提供了查看线程信息的几个标记. 下面的示例展示了一些用法. 更多细节请查看 man page .
    % ps -Lf 
    UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
    blaise   22529 28240 22529  0    5 11:31 pts/53   00:00:00 a.out
    blaise   22529 28240 22530 99    5 11:31 pts/53   00:01:24 a.out
    blaise   22529 28240 22531 99    5 11:31 pts/53   00:01:24 a.out
    blaise   22529 28240 22532 99    5 11:31 pts/53   00:01:24 a.out
    blaise   22529 28240 22533 99    5 11:31 pts/53   00:01:24 a.out
    
    % ps -T 
      PID  SPID TTY          TIME CMD
    22529 22529 pts/53   00:00:00 a.out
    22529 22530 pts/53   00:01:49 a.out
    22529 22531 pts/53   00:01:49 a.out
    22529 22532 pts/53   00:01:49 a.out
    22529 22533 pts/53   00:01:49 a.out
    
    % ps -Lm 
      PID   LWP TTY          TIME CMD
    22529     - pts/53   00:18:56 a.out
        - 22529 -        00:00:00 -
        - 22530 -        00:04:44 -
        - 22531 -        00:04:44 -
        - 22532 -        00:04:44 -
        - 22533 -        00:04:44 -
    

  • LC 的 Linux 集群也提供 top 命令来监视节点上的进程。如果使用了-H 标志,包含在进程内的线程都将可见。top 的-H 命令的示例如下图所示。 PID 为18010的父进程产生了三个线程,Pid 分别为18012,18013 和 18014 。
  • top -H command

  性能分析工具:
  • 对线程化程序的性能分析工具很多,最好在web搜索对比下.

  • 在 LC, 支持的计算机工具列表可从此处找到: computing.llnl.gov/code/content/software_tools.php.

  • 这些工具的复杂度,功能和学习曲线差别很大.详细介绍它们超出了本文的范围..

  • 一些工具值得研究,特别是对线程化的代码,包括:
    • Open|SpeedShop
    • TAU
    • HPCToolkit
    • PAPI
    • Intel VTune Amplifier
    • ThreadSpotter
LLNL Specific Information and Recommendations


本节介绍 Livermore Computing's systems的更多细节.

 实现:

  • 所有LC产品系统包含了草案10(最终)POSIX标准的Pthreads实现.这是首选实现.
  • 在进程能创建线程的最大数量上不一样.默认的线程堆栈空间大小也不同.

 编译:

 混合 MPI 与 Pthreads:

  • 这是在LC使用Pthreads的主要动机.

  • 设计:
    • 每个 MPI 处理典型创建并维护N个线程 , 其中N使得内核/节点的使用最佳化.
    • 寻找N的最佳值将随平台以及应用的特性而不同.
    • 一般情况下,如果多个线程进行MPI调用可能会导致问题.该程序会失败或者有无法预期的行为. 如果必须在线程内进行MPI调用,那么只能由一个线程去执行这种操作.

  • 编译:
    • 为所选择的平台和语言选择适当的 MPI 编译命令
    • 确保包含 Compiling Threaded Programs 一节中提到的Pthreads标识.

  • 下面的示例代码展示了如何同时使用MPI 和 Pthreads . 各个版本分别展示了一种可能的进展.



没能涉及的主题


本文没有包含 Pthreads API 的几个特性. 下面列出来它们. 更多细节请查看 Pthread Library Routines Reference .

  • 线程调度
    • 对于线程如何调度运行,实现是有差异的.在大多数情况下,默认的机制是合适的.
    • Pthreads API 提供了显式设定线程调度策略和优先级的例程(接口),能覆盖默认的机制.
    • API 并没有要求实现支持这些特性.

  • Keys: 线程本地存储(Thread-Specific Data)
    • 当线程调用并从不同的例程返回,线程对展商的数据也随着生灭.
    • 为了保留栈数据,可以将它作为参数从一个函数传递给另一个函数,或者将其保存在线程相关的全局变量中.
    • Pthreads 通过keys提供了另外一种可能更便利,更多用途的方式达到此目标.

  • 处理"优先级反转"的互斥体协议属性和互斥体优先级控制.

  • 跨进程条件变量共享

  • 取消线程

  • 线程和信号

  • 同步构造 -桩和锁( barriers and locks)
参考和更多信息

  • Author: Blaise Barney, Livermore Computing.

  • POSIX Standard: www.unix.org/version3/ieee_std.html

  • "Pthreads Programming". B. Nichols et al. O'Reilly and Associates.

  • "Threads Primer". B. Lewis and D. Berg. Prentice Hall

  • "Programming With POSIX Threads". D. Butenhof. Addison Wesley

  • "Programming With Threads". S. Kleiman et al. Prentice Hall


附录 A: Pthread 库接口参考


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值