Кіріспе

Скорборд – бұл орталықтандырылған әдіс, алғаш рет CDC 6600 компьютерінде пайдаланылды, нұсқауларды динамикалық түрде жоспарлау үшін, егер қайшылықтар болмаса және аппараттық құралдар қолжетімді болса, олар реті бойынша орындалуы мүмкін. Скорбордта әрбір нұсқаудың деректерге тәуелділігі тіркеледі, қадағаланады және әрқашан қатаң сақталады. Нұсқаулар тек қана, егер скорборд бұрын берілген ("орындалып жатқан") нұсқаулармен қайшылықтар жоқ деп анықтаса, ғана шығарылады. Егер нұсқау шығарылуы қауіпсіз болмағандықтан (немесе жеткіліксіз ресурстар болғандықтан) тоқтап қалса, скорборд тоқтап қалған нұсқау шығарылғанға дейін барлық тәуелділіктер шешілгенше орындалып жатқан нұсқаулардың ағынын бақылайды. Қысқасы, оқу операциялары жазу қаупі болмағанда жүзеге асырылады, ал жазу операциялары оқу қаупі болмағанда жүзеге асырылады. Скорборд – дерек ағыны тілдеріндегідей бірдей негізгі алгоритмнің аппараттық іске асырылуы болып табылады, бұл Бағытталған Ациклді Графты құрады, онда бағдарламалау тілінің орындалу кезінде сол логика қолданылады.

Кезеңдер

Нұсқаулар реттілігімен орындалады және төрт кезеңнен өтеді. Мәселе: Жүйе осы нұсқау арқылы қандай тіркелімдер оқылатынын және жазылатынын тексереді, сондай-ақ WAR, RAW және WAW қақтығыстарын анықтайды. RAW және WAR қауіптері тәуелділік матрицасы арқылы тіркеледі (алғашқы 6600 дизайнындағы SR NOR құлыптарынан құрастырылған), себебі ол келесі кезеңдерде қажет болады. Сонымен қатар, екінші матрицаға жазба жасалады, ол нұсқаулардың ретін бағытталған ациклдік граф ретінде сақтайды. Шығыс тәуелділігін (WAW – Write after Write) болдырмау үшін, нұсқау сол тіркелгіге жазуға ниеттенген нұсқаулар аяқталғанша тоқтатылады. Нұсқау қажетті функционалдық бірліктер бос болғанда да тоқтатылады. Ешбір нұсқау басынан соңына дейін толыққандай анықталмаса, орындалмайды. Операндтарды оқу: Нұсқау орындалып, қажетті аппараттық модульге (Торнтонның кітабында Есептеу блогы деп аталады) дұрыс тағайындалғаннан кейін, блок барлық операндтар қолжетімді болғанша күтеді. Оқу тек жазу тәуелділіктері (RAW – Read after Write) басқа барлық бірліктерден алынғаннан кейін ғана жалғасады. Тіркелгі файл портына қолжетімділік үшін талас болдырмау мақсатында, Басымдық таңдағышы бір Есептеу блогын таңдайды (егер бірнеше блок қауіпсіз болса). Орындау: Барлық операндтар алынғаннан кейін, Есептеу блогы орындалуын бастайды. Нәтиже дайын болғаннан кейін, көрсеткіш кестесіне хабар беріледі. Нәтижені жазу: Бұл кезеңде нәтиже дайын, бірақ оның түпкі тіркелгісіне әлі жазылмаған. Жазу бірлік барлық (WAR – Write after Read) қауіпсіздігінен өткенге дейін жалғастырылмайды. Бұл жердегі қосымша кешігулер тек тіркелгі файл портына қолжетімділікке байланысты: 6600 жүйесінде жазу портына бір нәтижені таңдау үшін Басымдық таңдағышы қолданылды. Жазылғаннан кейін, блок бос деп белгіленеді және барлық қауіпсіздіктер мен күй жойылады. "Көлеңке" мүмкіндігі бар тек қана жетілдірілген (күрделендірілген, нақты) көрсеткіш кестелері ғана Нәтижені жазу кезеңін тоқтатуы (кешіктіруі) мүмкін. Алғашқы 6600 жүйесінде мұндай мүмкіндік болмады. Жоғарыда айтылғандай, оқу тек жазу қауіпсіздігі болмағанда ғана жалғасады, ал жазу оқу қауіпсіздігі болмағанда ғана жалғасады. Бұл логикалық, бірақ күтілмеген нәрсе. Атап айтқанда, жазу оқудан кейін жазуды күтуі керек, себебі басқа бірліктерге жаңа мәнмен жазылмас бұрын, тіркелгідегі ағымдағы мәнді оқуға мүмкіндік беру қажет. Сондықтан жазулар WAR қауіпсіздігі болғанша күтуі керек.

Ескертпелер

Торнтонның кітабы қазіргі заманғы есептеу терминологиясына дейінгі кезеңде жазылған. Функционалдық блоктар (құбырлар) "Есептеу блоктары" деп аталған. "Бірінші ретті қақтығыс" барлық блоктардың бос болмауынан туындаған тоқтатуды және WAW қақтығысын қамтыды. "Екінші ретті қақтығыс" RAW қақтығысын білдірді. "Үшінші ретті қақтығыс" WAR қақтығысын қамтыды. Тоқтату тек шығару кезеңінде, "Бірінші ретті" қақтығыстар анықталғанда ғана орын алды. Томасұло алгоритмі сияқты басқа да әдістер WAW тәуелділіктерін тізімді қайта атау арқылы қосымша шешеді. CDC 6600 бастапқыда WAW қауіптерін қадағаламаған, себебі оның жасаушылары өнімді дайындауға және 7600-ге көшуге асығысқан: тоқтату олар үшін ең оңай шешім болды. Көрсеткіштерді қайта атауды Scoreboard-қа қосуға техникалық бөгет жоқ. Люк Лейтон екі алгоритмді де талдап, Томасұло алгоритмі мен 6600 Scoreboard алгоритмінің эквиваленттігін көрсететін трансформация процесін сипаттады. WAW қауіптерін шешу бастапқы алгоритмде жоқ: 6600 алғашқы жазу қаупі пайда болғанда тоқтап қалады.