Кіріспе
Әрбір циклда орындалу тізбектері арасында ауысатын процессор. Барел процессоры – әрбір циклда орындалу тізбектері арасында ауысатын процессор. Бұл процессорды жобалау әдісі "араластырылған" немесе "ұсақ түйірлі" уақытша көп тізбектілік деп те аталады. Қазіргі заманғы суперскалярлы архитектурадағы бір мезгілдегі көп тізбектіліктен айырмашылығы, ол әдетте бір циклде бірнеше нұсқауды орындауға мүмкіндік бермейді. Алдын ала жоспарланған көп тапсырмалылық сияқты, әрбір орындалу тізбегіне өз бағдарлама санауышы және басқа аппараттық тіркегіштері (әр тізбектің архитектуралық күйі) тағайындалады. Барел процессоры әрбір тізбектің әр n цикл сайын бір нұсқауды орындайтынына кепілдік бере алады, алдын ала жоспарланған көп тапсырмалы машинадан айырмашылығы, ол әдетте он миллион цикл бойы бір орындалу тізбегін іске қосады, ал қалған тізбектер өз кезегін күтеді. C-кешіктіру деп аталатын әдіс, бір тапсырмалы процессордың дизайнынан сәйкес барел процессор дизайнын автоматты түрде жасауға мүмкіндік береді. Осылайша құрылған n жолды барел процессоры бастапқы бір тапсырмалы процессордың n жеке көп процессорлық көшірмелері сияқты жұмыс істейді, олардың әрқайсысы бастапқы жылдамдықтың шамамен 1/n бөлігімен жұмыс істейді.
A barrel processor is a CPU that switches between threads of execution on every cycle. This CPU design technique is also known as "interleaved" or "fine grained" temporal multithreading. Unlike simultaneous multithreading in modern superscalar architectures, it generally does not allow execution of multiple instructions in one cycle. Like preemptive multitasking, each thread of execution is assigned its own program counter and other hardware registers (each thread's architectural state). A barrel processor can guarantee that each thread will execute one instruction every n cycles, unlike a preemptive multitasking machine, that typically runs one thread of execution for tens of millions of cycles, while all other threads wait their turn. A technique called C slowing can automatically generate a corresponding barrel processor design from a single tasking processor design. An n way barrel processor generated this way acts much like n separate multiprocessing copies of the original single tasking processor, each one running at roughly 1/n the original speed.
Тарих
Барель процессордың алғашқы мысалдарының бірі CDC 6000 сериялы суперкомпьютерлердегі I/O өңдеу жүйесі болды. Олар бірінші процессорға қайтып оралғанға дейін 10 түрлі виртуалды процессордан (перифериялық процессорлар деп аталады) әрқайсысынан бір нұсқауды (немесе нұсқаудың бір бөлігін) орындады. CDC 6000 сериясынан біз оқимыз: "Перифериялық процессорлар жиынтық барель процессор ретінде іске асырылады. Әрқайсысы басқалардан тәуелсіз жұмыс істейді. Олар автобус басқаруының немесе тікелей жадқа қол жеткізудің ертедегі нұсқасы". Барель процессорларды жасаудың бір себебі аппараттық құралдардың құнын төмендету болды. CDC 6x00 PPU жағдайында процессордың цифрлық логикасы негізгі жадтан әлдеқайда жылдам болды, сондықтан он жеке процессордың орнына PPU үшін он жеке негізгі жад блогы болды, бірақ олардың барлығы процессор логикасының бір жиынтығын бөліседі. Тағы бір мысал – Honeywell 800, онда 8 тіркелімдер тобы болды, бұл 8 бағдарламаны бір уақытта іске асыруға мүмкіндік берді. Әрбір нұсқаудан кейін процессор (көбінесе) кезекпен келесі белсенді бағдарламаға ауысатын болды. Барель процессорлар ірі масштабтағы орталық процессорлар ретінде де қолданылған. Tera MTA (1988) – 128 жиекке ие үлкен барель процессор дизайны. MTA архитектурасы 2012 жылы ұсынылған (YarcData uRiKA ретінде) және деректерді өндіруге бағытталған Cray Urika GD сияқты келесі өнімдерде дамуын жалғастырды. Барель процессорлары кіріктірілген жүйелерде де кездеседі, онда олар нақты уақыт режимінде детерминистік жиектердің жұмысын қамтамасыз ету үшін өте пайдалы. Алғашқы мысал – 1981 жылы National Semiconductor ұсынған төрт биттік COP400-дің "Dual CPU" нұсқасы. Бұл бір чипті микробасқарушы екі дербес CPU-ды қамтиды, олар нұсқауларды, жадты және көптеген I/O құрылғыларын бөліседі. Шын мәнінде, екі процессор – екі жиекті барель процессор. Ол процессордың кейбір бөлімдерін – архитектуралық күйді сақтайтын бөлімдерін – көшіру арқылы жұмыс істейді, бірақ ALU, шиналар және жад сияқты негізгі орындау ресурстарын көшірмейді. Жеке архитектуралық күйлер көшірілген A (аккумуляторлар), B (көрсеткіш тіркелімдері), C (көшіру флагтары), N (стек көрсеткіштері) және PC (бағдарлама санағыштары) арқылы құрылады. Тағы бір мысал – XMOS XCore XS1 (2007), төрт сатылы барель процессор, әр өзегі сегіз жиекке ие. (XMOS-тан шыққан жаңа процессорлар да осы архитектураның бір түріне ие.) XS1 Ethernet, USB, аудио және басқару құрылғыларында, сондай-ақ I/O өнімділігі маңызды басқа да қолданбаларда қолданылады. XS1 "XC" тілінде бағдарламаланғанда бағдарламалық басқарумен тікелей жадқа қол жеткізуді жүзеге асыруға болады. Барель процессорлары арнайы құрылғыларда да қолданылған, мысалы, сегіз жиекті Ubicom IP3023 желілік I/O процессоры (2004). Padauk Technology компаниясының 8 биттік микробасқарушылары өзекшеде 8 жиекке дейін бар барель процессорларын ұсынады.
Артықшылықтар
Бір тапсырмалық процессор көп уақытын бос өткізеді, кэш қатесі немесе құбыр тоқтаған кезде ешқандай пайдалы жұмыс жасамайды. Бір тапсырмалық процессорларға қарағанда, баррельді процессорларды пайдаланудың артықшылықтары: тоқтап қалған жіп күтіп тұрғанда, басқа жіптерде пайдалы жұмыс істеу мүмкіндігі. N тереңдігіндегі құбырға ие n жолды баррельді процессорды жобалау, бір тапсырмалық процессорды жобалауға қарағанда әлдеқайда оңай, себебі баррельді процессорда құбыр тоқтамайды және алдын ала беру тізбектері қажет емес. Нақты уақыт қолданбалары үшін баррельді процессор "нақты уақыт" жібінің, басқа жіптерге не болғанына қарамастан, тіпті басқа жіп шексіз циклге түсіп кетсе немесе аппараттық үзілістермен үнемі тоқтатылса да, дәл уақытта орындалатынына кепілдік береді.
The ability to do useful work on the other threads while the stalled thread is waiting. Designing an n way barrel processor with an n deep pipeline is much simpler than designing a single tasking processor because a barrel processor never has a pipeline stall and doesn't need feed forward circuits. For real time applications, a barrel processor can guarantee that a "real time" thread can execute with precise timing, no matter what happens to the other threads, even if some other thread locks up in an infinite loop or is continuously interrupted by hardware interrupts.
Кемшіліктер
Барельді процессорлардың бірнеше кемшіліктері бар. Қымбат сыртқы контекстік ауысулардан сақтану үшін әрбір жіптің күйі чипте, әдетте тіркелімдерде сақталуы тиіс. Бұл, дәстүрлі процессорлармен салыстырғанда, көптеген тіркелімдерді қажет етеді. Либо барлық жіптер бірдей кэшті пайдалануы керек, бұл жүйенің жалпы өнімділігін төмендетеді, немесе әрбір орындалатын жіпке жеке кэш бөлінуі керек, бұл транзисторлардың санын және осы процессордың құнын айтарлықтай арттырады. Дегенмен, барельді процессорлар жиі қолданылатын нақты уақыттық жүйелерде жадқа қол жеткізу құны нашар жағдайлардағы кэш мінез-құлқына сүйеніп есептеледі, сондықтан бұл мәселе аса маңызды емес. Мысалы, XMOS XS1 сияқты кейбір барельді процессорларда кэш мүлдем болмайды.