ترید شاهین 💸 | 🕋𝐈𝐍 𝐆𝐎𝐃 𝐖𝐄 𝐓𝐑𝐔𝐒𝐓
آموزش صفر تا 100 کریپتو 📊
❗️معرفی خفن ترین پروژه ها در بازار های مالی به صورت رایگان🐳
سیگنال فیوچرز و اسپات (هولد) رایگان🔥
با ما باشی💯 قدم جلویی رفیق🥂
𝐈𝐍𝐒𝐓𝐀𝐆𝐑𝐀𝐌 :
www.instagram.com/trade_shahin
Last updated 3 days, 1 hour ago
[ We are not the first, we try to be the best ]
Last updated 1 month, 3 weeks ago
FAST MTPROTO PROXIES FOR TELEGRAM
Ads : @IR_proxi_sale
Last updated 1 month, 1 week ago
قراره یک ورکشاپ یک روزه در مورد کاربرد های 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
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.
این تیکه کد رو ببینید، وقتی اجرا بشه 7 تا عمل ضرب انجام میده:
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/
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).
در ایران برای دسترسی به سرور های محاسبات سنگین چه گزینه هایی داریم؟
فرض کنید که یک پروژه در حوزه محاسبات سنگین توسعه دادیم و قصد داریم عملکردش رو روی یک سیستم با تعداد هسته زیاد ارزیابی کنیم و یا یک سیستم میخواهیم که محاسبه نهایی پروژمون رو روش انجام بدیم.
سوپرکامپیوتر های خارج از ایران، روال استفادشون اینطوریه که یک پروپوزال بهشون میفرستیم و در صورت موافقت برای یه مدت بهمون دسترسی میدن و منابع محاسباتی قابل توجهی دارن مثلا LUMI که مال اتحادیه اروپاست:
https://lumi-supercomputer.eu/get-started/
اما خب همونطور که حدس میزنید، اگه داخل ایران باشیم همچنین گزینه لاکچری نداریم ? خب داخل ایران چیا داریم؟ طبیعتا دانشگاه ها یک گزینه هستن، اغلب دانشگاه ها یه جایی به اسم مرکز محاسبات سریع یا یه چیزی تو همین مایه ها دارن و بعد از طی کردن ادا و اطوار بخصوصی بهمون دسترسی میدن، بعضی از اینها که خیلی ندیده و گدا هستن فقط به دانشجو های خودشون سرویس میدن و بعضی هاشون به بقیه هم با قیمت بیشتر خدمات میدن. یکسری مرکز هم هستن که کلا به صورت آزاد خدمات میدن و تخفیف دانشجویی هم دارن اغلب، با سرچ میتونید پیداشون کنید، خودم نمیگم که نگین داره تبلیغ میکنه :\ نرخ های استفاده رو ساعتی یا روزانه حساب میکنن معمولا. گاهی اوقات به یه سیستم زمانبدی که با ابزار هایی مثل slurm مدیریت میشه برای ثبت job هامون دسترسی میدن و بعضی هاشون هم کلا یک سرور مجازی با کانفیگی که نیاز داریم میدن.
مثلا در مواردی که یک سرور رو کلا در اختیارمون میذارن، بیشترین موردی که دیدم این بوده که یک سرور با 128 هسته CPU بهمون میداده. خب حالا اگه بیشتر نیاز داشتیم چطور؟ در اون صورت باید با متصل کردن هر تعداد سروری که جدا جدا میتونیم گیر بیاریم، یک کلاستر کوچیک ردیف کنیم ?. مثلا اگه از MPI استفاده می کنید، میتونید دو یا تعداد بیشتری سرور با تعداد هسته بالا رو به صورت ساعتی اجاره و اون ها رو برای MPI به هم متصل و کانفیگ کنید. اگه وقت کنم بعدا در این مورد یک ویدئو ضبط میکنم و یه مثال از انجام این کار نشون میدم. این حرکت راه حل ایده آلی نیست. برای محاسبات طولانی مدت هزینه زیادی داره و البته انتظار سرعت پایین انتقال داده بین سرور ها رو باید داشته باشیم ولی برای مواقعی که صرفا قصد اجرای یک بنچمارک داریم یا یک محاسبه برای مدت نسبتا کوتاه، میتونه بهمون کمک کنه.
زبان C++ چطور توسعه پیدا میکنه؟
هر تغییری که قراره در C++ انجام بشه باید ابتدا در استاندارد این زبان تصویب و اضافه بشه. استاندارد زبان C++ قواعد و ویژگی های این زبان رو توصیف میکنه و کلا نقش قانونگذاری داره. مثلاً میگه که باید یه ساختمان داده به نام vector با فلان مشخصات وجود داشته باشه اما پیاده سازی مواردی که توصیف شده در استاندارد نمیاد.
پس اگه ما بخواهیم یه کتابخانه به C++ اضافه کنیم باید یک پروپوزال بنویسیم که پیشنهادات ما رو خیلی دقیق توصیف کنه. مثلاً این پروپوزال که اخیرا تحت بررسی کمیته استاندارد سازی هست، موضوعش اضافه کردن یک کتابخانه برای کار با گراف ها در C++ هست
? P1709R5 | Graph Library
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p1709r5.pdf
این پروپوزال توسط 8 نفر پیشنهاد شده و چند سالی هست که تحت بررسی قرار گرفته و الان ویرایش پنجم داره نقد میشه. کمیته برای بررسی هر نوع پروپوزال یک زیر گروه مخصوص داره مثلاً پروپوزال بالا عمدتا توسط زیرگروه SG6 یا گروه مطالعاتی Numeric مورد نقد قرار میگیره. در کل پروپوزال های مربوط به محاسبات عددی میاد زیر دست اینا. کمیته استانداردسازی بسیار سخت گیره و تصویب یک پروپوزال به راحتی چندین سال طول میکشه و به عنوان نویسنده خیلی نرماله که قبل از تصویب پروپوزال بمیریم ?. در طول این مدت پیشنهاد دهندگان پروپوزال میتونن پیاده سازی های غیر رسمی هم از کتابخانه ای که مطرح کردن، منتشر کنند تا با بازخوردی که از کاربرها و کمیته استاندارد سازی میگیرن کارشون رو بهبود بدن.
نهایتا وقتی تصویب شد کمیته اعلام میکنه که مثلاً از نسخه C++26 که سال 2026 منتشر میشه ، این پروپوزال دیگه رسما جزیی از زبان C++ هست . حالا پیاده سازی وظیفه توسعه دهنده های کامپایلر C++ هست که بهترین ها در نوع خودشون هستن. مثلاً وقتی کامپایلر GCC میگه ما در نسخه بعدی تمام ویژگی های C++26 رو پشتیبانی میکنیم، شامل تمام پروپوزال هایی که برای اون نسخه تصویب شدن هم میشه. البته معمولا هر کامپایلر ممکنه قابلیت هایی اضاف بر استاندارد هم پیاده سازی کنه که در اینصورت در مستندات گفته چه مواردی خارج از استاندارده.
اگه کنجکاوید میتونید لیست اعضای کمیته استاندارد سازی رو اینجا ببینید
https://isocpp.org/wiki/faq/wg21
مشتق گیری خودکار به خاطر کاربرد هاش در deep learning و دقتی که در مقایسه با روش های تخمینی داره، الان دیگه به یک ابزار جدایی ناپذیر از محاسبات علمی تبدیل شده در نتیجه این روز ها یکی از موضوعات داغ ریسرچ توسعه سیستم های سریعتر و کارآمد تر برای انجامش هست.
از بین ایده ها و ترند هایی که در مورد این مسئله داره دنبال میشه، یه مورد جالب اینه که سعی کنیم مشتق گیری رو در زمان کامپایل انجام بدیم تا در زمان اجرا، مثل یک تابع عادی فقط مقدارش در یک نقطه خاص رو محاسبه کنیم. به جز افزایش سرعت بدیهی و کاهش نیاز به حافظه ، با اینکار میتونیم از قابلیت های code optimization کامپایلر ها هم برای بهینه کردن محاسبه مشتق استفاده کنیم.
یک پروژه که همچین ایده ای رو دنبال میکنه Enzyme هست:
https://enzyme.mit.edu/
الان در چند زبان از جمله C++ و Julia قابل استفاده است.
enzyme.mit.edu
Enzyme AD
Enzyme Automatic Differentiation Framework
فرض کنید یه پروژه با C++ توسعه دادیم که سرعت خیلی خوبی داره اما ممکنه استفاده از C++ برای اغلب کاربر های بالقوه این پروژه راحت نباشه. در مورد پروژه های محاسبات علمی که کاربر هاشون افراد آکادمیک هستن با این وضعیت زیاد مواجه میشیم.
حتما دیدید که خیلی از پروژه های معروف مثل PyTorch سورس اصلیشون با C++ توسعه پیدا کرده و البته به واسطه یه پکیج پایتون میتونیم از قابلیت اون ها استفاده کنیم.
اگه دنبال یه راه استاندارد برای همچین کاری هستید میتونید پروژه pybind رو استفاده کنید
https://pybind11.readthedocs.io/en/stable/
لازم به ذکره که PyTorch هم از همین برای ایجاد binding برای زبان پایتون استفاده کرده به جز یه سری موارد به خصوص که این پروژه کافی نبوده یا اینکه تو سرعت تاثیر منفی داشته.
@hpcnerds
ترید شاهین 💸 | 🕋𝐈𝐍 𝐆𝐎𝐃 𝐖𝐄 𝐓𝐑𝐔𝐒𝐓
آموزش صفر تا 100 کریپتو 📊
❗️معرفی خفن ترین پروژه ها در بازار های مالی به صورت رایگان🐳
سیگنال فیوچرز و اسپات (هولد) رایگان🔥
با ما باشی💯 قدم جلویی رفیق🥂
𝐈𝐍𝐒𝐓𝐀𝐆𝐑𝐀𝐌 :
www.instagram.com/trade_shahin
Last updated 3 days, 1 hour ago
[ We are not the first, we try to be the best ]
Last updated 1 month, 3 weeks ago
FAST MTPROTO PROXIES FOR TELEGRAM
Ads : @IR_proxi_sale
Last updated 1 month, 1 week ago