文件名称:并行支撑函数-analysis i terence tao third edition
文件大小:4.28MB
文件格式:PDF
更新时间:2024-06-27 22:52:00
OpenMP
10.3 并行支撑函数 并行支撑函数较多,大部分与各个 OpenMP 制导指令紧密相关,但是互相之间的联系却 并不紧密,因此分成多个小节来讨论。具体包括线程状态管理、并行域管理、任务分担、同步 和变量数据环境 5 个问题。 10.3.1 线程状态管理 线程状态管理是并行域管理的基础。不同的线程状态切换管理将会影响并行域管理的实现 和效率。OMPi 基于 pthreads 的 EELIB 对线程的状态管理并没有采用线程阻塞的方式,而是采 用线程空闲时自旋的办法,减少线程的阻塞和唤醒开销。下面分析基于 pthreads 的 EELIB 的空 闲状态和工作状态以及它们之间的切换过程。 空闲状态 在进入并行域之前,除了主线程外线程池内的线程都处于空闲状态,因为 EELIB 初始化函 数 ee_initialize()/othr_initialize()给线程的初始任务是 threadjob()。该函数只是空闲自旋,直到 外部清除 spin 标记,然后调用 ort_get_thread_work()获取任务并执行之,任务完成后将自己放 回到线程池中,并且对线程组内正在运行的线程数目减 1。其代码如下: 43. /* The function executed by each thread */ 44. void *threadjob(void *env) 45. { 46. void *arg; 47. othr_info *myinfo;