Skip to main content

CPU და GPU-ს შედარება



     იგივე ფასის GPU-ს თუ შევადარებთ CPU-ს FLOPS-ებით(მცოცავმძიმიან რიცხვებზე ოპერაციები წამში) ვნახავთ, რომ GPU შესაძძლოა 10-ჯერ ჯობნიდეს CPU-ს(რასაც საკმაოდ ხშირად აკეთებენ მომხმარებლისთვის თვალის ასახვევად), თუმცა განსხვავებული არქიტექტურის გამო CPU და GPU-ს შედარება FLOPS-ებით არაა გამართლებული. მათი უკეთ შედარება რომ შევძლოთ განვიხილოთ ამ პროცესორების არქიტექტურა.
        CPU-ებს აქვთ მძლავრი ბირთვები(2.0-3.0GHz და მეტი) და ასევე აქვთ ბირთვებზე SIMD რეგისტრები, რომლებიც ერთ პროცესორულ ციკლზე მრავალ მონაცემზე ერთი ინსტრუქციის შესრულების საშუალებას იძლევა. SIMD რეგისტრების სიგანე შეზღუდულია, მაგალითად თანამედროვე პროცესორებში შესაძლებელია ოპერაციები შესრულდეს 4, 8, 16 float-ზე ერთდროულად. ასევე CPU-ები გამოირჩევიან რამოდენიმე დონიანი კეშებით, რომლებიც ოპერატიული მეხსიერებიდან პროცესორის რეგისტრებში ინსტრუქციებისა და მონაცემების გადაცემას აჩქარებს. თანამედროვე პროცესორებს ასევე აქვთ ბევრი შიდა ოპტიმიზაცია(როგორიცაა მაგალითად განშტოებების ამოცნობა,) რაც ხშირ შემთხვევაში პროცესორის მუშაობას საგრძნობლად აჩქარებს.
        GPU-ებს განსხვავებით CPU-ებისაგან აქვთ დიდი რაოდენობით ნაკლებად მძლავრი ბირთვები(~1GHz), რომლებსაც თავისმხრივ შეუძლიათ უფრო განიერი SIMD ოპერაციების შესრულება. რაც საერთო ჯამში გვაძლევს ძალიან ბევრ პარალელურ გამომთვლელს, თუმცა უნდა გვახსოვდეს, რომ SIMD გამოთვლების ეფექტურობა მკვეთრადაა დამოკიდებული ერთ SIMD-ზე არსებული გამოთველის მსგავსებაზე. მათ აქვთ ბევრად უფრო მაღალი სიჩქარის კავშირი შიდა გრაფიკულ მეხსიერებასთან(~200GB/s) და არ აქვთ მრავალდონიანი კეშები. ოპერატიული მეხსიერებიდან მონაცემების მიწოდება GPU-ს შიდა გრაფიკულ მეხსიერებაში ხდება მთავარი შინის და PCI პორტის გავლით, რაც საკმაო დროს მოითხოვს. ასევე მათ CPU-ებისაგან განსხვავებით არ აქვთ შიდა სტატისტიკურ ანალიზზე დაფუძნებული შიდა ოპტიმიზაციები. ყველაფერ ამის გამო GPU-სთვის განშტოებებისაგან თავისუფალი გამოთვლები ბევრად უფრო იოლია და ეფექტური. ასევე უნდა აღინიშნოს, რომ GPU მეხსიერება ბევრად უფრო შეზღუდულია და აპლიკაციები, რომლებიც დიდ მეხსიერებას ითხოვენ და გრაფიკულ კარტაზე მეხსიერება არაა საკმარისი ახდენენ მეხსიერების ნაწილ ნაწილ გადაცემა/დამუშავებას, რაც პროცესს კიდევ უფრო ართულებს.
        რაც შეეხება პროგრამირების ხელსაწყოებს იმისათვის რომ შევძლოთ CPU ბირთვების  გამოყენება საჭიროა პროგრამა ქმნიდეს ნაკადებს სხვა შემთხვევაში თუკი პროგრამა მუშაობს ერთ ნაკადში ის მხოლოდ პროცესორის ერთ ბირთვს იყენებს. ნაკადის შესაქმნელად არსებობს სპეციალური ფუნქციები სხვადასხვა ენებში ასევე ბიბლიოთეკები OpenMP. GPU პროგრამირების ხელსაწყოებს რაც შეეხება არსებობს SPMD(ერთი პროგრამა მრავალი მონაცემი) ენები მაგალითად CUDA, OpenCL რომლებიც აბსტრაგირებას უკეთებენ არქიტექტურას რაც პროგრამირებას საგრძნობლად აადვილებს. OpenCL იძლევა საშუალებას რომ ვიმუშაოთ როგორც სხვადასხვა ტიპის GPU-ებთან ასევე CPU-თან თუმცა მაგალითად NVIDIA-ს კარტებისთვის CUDA ბევრად ეფექტურია ამიტომაც მას უფრო ხშირად იყენებენ მაქსიმალური წარმადობის მისაღწევად. რაც შეეხება CPU-ზე SIMD გამთვლებს ამისათვის არსებობს სპეციალური ფუნქციები თუმცა რამოდენიმე წელია რაც Intel-მა შექმნა ISPC რამაც ძალიან გაადვილა პროცესორთან მუშაობა. ISPC გვეხმარება SIMD პროგრამირებაში ერთი ნაკადის ფარგლებში ასე რომ თუ გვსურს CPU-ს სრული რესურსის გამოყენება უნდა შევქმნათ ნაკადები(სასურველია შეიქმნას იმდენი ნაკადი რამდენი ბირთვიც აქვს პროცესორს) მაგალითად OpenMP-ს საშუალებით და თითოეულ ნაკადში SIMD გამოთვლები მაგალითად ISPC-ს გამოყენებით. 

