有问题的程序对单个输入数据文件和单个输出数据文件进行操作:它从输入中获取数据单元,计算数据的几个统计特征,将特征输入输出。
发现该程序受CPU限制:CPU使用率是99%,计算所需的时间比读写时间长。决定使用OpenMP将程序转换为并行处理版本,因为硬件有32个CPU可用。但是,很明显它可能导致写入竞争条件,因为多个并行线程可能希望写入单个输出。
准备此类程序以实现OpenMP感知和OpenMp安全的必要步骤是什么?是否只能通过OpenMP pragma轻松实现而无需更改代码,或者必须先实现某些锁定机制?
答案 0 :(得分:1)
并行化代码的难度实际上取决于耗费大部分时间的例程的复杂性。
在进行任何并行计算之前,您应该做的第一件事是分析代码并确定哪个函数确切地导致大部分CPU时间。
一旦你有了这个问题,你需要问自己一些问题:
回答你的上一个问题:stdio
库调用都是线程安全的。他们使用内部锁定。
您的第一个#pragma omp parallel
的一个提示:默认情况下,所有变量都是共享的,将它们定义为不可用,并分别为每个变量指定sharing / private。否则这是bug的常见缺陷:
#pragma omp parallel default(none)