Кіріспе

Бірнеше бірдей процессорлардың барлық ресурстарды тең бөлісуі Симметриялық мультипроцессорлық немесе ортақ жадты мультипроцессорлық (SMP) – екі немесе одан көп бірдей процессорлардың бір ортақ негізгі жадқа қосылып, барлық кіріс-шығыс құрылғыларына толық қол жеткізіп, арнайы мақсаттарға бөлінбеген, барлық процессорларды тең қарастыратын жалғыз операциялық жүйе инстанциясымен басқарылатын, көппроцессорлық компьютерлік аппараттық және бағдарламалық архитектураны қамтиды. Бүгінгі күні көптеген көппроцессорлық жүйелер SMP архитектурасын қолданады. Көп ядролы процессорлар жағдайында SMP архитектурасы ядроларға қолданылады, олар жеке процессорлар ретінде қарастырылады. Профессор Джон Д. Кубиатович дәстүрлі SMP жүйелерінде кэшсіз процессорлар болатынын айтады. Culler және Pal Singh 1998 жылғы "Параллельді компьютерлік архитектура: аппараттық/бағдарламалық тәсіл" кітабында былай деп жазады: "SMP термині кеңінен қолданылады, бірақ шатасу тудыруы мүмкін. [...] SMP терминімен білдірілгенінің нақтырақ сипаттамасы – барлық процессорлар үшін жад орнына қол жеткізу құны бірдей болатын ортақ жадты мультипроцессор; яғни, жадқа қол жеткізілген кезде бірыңғай қол жеткізу шығындары болады. Егер орналасқан жер кэштелген болса, қол жеткізу жылдамырақ болады, бірақ кэштік қол жеткізу уақыты мен жадтық қол жеткізу уақыты барлық процессорларда бірдей болады". SMP жүйелері – бір-бірінен тәуелсіз жұмыс істейтін біртекті процессорлар жиынтығымен тығыз байланысқан көппроцессорлық жүйелер болып табылады. Әр процессор әртүрлі бағдарламаларды орындап, әртүрлі деректер жиынтығымен жұмыс істей алады және жүйелік шина немесе кроссбар арқылы қосылған ортақ ресурстарды (жад, кіріс-шығыс құрылғылары, үзіліс жүйесі және т.б.) бөлісуге қабілетті.

Дизайн

SMP жүйелерінде екі немесе одан көп біртекті процессорлармен бір операциялық жүйеде жұмыс істейтін негізгі жад (MM) деп аталатын ортақ жад бар. Әдетте, әрбір процессордың негізгі жадқа деректерге қол жеткізуді жылдамдату және жүйелік шина трафигін азайту үшін кэш жады (немесе кэш) деп аталатын жеке жоғары жылдамдықты жады болады. Процессорлар шиналар, қиылысқан коммутаторлар немесе чиптегі желілер арқылы өзара байланыстырылуы мүмкін. Шиналар немесе қиылысқан коммутаторларды пайдалану арқылы SMP-нің кеңейтімділігіндегі шектеулі нүкте – әртүрлі процессорлар, жад және дискілік массивтер арасындағы өзара байланыстың өткізу қабілеті мен қуатты тұтынуы болып табылады. Желілік архитектуралар осы шектеулерден аулақ болады және бағдарламалауды құрбан ету арқасында процессорлардың санының көп болуына жақын сызықтық кеңейтімділікті қамтамасыз етеді. Осы архитектурамен бағдарламалауға қатысты маңызды қиындықтар бар, себебі ол екі түрлі бағдарламалау режимін қажет етеді: бірі – процессорлардың өзі үшін, екіншісі – процессорлар арасындағы өзара байланыс үшін. Бір бағдарламалау тілі жұмыс жүктемесін бөлу ғана емес, сонымен қатар желілік архитектурада өте маңызды болатын жадтың орналасуын түсінуге қабілетті болуы керек. IBM өздерінің System/360 Model 65 және оған жақын 67 және 67–2 модельдеріне негізделген екі процессорлы компьютер жүйелерін ұсынды. Бұл машиналарда OS/360 M65MP және TSS/360 операциялық жүйелері жұмыс істеді. Университеттерде жасалған басқа бағдарламалық қамтамасыз ету, атап айтқанда Мичиган Терминалдық Жүйесі (MTS), екі CPU-ды да пайдаланды. Екі процессор да дерек каналдарына кіре алады және I/O-ны бастауға мүмкіндік алады. OS/360 M65MP-де сыртқы құрылғыларды әдетте процессордың екеуіне де қосуға болады, себебі операциялық жүйе ядросы екі процессорда да жұмыс істеді (бірақ I/O басқарушысының айналасында «үлкен құлыппен»). MTS қадағалаушысы (UMMPS) IBM System/360 моделінің 67–2 екі CPU-сында жұмыс істей алады. Қадағалаушы құлыптары кішкентай болды және бір уақытта екі процессордан қол жетімді болатын жеке ортақ дерек құрылымдарын қорғау үшін пайдаланылды. SMP-ні қолдаған басқа мейнфреймдерге 1965 жылы шыққан UNIVAC 1108 II кірді, ол үш процессорға дейін қолдау көрсетті, сондай-ақ GE 635 және GE 645. Бірақ GECOS көп процессорлы GE 635 жүйелерінде асимметриялық режимде жұмыс істеді, бұл көп процессорлы GE 645 жүйелеріндегі Multics-тен өзгеше, ол симметриялық режимде жұмыс істеді. 7.0 (1972) нұсқасынан бастап Digital Equipment Corporation операциялық жүйесі TOPS 10 SMP мүмкіндігін іске қосты, ал SMP-ні іске асырған ең алғашқы жүйе DECSystem 1077 екі KI10 процессорлы жүйесі болды. Кейінірек KL10 жүйесі SMP арқылы 8 процессорға дейін біріктірілуі мүмкін. Ал DEC-тің алғашқы көп процессорлы VAX жүйесі VAX 11/782 асимметриялық болды, бірақ кейінгі VAX көп процессорлы жүйелері SMP болды. Unix SMP-нің алғашқы коммерциялық іске асырылымдарына Sequent Computer Systems Balance 8000 (1984 жылы шығарылған) және Balance 21000 (1986 жылы шығарылған) кірді. Екі модель де 10 МГц National Semiconductor NS32032 процессорларына негізделген, олардың әрқайсысы ортақ жадыға қосылған шағын жазу кэшін ортақ жад жүйесін құру үшін пайдаланды. Тағы бір ерте коммерциялық Unix SMP іске асырылымы 1985 жылы VAST корпорациясының Дэн Гиелан жасаған NUMA негізделген Honeywell Information Systems Italy XPS 100 болды. Оның дизайны 14 процессорды қолдайтын, бірақ электрлік шектеулерге байланысты ең үлкен сатылымдағы нұсқасы екі процессорлы жүйе болды. Операциялық жүйе VAST корпорациясымен AT&T 3B20 Unix SysVr3 кодынан құрастырылып, портталды. Бұрын коммерциялық емес UNIX порттары да болды, соның ішінде 1975 жылы әскери-теңіз аспирантурасында MUNIX деп аталған порт.