Comments

Popular posts from this blog

რუსული რულეტკის მეთოდი

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

ფერების RGB მოდელი

RGB Color Model         ფერების RGB მოდელი წარმოადგენს ისეთ მოდელს რომელშიც სამი ძრირითადი ფერის წითელი, მწვანე და ლურჯის საშუალებით მიიღება ფერების ფართო სპექტრი. მისი დასახელებაც მოდის სწორედ ძირითადი ფერების ინგლისური სახელწოდების ინიციალებიდან(Red, Green, Blue).         ფერთა სპექტრის ამდაგვარი წარმოდგენა დაკავშირებულია იმასთან, რომ გამოსახულების გამოტანის მოწყობილობებში რომელიც გააჩნიათ კომპიუტერებს, ტელევიზორებს ფერის მიღება ფიზიკურად ხდება სწორედ ამ სამი ძირითადი ფერის შეზავებით. დღესდღეობით ყველაზე გავრცელებული არის 24 ბიტიანი RGB მოდელი, სადაც თითოეულ კომპონენტს ეთმობა ერთი ბაიტი და შესაბამისად შეუძლია მიიღოს ნებისმიერი მნიშვნელობა [0, 255] დიაპაზონში, რაც საბოლოოდ გვაძლევს 16777216 განსხვავებულ ფერს.

CPU GPU და ჰიბრიდული რენდერერები

წყარო         დღემდე აქტუალურია თემა CPU რენდერერი ჯობია თუ GPU . იმისათვის რომ ამ კითხვას მეტნაკლებად ამომწურავი პასუხი გავცეთ განვიხილოთ რენდერერის სტრუქტურა და მოცემულ პლათფორმებზე იპმლემენტაციასთან დაკავშირებული პრობლემები. რენდერერი შედგება რამოდენიმე დიდი კომპონენტისგან როგორიცაა ხილვადობის ამოცანა შეფერადება ინტეგრატორები ფუნქციონალი ხილვადობის ამოცანა         ხილვადობის ამოცანა ერთერთი ყველაზე რთულია გამოთვლითი რესურსის კუთხით. გარდა იმისა, რომ სხივის გეომეტრიასთან თანაკვეთის დათვლას საკმაოდ დიდი დრო ჭირდება, ასევე საჭიროა ამაჩქარებელ სტრუქტურების განახლება კადრიდან კადრზე დინამიური სცენებისათვის. კარგი ისაა, რომ რენდერერის ეს ნაწილი საკმაოდ ადვილად ენკაპსულირებადია და შესაბამისად გვხვდება ბიბლიოთეკები მაგალითად embree(intel), fireRays(AMD), OptiX prime(nvidia), ... რომლებიც ამ ამოცანას საკმაოდ ეფექტურად ხსნიან და რენდერერებშიც მეტნაკლებად ადვილად ინტეგრირდებიან.  სხივების მიდევნების პროცესში ძალიან მნიშვნელოვანია მსგ...