OpenMP实现交换机...案例

时间:2013-04-06 19:23:07

标签: switch-statement openmp parallels

我正在尝试使用OpenMP指令并行化switch ... case(c ++),但尽管我付出了最大的努力,但代码比正常的顺序执行要慢。

我使用了#pragma parallel#pragma sections, 我试图用if ... else语句重写switch case 但没有好结果......

switch (number) {
  case 1:
    f1();
    break;
  case 2:
    f2();
    break;
  case 3:
    f3();
    break;
  case 4:
    fn();
    break;
}

然后还有第二个问题,OpenMP不会中断或返回。

1 个答案:

答案 0 :(得分:1)

开关案例不能在Openmp中实现,只需添加pragma,如parallel,section。沿着并行部分运行的线程通过循环索引在它们之间划分工作,否则它们在条件循环中执行相同的工作。 Openmp部分需要知道它需要处理多少元素或确定开始和结束的主条件。你想把输入部分变为平行而不是函数(f1,f2,... fn),所以我猜你正在处理很多“数字”。一种方法是在数组/向量中收集这些数字。然后,你可以沿着这个向量/数组进行并行,调用相应的函数。

while(some_condition_on_numbers)
{
    // Collect Numbers in a vector / some array    
}

#pragma omp parallel for
for(int counter = 0; counter < elements_to_process; counter++)
{
    F(array_of_number[counter]);
}

F(int choice)
{
    if(choice = 1) {f1(); }
    if(choice = 2) {f2(); }
    ..
}