درک Refactoring در نرم افزار مهندسی مکانیک

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

برچسب های رایج در برنامه های مهندسی

قبل از استفاده از استراتژی های بازسازی، لازم است که مشخص کنیم که کدام عملکرد از کجا رنج می برد، نرم افزار مهندسی مکانیک اغلب تنگناهای متمایزی را نشان می دهد:

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

یک جلسه پروفایل کامل با استفاده از ابزارهایی مانند Valgrind، Perf یا VTune نشان می دهد که کدام تنگناها بیشترین تاثیر را دارند. Refactoring باید ابتدا این مناطق را برای به حداکثر رساندن بازگشت به تلاش هدف قرار دهد.

استراتژی های بازسازی ضروری برای عملکرد

۱- بهینه سازی ساختارهای داده برای الگوهای دسترسی

انتخاب ساختار داده مناسب یکی از بالاترین نرخ های بازسازی (برای عناصر محدود، ذخیره سازی گره در جداول هش یا لیست های تبلیغاتی فشرده شده می تواند نگاه ها را از بسته های خطی به بلوک های دسترسی نزدیک کاهش دهد: پایگاه های داده های ملک مواد را از key-value ذخیره [F[۳]1 در لیست های حافظه سریع تر از طریق یک الگوی دسترسی به طور منظم (اگر آن را به طور منظم استفاده کنید، اگر داده های اتصال داده های معمولی).

۲- تنظیم کد برای نقاط مختلف عملکرد Hot Spots

Monolithic codebases مبهم است که در آن زمان صرف می شود. [۱] بازسازی به ماژول های کوچکتر و به خوبی تعریف شده - مانند یک ماژول اختصاصی حل، ماژول پیش پردازنده و ماژول پس از پردازنده - اجازه می دهد تا توسعه دهندگان برای بهینه سازی هر به طور مثال، مبادله کننده می تواند با استفاده از روال BLAS بدون لمس GUI تنظیم شده بازنویسی مجدد بازنویسی شود. [۳]

۳- معرفی Caching برای حذف Redundant Work

نرم افزار مهندسی اغلب محاسبات یکسان را در سراسر طراحی تکرار می کند. پیاده سازی یک حافظه داخلی برای نتایج واسطه - مانند سفتی، وزنه های بین قطبی یا جداول مالکیت مایع پایتون - می تواند زمان ذخیره سازی را به طور چشمگیری کاهش دهد (FLT:0l East-recent-recent-use (LRU) با روش های حافظه مناسب برای اجرای سیستم های ذخیره سازی مواد، به طور مشابه استفاده از روش های عامل پردازش داده های ذخیره سازی مواد، به عنوان مثال، به عنوان مثال، استفاده از روش های ذخیره سازی مواد، به طور معمول استفاده از روش های ذخیره سازی مواد، استفاده می شود.

۴- الگوریتم های بازسازی برای پیچیدگی بهتر

گاهی اوقات الگوریتم اصلی برای سادگی انتخاب شد، نه عملکرد. جایگزینی یک حل کننده ساده لوحانه O(n2) با یک روش O(n log n) آنترمی تواند بهبودهای منظم زمین را به جای تجزیه و تحلیل فضای مکانیکی ایجاد کند - این ممکن است به معنای تغییر از حذف مستقیم Gausian به یک روش گرادیان برای سیستم های کمپلکس، یا جایگزینی پرس و جو با تجزیه و تحلیل سریع با یک الگوریتم هش کوچک است.

۵- تنظیم بارهای کاری مستقل

CPU های مدرن دارای چندین هسته هستند، اما بسیاری از برنامه های مهندسی تنها خوانده می شوند. refactoring برای معرفی موازیism می تواند سرعت های عظیمی را باز کند.

  • موازین داده - تقسیم عناصر مش در سراسر موضوعات و جمع آوری کمک های عنصر در حال حاضر.
  • موازین (FLT:1) - اجرای شبیه سازی مستقل (به عنوان مثال، موارد بار مختلف) به صورت موازی.

از OpenMP برای موازین مبتنی بر دستورالعمل در C / C ++ یا ماژول در پایتون استفاده کنید، برای شتاب GPU، حلقه های بازسازی را به هسته هایی با استفاده از CUDA یا SYCL، با حالت قابل تغییر مشترک احتیاط کنید؛ ترجیح دهید thread-local Storage یا عملیات اتمی برای جلوگیری از تنظیم موازی در طول زمان مشخص شده].

بهینه سازی I/O و دسترسی به پایگاه داده

نرم افزار مهندسی اغلب فایل های مدل بزرگ را می خواند، نتایج شبیه سازی می نویسد یا پایگاه های داده های مواد را بررسی می کند. Refactoring I/O می تواند زمان دیوار را به طور قابل توجهی کاهش دهد.

  • خواندن / نوشتن [FLT 1] - جایگزین کردن تقسیم بندی شخصیت با صفحه بلوک I / O.
  • سریال سازی آزمایشی - تبدیل فرمت های فایل مبتنی بر متن (به عنوان مثال، گام، IGES) به نمایندگی های دودویی برای بارگیری سریع تر.
  • بارگذاری برش ( - بارگذاری ضعیف از داده های غیر ضروری تا زمانی که در واقع مورد نیاز است.
  • بهینه سازی پرس و جو پایگاه داده - اضافه کردن شاخص ها، وارد کردن دسته، و جلوگیری از مشکلات N+1 پرس و جو در هنگام خواص مواد گوشتی و یا داده های تست.

برای برنامه هایی که آرشیو های شبیه سازی بزرگ را مدیریت می کنند، بازسازی لایه دسترسی داده ها برای استفاده از استخر اتصال و بیانیه های آماده می تواند سود های ثابتی را به دست آورد.

بهترین روش ها برای بازسازی موثر

پروفایل قبل و بعد

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

یک Test Suite جامع را حفظ کنید

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

Refactor Incremently

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

فرضیات سند و اخراج های تجاری

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

اندازه گیری بهبود عملکرد

اندازه گیری سود برای توجیه سرمایه گذاری های بازسازی ضروری است.ایجاد یک پایه با اجرای کد اصلی در مورد کار نماینده - به عنوان مثال، حل یک مدل 100k-element FEA یا ارائه یک مونتاژ پیچیده CAD پس از بازسازی، اجرای همان کار در تنظیمات سخت افزاری یکسان.

  • زمان وال-ساعت برای تکمیل شبیه سازی
  • استفاده از حافظه
  • نرخ فریم یا واکنش در طول عملیات تعاملی
  • مقیاس پذیری با افزایش اندازه مدل

این نتایج را به صورت داخلی برای ایجاد پشتیبانی از ابزارهای بیشتر مانند ] Google Benchmark ] (برای ++C) یا ]pytest-nchmark (برای پایتون) خودکار سازی تشخیص عملکرد برگشت.

