Jump to content

Memory Bandwidth


OpTiMeR

Recommended Posts

Memory Bandwidth - არის ის გამომთვლელი, რომელიც ახასიათებს ინფორმაციის წაკითხვის სისწრაფეს მეხსიერების ნახევარგამტარიდან (მაგალითისთვის RAM(random access memory)-დან). დადგენილია მისი ერთეული და ის არის 1 ბაიტი/წამში...

აღსანიშნავია, რომ არცერთ სისტემას არ გააჩნია ერთნაირი მუდმივი სისწრაფე. მაგალითისთვის ისევ RAM ავიღოთ. მას არ შეუძლია სხვა და სხვა ინფორმაციის ერთი სისწრაფით წაკითხვა, რაც ბევრ რამეზეა განპირობებული. პროდუქტზე წარმოდგენილი სისწრაფე (bandwidth) არის მისი მაქსიმუმი, რომელსაც ვერ გადააბიჯებს, ეს კი არ ნიშნავს იმას რომ მუდმივად ასეთი ეფექტური იქნება. არსებობს სხვა და სხვა კრიტერიუმები, რომლითაც შესაძლებელია მათი წარმადობა გამოვთვალოთ. ამის შემდეგ შესაძლებელია პროდუქციის კლასიფიკაცია. ბუნებრივია რაც მაღალია რიცხვი მით უფრო მაღალი სისწრაფის იქნება მოწყობილობა. მაგალითისთვის ამ შემთხვევაში Nvidia-ს ვიდეო ბარათები ავიღოთ. GTX 970-ს memory bandwidth არის 224GB/s, ხოლო 980Ti-ს 336.5GB/s, შესაბამისად 112 გეგაბაიტი/წამით უფრო სწრაფია. 

არსებობს სამი განსხვავებული კონვენცია, რითაც შეგვიძლია გამოვთვალოთ რა მოცულობის ინფორმაციის რა სისწრაფით გადაცემა შეუძლია მოწყობილობას:

1. Bcopy კონვენცია: მარტივი გამომთვლელი ხერხი, რომელიც ანგარიშობს რა სისწრაფით გადაადგილდა კონკრეტული ინფორმაცია მეხსიერების ბლოკიდან სხვა ბლოკში კონკრეტულ დროის შუალედში (მაგ: 10გბ/წამში; 32გბ/2წამში და ა.შ). ანუ თუ ჩვენ მეხსიერების ერთი ბლოკიდან გადავიტანთ 1 მილიონი ბაიტის მოცულობის ინფორმაციას 1 წამში, სისწრაფე იქნება 1მილიონი-ბაიტი/წამში. 1 მილიონი ბაიტი დაახლოებით 0.96 გეგაბაიტია. ძალიან გამოსადეგი კონვენციაა, მაგრამ პრობლემა მაშინ იჩენს თავს, როდესაც საქმე 2 წაკითხვისა და 1 ჩაწერის სისწრაფესთან გვაქვს საქმე.

2. STREAM კონვენცია: ხერხი, რომელიც ინფორმაციის წაკითხვისა და წერის დროს ერთ დროულად ანგარიშობს და არა თანმიმდევრულად. მაგალითად, როდესაც მოწყობილობა 1 მილიონ ბაიტს კითხულობს წამში და პლიუს ამას 1 მილიონ ბაიტს წერს, ნიშნავს, რომ memory bandwidth არის 2 მილიონი-ბაიტი/წამში. ყველაფერი მარტივად სჩანს და დიდი მათემატიკა აქ თავს არ იჩენს. მიუხედავად ამისა, როდესაც საქმე ეხება ოპ. მეხსიერების (RAM) სისწრაფეს, იქ ათასი ფაქტორია გასათვალისწინებელი. ის, რომ მოწყობილობა შედგება უამრავი ბანკისაგან, რომელიც ერთმანეთს არხებით (pipeline) უკავშირდება და ინფორმაცია მასში გადადის ძაბვის დახმარებით, არ მოგცემს საშუალებას ამას მარტივი უწოდო.

