Програмування циклів на обчислювальній системі під управління потоком даних пов'язане з поряд особливостей. Розглянемо їх на приведеному нижче прикладі.
· Команда в обчислювальній системі готова до виконання якщо для неї готові керуюче слово і обидва операнди. Програмування циклів пов'язане з повторюваністю виконання певних команд. Операнди команд тіла циклу можна розбити на два класи. Перший клас – операнди, що обчислюються на попередній ітерації, до них так само відноситься і змінна циклу (у прикладі – i, f). На першому кроці операнди поступають з пристроїв введення, а потім з кожної наступної ітерації. Так, для команди 4 (порівняння змінної циклу з кінцевим значенням) з пристрою введення поступає початкове значення змінної циклу i=1, а наступні змінною поступають з попередньої ітерації. Другий клас операндів – константи, значення яких не міняється в циклі. До таких операндів відносяться кількість ітерацій циклу, константи для виконання операцій. Під час вступу команди на обчислювальний блок операнди з відповідних елементів пам'яті операндів/асоциативній пам'яті віддаляються за винятком констант. Вони вводяться спочатку з пристрою введення і знаходяться у відповідному елементі пам'яті. Константи на малюнку нижче позначені зірочкою, а в програмі поле «Константа» такого операнда повинно містити «1». Необхідно пам'ятати, що двох констант у однієї команди бути не може, інакше це приведе до постійного виконання однієї і тієї ж команди, яка весь час знаходитиметься в стані готовності.
|
|
· Крім того, константи можуть не тільки вводитися з пристроїв введення, але і обчислюватися (наприклад в команді 3 обчислюється константа – кількість ітерацій циклу)
· Кожна команда повинна мати операнди з різними номерами (поле «Номер операнда»). Причому в більшості випадках важливий порядок операндів. Наприклад команда «віднімання» виконує операцію «Операнд№0»–«Операнд№1». А для команд управління операнд з номером 1 є службовим (наприклад у вентиля він повинен бути рівний TRUE або FALSE, тобто «1» або «0»).
· Результатом операцій «2-Розмножувач» і «N-Розмножувач» є група операндів з різними адресами і однаковими значеннями полів «Номер операнда». Тому команди, для яких призначалися ці операнди повинні їх приймати на однакові входи (наприклад команда №11 обчислює операнди з номером «0» для команд 13 и 7).
· Як видно з рисунку цикл містить 3 незалежних гілки: виведення результату, накопичення результату і інкрементування змінної циклу. Важливим елементом циклу є синхронізація незалежних гілок, інакше (див. приклад) при великому об'ємі обчислень в тілі циклу змінна циклу може бути інкрементована кілька разів, і результат обчислень буде невірним. Роль синхронізації виконує «Повторювач» або в прикладі команда №15. Ця команда «затримує» ініціалізацію нової ітерації циклу до тих пір, поки не буде виконано тіло циклу на поточній ітерації.
|
|
· Команда №14 є допоміжною, служить для перетворення поля «Номер операнда» (див. пункт 3), оскільки команда №12 результатом має операнд з номером «0», а для команди №15 потрібний операнд з номером «1».
ПРИКЛАД
Фрагмент програми на Паскалі:
a:=1; b:=-2; f:=2;
n:=(a+3)*(b+3);
FOR i:=1 TO n do
f:=f+2;
write(f);
Граф алгоритму на описаній мові для обчислювальної системи:
Програма представлена у файлі прикладу «ExCycle.alg»