... Кадр . ... Переменные языка . ... Проблемы условных операций и принципа однократного присваивания в языке COLAMO . ... В рассматриваемом языке переменные языка Colamo разделяются по "способу хранения" на мемориальные (MEMory) , внутренней памяти (InterMem) , коммутационные (COMmutation) и регистровые (REGister) . ... Когда разрабатывался язык Colamo, на чипах ПЛИСов еще не было собственной (внутренней) памяти, поэтому сначала не был введен тип переменной, соответствующий хранению данных в ней. ...
Постановка задачи и суть проблемы . ... Ассоциативные операции и запись разных реализаций на COLAMO . ... Скажем, при нахождении суммы всех элементов массива сумма n элементов представляется как сумма n-го элемента и вычисленной ранее суммы n-1 элементов, при нахождении максимума из всех элементов массива максимум n элементов представляется как максимум n-го элемента и вычисленного ранее максимума n-1 элементов. ... Данная страница написана по материалам рабочего семинара НИИ МВС ЮФУ по языку COLAMO. ...
Как указано в описании языка COLAMO , можно пользоваться условным оператором ( IF ) как внутри кадра , так и снаружи. ... Поэтому программирующий на COLAMO может наткнуться на коллизию реализации всех ветвей с принципом однократного присваивания . ... CADR IFWRONG; . ... ENDCADR ; . ... CADR IF1; . ... Естественно, что разработчики языка эту перенастройку вытолкнули в промежутки между кадрами, поскольку ее проведение в рамках кадра начисто загубило бы возможность конвейеризации операций в кадрах. ...
. Var A,B: Array [100: Stream ]; . CADR b; . FOR I=1 TO 100 BEGIN . IF A[I]>0 THEN B[I]=sin(A[I]); . ELSE B[I]=exp(A[I]**2); . END ; . ENDCadr ; . Рис.8. Применение внутреннего условного оператора
. Var R: REG ; . Var A: Array [16: Stream , 4: Stream , 4: Vector ]; . Var B: Array [4: Stream , 4: Vector , 16: Stream ]; . Var C: Array [4, 4, 16: Stream ]; . Var R2: Array [4] COM ; . FOR I=1 TO 16 BEGIN . FOR J=1 TO 4 BEGIN . CADR a; R=0; ENDCadr ; . CADR b; FOR K=1 TO 4 . R2[I]=A[I,J,K]*B[J,K,I]; . R=R+R2[1]+R2[2]+R2[3]+R2[4]; . C[I,K,J]=R; ENDCadr ; . END ; END ; . Рис.7. Программа и граф-схема вычислительной структуры умножения матриц
. Var A: Array [10: Vector ]; . CADR a; FOR I=2 TO 9 . C=A[I]+A[I-1]+A[I+1]; . ENDCadr ; . а) обращение к элементам вектора; . Var A: Array [10: Stream ]; . CADR a; FOR I=2 TO 9 . C=A[I]+A[I-1]+A[I+1]; . ENDCadr ; . б) обращение к элементам потока . Рис.5. Примеры обращения к элементам вектора и к элементам потока
. Var A,B,C: Array [10: Vector ]; . FOR I=1 TO 10 STEP 2 BEGIN . CADR summa; . FOR J=I TO I+1 BEGIN . C[J]=A[J]+B[J]; . END ; . ENDCadr ; . Рис.4. Программа и эквивалентный ей граф вычислительной структуры, реализующей параллельно-последовательное суммирование двух массивов
. Var A,B,B2,C,D,K,L,S,Z: MEM ; . CADR n3; . Z=B*C+D-K/L; . A=Z+S; B2=Z-S; . ENDCadr ; . Рис.1 Примеры использования мемориальных и коммутационных переменных. в) программа и эквивалентный ей граф вычислительной структуры с промежуточной мемориальной переменной.
. Var A,B,B2,C,D,K,L,S: MEM ; . Var Z: COM ; . CADR n2; . Z=B*C+D-K/L; . A=Z+S; B2=Z-S; . ENDCadr ; . Рис.1 Примеры использования мемориальных и коммутационных переменных. б) программа и эквивалентный ей граф вычислительной структуры с промежуточной коммутационной переменной. Красным показаны исходные данные и их пересылка, черным - собственно граф алгоритма, зеленым - записываемые переменые и их получение.
. Var A,B,B2,C,D,K,L,S: MEM ; . CADR n1; . A=B*C+D-K/L+S; . B2=B*C+D-K/L-S; . ENDCadr ; . Рис.1. Примеры использования мемориальных и коммутационных переменных. а) программа и эквивалентный ей граф вычислительной структуры без промежуточных переменных. Красным показаны исходные данные и их пересылка, черным - собственно граф алгоритма, зеленым - записываемые переменые и их получение.
... Схема сдваивания . ... Классический пример рекурсии в алгоритме - схема Горнера для вычисления частного от деления многочлена n-й степени одной переменной P n (x) = a 0 x n + a 1 x n-1 + ... + a n-1 x + a на двучлен x - c, с получением многочлена n-1-й степени Q n-1 (x) = b 0 x n-1 + b 1 x n-2 + ... + b n-2 x + b n-1 и остатка от деления b n (равного P n (с)). ... Теперь рассмотрим, как применить схему сдваивания к схеме Горнера. Перепишем схему Горнера в векторной формулировке. ...
Некоторые особенности языка программирования Colamo, с описанием которого читатель, вероятно, уже ознакомился , составитель страницы хотел бы подчеркнуть особо. ... Он настолько прост, что в него не вошли никакие стандартные функции языков высокого уровня . ... Во-вторых, на уровне отдельных кадров язык Colamo представляет собой довольно строгий инструмент для записи их параллельных структур, в то же время не требуя от разработчика самостоятельного нахождения графа алгоритма. ...