tgoop.com/hpcnerds/24
Last Update:
BLAS
به سختی میشه مسئله ای در محاسبات علمی نام برد که نیازی به محاسبات ماتریسی نداشته باشه. چون این عملیات ها زیربنای بقیه محاسبات هستن، حتی کوچکترین بهبود در سرعت عملکرد اون ها میتونه برای خیلی از بیزینس ها ارزش زیادی به همراه داشته باشه. سال ۱۹۷۹ یک پیاده سازی از عملیات های اساسی جبرخطی به نام BLAS برای زبان فرترن منتشر شد:
🔴 BLAS :: Basic Linear Algebra Subprograms
https://www.netlib.org/blas/
این پیاده سازی بعد از یه مدت به یه استاندارد محبوب تبدیل شد و خیلی ها سعی کردن سریع ترین پیاده سازی ممکن از این استاندارد رو توسعه بدن، رقابتی که امروز هم در جریانه. چندتا از پیاده سازی های معروف BLAS برای CPU اینا هستن:
🔴 OpenBLAS
https://github.com/OpenMathLib/OpenBLAS
🔴 Intel MKL
https://github.com/oneapi-src/oneMKL
🔴 Eigen
http://eigen.tuxfamily.org/
🔴 ATLAS
https://github.com/math-atlas/math-atlas
و برای GPU هم معروف ترین پیاده سازی cuBLAS هست که توسط Nvidia ارائه شده.
🔴 cuBLAS
https://docs.nvidia.com/cuda/cublas/
چون پیاده سازی کارآمد این استاندارد کار راحتی نیست، اغلب ابزار هایی که با محاسبات ماتریسی سر و کار دارن از همین کتابخونه ها استفاده میکنن. مثلا کتابخانه Numpy رو وقتی نصب میکنید ، روی سیستم شما دنبال یک پیاده سازی از BLAS می گرده و از همون استفاده میکنه. به عنوان نمونه، روی سیستم من Numpy داره از OpenBlas و PyTorch داره از MKL استفاده میکنه.
اما استاندارد BLAS دقیقا چطوریه؟
تو این استاندارد، عملیات های پایه ماتریسی به سه گروه تقسیم بندی میشن:
🟢 BLAS Level 1
عملیات هایی که روی دو بردار انجام میشن. مثلا جمع دوتا بردار
🟢 BLAS Level 2
عملیات هایی که روی یک بردار و یک ماتریس انجام میشه مثل ضرب یک ماتریس در یک بردار
🟢 BLAS Level 3
عملیات هایی که روی دوتا ماتریس انجام میشه مثل ضرب کردنشون
یک نکته که شاید واستون جالب باشه اینه که با هدف بدست آوردن بیشترین سرعت ممکن، معمولا عملیات های هر سطح از نو پیاده سازی میشن و اینطور نیست که مثلا در پیاده سازی عملیات های سطح ۳ بیایم از عملیات های سطح ۲ استفاده کنیم! یکی از موضوعات داغ ریسرچ در این زمینه تولید خودکار کد کارآمد این عملیات ها برای هر سخت افزار و حتی برای اندازه های خاصی از ماتریس ها هست.
بنظرم تلاش برای پیاده سازی این روتین ها و مقایسه با پیاده سازی های موجود یکی از بهترین روش ها برای تمرین HPC هست. این پیاده سازی ها در طول سال ها بهبود پیدا کرده و با خوندن سورس کد اون ها میشه ریزه کاری هایی از محاسبات عددی و HPC رو یاد گرفت که در هیچ کتاب یا کورسی پیدا نمیشه.
@hpcnerds
BY HPC Nerds | High Performance and Scientific Computing
Share with your friend now:
tgoop.com/hpcnerds/24
