德尔福并行

 垚垚8858 发布于 2023-02-12 21:37

能否举一个并行编程的简单例子?

我有一个很大的for loop,我想更快地处理它并使用所有的CPU核心.我能做什么?这与Parallel有关吗?

例如:(计算Pi数字)

var
  A: array of LongInt;
  I, J, K, P, Q, X, Nines, Predigit: Integer;
  NumDigits,PiLength: Integer;
  answer : string;

begin
  NumDigits := 5000;
  SetLength(A, 10*NumDigits div 3);
  SetLength(answer, NumDigits+1);
  PiLength := 1;
  for I := Low(A) to High(A) do
    A[I] := 2;
  Nines := 0;
  Predigit := 0;
  for J := 0 to NumDigits-1 do //This loop
  begin
    Q := 0;
    P := 2 * High(A) + 1;
    for I := High(A) downto Low(A) do
    begin
      X := 10*A[I] + Q*(I+1);
      A[I] := X mod P;
      Q := X div P;
      P := P - 2;
    end;
    A[Low(A)] := Q mod 10;
    Q := Q div 10;
    if Q = 9 then
      Inc(Nines)
    else if Q = 10 then
    begin
      answer[PiLength] := Chr(Predigit + 1 + Ord('0'));
      for K := 1 to Nines do
        answer[PiLength+K] := '0';
      PiLength := PiLength + Nines + 1;
      Predigit := 0;
      Nines := 0;
    end
    else
    begin
      answer[PiLength] := Chr(Predigit + Ord('0'));
      Predigit := Q;
      for K := 1 to Nines do
        answer[PiLength+K] := '9';
      PiLength := PiLength + Nines + 1;
      Nines := 0;
    end;
  end;

  answer[PiLength] := Chr(Predigit + Ord('0'));
end;

此代码仅使用一个CPU核心.当然因为它是一个线程.当我只有一个主线程时,如何使用所有CPU内核?

更新: 如果您认为此代码无法并行运行.然后看这个例子:

var
  i , a : integer;
Begin
  a := 0;
  for i := 0 to 100000 do 
   begin
     a := a + 1;
   end;
end;

David Heffer.. 5

您的算法在连续迭代之间具有很强的依赖性.这种依赖关系最容易在数组中看到A[].这意味着您无法并行执行问题中的for循环.I-1在开始迭代之前,您需要知道迭代的结果I.除了明显的依赖性之外A[],还有其他人可能存在.

可以想象,您可以重新使用算法来分解这些依赖关系.然而,也可以想象该算法根本不适合并行执行.以并行方式表达算法是完全正常的.您需要详细研究此算法,以确定它是否可以以并行形式重新投射.

有许多不同的算法用于计算π.由于并行处理的明显潜力,所有对π数字提取的现代研究肯定会采用并行算法.我确信网络搜索将揭示大量适合并行执行的算法.

1 个回答
  • 您的算法在连续迭代之间具有很强的依赖性.这种依赖关系最容易在数组中看到A[].这意味着您无法并行执行问题中的for循环.I-1在开始迭代之前,您需要知道迭代的结果I.除了明显的依赖性之外A[],还有其他人可能存在.

    可以想象,您可以重新使用算法来分解这些依赖关系.然而,也可以想象该算法根本不适合并行执行.以并行方式表达算法是完全正常的.您需要详细研究此算法,以确定它是否可以以并行形式重新投射.

    有许多不同的算法用于计算π.由于并行处理的明显潜力,所有对π数字提取的现代研究肯定会采用并行算法.我确信网络搜索将揭示大量适合并行执行的算法.

    2023-02-12 21:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有