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