Tag: openmp

以对数时间平行减少

给定n部分和,可以将log2并行步骤中的所有部分和相加。 例如,假设有八个线程具有八个部分和: s0, s1, s2, s3, s4, s5, s6, s7 。 这可以在log2(8) = 3连续步骤中减少; thread0 thread1 thread2 thread4 s0 += s1 s2 += s3 s4 += s5 s6 +=s7 s0 += s2 s4 += s6 s0 += s4 我想用OpenMP做这个,但我不想使用OpenMP的reduction条款。 我想出了一个解决方案,但我认为可以使用OpenMP的task子句找到更好的解决方案。 这比标量加法更通用。 让我选择一个更有用的案例:数组缩减(请参见此处 , 此处以及有关数组缩减的更多信息)。 假设我想在数组a上进行数组缩减。 下面是一些代码,它们为每个线程并行填充私有数组。 int bins = 20; int a[bins]; int **at; // […]