2016-10-11 22 views
1

我无法理解我正在为我的并行计算课程所做的分配。所讨论的问题是这样的:打开MP计划 - 寻找循环的最佳参数

考虑下面的代码:

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

compute()执行时间正比于它的参数值。我们希望使用OpenMP并行化该循环,其中一个时间表staticdynamicguided。查找表达式的一个例子arg(即完整的第2行),使得要使用的最佳时间表将是:

  1. 静态

  2. 动态

  3. 引导

解释你的答案。

我没有任何理解OpenMP Schedules的问题,但是我很难找到任何可以帮助我决定使用哪些参数的信息,以及为什么。

课程没有用,我对Google没有任何运气。

我明白,如果人们“不想给我功课解决方案”,但一个坚实的指针在正确的方向将是很好的。简而言之,我如何评估哪个参数用于任何时间表?

+0

所以大概你已经完成了我们其他人现在所做的任何事情,你已经写了一些代码来在黑暗中进行各种刺试验和纠错,收集一些数据并开始做一些扣除?计算不是一种旁观者运动...... –

+0

除了你提到关于观众体育的任何内容之外,没有人可以提到。如果你不想帮忙,那很好,但是你可以没有那种指责的语气。 – DoTheGenes

+1

为什么课程并没有要求你考虑汽车?是否仅限于OpenMP 2?通过提供的信息,您可以推断出最慢的循环迭代需要的时间是平均值的近两倍,因此可能值得测试各种时间表和块的选择。需要额外的信息来猜测引导是否是最好的,但答案仍然可能是问题和平台依赖性。 – tim18

回答

2

他们要求你提出3个不同的事情,'arg'可以适合3种调度方法中的每一种。

请记住,他们告诉你处理时间与arg的int值成正比。

因此对于静态调度,arg必须始终是相同的数字,所以处理时间总是相同的。因此,就像arg=10;

对于动态调度,这将是当arg正在改变值时,所以像arg=rand();这样的东西会导致每个计算的随机时间不同。

用于指导调度,可能会像arg = i/10;这样,因为arg将在每个值处保持静态一段时间,同时仍然通过值动态更改。

+0

这是一个很好的例子,我可以在眼前展现一些东西,但仍然没有看到它。谢谢! – DoTheGenes

+1

对于额外的标记,您应该执行一些基准测试(或查看EPCC等标准OpenMP基准测试)来调查不同计划的开销。根据不平衡量的不同,您可能会发现日程安排(静态,1)可以优于三角案例的日程安排(动态)...(问题在于您的顾问正在使用的绩效模型不准确:-)) –