Memory hierarchy

This is an old revision of this page, as edited by 62.168.162.39 (talk) at 21:16, 5 May 2006. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

The hierarchical arrangement of storage in current computer architectures is called the memory hierarchy. It is designed to take advantage of memory locality in computer programs. Each level of the hierarchy is of higher speed and lower latency, and is of smaller size, than lower levels.

Most modern CPUs are so fast that for most program workloads the locality of reference of memory accesses, and the efficiency of the caching and memory transfer between different levels of the hierarchy, is the practical limitation on processing speed. As a result, the CPU spends much of its time idling, waiting for memory I/O to complete.

The memory hierarchy in most computers is as follows:

  • Processor registers – fastest possible access (usually 1 CPU cycle), only hundreds of bytes in size
  • Level 1 (L1) cache – often accessed in just a few cycles, usually tens of kilobytes
  • Level 2 (L2) cache – higher latency than L1 by 2× to 10×, often 512KB or more
  • Level 3 (L3) cache – (optional) higher latency than L2, often multiple MB's
  • Main memory (DRAM) – may take hundreds of cycles, but can be multiple gigabytes
  • Disk storage – hundreds of thousands of cycles latency, but very large

Management

Modern programming languages mainly assume two levels of memory, main memory and disk storage, though directly accessing registers is allowable in rare cases. Programmers are responsible for moving data between disk and memory through file I/O. Hardware is in charge of moving data between memory and caches. Compilers are trying to optimize the usage of caches and registers.

See also

(Made by Aexander Janiashvili) მიკროპროცესორები დღეს - და განვითარების პრიორიტეტები!

შესავალი

დღეისათვის ადამიანის ცხოვრებაში დიდ როლს თამაშობს კომპიუტერი, ანუ ელექტრო გამომთვლელი მანქანა. ე.გ.მ სულ უფრო დიდ გამოყენებას პოულობს ადამიანის საქმიანობაში: სამეცნიერო-ტექნიკური გამოთვლები, რომელთაც საფუძვლად უდევს მათემატიკური მეთოდები; ტექნიკური პროცექტების დაგეგმარების ავტომატიზაცია; ეკონომიურ-სტატისტიკური ანალიზი. ასევე აღსანიშნავია კომპიუტერის მოხმარების ახალი კონცეპცია - „ციფრული სახლი“, რომელიც მოიცავს მართვის მრავალ ავტომატიზირებულ-ცენტრალიზებულ ფუნქციას: დაცვით სისტემებს, სატელევიზიო მაუწყებლობას, კონდიცირების კონტროლს და სხვა მრავალ ფუნქციას. ე.გ.მ-მა თავისი ევოლუციის მანძილზე დიდი ცვლილებები განიცადა, კერძოდ, 50იან წლებში ისინი აგებული იყვნენ ელექტრულ ლამფებზე ანუ ელექტრულ-ვაკუუმურ ტრიოდებზე. 60იან წლებში შეიქმნა ე.გ.მ-ები სადაც ლამფების ნაცვლად ტრანზისტორები გამოიყენებოდა, რის შედეგად შემცირდა კომპიუტერის გაბარიტები და შეიქმნა მინი-ე.გ.მ-ები. შეიქმნა მცირე და საშუალო დონის ინტეგრაციის მიკროსქემები (იმს). ის წარმოადგენს ერთიან კრისტალს, რომელიც შედგება ათასობით ტრანზისტორისაგან, დიოდისაგან, წინაღობასგან, კონდენსატორისა და სხვა. ასევე შეიქმნა დიდი ინტეგრალური მიკროსქემა (დის), რომელიც ზომით ძალიან პატარაა (მაგ. 802მმ 100-200 მლნ. ტრანზისტორი), მასში თავმოყრილია დიდი მათემატიკურ-პროგრამული ფუნქციების შესაძლებლობები. ამ დის-ს წარმოადგენს მიკროპროცესორი. როგორც ყველასათვის ცნობილია მიკროპროცესორი (ხშირად უწოდებენ - პროცესორს, ან CPU – Central Processing Unit) წარმოადგენს კომპიუტერის მთავარ ნაწილს. ის არის პროგრამულად მართვადი მოწყობილობა, რომელშიც ხდება ციფრული ინფორმაციის დამუშავება და ამ პროცესის მართვა. პროგრამა წარმოადგენს ბრძანებათა ერთობლიობას, რომელიც ინახება მეხსიერებაში (ძირითადად ინახება პროცესორის კრისტალში ინტეგრირებულ მეხსიერებაში, რომელსაც ხშირად კეშ-მეხსიერებას (Cache Memory) უწოდებენ). CPU შიფრავს ამ ბრძანებებს და ასრულებს. ასევე პროგრამა შეიცავს მონაცემებს, რომლებზეც სრულდება გამოთვლები. 2000 წელს კომპანია IBM-მა წარმოადგინა პირველი ორბირთვიანი (ორკრისტალიანი) პროცესორი POWER4, რომელიც მუშაობდა Apple Macintosh G4 სისტემებში. ორბირთვიანი წარმოადგენს ერთ პლატაზე (ე.წ. პაკეტზე) არსებულ ორ ფიზიკურ პროცესორს, ანუ ორ დის-ს, რომლებიც ერთმანეთთან არიან შეკავშირებული მაღალი სიჩქარის მქონე სალტეებით. ასევე ორბირთვიანი მიკროპროცესორები შეიქმნა უფრო გავრცელებული ე.წ. IBM-თავსებადი (x86-ის არქიტექტურის) კომპიუტერული სისტემებისათვისაც. ამავე სისტემებს მიეკუთვნებიან ცნობილი მარკის პროცესორები Intel: Celeron, Pentium II, III, 4, M; AMD: Opteron, Athlon და სხვა. სანამ განვიხილავდეთ ორბირთვიანი პროცესორების თვისებებს და მათი შეფასების კრიტერიუმებს, გავეცნოთ ძირითადი ელემენტების მუშაობის პრინციპებს.