Қолданылуы

Уақытты бөлісу және серверлік жүйелер көбінесе қолданбаларды өзгертпей-ақ SMP-ді пайдалана алады, себебі оларда бір уақытта бірнеше процесс жұмыс істеуі мүмкін, ал бірден көп процесс бар жүйе әртүрлі процестерді әртүрлі процессорларда іске қоса алады. Жеке компьютерлерде SMP өзгертілмеген қолданбалар үшін тиімді емес. Егер жүйе бір уақытта бір процестен артық іске қоспаса, SMP тек көп өрісті (көп тапсырмалы) өңдеуге бейімделген қолданбалар үшін ғана пайдалы. Арнайы бағдарламаланған бағдарламалық құралдарды бірнеше процессорды пайдалануға мүмкіндік беретін бірнеше өріс пайдалану үшін жазуға немесе өзгертуге болады. Көп өрісті бағдарламалар уақытты бөлісу және көп өрістілікті қолдайтын серверлік жүйелерде де қолданылуы мүмкін, бұл оларға бірнеше процессорды тиімдірек пайдалануға мүмкіндік береді.

Артықшылықтар/артықшылықтар

Қазіргі SMP жүйелерінде барлық процессорлар шина немесе коммутатор арқылы бір корпус ішінде тығыз байланысты болады; алдыңғы SMP жүйелерінде бір CPU бүкіл шкафты алып тұрды. Ортақ компоненттердің ішінде жад, дискілер және кіріс-шығыс құрылғылары бар. Барлық процессорларда ОС-тің тек бір ғана көшірмесі іске қосылады, ал ОС осы архитектураның мүмкіндіктерін пайдалану үшін жасалуы тиіс. Негізгі артықшылықтарының бірі – өнімділікті арттырудың тиімді жолдары. SMP түрлі проблемалар мен тапсырмаларды шешу үшін бір проблеманы бірнеше процессорға жүктейді, бұл параллель бағдарламалау деп аталады. Дегенмен, кэш сәйкестігі және ортақ нысандарға байланысты SMP-ның кеңейтілуіне шектеулер бар.

Бағдарламалау

