زبان برنامهنویسی Milk سرعت پردازش روی کلاندادهها را تا ۴ برابر افزایش میدهد
مدیریت حافظه در مورد مجموعه دادهها و اطلاعات معمولی میتواند چالشبرانگیز باشد، اما ورود دادههای بزرگ به صحنه میتواند موجب کاهش بسیار زیاد سرعت شود. یک زبان برنامهنویسی جدید -که این هفته توسط دانشگاه MIT معرفی شد- حل این مشکل را هدف خود قرار داده و تاکنون به نظر میرسد توانسته است افزایش چهار برابری سرعت را روی الگوریتمهای متداول ارائه دهد.
امروزه در اکثر تراشههای کامپیوتری مدیریت حافظه بر مبنای اصل موقعیت مکانی (locality) انجام میشود؛ به این معنی که اگر برنامهای به زیرمجموعهای از دادههای ذخیرهشده در بخشی از حافظه نیاز داشته باشد، معمولا پیشبینی میشود به مجموعه دادههای مستقر در نزدیکی آن بخش نیز احتیاج خواهد داشت. اما در مورد دادههای بزرگ این روال همیشه پایدار نیست و در عوض برنامهها با تعداد اندکی از دادههایی که در سراسر مجموعههای بزرگ داده توزیع شدهاند، کار میکنند.
در تراشههای امروزی، انتقال داده از حافظه اصلی بزرگترین تنگنا در مسیر کارایی است، بنابراین دسترسی و انتقال متناوب میتواند سرعت اجرا را به میزان قابلتوجهی کاهش دهد.
Vladimir Kiriansky، دانشجوی دکتری علوم کامپیوتر و مهندسی برق در MIT گفت:
مانند این است که اگر هر بار شما بخواهید یک قاشق Cereal (غذای گیاهی، ترکیب غلات و شیر) بخورید، درب یخچال را باز کنید، ظرف شیر را باز کنید، قاشق را با شیر پر کنید، ظرف شیر را ببندید و به داخل یخچال برگردانید.
با توجه به این چالش، Kiriansky و محققان دیگر در آزمایشگاه هوش مصنوعی و علوم کامپیوتر MIT یا CSAIL ، زبان برنامهنویسی Milk را به وجود آوردهاند. زبان برنامهنویسی جدیدی که به توسعهدهندگان اپلیکیشن اجازه میدهد در برنامههایی که با دادههای پخش شده در سراسر مجموعههای بزرگ داده سروکار دارند، مدیریت حافظه کارآمدتری داشته باشند.
بهطور اساسی، زبان Milk تعدادی دستور به OpenMP اضافه میکند. OpenMP یک API برای زبانهایی مثل C و Fortran است که کار نوشتن کد برای پردازندههای چندهستهای را آسانتر میکند. با استفاده از این زبان، برنامهنویس چند خط کد را در مورد دستوراتی اضافه میکند که کارشان جستجوی آیتمهای نسبتا کمتعداد در میان مجموعه بزرگی از دادهها است. سپس کامپایلر Milk مطابق این کدها نحوه مدیریت حافظه را تشخیص میدهد.
در یک برنامه که به زبان Milk نوشته شده است؛ وقتی یک هسته تشخیص میدهد به بخشی از داده نیاز دارد، آن بخش یا دادههای متصل کنار آن را از حافظه اصلی درخواست نمیکند بلکه در عوض، آدرس آیتمهای داده موردنظر را به یک لیست آدرسهای ذخیرهشده محلی اضافه میکند. وقتی این لیست به اندازه کافی پر شد، تمام هستههای تراشه لیستهای خود را کنار هم قرار میدهند و این آدرسها بر اساس نزدیکی محل اشاره آدرس، گروهبندی و دوباره بین هستهها توزیع میشوند. در این روش، هر هسته تنها آیتمهایی از داده را درخواست میکند که میداند نیاز خواهد داشت و از طرفی این دادهها میتوانند به طرز کارآمدی بازیافت شوند.
MIT میگوید در آزمایشهایی که روی چندین الگوریتم متداول انجام شدهاند؛ برنامههای نوشتهشده در زبان جدید ۴ برابر سریعتر از نمونههایی بودند که با زبانهای موجود نوشته شدهاند. با توجه به اینکه محققان روی بهبود بیشتر این تکنولوژی کار میکنند، این آمار میتواند حتی بهتر نیز بشود. این محققان در هفته جاری مقالهای درباره این پروژه در کنفرانس بینالمللی معماریهای موازی و تکنیکهای کامپایل ارائه میدهند.