Skip to main content

Intel SPMD Program Compiler



        Intel SPMD Program Compiler, შემოკლებით ISPC, არის C-ს სტილის SPMD(ერთი პროგრამა მრავალი მონაცემი) პროგრამირების ენა, რომელიც პარალელური გამოთვლების მარტივად ჩატარების კარგ საშუალებას იძლევა. ISPC ახდენს თქვენს მიერ მიცემული კოდის გაპარალელებას პროცესორის ბირთვებში არსებულ SIMD(ერთი ინსტრუქცია მრავალი მონაცემი) გამომთვლელებზე და 3-ჯერ ან უფრო მეტჯერ ახდენს გამოთვლების აჩქარებას.
        ISPC ძალიან ამარტივებს პარალელური გამოთვლების კეთების პროცესს და შესაბამისად ზრდის პროდუქტიულობას. ის არა მხოლოდ ინტერპრეტატორია კოდის არამედ შეიცავს რიგ კოდის ოპტიმიზატორებს რათა მაქსიმალურად გაზარდოს პროგრამის ეფექტურობა. თუმცა დოკუმენტაციის თანახმად დიდი ყურადღება უნდა მიექცეს მონაცემებზე წვდომას, რათა მივიღოთ ადვილად და მეტად ეფექტურად გაპარალელებადი პროგრამული კოდი. მონაცემების შეგროვება/გაბნევა(gather/scatter) პროგრამაში ართულებს მის გაპარალელებას რაც ამცირებს ეფექტურობას. მონაცემებზე წვდომა მკვეთრად მოქმედებს წარმადობაზე, რადგან პირდაპირ არის დამოკიდებული პროცესორის კეშის მოქმედების ეფექტურობაზე. ამისთვის Intel-ის დეველოპერები გვირჩევენ რომ სადაც არის საშუალება თავი ავარიდოთ AoS-ის ტიპის ჩანაწერებს და სანაცვლოდ გამოვიყენოთ SoA და ISPC თავადვე გვაძლევს მონაცემების ტრანსფორმაციის საშუალებას. ამ ყველაფრის გაუთვალისწინებლობის შემთხვევაში კომპილატორი გაფრთხილებთ წარმადობის დაკარგვის შესახებ.
        ISPC არ ახდენს კოდის გაპარალელებას პროცესორის ბირთვებზე, ის მხოლოდ ბირთვზე არსებული SIMD გამომთვლელებთან მუშაობს, ამიტომ ბირთვებზე გაპარალელება მთლიანად დეველოპერის ხელშია. მოვიყვანოთ მარტივი მაგალითი:

export void rgb_2_gray( uniform float rgb_buffer_soa_in[],
                                      uniform int w,
                                      uniform int h,
                                      uniform float gray_buffer_soa_out[] ) {
        uniform int pixelCount = w*h;
        uniform float* rgb[3] = { rgb_buffer_soa_in, rgb_buffer_soa_in + pixelCount, rgb_buffer_soa_in + pixelCount*2 };
        uniform float weight[3] = { 0.2126, 0.7152, 0.0722 };

        foreach (index = 0 ... pixelCount) {
                gray_buffer_soa_out[index] = rgb[0][index]*weight[0] + rgb[1][index]*weight[1] + rgb[2][index]*weight[2];
        }
}

          მოცემული კოდი ახდენს rgb გამოსახულების გარგაქმნას შავთეთრ  გამოსახულებაში. შემავალი და გამომავალი მონაცემები მეტი ეფექტურობისთვის მოწესრიგებულია SoA სახით. 128 ბიტიანი SSE რეგისტრების შემთხვევაში 4 float-ზე ერთდროულად მოხდება გამოთვლა რაც დაახლოებით 4x-მდე ააჩქარებს კოდს. 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 განსხვავებულ ფერს.

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

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