CPU-ს ძირითადი შემადგენელი ნაწილები ________________________________


• FPU (Floating Point Unit) – არის მათემატიკური თანაპროცესორი. ის მუშაობს მცურავი წერტილის პრინციპზე (IEEE-754 Floating-Point Conversion სტანდარტი). ამ უკანასკნელის გამოყენება რამდენიმეჯერ ასწრაფებს მათემატიკურ გამოთვლებს, რომელთაც მოეთხოვებათ არა სიზუსტე, არამედ სისწრაფე. Floating Point-ის მოვალეობაა რიცხვებზე ოპერირება - მოხდეს რიცხვების გადაყვანა ერთი თვლის სისტემიდან მეორეში. მისი გამოთვლების მაგალითი შეგიძლიათ იხილოთ ელ-მისამართზე http://babbage.cs.qc.edu/courses/cs341/IEEE-754.html . აღნიშნულ მათემატიკურ თანაპროცესორს აქვს დამატებითი ე.წ. გაფართოვებები MMX, SSE, SSE2, SSE3, 3Dnow! და სხვა. მაგ. MMX შეიცავს 57 (FPU-თვის დამატებით ფუნქციონალურ) ბრძანებას (ოპერერაბდას) და რვა 64-ბიტიან რეგისტრს. საქმე იმაშია რომ MMX იყენებს FPU-ს რეგისტრებს, ანუ FPU-გან განუყოფელია, რაც პროცესორის არქიტექტურას არ ართულებს. რა თქმა უნდა მათემატიკური თანაპროცესორი კონვეერიზებულია, ანუ მასში ხდება დამუშავების რამდენიმე ეტაპი (ხშირად მეტი კონვეერი აქვს ვიდრე ალმ-ს). მაგალითად: AMD64 K8 თაობის პროცესორების FPU არის 17 კონვეერიანი. Intel Pentium 4 Willamatte-ს FPU არის 20 ეტაპიანი. მარტივად რომ ვთქვათ FPU (და მისი გაფართოვებები) რამოდენიმეჯერ ასწრაფებს მაგალითად ხმის და გამოსახულების დამუშავებას, რაც მულტიმედიისათვისაა აუცილებელი.

