我正在尝试使用 OpenMP(和 C)并行化我的应用程序,并希望从 I/O 部分开始。最初,读取和计算部分是连续的,每个大约需要 3 秒。
int *mask, width, height
Picture *pic;
pic = readFile("some big file"); // 3 secs
mask = computeMask(width, height); // 3 secs
使用 OpenMP:
#pragma parallel default(none) shared(pic, mask, width, height)
{
#pragma sections
{
#pragma section
{
pic = readFile("some big file");
}
#pragma section
{
mask = computeMask(width, height);
}
}
}
但是现在总时间大约是 10 秒(实际上是花在 I/O 任务上)。
在我开始指责 RAM 上的并发访问造成了瓶颈之前。我很想知道这里是否有什么问题。