نتیجه گیری

بازسازی یک فعالیت یک بار نیست، بلکه یک نظم و انضباط مداوم است که نرم افزار مهندسی مکانیک را به عنوان الزامات تکامل می دهد.با بهینه سازی ساختار داده ها، کد مدولار، نتایج برش، بهبود الگوریتم ها، موازی کردن کار، و ساده سازی I / O، تیم های توسعه می توانند شبیه سازی های سریع تر، رابط های پاسخگو تر، و در نهایت نتایج مهندسی بهتر ارائه شده در اینجا یک نقشه راه حل کلیدی طراحی شده است، و سازگار با عملکرد بالا، به جای تمرکز متمرکز شدن با تمرکز بر روی تنظیمات بالا، و تمرکز بر روی تنظیمات تمرکز تمرکز بر روی مناطق تمرکز، به جای استفاده از طریق تنظیمات بالا، به جای استفاده از طریق تنظیمات بالا، به جای استفاده از طریق تنظیمات تمرکز، به جای تمرکز، به جای استفاده از طریق تنظیمات بالا، تیم های تمرکز دقیق، به جای استفاده از طریق تنظیمات تمرکز، به جای استفاده از طریق تنظیمات تمرکز، به جای استفاده از طریق تنظیمات تمرکز، به جای استفاده از طریق تنظیمات بالا، تیم های تمرکز، تیم های تمرکز، می شود.