Skip to main content

Posts

Showing posts from January, 2015

მოდულის გამოთვლა განშტოებების გარეშე

branchless abs function         მოდულის გამოთვლის ფუნქცია არის ერთ-ერთი ყველაზე ხშირად გამოყენებადი ფუნქცია სხვადასხვა ტიპის გამოთვლების დროს, შესაბამისად ისეთი აპლიკაციებისთვის, რომელთათვისაც წარმადობა ძალიან მნიშვნელოვანია, მნიშვნელოვანია ასევე ამ ფუნქციის ოპტიმალური გადაწყვეტა. ფუნქციის ყველაზე მარტივი იმპლიმენტაცია ასე გამოიყურება : int abs ( int value ) {         if ( value < 0 )                   return - value ;         return value ; }          პროგრამულ კოდში დამატებითი განშტოებები გარკვეული ტიპის გამომთვლელი მოწყობილობებისათვის, მაგალითად GPU-სთვის, მკვეთრად ართულებს გამოთვლით პროცესს და საბოლოოდ ამცირებს წარმადობას. float -ის შემთხვევაში ჩვენ ვიცით, რომ ყველაზე მაღალი ბიტი გამოყოფილია ნიშნის შესანახად და მისი ცვლილება მოდულის ცვლილებას არ იწვევს, შესაბამისად რიცხვის მოდულის დასათვლელად საკმარისია ყველაზე მაღალ ბიტში დადებითი ნიშნის დაფიქსირება, რაც მოგვცემს სასურველ შედეგს. ამოცანა რთულდება int ტიპის ცვლადების შემთხვევაში, როდესაც ნიშნის შესანახად ცალ

ამოზნექილობის მეპი

Displacement Map მარცხნიდან მარჯვნივ: საბაზისო გეომეტრია, ტესელაციით მიღებული მოდელი ხილული საბაზისო ბადით და მის გარეშე და ტესელირებული ზედაპირის ამოზნექვით მიღებული საბოლოო მოდელი.         დღევანდელ თამაშებში და განსაკუთრებით კი ფილმებში ხშირად ხდება ძალიან მაღალი დეტალიზაციის მოდელების გამოყენება, რაც მკვეთრად ზრდის გარემოს რეალიზმს. მაღალი დეტალიზაციის დისკრეტული გეომეტრიული მოდელები, დეტალიზაციის გაზრდას ახდენენ პრიმიტივების რაოდენობის ზრდით რაც საბოლოო ჯამში საჭირო მეხსიერებაზე წრფივად აისახება. პრიმიტივების რაოდენობის ზრდა ასევე იწვევს ამაჩქარებელი სტრუქტურის, ხის ზრდას, რაც საბოლოოდ სხივების მიდევნების პროცესზეც აისახება ლოგარითმულად. თუმცა არსებობს შემთხვევები, რომლის დროსაც დეტალიზაციის გაზრდა შესაძლოა მოხდეს სხვა გზით ისე, რომ თავიდან ავიცილოთ პრიმიტივების რაოდენობის ზრდა. ხშირად საჭიროა რაიმე საბაზისო ზედაპირზე მიკრო(ან მაკრო) დეტალიზაციის დატანა, რის დროსაც გეომეტრიული მოდელის საერთი ტოპოლოგია არ იცვლება. სწორედ ამ მიზანს ემსახურება არსებული საბაზო გეომეტრიის დეტალი

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

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