موتور فیزیک (physics engine) یک برنامه کامپیوتری است که یک شبیه سازی تقریبی از یک سیستم فیزیکی ساده و مشخص ارائه میدهد. مانند مکانیک حرکتی جسم صلب ، مکانیک سیال ها و .. که در گرافیک کامپیوتری ، یازی های رایانه ای و فیلم و .. استفاده می شود. البته استفاده ی اصلی به بازی های رایانه ای تعلق دارد (نوعا به عنوان میان افزار) که در آن شبیه سازی ها به صورت زمان واقعی یا real-time است. این واژه بعضی مواقع بیشتر صورت عمومی برای توصیف هر سیستم نرم افزاری برای شبیه سازی پدیده های فیزیکی مانند شبیه سازی های علمی با عملکرد بالا به کار میرود.

در حالت کلی دو کلاس از موتور های فیزیک وجود دارد: موتور های زمان واقعی یا ریل تایم و موتور های بسیار دقیق (high-precision) . موتور های بسیار دقیق نیازمند قدرت پردازش بالاتری برای انجام محاسبات بسیار دقیق فیزیکی هستند و بیشتر در فعالیت های علمی و فیلم های انیمیشن کامپیوتری استفاده می شوند. موتور های ریل تایم نیز که در بازی های رایانه ای و دیگر فرم های محاسبات تعاملی استفاده میشوند محاسبات ساده تر و دقت کمتری برای انجام محاسبات و پاسخ در زمان مناسب در بازی های کامپیوتری را اجرا می کنند.

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

PPU – Physics Processing Unit

یک واحد پردازش فیزیک (PPU) اکثر پردازشات فیزیکی را به جای CPU  انجام میدهد. درست مانند ایکنه یک واحد پردازش گرافیک (GPU)  اکثر محاسبات گرافیکی را به جای CPU  انجام میدهد و بار پردازش آن را سبک میکند. یک نمونه از واحد پردازش فیزیکی ، PPU PhysX از شرکت Ageia میباشد که بیشتر در شتاب دادن سیستم های ذره ای موثر است...

General Purpose processing on Graphics Processing Unit (GPGPU)

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

Stream processing

GPU ها مخصوصا برای گرافیک طراحی شده اند و بنابراین در موضوع عملیات ها و برنامه ریزی بسیار محدود کننده هستند. به دلیل طبیعتشان ، GPU ها فقط در حل مشکلاتی که با استفاده از پردازش استریم (stream)  قابل حل هستند، موثر اند. GPU ها فقط میتوانند راس ها و ذرات مستقل را پردازش کنند؛ ولی توانایی پردازش موازی تعداد بسیاری از آنها را دارند. این موقعی بسیار موثر است که برنامه نویس بخواهد رئوس و فرگمنت های زیادی را به یک صورت پردازش کند. در این زمان ، GPU ها پردازنده های استریم هستند – پردازنده هایی که میتوانند به صورت موازی با کارکرد یک هسته بر تعداد زیادی رکورد در یک جریان همزمان فعالیت کنند. یک جریان (استریم) به صورت ساده مجموعه از رکورد های نیازمند به محاسبات مشابه است.جریان ها ارائه کننده ی موازات اطلاعات هستند. هسته ها (Kernel) تابع هایی (وظایفی) هستند که به هر عنصر در جریان اعمال میشوند. در GPU ها راس ها و ذرات ، عناصر در جریان هستند و سایه زن های راس ها و ذرات ، هسته های هستند که بر آنها اعمال میشوند. از آن جایی که GPU ها ذرات را مستقل پردازش می کنند، راهی برای داشتن اطلاعات به اشتراک گذاشته شده و استاتیک وجود ندارد. برای هر عنصر فقط میتوانیم آن را از ورودی بخوانیم ، عملیات مورد نظر را روی آن انجام دهیم و آن را در خروجی بنویسیم.امکان داشتن ورودی و خروجی چندگانه وجود دارد ولی نه یک بخش از حافظه که هم قابل خواندن و هم قابل نوشتن باشد...

حجم محاسبات به صورت تعداد عملیات ها بر هر کلمه انتقال یافته از حافظه تعیین می شود. برای اپلیکیشن های GPGPU مهم است که حجم پردازش بالایی داشته باشند وگرنه تاخیر دسترسی حافظه از سرعت محاسبات میکاهد...

در آینده بیشتر در باره ی Stream processing  و اصطلاحات مربوط آشنا میشویم ...