Кіріспе

Компьютерлік ғылымда бағдарламалық құбыржол – аппараттық құбыржолдармен салыстырылатын, циклдарды оңтайландыруға қолданылатын техника. Бағдарламалық құбыржол – реттіліктен шығарылған орындалудың бір түрі, бірақ қайта реттеуді процессордың орнына компилятор (немесе қолмен жазылған құрастыру коды болған жағдайда бағдарламашы) жасайды. Кейбір компьютерлік архитектуралар бағдарламалық құбыржолды тікелей қолдайды, оның ішінде Intel-дің IA 64 архитектурасы да бар. Цикл ішіндегі қайталамаларды біріктіретін мақсатты код техникасы болып табылатын бағдарламалық құбыржолды, бағдарламалық құбыржол циклдарын жасау үшін қазіргі кездегі ең тиімді компилятор техникасы – модульдік кестелеуден ажырату маңызды. Нұсқау деңгейінде параллелизмге ие машиналардың құрастыру тіліндегі бағдарламашыларына бағдарламалық құбыржол мұндай архитектуралар пайда болғаннан бері белгілі. Мұндай кодты компилятор арқылы тиімді жасау Рау мен Глейзердің модульдік кестелеуді ойлап табуымен байланысты. Лам модульдік кестелеу үшін арнайы аппараттың қажет еместігін көрсетті. Оның әдісі, модульдік айнымалы кеңейту, практикада кеңінен қолданылады. Гао және авторлар толық сандық сызықтық бағдарламалауда оптималды бағдарламалық құбыржолды құрастырды, бұл озық эвристиканы бағалау мақаласында растауға әкелді. Бұл мақалада тақырып бойынша пайдалы сілтемелер бар.

IA-64 іске асыру

Intel компаниясының IA 64 архитектурасы бағдарламалық құбыржолдаудың қиындықтарын ескере отырып жобаланған архитектураның мысалы болып табылады. Бағдарламалық құбыржолдауға архитектуралық қолдаудың кейбір түрлері: "айналмалы" регистрлік банк; нұсқаулар циклдың әр итерациясында басқа регистрге қайта бағытталатын регистр нөміріне сілтеме жасай алады (әдетте циклдің басына оралып келеді). Бұл бұрынғы мысалда енгізілген қосымша нұсқауларды қажетсіз етеді. Predicates (нұсқауларды "шартты ету" үшін қолданылады; тармақталу шарты қараңыз) өз мәнін арнайы циклдық нұсқаулардан алады. Бұл предикаттар циклдегі белгілі бір нұсқауларды қосып немесе өшіріп, жеке пролог пен эпилогтың қажеттілігін жояды.