ورود به حساب کاربری

نام کاربری *
رمز عبور *
یاداوری

HPC Code Optimization

خدمات بهبود کدهای نرم افزاری نوشته شده در حوزه HPC

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

  • ارسال مستندات و کدهای نوشته شده توسط فرد متقاضی در قالب فرم درخواست بهینه سازی کد به همراه ذکر مشکل
  • بررسی اولیه مستندات توسط کارشناسان شرکت و تخمین مدت زمان مورد نیاز برای اصلاح و بهینه سازی کد در قالب نفر-ساعت
  • محاسبه هزینه نفر ساعت بر مبنای جدول زیر و پرداخت 50 درصد از هزینه توسط متقاضی
  • تخصیص کارشناس متخصص در شرکت به درخواست متقاضی
  • شروع فرآیند بهینه سازی و اصلاح کد توسط کارشناس مربوطه
  • اصلاح نهایی کد نوشته شده در حد امکان و تهیه گزارش مکتوب از اصلاحات مورد نیاز یا اصلاحات انجام شده و میزان بهبود زمانی و حافظه ای بدست آمده(در صورت درخواست)
  • تسویه حساب
  • ارسال کد اصلاح شده و گزارش نهایی برای متقاضی
زبان برنامه نویسی/ابزار هزینه کارشناسی نفر-ساعت(ریال) هزینه تهیه گزارش(ریال)
Python 300,000 1,000,000
++C/C 500,000 1,000,000
Java 500,000 1,000,000
Fortran 500,000 1,000,000
MATLAB 400,000 1,000,000
Mathematica 400,000 1,000,000
(Spark(Scala 800,000 1,000,000
(Spark(Python 700,000 1,000,000

بهبود کد به فرآیندی اتلاق می شود که در آن بدون تغییر در کارکرد عملیاتی یک کد نوشته شده، عملکرد آن از بعد زمان اجرا، میزان اشغال منابع، تکنیکهای برنامه نویسی و ... بهبود یابد.

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

اولین قدم در بهبود کد، انتخاب الگوریتم مناسب و کارا است. معیار درجه پیچیدگی Big-O برای دسته بندی کارایی الگوریتمها از بعد زمان اجرا یا میزان فضای مورد نیاز به کار می رود. به عنوان مثال الگوریتم مرتب سازی QuickSort دارای درجه پیچیدگی (O(nlogn است و در همه حالات از الگوریتم SelectionSort با درجه پیچیدگی (O(n2 کاراتر است.

بهینه سازی کد

بهینه سازی در سطح کد به برنامه نویس کمک می کند که گلوگاه ها و تنگناهای کد نوشته شده را تشخیص داده و برطرف نماید. علاوه بر این در زمانی که کد نوشته شده در یک محیط موازی و توزیع شده در حال اجرا باشد گلوگاه های تبادل پیام و ارتباطات را شناسایی نماید. حلقه های تکرار یکی مرسوم ترین گلوگاه های برنامه ها هستند. به نمونه کد زیر دقت نمایید
 این حلقه شامل 1 عمل انتساب، 4 مقایسه، 4 عمل افزایش، سه انشعاب و یک انشعاب غلط است. حلقه ها ممکن است وابستگی های بیشتری از قبیل داده و حافظه موقت هم داتشه باشند این در حالی است که پردازنده ها این قایلیت دارند که حلقه های را بازکرده و برای افزایش موازای سازی بسط داده و اجرا نمایند.
کامپایلر GNU از gprof برای پروفایلینگ استفاده می کند و Intel از Intel Vtune Amplifier XE استفاده می کند. ابزارهای مختلف دیگری برای پروفایلینگ وجود دارد که از آن جمله به موارد زیر می توان اشاره کرد:
valgrind utility یکی از مرسوم ترین پروفایلر های متن باز است، TotalView یک پروفایلر برنامه های موازی است. MATLAB از profile و mpiprofile برای پروفایل کردن برنامه های سریال و موازی استفاده می کند.

بهینه سازی کامپایل

پارامتر –O(level> یا سایر پارامترهای خط فرمان در کامپایلر که برای تنظیم کردن میزان بهبود در خروجی برنامه های استفاده می شوند، سطوح مختلفی بهینه سازی را در کامپایلر در اختیار قرار می دهند. مستندات مربوط به GNU، Intel، PGI و سایر کامپایلرهایی که در محیط HPC استفاده می شوند توضیحاتی درباره این پارامترها دارند.

به عنوان مثال در کامپایلر Intel پارامتر –O2 سطحی از بهینه سازی را در زمان کامپایل فراهم می کند که 2 نشان دهنده میزان خاصی از موازی سازی است. راهنمای بهینه سازی (Profile Guided Optimization) در کامپایلر Intel برای شناسایی هات اسپات هایی است که می تواند باعث افت کارایی شود، به این عمل profiling گویند.

بهبود سطح کارایی یا کاهش حجم کد برنامه فرایندی است که باید در زمان کامپایل انجام شود و این موضوع یکی از قدرتهای کامپایلر محسوب می شود.
نکته ای که باید به آن توجه کرد این است که کامپایلر نمی تواند الگوریتم SelectionSort را با QuickSort جایگزین کند.

موازی سازی

انواع روشهای موازی به شرح زیر می باشند:

  • Bit Level Parallelism

با توسعه تکنولوژی VLSI اندازه کلمه در پزدازنده ها افزایش پیدا کرده و توانایی بالاتری در ارتقاء کارایی از خود نشان داده اند. برای مثال پردازنده های 32 بیتی می توانند دو عدد 32 بیتی را با سرعت بیشتری نسبت به پردازنده 16 بیتی با هم جمع کنند، چرا که یک پردازنده 16 بیتی برای جمع دو عدد 32 بیتی می بایست آن را به دو بخش بالایی و پایینی تقسیم کند که این امر موجب ایجاد سربار محاسباتی می شود.

 

  • Instruction Level Parallelism

در این روش کامپایلر سعی می کند دستوراتی را که می توانند با یکدیگر اجرا شوند و وابستگی داده ای به یکدیگر ندارند در یک Cycle یا Clock اجرا نماید. این دستورات باید حداقل وابستگی را به یکدیگر داشته باشند. تکنیک های مرسوم در این روش موازی سازی به قرار زیر هستند:

             1- (Explicitly Parallel Instruction Computing (EPIC

در این روش در یک Cycle بین دو تا 16 دسترالعمل قابل اجرا است که هر چه تعداد دستورات غیروابسته به هم کمتر باشد درصد بالاتری از موازی سازی را ایجاد می کند.

             2- Out of Order Execution/Register Renaming

در این روش امکان اجرای دستورات بیشتری در یک Cycle وجود دارد که با تغییر نام ثبات ها می توان به این حالت دست یافت.

             3- Speculative Execution

اجرای تمام یا بخشی از دستورات صرف نظر از اینکه زمان اجرای آن فرا رسیده است یا خیر.

             4- Vectorization

این یکی از حالات خاص از مدل (SIMD (Simple Instruction Multiple Data اقای Flynn است که در آن یک دستور می تواند روی چندین داده به صورت همزمان کار کند. چیپ ست های x86 دارای معماری مجموعه دستورالعمل های (SSE (Streaming SIMD Extension هستند. برداری سازی به صورت خودکار پس از انتخاب پارامتر مناسب زمان کامپایل توسط کامپایلر انجام می شود.

 

  • Threading/Multi-threading

در این مدل نخ های اجرایی ایجاد می شود که به صورت همزمان اجرا می شوند.

رایانش سریعتر یا Accelerated Computing

در این روش از سخت افزارهای همه منظوره GPU استفاده می شود که از برخی روشهای نرم افزاری بهتر عمل می کند. Intel Xeon Phi و (GPUs(CUDA دو سخت افزار مشهور در این مدل محاسباتی هستند که توانسته اند انقلابی عظیم در دنیای HPC ایجاد کنند و در تقابل با CPU قرار بگیرند. NVIDIA GPUs برای حل مسائل از مدل Single Instruction Multiple Thread استفاده می کند و در در مقابل Xeon Phi قرار دارد که برای برنامه نویسانی که با روشهای کدنویسی همچونPthread, OpenMP, MPI, CUDA  آشنا هستند کمتر شناخته شده است. همه مسائل مناسب اجرا روی Accelerator ها نمی باشند و معمولا مسائلی که دارای تعداد زیاد محاسبه با داده های کم هستند را می توان بر این بستر اجرا کرد.

روشهای بهینه سازی

اغلب روشهایی که در اینجا ذکر می شوند توسط کامپایلرها مورد توجه قرار می گیرند اما به دلیل عدم توسط افراد به مفاهیم پایه و تخصصی کد نویسی آنها را رعایت نمی کنند و باعث ایجاد گلوگاه در کد می شوند.
این روشها عبارتند از:
12. Induction Variable Elimination
13. Loop Fission/Distribution
14. Loop Fusion/Combining
15. Prefetching
16. Memory Bank Optimization
17. If Optimization
18. Register Allocation
19. Instruction Scheduling
20. Data Alignment and Padding
21. Structure of Arrays Over Array of Structures
22. Loop Invariant Branches
23. Operations with Power of 2
  1. Dead code Elimination or Dead Code Stripping
  2. Common Sub-Expression Elimination
  3. Loop-Invariant Code Motion or Hoisting of invariant from loops
  4. Loop Unwinding or Unrolling
  5. Jump Removal/Branch Elimination
  6. Constant Folding
  7. Inlining
  8. Trace Scheduling
  9. Arithmetic Simplification
  10. Tail call optimization
  11. Iteration order reversal or Loop Termination

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

 

سایت مرتبط : " بنیاد توسعه رایانش سریع و ابری "

 

 

آخرین مقالات

کامپایل و نصب mfix-2016.1

درک عملکرد دستگاه های انرژی، محیط زیست و فرایندها...

ماشین هوشمند بدون کمک انس...

یک ماشین هوشمند با حل معمای مکعب روبیک بدون هیچ آم...

معرفی lammps

اصطلاح شناسی شبیه ساز: فراهم کننده ی بستری برای شب...

آموزش نرم افزار amber (زب...

در اینجا تعدادی از آموزش های آماده شده توسط توسعه...

HPC Moves to the Cloud –...

While some domains that rely on computing systems...

یکسان سازی یا نرمال سازی...

در متن کاوی منظور از پردازش زبان طبیعی (NLP)، قابل...

پردازش متن با Jhazm نسخه...

jHazm نسخه جاوایی هضم از کتابخانه پایتون برای پردا...

Why Demand for In-Memory...

The demand for in-memory computing (IMC) and new...

آموزش عملی گراف کاوی و تح...

networkx یک بسته پایتون برای ایجاد، دستکاری و مطا...

معرفی مختصر مدل اقلیمی CW...

CWRF نسخه توسعه یافته اقلیمی مدل WRF می باشد که د...

بالاخره بعد از سالها یکه...

از سال 2013، ماشین های چینی در رتبه قدرتمندترین اب...

کاربردها و خطرات کلان داد...

داده شامل اطلاعات است؛ اما این همه‌ي ماجرا نیست....

Case Study: Supercomputin...

Hyperion Research has published a new case study...

داده کاوی بزرگ مقرون به ص...

چکیده : کاوش داده ی بزرگ، اغلب نیازمند منابع محاس...

Python: Unlocking the Pow...

The programming language Python is being used to...

Opportunities Abound: HPC...

The is the first entry in a five-part insideHPC s...

آموزش کد محاسباتی سیستا (...

در این آموزش سعی داریم انرژی کل و طول پیوند مولکو...

درمورد مدل‌های آب و هوایی...

دو اصطلاح اقلیم‌شناسی و هوا‌شناسی بیشتر مواقع به‌ج...

الگوریتم تجزیه بندرز خودک...

در نسخه‌ی ۱۲٫۷ نرم‌افزار CPLEX رویه‌ی جدیدی جایگز...

نرم افزار tecplot

معرفی : Tecplot در واقع یک ابزار تجسمی و رسم نمودا...

تجزیه گر یا پارسر متون و...

آپاچی تیکا: آپاچی تیکا یکی از پروژه‌های متن باز A...

OpenFOAM v5 User Guide: I...

This guide accompanies the release of version 5.0...

OpenFOAM User Guide - Ver...

Introduction The OpenFOAM User Guide provides an...

How to Prepare Weather an...

In this video from the NVIDIA GPU Technology Conf...

مثالی از داده کاوی و تحلی...

در این پست یک تحلیل و بصری سازی خوب از گراف ۶۰،۰۰...

نرم افزار سیپلکس

معرفی : Cpelx یک بسته ی نرم افزاری شامل مجموعه ای...

تلاش AMD برای ساخت تراشه‌...

ریسک‌های کمی در دنیای فناوری به بزرگی خرج میلیارده...

معرفی، آموزش و لینک دانلو...

معرفی : ابزاری به منظور آنالیز فنی و طراحی کامپیوت...

Neurala Reduces Training...

Today Neurala announced a breakthrough update to...

با 10 باور نادرست در ارتب...

برای آنکه اطمینان حاصل کنید برنامه‌های سازمان شما...

گالری تصاویر