我在Google上搜索一些简单的OpenMP算法页面。可能有一个示例可以从巨大的数据数组中计算最小值、最大值、中位数和平均值,但我找不到。
至少我通常会尝试将数组分成每个核心的一个块,然后进行一些边界计算,以便得到完整数组的结果。
我只是不想重复发明轮子。
附加说明: 我知道有成千上万的例子可以使用简单的规约来工作。 例如:计算π。
const int num_steps = 100000;
double x, sum = 0.0;
const double step = 1.0/double(num_steps);
#pragma omp parallel for reduction(+:sum) private(x)
for (int i=1;i<= num_steps; i++){
x = double(i-0.5)*step;
sum += 4.0/(1.0+x*x);
}
const double pi = step * sum;
但是,当这些类型的算法不可用时,几乎没有其他例子可以用来缩小算法。