на-ближення, в сумі більше десятка ариф-метичних дій з виділенням ло-кальних регістрів. Як-що ж макроси не використовуються, тоді треба кодувати ці функції як про-цедури МВР, де пот-рібно передбачити операції часткових ділення та виз-на-чен-ня кореня.
Макроси розширюють систему ко-манд цільового МП віртуальними ко-мандами. Для зручності лексичного ана-лізу та генерації ієрархічного графа вва-жаємо, що цільовий МП має в ролі команд найбільш уживані функції, на-приклад піднесення числа до квадрата, а сама команда x2 описується у вигляді макроса.
Обмеження інтелектуалізації. МП з ДКС і ПЦОС з ДКС є достатньо прос-тими МП — вони не мають дуже складних функціональних пристроїв — найскладнішим є блок "помножувач-су-ма-тор". Для складного багато-ре-жим-но-го помножувача нейропроцесора NM ефективна генерація коду прак-тич-но неможлива, найкращим ви-хо-дом є ви-користання заздалегідь опти-мі-зо-ва-них бібліотек підтримки складних функ-ціональних пристроїв. Такі ж вис-новки стосуються різноманітних спе-ціа-лізо-ва-них апаратних співпроцесорів, що ви-ко-нують цифрову фільтрацію або пе-ретво-рення Фур'є. Проте ви-ко-рис-тан-ня бібліотек не є ознакою немо-біль-ності програми в майбутньому, для одер-жан-ня мобільного коду необхідно коректно організувати необхідні біб-ліо-теки та при випуску нових МП на-пи-сати ана-ло-гічні модулі.
Можливості інтелектуалізації генерації коду
Розглянемо можливості інтелек-туа-лізації компілятора.
Інтелектуалізація компілятора доз-воляє нам поліпшити харак-те-рис-ти-ки програми завдяки використанню апа-ратних особливостей конкретних МП і підвищити мобільність програм між платформами.
Поліпшення характеристик прог--ра-ми. Розглянемо приклад ви-ко-рис-тан-ня циркулярної адресації при об-чис-лен-ні дискретного перетворення Фур'є N*N точок. Тут разом з генератором ко-ду задіяний оптимізатор циклів.
for k:=0 to N-1 do begin ic=0; is=0; y:=0; y1:=-N/4; for j:=0 to N-1 do begin
ic:=ic+coef[y]*dline[j];
is:=is+coef[y1]*dline[j];
y:=y+k; if y>=N then y:=y-N;
y1:=y1+k; if y1>=N then y1:=y1-N;
end;
result[i]:=sqrt(sqr(ic)+sqr(is))/N;
end;
Особливу складність становлять дві умовні конструкції в середині внут-рішнього циклу. Якщо не вра-хо-вувати, що адресація coef[y] і coef[y1] є цир-ку-лярною, то в циклі виникає як мінімум чотири зайві команди. У випадку вка-зів-ки в налагодженнях, що МП під-три-мує таку адресацію, компілятор ге-не-рує більш ефективний код:
r4=0; \ register for "k"i0=result; \ array result addressm0=1;f1=8000.0;lcntr=N, do L0001 until LCE;f13=0.0; \ icf14=0.0; \ isr5=coef;b1=r5, r6=N/4; \ making circular buffers using "coef"
b2=r5, r5=r5+r6;
i2=r5, r5=N;
m9=r4;
l1=r5;
l2=r5;
m1=r4;
i9=dline;
f2=dm(i1,m1), f4=pm(i9,m9); \ i9 == dline[j];
f3=dm(i2,m1);
f2=dm(i1,m1), f4=pm(i9,m9), f8=f2*f4;
f3=dm(i2,m1), f9=f3*f4; lcntr=N-2, do L0002 until LCE; f2=dm(i1,m1), f4=pm(i9,m9), f8=f2*f4, f13=f13+f8; \ i1 == coef[y];
L0002: f3=dm(i2,m1), f9=f3*f4, f14=f14+f9; \ i2 == coef[y1];
f8=f2*f4, f13=f13+f8;
f9=f3*f4, f14=f14+f9;
f13=f13+f8;
f14=f14+f9;f13=f13*f13;f14=f14*f14;f0=f13+f14;call sqrt;call divide;
L0001: dm(i0,m0)=f0, r4=r4+1;
Виділений внутрішній цикл ви-ко-нується за 2 такти. У циклі застосована техніка програмного конвейєра [25]. При невикористанні циркулярної ад-ре-са-ції у тілі циклу з’являються команди:
r10=i2;
r11=i1, comp(r10,r15); \ r15 = N (fence)
IF GE modify(i2,m7); \ m7 = -N ( correction)
Comp(r11,r15);
IF GE modify(i1,m7);
Після появи цих команд час ви-конання циклу збільшується з двох так-тів до семи — продуктивність зни-жу-ється в 3.5 рази.
Підвищення мобільності прог-рам. Особлива увага в системі "Свя-то-гор" була звернена на мобільність ге-не-ра-тора коду, тобто на приховання особ-ливостей архітектури МП від прик-ладного програміста, що кодує прог-раму МВР. Розглянемо можливість зміни цільової платформи з ADSP-21060 на TMS Cx60 за допомогою настрою-вань, таблиць порад і макросів. Заува-жи-мо при цьому, що
1) формати довгої команди в ADSP-21060 і Cx60 нерегулярні і відріз-няються;
2) різними є структура регіст-ро-во-го файла та методи адресації про-це-со-рів, а в описах регістрів і просторів пам'яті підтримуються різні опції;
3) засоби підтримки циркулярних буферів в процесорах абсолютно різні;
4) кількість функціональних при-ст-роїв і їх призначення в процесорах неоднакові.
Фактично ADSP-21060 і TMS Cx60 мають однакову зовнішню модель — ПЦОС з підтримкою ДКС — і різну внутрішню архітектуру. Інте-лек-ту-альні описи "Святогор" підтримують нерегу-ляр-ні формати ДКС, а ін-те-лек-ту-альні засоби компілятора дозволяють адап-ту-вати генератор коду до цих двох плат-форм так, що для прикладного про-г-ра-міс-та навіть не існує необ-хід-ності змі-ню-вати директиви в тексті прог-рами МВР.
Особливе значення висока мо-біль-ність набуває у випадках засто-су-ван-ня масштабованих МП, коли в різ-них моделях МП змінюються тільки опи-си довгих команд.
Переваги інтелектуалізації компіляторів
При розгляді програми, напи-са-ної програмістом, який добре знає ар-хі-тектуру цільового МП, з'ясовується, що він використовує при написанні ко-ду невелику кількість певних шаблонів, що визначаються особливостями ар-хі-тектури МП. Добрий оптимізуючий компілятор для конкретної архітектури повинен мати у внутрішній експертній системі компоненти досвіду експертів-програмістів та робити розумні при-пу-щення під час компіляції. Компілятору для ефективної генерації коду необ-хід-но більше відомостей, ніж є в тексті програми, — це відомості про ефек-тивні способи роботи з архітектурою. В нашому випадку характерна для екс-пертних систем проблема отримання цих відомостей з досвіду експерта прак-тично відсутня через добру вив-че-ність предметної області. Натомість ос-нов-ною проблемою стає правильне їх формулювання для програми ге-не-ра-то-ра коду.
Можливість настроювання ком-пі-лятора та використання таблиць по-рад дозволяє побудувати програмний ске-лет компілятора, який при від-по-від-них налагодженнях може ви-ко-рис-то-ву-ва-тися для різних МП. Відкрита ар-хі-тек-тура компілятора у випадку зміни цільового МП на МП з особливостями апаратної реалізації, що не підтримані компілятором, добудовується до під-трим-ки нової апаратної частини.
Компілятор з інтелектуальними за-собами настроювання можна по-рів-ня-ти з конструктором. Конструктор скла-дається з багатьох простих еле-мен-тів, які при правильному з'єднанні ут-во-рюють пристрій, що виконує складні функції. Пристосовуваний компілятор є сумою багатьох програмних засобів, що дозволяють вирішувати дуже склад-ні завдання. Такий компілятор необ-хід-ний при проектуванні та застосуванні складних процесорів, довжина ко-манд-но-го слова яких складає тисячі бітів і які не можуть бути ефективно за-прог-ра-мовані системними програмістами мо-вою асемблера.
Висновки
Генерація ефективного коду не є єдиною функцією описаної системи "Святогор". Розвиток електроніки доз-во-ляє нарівні з програмами по-ши-рю-вати топології інтегральних мікросхем мовами VHDL або Verilog. При ско-ро-че-них термінах розробки МП необ-хід-но вирішувати завдання аналізу ефек-тив-ності застосування певного МП для конкретного завдання. Крім аналізу кіль-кості необхідних функціональних при-строїв, можна за