【发布时间】:2014-10-09 12:06:00
【问题描述】:
我正在尝试使用 OpenMP API(或 pthreads)来并行化以下代码。它的时间复杂度是 O(n)。
我想知道是否可以将条目数组划分为X 块(X = 线程数)并为每个人并行执行该过程。
这是一个非常经典的算法问题,到目前为止我还没有看到有人尝试实现并行化版本。
重要提示:简单的归约并不能解决这个问题,因为我只从左到右读取数组。所以并行化并不是那么明显......
#include<stdio.h>
/* The function assumes that there are at least two
elements in array.
The function returns a negative value if the array is
sorted in decreasing order.
Returns 0 if elements are equal */
int maxDiff(int arr[], int arr_size)
{
int max_diff = arr[1] - arr[0];
int min_element = arr[0];
int i;
for(i = 1; i < arr_size; i++)
{
if(arr[i] - min_element > max_diff)
max_diff = arr[i] - min_element;
if(arr[i] < min_element)
min_element = arr[i];
}
return max_diff;
}
【问题讨论】:
-
我们读取数组的时候要注意方向。我从左到右阅读。
-
好的 - 所以它比最大差异更微妙一些,您正在寻找一个项目和后续项目之间的最大差异,对吗?
-
@jonathan 没错
-
更新后的版本似乎做对了,但问题的额外限制将进一步限制缩放。
标签: algorithm parallel-processing pthreads openmp