تاثیر الگوریتم برنامه نویسی در تعیین قدرت سخت افزار رندر

abizaki

Member
سلام
الگوریتم برنامه نویسی (منظور همون شیوه ی برنامه نویسی هست) که در نرم افزار های 3ds max و مایا و ... + الگوریتم موتور های رندر، تاثیر مستقیم در تعیین زمان رندر و قدرت سخت افزار داره. به طوری که هرچی مهندسین ریاضی و مهندسین کامپیوتر طراح این نرم افزار ها قوی تر باشن، کار بهتر در میاد. همون طور که می دونین گرافیک مجموعه ای از اشکال هندسی رو در بر داره که این اشکال با هم جمع می شن و شکل نهایی رو به ما میدن. حالا شما ببینین که چه پارامتر هایی در تعیین سرعت رندر دخیل هستن. این مهندسا باید تعداد بسیار بسیار زیادی فرمول رو در بیارن که بتونه همه ی این پارامتر ها رو ساپورت کنه. حالا شما فرض کنین که اگه یه جای این فرمول یه ×2 اشتباه داشته باشه. در نتیجه زمان رندر بسیار بالا میره. من خودم سیستمم Q8300 با 4 گیگ رم DDR3 هستش و برنامه نویس هم هستم. در یک جا کد های نوشته شده توسط مایکروسافت برای ماشین حسابی شبیه ویندوز رو دیدم (تو سورس کد آماده ی آموزشی زبان Visual J# 2005.Net). به همه چیز میموند الا به کد یک ماشین حساب!! گفتم پس استاندارد های زیادی تو برنامه نویسی هست. چند وقت بعدش ماشین حساب ویندوز رو باز کردم. تا آخرین جایی که میشد عدد وارد کردم و سنگین ترین محاسبات رو (مثلا 999999999999999999 به توان 999999999999999999) باهاش انجام دادم. دیدم بعد از انجام حدود 20 یا 30 محاسب با حاصل محاسبات قبلی، بین جواب قبلی و بعد فاصله ی زمانی حدود یک یا دو ثانیه افتاد. همین طور بیشتر و بیشتر می شد. حساب کنین نرم افزاری به این سادگی که کدش به حد بسیار دقیق و پیشرفته نوشته شده بود، فاصله ی بین یک حساب کردنش به 1 یا بیشتر ثانیه رسیده بود. چه برسه به محاسبات سنگین گرافیکی که در اونجا با وجود دقیق و استاندارد بودن کد ها و دقیق بودن فرمول های ریاضی، بازم سیستم ها کم میارن. حالا فکرشو بکین یه مهندس ریاضی موقع نتیجه ی حساب خودش برای بدست آوردن فرمول خوابش ببره. چه هزینه های سنگینی که به بار نمیاد.
حالا من یه سوال دارم. کسی از فرمول هایی که استفاده میشه اطلاعی داره یا نه؟

اجرتون با آقا امیر المومنین (علیه السلام)
 

the_king

مدیرکل انجمن
بحث بهینه سازی و افزایش کارایی خیلی پیچیده تر از صرفا انتخاب کردن یک فرمول دقیق و ساده است،
مثلا فرمول مرسوم فاکتوریل در ظاهر خیلی ساده است، اما برای محاسبه کردن فاکتوریل اعداد بزرگ فوق العاده
کنده. در حالی که فرمول تخمینی استرلینگ فاکتوریل رو خیلی سریعتر (و البته تخمینی) محاسبه می کنه.
گاهی اوقات یک فرمول دقیق و کند رو با یک فرمول تخمینی و غیر دقیق اما سریعتر تعویض می کنند.

بهینه سازی کد ها خیلی حساس و تخصصی است، فرضا نادیده گرفتن اشیاء ای که توسط یک شیء بزرگتر
پوشانده شده اند سرعت رندر کردن رو بالا می بره.

از اون مهمتر اینه که اغلب سیستم هایی که برای رندر کردن بکار گرفته می شوند یک پردازنده چند هسته ای دارند،
حتما باید فرمول مورد استفاده رو بشه به چند بخش مجزا تقسیم کرد که روی هسته های متفاوت و بصورت
همزمان اجرا شوند، وگرنه بجز یک هسته پردازنده بقیه بیکار می مانند. روال همه فرمول ها رو نمیشه با اجرای موازی
و همزمان تقسیم کرد، گاهی اوقات یک فرمول سریع رو با یک فرمول کند تر تعویض می کنند، صرفا به این خاطر
که فرمول قبلی توانایی پیاده سازی چند بخشی رو نداره.

فرمول به کنار، نحوه پیاده سازی و تبدیل فرمول به کد اجرایی هم کار سختی یه، همه پردازنده های مدرن چه در مورد
CPU و چه در کارت گرافیکی یکسری توابع آماده و شتابدهنده سخت افزاری دارند که هم سرعت اجرا رو بالا می برند
و هم از اتلاف وقت CPU برای انجام دادن تکراری جلوگیری می کنند. پیاده سازی کد به زبان ماشین باید
طوری صورت بگیره که از این توانایی های سخت افزاری حداکثر استفاده بشه، حتی اگه به قیمت تغییر دادن و
پیچیده شدن بخشی از کد صورت بگیره. دقیقا به همین دلیله که هسته همه نرم افزار های رندرینگ رو با زبان هایی
مثل C یا ++C یا Assembly می سازند. اگر همچین کد هایی رو با زبان های تحت Net. یا Java پیاده سازی کنند
سرعت اجراشون افتضاح می شه.
 

abizaki

Member
درسته. نکته ی جدیدی بود که تا حالا نشنیده بودم. اگه اجازه بدین یه تاپیک جدید در همین مورد تو انجمن برنامه نویسی درست می کنم تا سر این مورد یه خرده بحث بشه.
لینک
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا