რა არის ინსტრუქციის მილსადენი?

პროცესორის ნებისმიერ ინსტრუქციას აქვს მისი მუშაობის რამდენიმე ეტაპი. თითოეული ამ ეტაპის დასრულებას სჭირდება ერთი CPU ციკლი. ეს ეტაპებია ინსტრუქციის მიღება, ინსტრუქციის გაშიფვრა, შესრულება, მეხსიერებაზე წვდომა და ჩაწერა. შესაბამისად, ისინი იღებენ ინსტრუქციას, რომელიც უნდა დასრულდეს, განასხვავებენ ოპერაციას საოპერაციო მნიშვნელობებისგან on, შეასრულეთ პროცესი, გახსენით რეესტრი, რომელზეც დაიწერება შედეგი და ჩაწერეთ შედეგი გახსნილზე რეგისტრაცია.

ისტორიული წესრიგის პროცესორები

ადრეულ კომპიუტერებში CPU არ იყენებდა ინსტრუქციის მილსადენს. ამ პროცესორებში, ყოველი ერთციკლიანი ოპერაცია უნდა მომხდარიყო ყოველი ინსტრუქციისთვის. ეს ნიშნავს, რომ საშუალო ინსტრუქციის სრულად დამუშავებას დასჭირდა ხუთი საათის ციკლი, სანამ მომდევნო დაიწყება. ზოგიერთ ოპერაციას შეიძლება არ დასჭირდეს რაიმე შედეგის რეესტრში ჩაწერა, რაც იმას ნიშნავს, რომ მეხსიერების წვდომისა და ჩაწერის ეტაპები შეიძლება გამოტოვოთ.

ქვესკალარულ პროცესორში მილსადენის გარეშე, თითოეული ინსტრუქციის თითოეული ნაწილი შესრულებულია თანმიმდევრობით.

თუმცა, პრობლემა იმალება, როდესაც სრულ ინსტრუქციას აწარმოებთ, სანამ შეძლებთ შემდეგ ინსტრუქციაზე გადასვლას. პრობლემა არის ქეშის გამოტოვება. CPU ინახავს მონაცემებს, რომლებსაც ის აქტიურად ამუშავებს რეესტრში. ამის წვდომა შესაძლებელია ერთი ციკლის შეყოვნებით. პრობლემა ის არის, რომ რეესტრი პატარაა, რადგან ის ჩაშენებულია პროცესორის ბირთვში. CPU უნდა გადავიდეს უფრო დიდ, მაგრამ ნელ L1 ქეში, თუ მონაცემები უკვე არ არის ჩატვირთული. თუ ის იქ არ არის, ის კვლავ უნდა გადავიდეს უფრო დიდ და ნელ L2 ქეშზე. შემდეგი ნაბიჯი არის L3 ქეში; საბოლოო ვარიანტი არის სისტემის ოპერატიული მეხსიერება. თითოეულ ამ ვარიანტს სჭირდება უფრო და უფრო მეტი CPU ციკლი შესამოწმებლად.

ახლა, ეს დამატებითი დამატებული შეყოვნება შეიძლება იყოს დიდი პრობლემა სისტემაში, რომელმაც უნდა შეასრულოს თითოეული ინსტრუქცია სრულად, სანამ დაიწყება შემდეგი ინსტრუქცია. ის, რაც იყო 5 ციკლი თითო ინსტრუქციის პროცესორზე, შეიძლება მოულოდნელად დაკიდოთ ერთ ინსტრუქციაზე ათობით ან ასობით საათის ციკლის განმავლობაში. ამ დროის განმავლობაში, კომპიუტერზე სხვა არაფერი შეიძლება მოხდეს. ტექნიკურად, ეს შეიძლება გარკვეულწილად შემსუბუქდეს ორი დამოუკიდებელი ბირთვით. თუმცა, არაფერი აჩერებს ორივეს ერთი და იგივე საქმის კეთებაში, პოტენციურად ერთდროულად. ასე რომ, მრავალბირთვიანი მარშრუტით წასვლა ამას არ ასწორებს.

კლასიკური RISC მილსადენი

RISC ნიშნავს შემცირებული ინსტრუქციის ნაკრები კომპიუტერს. ეს არის პროცესორის დიზაინის სტილი, რომელიც ოპტიმიზებს შესრულებას თითოეული ინსტრუქციის გაშიფვრის გზით. ეს არის შედარებით CISC ან კომპლექსური ინსტრუქციების ნაკრები კომპიუტერთან, რომელიც აყალიბებს უფრო რთულ ინსტრუქციების კომპლექტს, რაც საშუალებას აძლევს ნაკლები ინსტრუქციების საჭიროებას იგივე ამოცანების შესასრულებლად.

