چند سالی میشه که Intel داره روی یک مجموعه ابزار مخصوص HPC کار میکنه به نام oneAPI . بعضی از این ابزار ها قبلا کتابخانه های مستقل بودن ولی الان تحت برند oneAPI توسعه داده میشن. چندتا از ابزار های مهمی که داخل این مجموعه هستن اینان:
🔴 DPC++
این کامپایلر مخصوص Intel برای C++ هست که برای پشتیبانی از SYCL که قبلا در موردش گفتم، توسعه پیدا کرده.
🔴 OneTBB
این همون کتابخانه TBB هست که اومده زیرمجموعه OneAPI. یکی از بهترین گزینه ها و گزینه موردعلاقه خودم برای multi-threading در C++.
🔴 OneMKL
این یکی قبلا اسمش MKL بود و یک پیاده سازی تجاری از استاندارد BLAS بود که دیگه الان به صورت رایگان در دسترس هست.
🔴 OneDNN
شامل پیاده سازی های سطح پایین و با پرفرمنس بالا از اجزائی هست که برای پیاده سازی شبکه های عصبی احتیاج داریم. دقت کنید که یک framework کامل برای deep learning نیست و بیشتر بدرد کسی میخوره که خودش بخواد یک framework برای deep learning توسعه بده. یک رقیب احتمالی برای کتابخانه cuDNN که NVIDIA توسعه میده و الان تقریبا تمام کتابخانه های deep learning برای پشتیبانی از GPU دارن ازش استفاده میکنن.
@hpcnerds
🔴 DPC++
این کامپایلر مخصوص Intel برای C++ هست که برای پشتیبانی از SYCL که قبلا در موردش گفتم، توسعه پیدا کرده.
🔴 OneTBB
این همون کتابخانه TBB هست که اومده زیرمجموعه OneAPI. یکی از بهترین گزینه ها و گزینه موردعلاقه خودم برای multi-threading در C++.
🔴 OneMKL
این یکی قبلا اسمش MKL بود و یک پیاده سازی تجاری از استاندارد BLAS بود که دیگه الان به صورت رایگان در دسترس هست.
🔴 OneDNN
شامل پیاده سازی های سطح پایین و با پرفرمنس بالا از اجزائی هست که برای پیاده سازی شبکه های عصبی احتیاج داریم. دقت کنید که یک framework کامل برای deep learning نیست و بیشتر بدرد کسی میخوره که خودش بخواد یک framework برای deep learning توسعه بده. یک رقیب احتمالی برای کتابخانه cuDNN که NVIDIA توسعه میده و الان تقریبا تمام کتابخانه های deep learning برای پشتیبانی از GPU دارن ازش استفاده میکنن.
@hpcnerds
❤3👏2
در ایران برای دسترسی به سرور های محاسبات سنگین چه گزینه هایی داریم؟
فرض کنید که یک پروژه در حوزه محاسبات سنگین توسعه دادیم و قصد داریم عملکردش رو روی یک سیستم با تعداد هسته زیاد ارزیابی کنیم و یا یک سیستم میخواهیم که محاسبه نهایی پروژمون رو روش انجام بدیم.
سوپرکامپیوتر های خارج از ایران، روال استفادشون اینطوریه که یک پروپوزال بهشون میفرستیم و در صورت موافقت برای یه مدت بهمون دسترسی میدن و منابع محاسباتی قابل توجهی دارن مثلا LUMI که مال اتحادیه اروپاست:
https://lumi-supercomputer.eu/get-started/
اما خب همونطور که حدس میزنید، اگه داخل ایران باشیم همچنین گزینه لاکچری نداریم 🙄 خب داخل ایران چیا داریم؟ طبیعتا دانشگاه ها یک گزینه هستن، اغلب دانشگاه ها یه جایی به اسم مرکز محاسبات سریع یا یه چیزی تو همین مایه ها دارن و بعد از طی کردن ادا و اطوار بخصوصی بهمون دسترسی میدن، بعضی از اینها که خیلی ندیده و گدا هستن فقط به دانشجو های خودشون سرویس میدن و بعضی هاشون به بقیه هم با قیمت بیشتر خدمات میدن. یکسری مرکز هم هستن که کلا به صورت آزاد خدمات میدن و تخفیف دانشجویی هم دارن اغلب، با سرچ میتونید پیداشون کنید، خودم نمیگم که نگین داره تبلیغ میکنه :\ نرخ های استفاده رو ساعتی یا روزانه حساب میکنن معمولا. گاهی اوقات به یه سیستم زمانبدی که با ابزار هایی مثل slurm مدیریت میشه برای ثبت job هامون دسترسی میدن و بعضی هاشون هم کلا یک سرور مجازی با کانفیگی که نیاز داریم میدن.
مثلا در مواردی که یک سرور رو کلا در اختیارمون میذارن، بیشترین موردی که دیدم این بوده که یک سرور با 128 هسته CPU بهمون میداده. خب حالا اگه بیشتر نیاز داشتیم چطور؟ در اون صورت باید با متصل کردن هر تعداد سروری که جدا جدا میتونیم گیر بیاریم، یک کلاستر کوچیک ردیف کنیم 😐. مثلا اگه از MPI استفاده می کنید، میتونید دو یا تعداد بیشتری سرور با تعداد هسته بالا رو به صورت ساعتی اجاره و اون ها رو برای MPI به هم متصل و کانفیگ کنید. اگه وقت کنم بعدا در این مورد یک ویدئو ضبط میکنم و یه مثال از انجام این کار نشون میدم. این حرکت راه حل ایده آلی نیست. برای محاسبات طولانی مدت هزینه زیادی داره و البته انتظار سرعت پایین انتقال داده بین سرور ها رو باید داشته باشیم ولی برای مواقعی که صرفا قصد اجرای یک بنچمارک داریم یا یک محاسبه برای مدت نسبتا کوتاه، میتونه بهمون کمک کنه.
@hpcnerds
فرض کنید که یک پروژه در حوزه محاسبات سنگین توسعه دادیم و قصد داریم عملکردش رو روی یک سیستم با تعداد هسته زیاد ارزیابی کنیم و یا یک سیستم میخواهیم که محاسبه نهایی پروژمون رو روش انجام بدیم.
سوپرکامپیوتر های خارج از ایران، روال استفادشون اینطوریه که یک پروپوزال بهشون میفرستیم و در صورت موافقت برای یه مدت بهمون دسترسی میدن و منابع محاسباتی قابل توجهی دارن مثلا LUMI که مال اتحادیه اروپاست:
https://lumi-supercomputer.eu/get-started/
اما خب همونطور که حدس میزنید، اگه داخل ایران باشیم همچنین گزینه لاکچری نداریم 🙄 خب داخل ایران چیا داریم؟ طبیعتا دانشگاه ها یک گزینه هستن، اغلب دانشگاه ها یه جایی به اسم مرکز محاسبات سریع یا یه چیزی تو همین مایه ها دارن و بعد از طی کردن ادا و اطوار بخصوصی بهمون دسترسی میدن، بعضی از اینها که خیلی ندیده و گدا هستن فقط به دانشجو های خودشون سرویس میدن و بعضی هاشون به بقیه هم با قیمت بیشتر خدمات میدن. یکسری مرکز هم هستن که کلا به صورت آزاد خدمات میدن و تخفیف دانشجویی هم دارن اغلب، با سرچ میتونید پیداشون کنید، خودم نمیگم که نگین داره تبلیغ میکنه :\ نرخ های استفاده رو ساعتی یا روزانه حساب میکنن معمولا. گاهی اوقات به یه سیستم زمانبدی که با ابزار هایی مثل slurm مدیریت میشه برای ثبت job هامون دسترسی میدن و بعضی هاشون هم کلا یک سرور مجازی با کانفیگی که نیاز داریم میدن.
مثلا در مواردی که یک سرور رو کلا در اختیارمون میذارن، بیشترین موردی که دیدم این بوده که یک سرور با 128 هسته CPU بهمون میداده. خب حالا اگه بیشتر نیاز داشتیم چطور؟ در اون صورت باید با متصل کردن هر تعداد سروری که جدا جدا میتونیم گیر بیاریم، یک کلاستر کوچیک ردیف کنیم 😐. مثلا اگه از MPI استفاده می کنید، میتونید دو یا تعداد بیشتری سرور با تعداد هسته بالا رو به صورت ساعتی اجاره و اون ها رو برای MPI به هم متصل و کانفیگ کنید. اگه وقت کنم بعدا در این مورد یک ویدئو ضبط میکنم و یه مثال از انجام این کار نشون میدم. این حرکت راه حل ایده آلی نیست. برای محاسبات طولانی مدت هزینه زیادی داره و البته انتظار سرعت پایین انتقال داده بین سرور ها رو باید داشته باشیم ولی برای مواقعی که صرفا قصد اجرای یک بنچمارک داریم یا یک محاسبه برای مدت نسبتا کوتاه، میتونه بهمون کمک کنه.
@hpcnerds
👍7❤4
قبلا در مورد BLAS گفتم یکی از تکنیک هایی که پیاده سازی های سریع ازش استفاده قابل توجهی کردن SIMD هست و کلا در این مدل محاسبات خیلی موثر و پراستفاده است. حقیقت اینه که به علت وابستگی زیاد به سخت افزار انجام دادنش به صورت portable میتونه پر دردسرتر از موازی سازی در سطوح بالاتر باشه به همین خاطر منابع آموزشی زیادی برای یادگرفتنش نیست. به هر حال اگر دوست دارید شیوه انجامش در C++ رو یاد بگیرید، میتونید این آموزش از Sergey Slotin رو ببینید:
https://youtu.be/vIRjSdTCIEU?si=a2oT-lYFxWPGIkOQ
#cpp #cplusplus #SIMD
@hpcnerds
https://youtu.be/vIRjSdTCIEU?si=a2oT-lYFxWPGIkOQ
#cpp #cplusplus #SIMD
@hpcnerds
YouTube
The Art of SIMD Programming by Sergey Slotin
Modern hardware is highly parallel, but not only in terms of multiprocessing. There are many other forms of parallelism that, if used correctly, can greatly boost program efficiency — and without requiring more CPU cores. One such type of parallelism actively…
❤3👍2
این تیکه کد رو ببینید، وقتی اجرا بشه 7 تا عمل ضرب انجام میده:
به صورت پیشفرض کامپایلر GCC کد بالا رو دقیقا به همین صورتی که هست کامپایل میکنه. یکی از flag های بهینه سازی کد در GCC اینه که به صورت پیشفرض غیرفعاله:
اگه کدی که گفتم رو با این فلگ کامپایل کنیم، کامپایلر کد رو به یه همچین چیزی تبدیل میکنه تا تعداد ضرب ها رو از 7 به 3 کاهش بده:
وقتی این flag فعال باشه، کامپایلر سعی میکنه با بازی کردن با ترتیب عملیات های ریاضی داخل کد، سرعت رو افزایش بده. این البته مثال چرتی بود، مثال جالب تر اینه ممکنه یه حلقه رو بر این اساس بازنویسی کنه که اجراش سریعتر بشه. از اونجایی که به خاطر خطاهای عددی، ترتیب عمل هایی مثل ضرب و جمع میتونه نتیجه محاسبات رو عوض کنه، این flag به صورت پیشفرض غیرفعال هست. در کل GCC هشت تا flag برای بهینه سازی عملیات های پایه ریاضی داره که میتونید در پروژه هایی که شامل محاسبات عددی سنگین ولی نه چندان حساس به خطا هستن، استفاده کنید
استفاده از flag زیر معادل با فعال کردن همشونه:
تو این پست میتونید بخونید که هر کدوم از اینا دقیقا چیکار میکنن:
https://kristerw.github.io/2021/10/19/fast-math/
#cpp #gcc
@hpcnerds
x = x*x*x*x*x*x*x*x;
به صورت پیشفرض کامپایلر GCC کد بالا رو دقیقا به همین صورتی که هست کامپایل میکنه. یکی از flag های بهینه سازی کد در GCC اینه که به صورت پیشفرض غیرفعاله:
-fassociative-math
اگه کدی که گفتم رو با این فلگ کامپایل کنیم، کامپایلر کد رو به یه همچین چیزی تبدیل میکنه تا تعداد ضرب ها رو از 7 به 3 کاهش بده:
x *= x;
x *= x;
x *= x;
وقتی این flag فعال باشه، کامپایلر سعی میکنه با بازی کردن با ترتیب عملیات های ریاضی داخل کد، سرعت رو افزایش بده. این البته مثال چرتی بود، مثال جالب تر اینه ممکنه یه حلقه رو بر این اساس بازنویسی کنه که اجراش سریعتر بشه. از اونجایی که به خاطر خطاهای عددی، ترتیب عمل هایی مثل ضرب و جمع میتونه نتیجه محاسبات رو عوض کنه، این flag به صورت پیشفرض غیرفعال هست. در کل GCC هشت تا flag برای بهینه سازی عملیات های پایه ریاضی داره که میتونید در پروژه هایی که شامل محاسبات عددی سنگین ولی نه چندان حساس به خطا هستن، استفاده کنید
-ffinite-math-only
-fno-signed-zeros
-fno-trapping-math
-fassociative-math
-fno-math-errno
-freciprocal-math
-funsafe-math-optimizations
-fcx-limited-range
استفاده از flag زیر معادل با فعال کردن همشونه:
-ffast-math
تو این پست میتونید بخونید که هر کدوم از اینا دقیقا چیکار میکنن:
https://kristerw.github.io/2021/10/19/fast-math/
#cpp #gcc
@hpcnerds
kristerw.github.io
Optimizations enabled by -ffast-math
This blog post describes the optimizations enabled by -ffast-math when
compiling C or C++ code with GCC 11 for x86_64 Linux (other languages/operating
systems/CPU architectures may enable slightly different optimizations).
compiling C or C++ code with GCC 11 for x86_64 Linux (other languages/operating
systems/CPU architectures may enable slightly different optimizations).
❤7👍6
قراره یک ورکشاپ یک روزه در مورد کاربرد های Julia در HPC توسط Oak Ridge National Laboratory برگزار بشه که رایگان و مجازی هست. تاریخش هم June 18
https://www.olcf.ornl.gov/calendar/julia-for-hpc-and-intro-to-julia-for-science/
ضمنا این مرکز میزبان قویترین سوپرکامپیوتر فعلی یعنی Frontier هست و توصیه میکنم رویداد هایی که در مورد HPC برگزار میکنه رو از دست ندید :) سه روز بعدش هم یک ورکشاپ دیگه برای کاربرد های Julia در محاسبات علمی برگزار میشه که واسه ثبت نام هر دو میتونید فرم بالا رو ببینید. مهلت ثبت نام هم June 11 هست.
#julia
@hpcnerds
https://www.olcf.ornl.gov/calendar/julia-for-hpc-and-intro-to-julia-for-science/
ضمنا این مرکز میزبان قویترین سوپرکامپیوتر فعلی یعنی Frontier هست و توصیه میکنم رویداد هایی که در مورد HPC برگزار میکنه رو از دست ندید :) سه روز بعدش هم یک ورکشاپ دیگه برای کاربرد های Julia در محاسبات علمی برگزار میشه که واسه ثبت نام هر دو میتونید فرم بالا رو ببینید. مهلت ثبت نام هم June 11 هست.
#julia
@hpcnerds
Oak Ridge Leadership Computing Facility
Julia for HPC and Intro to Julia for Science
The OLCF was established at Oak Ridge National Laboratory in 2004 with the mission of standing up a supercomputer 100 times more powerful than the leading systems of the day.
❤3🔥3🙏2👍1