我需要编写一个算法来使用并行锦标赛找到最大值的位置。我有这段代码来找到最大值:
//共享内存变量n:值M [0..n-1]:值为
的数组//并行程序
torneoMaxParalelo(M,n) int incr=1; int grande, temp0, temp1; while (incr < n) temp0 ← M[pid]; if (pid + incr < n) temp1 ← M[pid + incr]; else temp1 ← -infinite; grande ← max(temp0, temp1); M[pid] ← grande; incr = 2 * incr;
算法应该花费O(log n)时间。非常感谢你。
答案 0 :(得分:0)
这是伪代码。
parTournMaxIndex(M, idx, n)
int incr;
Write -infinite (some very
small value) into M[n].
Write pid into idx[pid] and write n into idx[pid+n].
incr = 1;
int idx0, idx1, idxBig;
Key key0, key1;
while (incr < n)
Read idx[pid] into idx0 and read idx[pid+incr] into idx1.
Read M[idx0] into key0 and read M[idx1] into key1.
if (key1 > key0) idxBig = idx1;
else idxBig = idx0;
Write idxBig into idx[pid].
incr = 2 * incr;