3. Hardware კონვენცია: აქ არც თუ ისე ადვილია რაღაცეების წარმოდგენა. კონვენციის თანახმად, წინა ხერხები კი გამოითვლის სისწრაფეებს, მაგრამ გათვალისწინებული არ იქნება სტრუქტურა (მაგ: RAM Hardware). მოწყობილობას კი შეუძლია წამში 1 მილიონი ბაიტის გადაადგილება, მაგრამ სანამ ამ ოპერაციას განახორციელებს უნდა გამოითვალოს ქეში (cache), რასაც შესაძლებელია ბანკებიც დავარქვათ. სიტყვაზე ჩვენი მეხსიერება შედგება 8 მეხსიერების ბანკისაგან, რომლის ტევადობაც არის ნახევარი მილიონი ბაიტი, ჩვენ კი გვინდა ამ 8 ბანკში მოვათავსოთ 1 მილიონი ბაიტი. შესაბამისად ტექნოლოგია სხვა არაფერია თუ არა ის მიღწევები, რომელსაც compute ჰქვია. უნიკალურია ყველა მეხსიერების მოდულის სტრუქტურა და აგებულება, არხების განლაგება თუ სიდიდე. ვიღაც იტყვის რატო ართულებს ყველაფერსო, მაგრამ დამიჯერეთ მარტივად ვერ იტყვი 1 მილიონი გაყავი შუაზე, 500 ათასი ერთ ბანკში გაუშვი 500 ათასი მეორეშიო :). რეალურად ინფორმაციის განლაგება ბანკებში სისტემის საქმეა და შესაძლოა მან 1 მილიონი 3 ნაწილად გაყოს 4-დ ან ჯერ ხუთად და შემდეგ ექვსად, მერე კიდევ ერთიდან მეორეში გადაიტანოს და ა.შ. ბენჩმარკი კი საშუალებაა ამ ოპერაციების გამოთვლის სისწრაფის გასაგებად. ასე ხარისხდება ოპ. მეხისიერებები cas latensy-სა თუ ჰერცების მიხედვით... და მხოლოდ ხსენებულებით არ არის მარკეტინგი განპირობებული...

გამტარუნარიანობის (bandwidth) გამოთვლები და ნომეკლატურა

ნომეკლატურები ტექნოლოგიების მიხედვით შეიძლება დავყოთ. მაგალითად: DDR SDRAM, DDR2 SDRAM, DDR3 SDRAM და მათი გამტარუნარიანობის შემდეგი კრიტერიუმები:

  • Base DRAM clock frequency (ამთვლელის სიხშირე)
  • Number of data transfers per clock: მაგალითად 2. როდესაც ამთვლელის სიხშირეს მისი ორმაგი სისწრაფე შეუძლია განავითაროს. 3, როდესაც სამჯერ გაიზრდება სისწრაფე, მაგრამ DDR, DDR2, DDR3 მეხსიერებებში ვხვდებით მხოლოდ რიცხვ 2-ს...
  • Memory bus (interface) width: მეხსიერების ინტერფეისის სიფართოვე (DDR, DDR2 და DDR3-ს ეს მსგავსი აქვთ და არის 64ბიტი). სწორედ ამას ხშირად ეწოდება "არხი", სადაც გაივლის ინფორმაცია, ბუნებრივია რაც ფართო იქნება სალტე მით მეტი ინფორმაციის გადატანა გახდება შესაძლებელი ერთ არხში.
  • Number of interfaces: თანამედროვე კომპიუტერებში ვხვდებით Dual-Channel არხებს, ან Triple Channel არხებს, ან Quad. ორმაგი არხის შემთხვევაში (Dual-Channel), 64 ბიტიანი ინტერფეისი ორმაგდება და სისწრაფე ორჯერ იმატებს. Dual Channel-ს შეუძლია 128 ბიტიანი სალტე წარმოქმნას, Quad-Channel-ს კი 256 ბიტიანი. ამიტომ არის, რომ ფორუმზეც ხშირად ავღნიშნავთ, ყოველთვის სჯობს შევიძინოთ სიტყვაზე 2-ცალი 4 გეგაბაიტიანი მეხსიერების მოდული და ჯამში 8 გეგაბაიტი გვქონდეს, რომლის ინტერფეისი 128 ბიტი იქნება და არა 1 ცალი (ერთ არხიანი) 8 გეგაბაიტიანი მოდული, რომელსაც 64 ბიტიანი სალტე ექნება...

ახლა მაგალითისთვის გამოვთვალოთ, თუ რატომ უწერია ინტელის პროცესორს (i7-4790K), რომ მაქსიმალური ინტერფეისი (ანუ ჩენელი) აქვს 2 (რაც ნიშნავს, რომ შეგვიძლია კარგი წარმადობა მივიღოთ მაქისმუმ 2 არხიანი ოპ. მეხსიერების გამოყენებისას (ამ შემთხვევაში Overclock უგულისყუროდ რჩება, რადგან მისი დახმარებით მეტი სისწრაფის მიღწევაც შეიძლება)) და მათი სისწრაფე შესაძლებელია იყოს 25.6გეგაბაიტი/წამში. მარტივად ახსათქმელად, ამთვლელის სიხშირეს (Base DRAM clock frequency)-ს, ამთვლელის სიხშირის სისწრაფის რაოდენობას (Number of data transfers per clock), მეხსიერების სალტის ინტერფეისს (Memory bus (interface) width) და არხს ცალ-ცალკე დავწერ...

ავიღოთ მოდული, რომელიც არის 4 გეგაბაიტიანი (არ აქვს მნიშვნელობა ამ შემთხვევაში), ხოლო მისი სიხშირეა 1600 მეგაჰერცი (სწორედ 1600 მეგაჰერცის აღქმა შეუძლია i7-4790K-ს არა-OC mode-ში)...

