我很难理解我正在为我的并行计算课程做的一个助教。问题在于:
请考虑以下代码:

for(int i = 0; i < 1024; i++){
    int arg = ...
    compute(arg);
}

其中compute()的执行时间与其参数值成正比。我们希望使用OpenMP并行化这个循环,使用其中一个调度staticdynamicguided。查找arg表达式的示例(即完整的第2行),以便使用的最佳计划是:
静止的
动态
引导的
解释你的答案。
我对理解OpenMP时间表没有任何问题,但是我很难找到任何可以帮助我决定要使用哪些参数以及为什么使用这些参数的信息。
这门课程没用,我在谷歌也没什么好运气。
我知道如果人们“不想给我家庭作业的解决方案”,但一个坚实的指针在正确的方向将是好的。简单地说,我如何评估哪个参数可用于任何计划?

最佳答案

他们要求你想出3种不同的方法来“arg”适合这3种调度方法。
请记住,他们告诉您处理时间与arg的int值成正比。
所以对于静态调度,arg必须始终是相同的数字,所以处理时间总是相同的。因此类似于arg=10;
对于动态调度,这将是当arg改变值时发生的,所以类似于arg=rand();这样的事情将导致每个计算随机不同的时间。
对于指导调度,可以使用类似于arg = i / 10;的方法,因为arg在每个值上都将保持一段时间的静态,同时仍然通过值动态更改。

关于c - 打开MP时间表-查找循环的最佳参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39972482/

10-13 08:49