Page 54 - 6571
P. 54

значення елементів масиву a додатні, то можна виконати почат-
                  кову ініціалізацію змінної mзначенням 0.
                        Тепер розглянемо способи розпаралелювання наведеної про-

                  грами.  Припустимо,  що  цикл  повністю  розпаралелений  шляхом
                  паралельної перевірки всіх елементів масиву.

                        int m = 0;
                        co [i = 0 to n-1]
                          if (a[i] > m) m = a[i];

                        У  цій  формі  оператор  co  використовує  один  або  декілька
                  квантифікаторів, які вказують, що набір операторів повинен ви-

                  конуватися паралельно для кожної комбінації значень параметрів
                  циклу.  Наприклад,  наступний  тривіальний  оператор  ініціалізує
                  масиви a[i] та b[i] нулями.

                        co [i = 0 to n-1] {
                          a[i] = 0;
                          b[i] = 0;
                        }

                        Даний оператор створює nпроцесів, по одному для кожного

                  значення змінної i. Область видимості лічильника – опис проце-
                  су, і в кожного процесу своє, відмінне від інших, значення змін-
                  ної i. Дві форми оператора co можна змішувати. Наприклад, од-

                  на гілка може мати квантифікатор у квадратних дужках, а інша
                  оператор co паралельного виконання.
                        Попередня програма пошуку максимального елемента маси-
                  ву некоректна, оскільки процеси не є незалежними: кожен з них і

                  зчитує, і записує змінну m. Зокрема, припустимо, що всі процеси
                  виконуються з однаковою швидкістю, і, отже, кожен з них порів-

                  нює свій елемент масиву a[i] із змінною m в один і той же мо-
                  мент  часу.  Всі  процеси  визначать,  що  нерівність  виконується
                  (оскільки  всі  елементи  масиву  a  більші  початкового  значення

                  змінної m, яка дорівнює нулю). Отже, всі процеси будуть намага-
                  тися оновити значення змінної m. Апаратне забезпечення пам’яті
                  виконуватиме оновлення в порядку деякої черги, оскільки запис

                  елемента  в  пам’ять  –  це  неподільна  операція.  Кінцевим  значен-
                  ням змінної m буде значення a[i], присвоєне їй останнім проце-
                  сом.





                                                              53
   49   50   51   52   53   54   55   56   57   58   59