1) 1600 / გავყოთ ორზე (ეს "ორი" არის number of data transfer per clock). = 800
2) 800 მეგაბიტი გადავიყვანოთ ბიტში
3) 800,000,000 x გავამრავლოთ კვლავ ორზე (არ მითხრათ რაღაზე გაყავიო! მეტი სიმარტივისთვის)
4) 1,600,000,000 x გავამრავლოთ 64-ზე (bits per line) = 102,400,000,000 (102.4 მილიარდი ბიტი)
5) 102,400,000,000 x გავამრავლოთ კიდევ 2-ზე (Number of interface) = 204,800,000,000ბიტი/წამში, რომელიც ბაიტებში უნდა გადავიყვანოთ, შემდეგ მეგაბაიტში და მერე გეგა-ში...

800,000,000 clocks per second × 2 lines per clock × 64 bits per line × 2 interfaces = 204,800,000,000 (204.8 მილიარდი ბტი)
204,800,000,000 : 8=25,600,000,000 ბაიტი
25,600,000,000 : 1024=25,000,000 მეგაბაიტი
25,000,000 : 1024=24,414 გეგაბაიტი.
(ამაზე მარტივად აღარ ვიცი როგორ ავხსნა) ესეიგი ინტელის ხსენებულ პროცესორს შეუძლია მაქსიმუმ 2 არხიანი 1600 მეგაჰერციანი მეხსიერების მოდული უზრუნველყოს, ხოლო მოდულმა 24,414 გეგაბაიტი ინფორმაციის წამში გადატანა უზრუნველყოს...

ab1c55cb312c.png

აღსანიშნავია, რომ double-data rate თითქმის ყველა მეხსიერების ტიპს ახასიათებს, და ერთ ინტერფეისიანი მოდულები ძალიან ძველი მოდაა. მაგრამ ისიც უნდა ავღნიშნოთ, რომ ახლა უკვე ახალ Nvidia-სა და AMD-ს ბარათებში გამოიყენება მეხსიერების ტიპები, რომლებსაც 4 და 6 - 64ბიტიანი ინტერფეისი აქვთ...

გმადლობთ ყურადღებისთვის! თემა პირადი ნაშრომია და არ ვდებ თავს, რომ შეცდომები არ მაქვს, ასე რომ იყავით ლმობიერები და თუ რაიმეს არასწორს იპოვით შევასწოროთ... @Optimer

Edited by OpTiMeR
  • Upvote 7
Link to comment
Share on other sites

  • 4 months later...

 მაგრად მაღიზიანევს როცა ხმარობენ სიტყვას "გეგაბაიტი", გიგაბაიტია ეგ! gigabyte

On September 21, 2015 at 7:12 PM, OpTiMeR said:

(ამაზე მარტივად აღარ ვიცი როგორ ავხსნა)

არ უნდა მაგდენი გამოთვლები მაგხელა რიცხვებში. რაიმეს ეფექტური სიხშირე (mhz) უნდა გაამრავლო მეხსიერების სალტის სიგანეზე (bit) და გაყო 8000-ზე მიიღებ GB/s-ებს :)

ანუ ამ შემთხვევაში 1600 x 128 / 8000 = 25.6 GB/s

რაც ინტელის საიტზეც წერია 

e49cb066c052.png

და არა შენ რაც მიიღე 24.414

  • Upvote 1
Link to comment
Share on other sites

1 hour ago, OpTiMeR said:

:nifxav:

პ.ს 8000-ზე რატო ყოფ?

a 64-bit wide DDR3 module may achieve... (Wikipedia) და 128 რატო?

128 იმიტომ რომ ერთი ოპერატიულის მოდული 64 ბიტიანია და 2 არხში 128 ბიტიანი იქნება. 8000-ზე იმიტომ რომ გადავიყვანო Mbit-ები GB-ებში. როცა mhz-ს გაამრავლებ bit-ზე მიიღებ Mbit-ებს, ხოლო GB-ებზე გადასაყვანად საჭიროა გაყო 8-ზე და გაამრავლო 1000-ზე, დიახ 1000-ზე იმიტომ რომ ინტელიც, amd-ც და ნებისმიერი ვინჩესტერ/სსდ და ა.შ. მწარმოებელი თვლის რომ 1 GB = 1000 MB მაგიტომ არის ხოლმე ვინჩესტერებს და სსდ-ებს რო 500 GB აწერია და სინამდვილეში 465.6 GB-ა და მაგიტომაც ჩემი გამოთვლით 1600 x 128 / 8000 მიიღება ზუსტად ის რიცხვი 25.6  GB/s რაც მითითებულია ინტელის საიტზე.

 

Link to comment
Share on other sites

ახლა გასაგებია :thumbsup: 

ისე, განსხვავებული რატო მივიღე, როგორც სტატიაში ეწერა ისე გავამრავლე და გამოვთვალე და :\ 

Link to comment
Share on other sites

2 hours ago, OpTiMeR said:

ისე, განსხვავებული რატო მივიღე, როგორც სტატიაში ეწერა ისე გავამრავლე და გამოვთვალე და :\ 

მაგაზე უკვე გიპასუხე ზედა პოსტში კარგად წაიკითხე :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.