ადრეული კომპიუტერები მთლიანად თანმიმდევრული იყო. პროცესორის მიერ მიღებული თითოეული ინსტრუქციის სრულად დასრულება სჭირდებოდა, სანამ მომდევნო დაიწყება. ინსტრუქციების უმეტესობას ხუთი ეტაპი აქვს: ინსტრუქციის მიღება, ინსტრუქციის გაშიფვრა, შესრულება, მეხსიერებაზე წვდომა და ჩაწერა. შესაბამისად, ეს ეტაპები იღებენ ინსტრუქციას, რომელიც უნდა დასრულდეს, განასხვავებენ ოპერაციას არსებული მნიშვნელობებისაგან გაიკეთა ოპერაცია, შეასრულეთ ოპერაცია, გახსენით რეესტრი, რომელზეც დაიწერება შედეგი და ჩაწერეთ შედეგი გახსნილზე რეგისტრაცია.
თითოეულ ამ ეტაპს უნდა დასჭირდეს ერთი ციკლი. სამწუხაროდ, თუ მონაცემები არ არის რეესტრში, მაშინ ის უნდა მოითხოვოს CPU ქეშიდან ან სისტემის ოპერატიული მეხსიერებიდან. ეს ბევრად უფრო ნელია და ამატებს ათეულობით ან ასობით საათის ციკლის შეყოვნებას. იმავდროულად, ყველაფერი დანარჩენი უნდა დაელოდო, რადგან სხვა მონაცემების ან ინსტრუქციების დამუშავება შეუძლებელია. ამ ტიპის პროცესორის დიზაინს უწოდებენ ქვესკალარს, რადგან ის მუშაობს ერთზე ნაკლებ ინსტრუქციაზე საათის ციკლზე.
მილსადენი სკალარამდე
სკალარული პროცესორის მიღწევა შესაძლებელია სისტემის მილსადენის გამოყენებით. შესრულებული ინსტრუქციის ხუთი ეტაპიდან თითოეული გადის ტექნიკის სხვადასხვა ბიტებში რეალურ პროცესორის ბირთვში. ამგვარად, თუ ფრთხილად იქნებით იმ მონაცემებით, რომლებსაც აწვდით აპარატურას თითოეული ეტაპისთვის, შეგიძლიათ თითოეული მათგანი დაკავებული იყოს ყოველ ციკლში. სრულყოფილ სამყაროში, ამან შეიძლება გამოიწვიოს 5-ჯერ აჩქარება და პროცესორი იყოს იდეალურად სკალარული, აწარმოებს სრულ ინსტრუქციას ციკლში.
სინამდვილეში, პროგრამები რთულია და ამცირებს გამტარუნარიანობას. მაგალითად, თუ თქვენ გაქვთ ორი დამატების ინსტრუქცია "a = b + c" და "d = e + f", ისინი შეიძლება გაუშვათ მილსადენში პრობლემების გარეშე. თუმცა, თუ თქვენ გაქვთ "a = b + c", რასაც მოჰყვება "d = a + e", თქვენ გაქვთ პრობლემა. თუ ვივარაუდებთ, რომ ეს ორი ინსტრუქცია ერთმანეთის მიყოლებით არის, "a"-ს ახალი მნიშვნელობის გამოთვლის პროცესი არ დასრულდება, რომ აღარაფერი ვთქვათ მეხსიერებაში ჩაწერილი, სანამ მეორე ინსტრუქცია წაიკითხავს ძველ მნიშვნელობას "a"-ს და შემდეგ გასცემს არასწორ პასუხს "დ".
ამ ქცევას შეიძლება დაუპირისპირდეს დისპეტჩერის ჩართვა, რომელიც აანალიზებს მომავალ ინსტრუქციებს და უზრუნველყოფს, რომ არცერთი ინსტრუქცია, რომელიც სხვაზეა დამოკიდებული, არ განხორციელდება ძალიან მჭიდრო თანმიმდევრობით. ის რეალურად აწარმოებს პროგრამას არასწორი თანმიმდევრობით ამის გამოსწორების მიზნით. ეს მუშაობს, რადგან ბევრი ინსტრუქცია სულაც არ ეყრდნობა წინა ინსტრუქციის შედეგს.
მილსადენის გაფართოება სუპერსკალარამდე
სუპერსკალარ პროცესორს შეუძლია ციკლზე ერთზე მეტი სრული ინსტრუქციის გაშვება. ამის გაკეთების ერთ-ერთი გზაა მილსადენის გაფართოება ისე, რომ არსებობდეს ორი ან მეტი ბიტი აპარატურა, რომელსაც შეუძლია გაუმკლავდეს თითოეულ ეტაპს. ამ გზით ორი ინსტრუქცია შეიძლება იყოს მილსადენის თითოეულ ეტაპზე ყველა ციკლში. ეს აშკარად იწვევს დიზაინის სირთულის გაზრდას, რადგან აპარატურა დუბლირებულია, თუმცა, ის გთავაზობთ შესრულების მასშტაბირების შესანიშნავ შესაძლებლობებს.
ეფექტურობა იზრდება მილსადენების გაზრდის შედეგად, ჯერჯერობით მხოლოდ ეფექტურია. თერმული და ზომის შეზღუდვები გარკვეულ შეზღუდვებს აყენებს. ასევე არსებობს დაგეგმვის მნიშვნელოვანი გართულებები. ეფექტური დისპეტჩერი ახლა კიდევ უფრო კრიტიკულია, რადგან მან უნდა უზრუნველყოს, რომ ინსტრუქციების არც ერთი კომპლექტი არ ეყრდნობა რომელიმე სხვა ინსტრუქციის დამუშავების შედეგს.
ფილიალის პროგნოზიტორი არის დისპეტჩერის ნაწილი, რომელიც უფრო და უფრო კრიტიკულია, რაც უფრო მაღალია სუპერსკალარული პროცესორი. ზოგიერთ ინსტრუქციას შეიძლება ჰქონდეს ორი პოტენციური შედეგი, რომელთაგან თითოეული მიგვიყვანს შემდეგ განსხვავებულ ინსტრუქციებზე. მარტივი მაგალითი იქნება "თუ" განცხადება. "თუ ეს მართალია, გააკეთე ეს, თორემ გააკეთე სხვა რამ". ფილიალის პროგნოზირებადი ცდილობს განშტოების ოპერაციის შედეგის პროგნოზირებას. შემდეგ ის წინასწარ გეგმავს და ახორციელებს ინსტრუქციებს იმის მიხედვით, თუ რა მიაჩნია სავარაუდო შედეგს.
თანამედროვე ფილიალების პროგნოზირებში ბევრი რთული ლოგიკაა, რამაც შეიძლება გამოიწვიოს ფილიალების პროგნოზირების წარმატების მაჩვენებელი 98% -მდე. სწორი პროგნოზი დაზოგავს დროს, რომელიც შეიძლებოდა დახარჯულიყო რეალური შედეგის მოლოდინში, არასწორი პროგნოზი მოითხოვს, რომ წინასწარმეტყველება ინსტრუქციები და მათი ნებისმიერი შედეგი განადგურდეს და ჭეშმარიტი ინსტრუქციები განხორციელდეს მათ ადგილას, რაც მოყვება მცირე ჯარიმას მხოლოდ დაელოდა. ამრიგად, მაღალი პროგნოზირების წარმატების მაჩვენებლებმა შეიძლება მნიშვნელოვნად გაზარდოს შესრულება.
დასკვნა
კომპიუტერული პროცესორი ითვლება სუპერსკალარულად, თუ მას შეუძლია ერთზე მეტი ინსტრუქციის შესრულება საათის ციკლზე. ადრეული კომპიუტერები მთლიანად თანმიმდევრული იყო და ერთდროულად მხოლოდ ერთ ინსტრუქციას აწარმოებდა. ეს იმას ნიშნავდა, რომ თითოეული ინსტრუქციის დასრულებას ერთზე მეტი ციკლი დასჭირდა და, შესაბამისად, ეს პროცესორები ქვესკალარული იყო. ძირითადი მილსადენი, რომელიც საშუალებას იძლევა გამოიყენოს ინსტრუქციის თითოეული ეტაპისთვის სპეციფიკური ტექნიკის გამოყენება, შეუძლია შეასრულოს მაქსიმუმ ერთი ინსტრუქცია საათის ციკლზე, რაც მას სკალარს აქცევს.
უნდა აღინიშნოს, რომ არც ერთი ინდივიდუალური ინსტრუქცია არ არის სრულად დამუშავებული ერთი საათის ციკლში. ამას მაინც სჭირდება მინიმუმ ხუთი ციკლი. თუმცა, რამდენიმე ინსტრუქცია შეიძლება იყოს მილსადენში ერთდროულად. ეს იძლევა ერთი ან მეტი დასრულებული ინსტრუქციის გამტარუნარიანობას ციკლზე.
Superscalar არ უნდა აგვერიოს ჰიპერსკალერთან, რომელიც ეხება კომპანიებს, რომლებსაც შეუძლიათ შესთავაზონ ჰიპერმასშტაბიანი გამოთვლითი რესურსები. ჰიპერმასშტაბიანი გამოთვლა მოიცავს უნარს შეუფერხებლად გააფართოვოს ტექნიკის რესურსები, როგორიცაა გამოთვლა, მეხსიერება, ქსელის გამტარუნარიანობა და მეხსიერება, მოთხოვნილების შესაბამისად. ეს ჩვეულებრივ გვხვდება მონაცემთა დიდ ცენტრებში და ღრუბლოვან გამოთვლით გარემოში.