Кіріспе
Бірнеше бірдей процессорлардың барлық ресурстарды тең бөлісуі Симметриялық мультипроцессорлық немесе ортақ жадты мультипроцессорлық (SMP) – екі немесе одан көп бірдей процессорлардың бір ортақ негізгі жадқа қосылып, барлық кіріс-шығыс құрылғыларына толық қол жеткізіп, арнайы мақсаттарға бөлінбеген, барлық процессорларды тең қарастыратын жалғыз операциялық жүйе инстанциясымен басқарылатын, көппроцессорлық компьютерлік аппараттық және бағдарламалық архитектураны қамтиды. Бүгінгі күні көптеген көппроцессорлық жүйелер SMP архитектурасын қолданады. Көп ядролы процессорлар жағдайында SMP архитектурасы ядроларға қолданылады, олар жеке процессорлар ретінде қарастырылады. Профессор Джон Д. Кубиатович дәстүрлі SMP жүйелерінде кэшсіз процессорлар болатынын айтады. Culler және Pal Singh 1998 жылғы "Параллельді компьютерлік архитектура: аппараттық/бағдарламалық тәсіл" кітабында былай деп жазады: "SMP термині кеңінен қолданылады, бірақ шатасу тудыруы мүмкін. [...] SMP терминімен білдірілгенінің нақтырақ сипаттамасы – барлық процессорлар үшін жад орнына қол жеткізу құны бірдей болатын ортақ жадты мультипроцессор; яғни, жадқа қол жеткізілген кезде бірыңғай қол жеткізу шығындары болады. Егер орналасқан жер кэштелген болса, қол жеткізу жылдамырақ болады, бірақ кэштік қол жеткізу уақыты мен жадтық қол жеткізу уақыты барлық процессорларда бірдей болады". SMP жүйелері – бір-бірінен тәуелсіз жұмыс істейтін біртекті процессорлар жиынтығымен тығыз байланысқан көппроцессорлық жүйелер болып табылады. Әр процессор әртүрлі бағдарламаларды орындап, әртүрлі деректер жиынтығымен жұмыс істей алады және жүйелік шина немесе кроссбар арқылы қосылған ортақ ресурстарды (жад, кіріс-шығыс құрылғылары, үзіліс жүйесі және т.б.) бөлісуге қабілетті.
Symmetric multiprocessing or shared memory multiprocessing (SMP) involves a multiprocessor computer hardware and software architecture where two or more identical processors are connected to a single, shared main memory, have full access to all input and output devices, and are controlled by a single operating system instance that treats all processors equally, reserving none for special purposes. Most multiprocessor systems today use an SMP architecture. In the case of multi core processors, the SMP architecture applies to the cores, treating them as separate processors. Professor John D. Kubiatowicz considers traditionally SMP systems to contain processors without caches. Culler and Pal Singh in their 1998 book "Parallel Computer Architecture: A Hardware/Software Approach" mention: "The term SMP is widely used but causes a bit of confusion. [ ] The more precise description of what is intended by SMP is a shared memory multiprocessor where the cost of accessing a memory location is the same for all processors; that is, it has uniform access costs when the access actually is to memory. If the location is cached, the access will be faster, but cache access times and memory access times are the same on all processors." SMP systems are tightly coupled multiprocessor systems with a pool of homogeneous processors running independently of each other. Each processor, executing different programs and working on different sets of data, has the capability of sharing common resources (memory, I/O device, interrupt system and so on) that are connected using a system bus or a crossbar.
Дизайн
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 деп аталған порт.
<blockquote>Serious programming challenges remain with this kind of architecture because it requires two distinct modes of programming; one for the CPUs themselves and one for the interconnect between the CPUs. A single programming language would have to be able to not only partition the workload, but also comprehend the memory locality, which is severe in a mesh based architecture. IBM offered dual processor computer systems based on its System/360 Model 65 and the closely related Model 67 and 67–2. The operating systems that ran on these machines were OS/360 M65MP and TSS/360. Other software developed at universities, notably the Michigan Terminal System (MTS), used both CPUs. Both processors could access data channels and initiate I/O. In OS/360 M65MP, peripherals could generally be attached to either processor since the operating system kernel ran on both processors (though with a "big lock" around the I/O handler). The MTS supervisor (UMMPS) has the ability to run on both CPUs of the IBM System/360 model 67–2. Supervisor locks were small and used to protect individual common data structures that might be accessed simultaneously from either CPU. Other mainframes that supported SMP included the UNIVAC 1108 II, released in 1965, which supported up to three CPUs, and the GE 635 and GE 645, although GECOS on multiprocessor GE 635 systems ran in a master slave asymmetric fashion, unlike Multics on multiprocessor GE 645 systems, which ran in a symmetric fashion. Starting with its version 7.0 (1972), Digital Equipment Corporation's operating system TOPS 10 implemented the SMP feature, the earliest system running SMP was the DECSystem 1077 dual KI10 processor system. Later KL10 system could aggregate up to 8 CPUs in a SMP manner. In contrast, DECs first multi processor VAX system, the VAX 11/782, was asymmetric, but later VAX multiprocessor systems were SMP. Early commercial Unix SMP implementations included the Sequent Computer Systems Balance 8000 (released in 1984) and Balance 21000 (released in 1986). Both models were based on 10 MHz National Semiconductor NS32032 processors, each with a small write through cache connected to a common memory to form a shared memory system. Another early commercial Unix SMP implementation was the NUMA based Honeywell Information Systems Italy XPS 100 designed by Dan Gielan of VAST Corporation in 1985. Its design supported up to 14 processors, but due to electrical limitations, the largest marketed version was a dual processor system. The operating system was derived and ported by VAST Corporation from AT&T 3B20 Unix SysVr3 code used internally within AT&T. Earlier non commercial multiprocessing UNIX ports existed, including a port named MUNIX created at the Naval Postgraduate School by 1975.
Қолданылуы
Уақытты бөлісу және серверлік жүйелер көбінесе қолданбаларды өзгертпей-ақ 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) бар, онда барлық жадтың барлық процессорларға қолжетімділігі қамтамасыз етілмейді. Кластерлеу техникалары өте ірі суперкомпьютерлерді құру үшін кеңінен қолданылады.