目标代码形式-analysis i terence tao third edition

时间:2024-06-27 22:51:57
【文件属性】:

文件名称:目标代码形式-analysis i terence tao third edition

文件大小:4.28MB

文件格式:PDF

更新时间:2024-06-27 22:51:57

OpenMP

6.3 目标代码形式 对于 OpenMP 的并行域管理功能的实现,一部分在代码变换中体现,另一部分在运行库 中提供支持。对于并行域如此复杂的功能,全部依靠代码翻译变换来完成并不现实,因此许多 功能就只好压入到运行库中。如此一来,编译工作关于并行域管理的部分反而变得简单,而运 行库则需要负担更多的工作。此时在代码变换上只留下了启动并行域的代码(包括执行任务函 数)、任务函数的封装两大任务。可行的目标代码形式如图 6.4: 图 6.4 parallel 的目标代码框架 在 GCC 的 GOMP 中变换前后的代码形式如下: 1. #pragma omp parallel 变换前的代码 2. { 3. body; 4. } 下面是变换后的代码,分成两部分: 1. void subfunction (void *data) 这个是任务函数 2. { 3. use data; 4. body; 5. } …… 6. setup data; 数据共享、私有化等处理 7. GOMP_parallel_start (subfunction, &data, num_threads); 创建并行域 8. subfunction (&data); 调用任务函数 9. GOMP_parallel_end (); 退出并行域 上 面 的 代 码 变 换 与 图 6.4 基 本 一 致 , GOMP 中 的 GOMP_parallel_start() 和 GOMP_parallel_end()等函数是 GOMP 运行库中的函数。OMPi 的实现略有不同。 这里只是给出实现 OpenMP 并行域管理的代码基本形式,与具体的 C 编程语言绑定的代 码“框架”将在第 9 章给出。 串行代码 并 行 域 #pragma omp parallel 数据环境准备 并行域创建代码 …… 执行任务函数 …… 退出并行域 { …… …… …… } 任务函数 封装 替换


网友评论