Бірпроцессорлық және SMP жүйелері ең жоғары өнімділікке қол жеткізу үшін әртүрлі бағдарламалау әдістерін қажет етеді. SMP жүйелерінде іске қосылатын бағдарламалар, тіпті олар бірпроцессорлық жүйелер үшін жазылған болса да, өнімділіктің артуын сезуі мүмкін. Бұл аппараттық үзілістер бағдарламаның орындалуын тоқтататынымен, оларды басқаратын ядро бос процессорда орындалуы мүмкін болғандықтан болады. Көптеген қолданбаларда (мысалы, ойындарда) нәтиже өнімділіктің артуы емес, бағдарламаның әлдеқайда тегіс жұмыс істеп жатқан тәрізді көрінуі. Кейбір қолданбалар, әсіресе бағдарламалық құралдарды құрастыру және таратылған есептеу жобалары, қосымша процессорлардың санына пропорционал жылдамдықпен орындалады. (Компиляторлар өздері бір жіпті, бірақ көптеген компиляция бірліктері бар бағдарламалық жобаны құрастыру кезінде, әрбір компиляция бірлігі дербес өңделсе, бұл жобаның барлық компиляция бірліктері бойынша өте оңай параллельдік жағдайды тудырады, компиляция уақытын дерлік сызықтық масштабтауға мүмкіндік береді. Таратылған есептеу жобалары бастапқыда параллельдікпен жобаланған.) Жүйелік бағдарламашылар операциялық жүйеге SMP қолдауын енгізуі керек, әйтпесе қосымша процессорлар бос тұрады және жүйе бірпроцессорлық жүйе ретінде жұмыс істейді. SMP жүйелері нұсқаулар жиынтығына қатысты күрделілікті арттыруы мүмкін. Біртекті процессор жүйесі әдетте SIMD (MMX, SSE және т.б.) сияқты «арнайы нұсқаулар» үшін қосымша регистрлерді қажет етеді, ал гетерогенді жүйе әртүрлі нұсқаулар/қолданулар үшін әртүрлі аппараттық түрлерді іске асыруы мүмкін.

Өнер көрсету

Бір уақытта бірнеше бағдарлама жұмыс істегенде, SMP жүйесі бір процессорлы жүйеге қарағанда едәуір жақсы өнімділік көрсетеді, себебі әртүрлі бағдарламалар әртүрлі процессорларда бір мезгілде орындала алады. Керісінше, асимметриялық мультипроцессорлық (AMP) әдетте бір процессорға бір уақытта тек бір бағдарламаны немесе тапсырманы орындауға рұқсат береді. Мысалы, AMP-ді тапсырманың маңыздылығы мен жеделдігіне қарай CPU-ға нақты тапсырмаларды жүктеу үшін қолдануға болады. AMP көп процессорларды басқару тұрғысынан SMP-ден ертерек пайда болған, сондықтан берілген мысалға сәйкес өнімділіктің төмен болуын түсіндіруге болады. SMP ортасы көптеген тапсырмаларды өңдеген кезде, әкімшілер жиі аппараттық тиімділіктің төмендеуін сезінеді. Процессорды ең жоғары деңгейде пайдалану және компьютердің басқа функцияларын жоспарлау үшін бағдарламалық құралдар жасалған. Сапалы бағдарламалық пакеттер әрбір процессорды жеке жоспарлау арқылы, сондай-ақ бірнеше SMP машиналары мен кластерлерін біріктіру арқылы осы ең жоғары тиімділікке қол жеткізе алады. Жедел жадқа қол жеткізу тізбектеліп жүзеге асырылады; осы және кэш сәйкестігі мәселелері жүйедегі процессорлар санының артуына қарамастан, өнімділіктің сәл төмендеуіне себеп болады.

Баламалар

SMP бір ортақ жүйелік шинаны пайдаланады, бұл көппроцессорлық машина архитектурасының ең алғашқы стильдерінің бірі болып табылады және әдетте 8 процессорға дейінгі кіші компьютерлерді құру үшін қолданылады. Ірі компьютер жүйелері, әдетте, әртүрлі процессорларға әртүрлі жад банктерін бөлетін NUMA (Біркелкі емес жадқа қол жеткізу) сияқты жаңа архитектураларды қолдануы мүмкін. NUMA архитектурасында процессорлар жергілікті жадқа жылдам, ал қашықтағы жадқа баяу қол жеткізе алады. Егер деректер нақты процестерге (демек, процессорларға) локалдастырылған болса, бұл жад өткізгіштігін едәуір арттырады. Алайда, NUMA процессордың бірінен екіншісіне деректерді жылжыту құнын, мысалы, жүктемені теңестіру кезінде, қымбатқа түсіреді. NUMA-ның артықшылықтары нақты жұмыс жүктемелерімен шектеледі, әсіресе деректер белгілі бір міндеттермен немесе пайдаланушылармен тығыз байланысты серверлерде. Соңында, компьютерлік кластерлік мультипроцессорлық (мысалы, Beowulf) бар, онда барлық жадтың барлық процессорларға қолжетімділігі қамтамасыз етілмейді. Кластерлеу техникалары өте ірі суперкомпьютерлерді құру үшін кеңінен қолданылады.