• ALU - არითმეტიკურ ლოგიკური მთვლელი (ალმ), არის მიკროპროცესორის ძირითადი გამომთვლელი. ალმ-ს აქვს ერთი გამომტანი პორტი და რამოდენიმე შემთანი პორტი (დამოკიდებულია CPU-ს არქიტექტურაზე). ის ასრულებს არითმეტიკულ (0+1+0..) და ლოგიკურ გამოთვლებს (და, არა, ან...). როგორც ჩანს დიაგრამაზე ALU-ს ზედა პორტიდან ხდება ინსტრუქციების ნაკადების და მონაცემების ნაკადების შესვლა ხოლო ქვედა პორტიდან კი შედეგების ნაკადების გამოსვლა. იმისათვის რომ უფრო ღრმად ჩავწვდეთ ზემოთ თქმულს განვიხილოთ შემდეგი მაგალითი.



მაგალითიდან ნათლად ჩანს, რომ თეთრი უჯრებში არის მონაცემების ნაკადები რომლებიც შეიცავენ სხვადასხვა რიცხვებს ამ ნაკადებს უწოდებენ ოპერანდებს (ობიექტები რომლებზეც სრულდება ოპერაცია) ხოლო შავი უჯრა არის ინსტრუქციის (ბრძანების) ნაკადი ეგრეთ წოდებული ოპერატორი. ოპერატორებია (+, -, /, >, <, და ა.შ.). შესაბამისად ნაცრისფერი კუბიკი არის მიღებული შედეგი. ეს შედეგი შეიძლება იყოს პიქსელის მდებარეობის კორდინატები რომლებიც ქმნიან რენდერის სცენას თამაშში, ან თუნდაც ექსელში ფორმულის მიცემის შედეგად მიღებული რიცხვი. ხშირად მიკროპროცესორებს განკარგულებაში სამი ალმ გააჩნიათ.

• აკუმულატორი - არის რეგისტრი რომელშიც დროებით ინახება არითმეტიკულ-ლოგიკური რეზულტატები. მაშინ როცა ALU გამოთვლას ატარებს ვთქვათ I "სიტყვაზე" (32 ბიტიანი), ხოლო ამ დროს II "სიტყვა" აკუმულატორში "ელოდება" მოქმედებას. რეგისტრის გარეშე (როგორიცაა აკუმულატორი) დროებით შესანახი სიტყვა გაეგზავნებოდა უფრო ნელ ოპერატიულ მეხსიერებას, რითაც მთელი პროცესორის წარმადობა დაეცემოდა. 2. ბრძანებათა მთვლელი - აკონტროლებს ყველა ბრძანებას (და მიმდევრობას) რომელიც მიმართულია შიგასალტედან დამუშავებაზე. 3. მეხსიერების მისამართის რეგისტრი - ის უთითებს მეხსიერების (კეშში) იმ უჯრედს რომელიც პროცესორმა უნდა გამოიყენოს - ამ რეგისტრიდან გამომავალი შინა არის -სამისამართი შინა! 4. ბრძანებების რეგისტრი - ამის დანიშნულებაა ის რომ მიმდინარე შესასრულებელი ბრძანება შეინახოს. 5. მდგომარეობის რეგისტრი - ეს რეგისტრი იმისთვისაა რო პროგრამის შესრულების დროს შემოწმებები ჩაატაროს და შედეგები შეინახოს (ერთერთი ყველაზე რთული აგებულების რეგისტრი). 6. ALU-ს საბუFერო რეგისტრი - ესეც დამმახსოვრებელი მოწყობილობის როლს ასრულებს (ინახავს მარტო ერთ სიტყვას 32/64bit). 7. თანამედრივე პროცებში არის ასევე ზოგადი დანიშნულების რეგისტრები, რომლებიც იმეორებენ ერთ-ერთი სხვა რეგ-ის ფუნქციას! რეგ-ები მორჩა :D!

-ასევე პროცში არის მართვის სქემები, რომლებიც მართავენ (ზნაჩიტ ბრძანებათა/მონაცემთა მიმდევრობითობას აკონტროლებენ) რეგისტრების მთელ "მეურნეობაში". -და ბოლოს -მონაცემთა შ/სალტე. ის აკავშირებს ALU, FPU-ს და რეგ-ებს ერთმანეთთან მართვის სქემებიდან ბრძანების მიღების მერე. გავაიასნებ - ზუსტად ამ შიდა სალტეზეა საუბარი როცა იძახიან "პროცესორი 2.4გჰც-ზე მუშაობს"ო!!!