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

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

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

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

دانلود Siemens Star CCM+...

نرم افزار Star CCM یک ابزار شبیه سازی قدرتمند است...

ورود بیگ دیتا به صنعت دار...

تکنولوژی در حال ورود به صنعت داروسازی است و پیش‌بی...

چهارمین جلسه meetup: اصلا...

مهاجمان اغلب با استفاده از اشتباهات کدنویسی کوچک و...

مدیریت خصوصیات صف در کلاس...

 لیست زیر ,ویژگی های صف را نمایش می دهد : acl_grou...

AMD از رویکرد طراحی تازه‌...

AMD چند روز پیش به‌صورت رسمی از رویکرد طراحی جدیدی...

دومین جلسه meet up:مقدمه...

فهرست : توضیح مختصر از توسعه ی کلودسیم نصب کلودسیم...

نرم افزار Multiwfn

Multiwfn نرم افزاری قدرتمند برای آنالیز تابع موج ا...

بزرگترین استارتاپ‌های چین...

هوش مصنوعی و صنایع رباتیک یکی از پرطرفدارترین حوزه...

نرم افزار ترسیم ساختار سط...

نرم افزار Molekel نرم افزاری برای ترسیم ساختار و س...

اتحاد Cloudflare با شرکت‌...

استارتاپ کلادفلیر با ایجاد اتحاد جدیدی با شرکت‌های...

A Guide to High Performan...

In the world of HPC, on-premises infrastructure i...

نرم افزار مدل سازی مولکول...

نرم افزار جی‌مول (Jmol) نرم‌افزاری متن‌باز و نوشته...

۱۰ نرم افزار پرکاربرد رشت...

مهندسی شیمی (به انگلیسی: Chemical engineering) شاخ...

راه اندازی و نصب کسندرا ب...

در این مقاله به راه اندازی و نصب کسندرا بر روی چن...

HPC Cloud Drives Innovati...

High performance computing is about solving the w...

معرفی DataStax پلتفرمی بر...

معرفی: شرکت دیتا استکس، یک فروشنده نرم افزار های...

معرفی و لینک دانلود نرم ا...

ChemDoodle برنامه ای مخصوص برای طراحی ساختار های ش...

هفت مورد از بهترین نرم اف...

3D modeling software are powerful tools that help...

فناوری بلاک‌ چین: راهی من...

کاربردهای بلاک‌چین محدود به بیت‌کوین نمی‌شود. انقل...

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

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

کمپانی Nvidia معماری جدید...

Your browser does not support the video tag. کمپا...

آموزش سیستا-چگونه یک فایل...

شبه پتانسیل مورد نظر خود را برای کد سیستا با استف...

شبیه سازی مولکولی بر روی...

شبیه سازی مولکولی بر روی GPU1 تکنیک استفاده از واح...

چرا یادگیری زبان اسکالا و...

تقریبا اکثر قریب به اتفاق برنامه‌نویسان به این حقی...

شیمی محاسباتی، مکانیک مول...

شیمی محاسباتی شاخه‌ای از دانش شیمی است که از روش‌ه...

Watch "Jakub Kurzak...

یکی از کتابخانه های پرکاربرد در نرم افزارهای محاسب...

Video: Large Scale Traini...

In this video from PASC18, Jakub Tomczak from the...

راهنمای برنامه نویسی در M...

This publication is part of a developer guide focu...

روش های تشخیص زبان در متن

تشخیص زبان یک متن، یکی از اولین گام ها به سوی متن...

گالری تصاویر