Subject: Re[4]: параллельный РЕФА
From: Sergei M. Abramov (abram@botik.ru)
Date: Mon Apr 05 2004 - 08:27:15 MSD
Понял, что не совсем прав:
> ... Например:
>
>     (еOld1)(eOld2) : (e1 eX) (eX eX eX)
>
> я бы компилировал бы вот в такой последовательный код:
>
>     L = length(eOld2);
>     if !(L mod 3 == 0) then goto fail;
>     еX = subexpr(eOld2, 0, L/3);
>     if (еX != subexpr(eOld2, L/3, L/3)) then goto fail;
>     if (еX != subexpr(eOld2, 2*L/3, L/3)) then goto fail;
>     L1 = length(eOld1);
>     if !(L1 >= L2) then goto fail;
>     if (еX != subexpr(eOld1, L1-L/3, L/3)) then goto fail;
>     е1 = subexpr(eOld1, 0, L1-L/3);
>
> Не вижу здесь никаких основаниой для параллелизма...
Мелкие основания есть, если переписать код так:
      L = length(eOld2);
      L1 = length(eOld1);
      if !(L mod 3 == 0) then goto fail;
      еX = subexpr(eOld2, 0, L/3);
      if !(     (еX == subexpr(eOld2, L/3, L/3))   /* 1 */
             && (еX == subexpr(eOld2, 2*L/3, L/3)  /* 2 */
             && (L1 >= L2 && еX == subexpr(eOld1, L1-L/3, L/3) /* 3 */
      ) then goto fail;
      е1 = subexpr(eOld1, 0, L1-L/3);
Три условия в конъянкции можно считать в параллель.
Однако, думаю, это слишком мелкие гранулы, для организации параллельного
счета.
С.
This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:25:00 MSD