Parallel processing 并行合并排序
我已经使用pascal作为我的并行语言(我不喜欢它,但强制) 合并排序与fork&join并行不起作用,有人能告诉我为什么吗 这是我的密码:Parallel processing 并行合并排序,parallel-processing,openmp,pascal,Parallel Processing,Openmp,Pascal,我已经使用pascal作为我的并行语言(我不喜欢它,但强制) 合并排序与fork&join并行不起作用,有人能告诉我为什么吗 这是我的密码: program parrallelmergesort; architecture shared(100); const n=100;(*big array*) size=10; var t,globalCounter:integer; unsorted:array[1..n] of integer; procedure
program parrallelmergesort;
architecture shared(100);
const
n=100;(*big array*)
size=10;
var
t,globalCounter:integer;
unsorted:array[1..n] of integer;
procedure CallMerge(var lower,mid,high:integer);
var
i,j,k,count:integer;
S:array[1..n] of integer;
BEGIN
i:=lower;
j:=mid+1;
k:=lower;
count:=high-lower+1;
while (i<=mid) and (j<=high) do
begin
if unsorted[i]<unsorted[j] then
begin
S[k] :=unsorted[i];
i :=i+1;
end
else
begin
S[k] :=unsorted[j];
j :=j+1;
end;
k:=k+1;
end;
if i>mid then
begin
while j<=high do
begin
S[k] :=unsorted[j];
j :=j+1;
k :=k+1;
end;
end
else if j>high then
begin
while i<=mid do
begin
S[k] :=unsorted[i];
i :=i+1;
k :=k+1;
end;
end;
for t:=lower to high do
unsorted[t] :=S[t];
end;
procedure CallMergeSort(bottom,up:integer);
var middle,nextOfMiddle:integer;
begin
if up>bottom then
begin
middle := (up+bottom) div 2;
nextofMiddle :=middle+1;
fork CallMergeSort(bottom,middle);
fork CallMergeSort(nextOfMiddle,up);
join;join;
CallMerge(bottom,middle,up);
end;
end;
begin
unsorted[1] :=4; unsorted[2] :=3; unsorted[3] :=10; unsorted[4] :=5; unsorted[5] :=0;
unsorted[6] :=1; unsorted[7] :=8; unsorted[8] :=6; unsorted[9] :=11; unsorted[10] :=12;
CallMergeSort(1,size);
for globalCounter:=1 to size do
writeln(unsorted[globalCounter]);
readln;
end.
程序parrallelmergesort;
架构共享(100);
常数
n=100;(*大阵列*)
尺寸=10;
变量
t、 全局计数器:整数;
未排序:整数的数组[1..n];
过程CallMerge(变量低、中、高:整数);
变量
i、 j,k,count:整数;
S:整数的数组[1..n];
开始
i:=较低;
j:=mid+1;
k:=较低;
计数:=高-低+1;
而(i不要在rec函数中调用fork和join。
只要从总台给他们打两次电话就行了