احتمالا شما هم تا بحال از سرعت پایین اجرای کدهای متلب کلافه شده اید و به این فکر کرده اید که ای کاش توابع و ابزارهای ارائه شده در نرم افزار متلب برای سی ++ هم وجود داشت. نه در حد کامل ولی تا حدودی این آرزو برآورده شده است. کتابخانه محاسبات ماتریسی آرمادیلو (Armadillo) این امکان را فراهم نموده است. در این نوشته به معرفی امکانات این کتابخانه و مقایسه آن با کتابخانه های دیگر پرداخته خواهد شد.
بسم الله الرحمن الرحیم
کتابخانه آرمادیلو یک کتابخانه جبر خطی میباشد که برای آسان کردن دسترسی در عین داشتن سرعت اجرای مناسب طراحی شده است که بطور اجمالی به خصوصیات آن اشاره میشود. طراحی به شکلی انجام پذیرفته که شمایل برنامه نویسی با استفاده از آن نزدیک و مشابه با نرم افزار متلب باشد. این کتابخانه باعث تسهیل توسعه الگوریتمهای محاسباتی در زبان سطح میانی سی شده و انتقال الگوریتمهای طراحی شده به کاربردهای عملی تر مثل محصول نرم افزاری و سخت افزاری را راحت تر مینماید. برای مدیریت حافظه بهتر، سرعت اجرا بالاتر و پیاده سازی منعطف تر بردارها، ماتریس ها و مکعبها (تنسورهای یک، دو و سه بعدی) با انواع داده صحیح، ممیز شناور و مختلط فراهم شده است. الگوریتمهای مختلف تجزیه ماتریسی توسط تجمیع با کتابخانه LAPACK در این کتابخانه ارائه شده است. قابلیت پردازش موازی برای رسیدن به سرعت محاسباتی هرچه بیشتر با استفاده از OpenMP قابل انجام میباشد. این کتابخانه پایهای برای توسعه کتابخانههای یادگیری ماشین و پردازش سیگنال مانند MLPack و SIGPack میباشد.
این کتابخانه از آدرس زیر قابل دریافت است. توجه داشته باشید که قبل از نصب برای کسب کارایی بهتر از آرمادیلو بهتر است کتابخانه های OpenBLAS و LAPack را نیز نصب نمایید:
دانلود کتابخانه محاسبات ماتریسی آرمادیلو
برای داشتن ذهنیتی از قدرت محاسباتی این کتابخانه در مقابل کتابخانه های مشابه دیگر مانند ++IT و NEWMAT مقایسه هایی صورت گرفته است که به شکل زیر میباشد:
- جمع دو ماتریس: در جمع ماتریس ها در ابعاد بسیار کوچک مثل ماتریسهای ۴ در ۴، بیشتر از ۱۰ برابر دو کتابخانه دیگر میباشد. برای ماتریسهای با ابعاد بزرگتر مثل ۱۰۰ در ۱۰۰ این سرعت برابر سرعت NEWMAT و سه و نیم برابر ++IT میباشد.
- جمع چند ماتریس: در جمع چند ماتریس غلبه سرعت اجرای کتابخانه آرمادیلو مشهود تر می باشد. منظور از جمع چند ماتریس جمع به شکل زیر می باشد:
A = B + C + D + E;
در این حالت برای ماتریس ۴ در ۴ حداقل ده برابر و برای ماتریس ۱۰۰ در ۱۰۰ حداقل یک و نیم برابر سرعت اجرا بیشتر می باشد.
- ضرب ماتریس ها: در ضرب ماتریس ها سرعت و قابلیت این کتابخانه در مقایسه با دو مورد دیگر قابل توجه می باشد. به شکلی با ماتریس های دارای ابعاد زیر:
A: 100x80 B: 80x60 C: 60x40 D: 40x20
سرعت اجرا دو و نیم الی ۱۰ برابر بیشتر میباشد و برای ماتریس هایی با ابعاد به شکل:
A: 1000x800 B: 800x600 C: 600x400 D: 400x200
سرعت اجرا دو و نیم الی ۲۰ برابر بیشتر است.
- کار با زیر ماتریس ها: منظور از کار با زیر ماتریس ها استفاده از قسمتی از ماتریس (که خود می تواند یک ماتریس، یک سطر و یا یک ستون مشخص باشد) در محاسبات است. برای مقایسه توانایی ها کپی سطر اول ماتریس A به سطر آخر ماتریس B انجام گرفته است:
B.row(size-1) = A.row(0)
در حالت اول این کار برای ماتریس ۴ در ۴ و در حالت دوم برای ماتریس ۱۰۰ در ۱۰۰ نتایج سرعت ۱۶ الی ۴۴ برابری و ۲ الی ۴ و نیم برابری را نشان می دهند.