კლასიკური RISC დიზაინი მოიცავს ინსტრუქციის მილსადენს. ინსტრუქციის ხუთი ეტაპიდან რომელიმე მოცემულ ციკლში გაშვების ნაცვლად, მილსადენი იძლევა ხუთივე ეტაპის შესრულების საშუალებას. რა თქმა უნდა, თქვენ არ შეგიძლიათ ერთი ინსტრუქციის ხუთივე ეტაპის გაშვება ციკლში. მაგრამ თქვენ შეგიძლიათ ხუთი ზედიზედ ინსტრუქციების რიგში დააყენოთ თითო ეტაპის ოფსეტურით. ამ გზით, ახალი ინსტრუქციის დასრულება შესაძლებელია ყოველი საათის ციკლში. პოტენციური მუშაობის 5-ჯერ გაზრდის შეთავაზება ძირითადი სირთულის შედარებით დაბალი ზრდისთვის.

სკალარული მილსადენის პროცესორში, ინსტრუქციების შესრულების თითოეული ეტაპი შეიძლება შესრულდეს საათის ციკლში ერთხელ. ეს იძლევა ერთი დასრულებული ინსტრუქციის მაქსიმალურ გამტარუნარიანობას ციკლზე.

პროცესორები, რომლებსაც არ აქვთ მილსადენი, შეიძლება მხოლოდ სუბსკალარული იყოს, რადგან მათ არ შეუძლიათ ერთი სრული ინსტრუქციის შესრულება ციკლში. ამ პირველადი ხუთსაფეხურიანი მილსადენით, შეგიძლიათ შექმნათ სკალარული პროცესორი, რომელსაც შეუძლია შეავსოს ინსტრუქცია ყველა პროცესისთვის. კიდევ უფრო შორს მიმავალი მილსადენების შექმნით, შეგიძლიათ შექმნათ სუპერსკალარული პროცესორები, რომლებსაც შეუძლიათ ერთზე მეტი ინსტრუქციის შესრულება საათის ციკლზე. რა თქმა უნდა, ჯერ კიდევ არსებობს პოტენციური პრობლემები.

ჯერ კიდევ თანმიმდევრული

არცერთი მათგანი არ წყვეტს პასუხს მრავალი ციკლის მოლოდინის საკითხს, როდესაც საჭიროა ქეშის და ოპერატიული მეხსიერების სხვადასხვა დონის მოთხოვნა. ის ასევე აჩენს ახალ პრობლემას. რა მოხდება, თუ ერთი ინსტრუქცია ეყრდნობა წინა ინსტრუქციის გამომავალს? ეს პრობლემები დამოუკიდებლად წყდება მოწინავე დისპეჩერით. ის საგულდაგულოდ გეგმავს შესრულების თანმიმდევრობას ისე, რომ არცერთი ინსტრუქცია, რომელიც ეყრდნობა სხვის გამომავალს, არ იყოს ერთმანეთთან ძალიან ახლოს. ის ასევე ამუშავებს ქეშის გამოტოვებას ინსტრუქციის გაჩერებით და მილსადენის სხვა ინსტრუქციებით ჩანაცვლებით ინსტრუქციები, რომლებიც მზადაა გასაშვებად და არ საჭიროებს მის შედეგს, განაახლებს ინსტრუქციას, როცა ის იქნება მზადაა.

ამ გადაწყვეტილებებს შეუძლია იმუშაოს უსადენო პროცესორებზე, მაგრამ ისინი საჭიროა სუპერსკალარული პროცესორისთვის, რომელიც ერთ საათზე ერთზე მეტ ინსტრუქციას ასრულებს. ფილიალის პროგნოზირება ასევე ძალიან სასარგებლოა, რადგან მას შეუძლია შეეცადოს წინასწარ განსაზღვროს ინსტრუქციის შედეგი ერთზე მეტი პოტენციური შედეგით და განაგრძოს ვარაუდი, რომ ის სწორია, თუ სხვა რამ არ არის დადასტურებული.

დასკვნა

მილსადენი საშუალებას აძლევს პროცესორის ყველა მკაფიო შესაძლებლობის გამოყენებას ყველა ციკლში. ის ამას აკეთებს სხვადასხვა ინსტრუქციების სხვადასხვა ეტაპის ერთდროულად გაშვებით. ეს კი არ მატებს დიდ სირთულეს CPU-ს დიზაინს. ის ასევე გზას უხსნის ერთზე მეტ ინსტრუქციას, შეასრულოს ერთი ეტაპი ციკლში.