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

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

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

სინათლის ხილული სპექტრი და სხივის თვისებები

Visible Spectrum სურათზე ნაჩვენებია პრიზმაში გამავალი თეთრი სხივის სპექტრულად გაშლის პროცესი.         სინათლე წარმოადგენს ელექტრომაგნიტურ ტალღას, რომელსაც როგორც ყველა ელექტრომაგნიტურ ტალღას გააჩნია რამოდენიმე მნიშვნელოვანი მახასიათებელი. ერთერთი მნიშვნელოვანი მახასიათებელი არის ტალღის სიგრძე, რომელიც განსაზღვრავს სხივის სპექტრულ ფერს. ელექტრომაგნიტური ტალღები ბუნებაში და თანამედროვე სამყაროში მრავლად გვხვდები. სხვადასხვა ტალთის სიგრძის(სიხშირის) ტალღებს იყენებენ როგორც საყოფაცხოვრებო(რადიო, მობილური ტელეფონი) დანიშნულების, ასევე სამედიცინო(რენდგენის სხივები) და სამხედრო(რადარები) მოწყობილობებში. ადამიანის თვალისთვის ხილული სინათლის ელექტრომაგნიტური ტალღების ტალღის სიგრძე იწყება დაახლოებით 400 ნანომეტრიდან და მთავრდება 700 ნანომეტრზე. ამ დიაპაზონს ქვემოთ ექცევა ულტრაიისფერი ტალღები და დიაპაზონს ზემოთ ექცევა ინფრაწითელი, რომელსაც ადამიანის თვალი ვერ აღიქვამს(იხილეთ ქვემოთ მოცემული სურათი). სინათლის თეთრი სხივი შედგება სხვადასხვა სიხშირის ტალღების ერთობლიობისგან.        

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

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