استفاده از Data alignment - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

استفاده از Data alignment

+1 امتیاز
سلام و شب بخیر به همگی

از سایت خوبتون ممنون مطالب جالبی بحث شده.

فلسفه استفاده از data alignment چیه و چرا جاهای مختلف ذکر شده که باعث سرعت اجرایی برنامه میشه و حتی کامپایلر هم تمهیداتی برای این موضوع در نظر گرفته؟

 

پیشاپیش متشکرم
سوال شده آذر 9, 1392  بوسیله ی iranProgrammer (امتیاز 13)   2 3
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade

1 پاسخ

+3 امتیاز
 
بهترین پاسخ

Data Alignment یعنی اینکه داده ها رو جوری توی آدرس حافظه (Memory) قرار بدیم که که آدرسش بخش پذیر بر یک Word در اون سیستم باشه .

برای مثال اگه کامپیوتر ما 32 بینی باشه , آدرس شروع داده ی ما باید 4 و 8 و 16 و 32 و 64... ( و همینجور دنباله داره ) باشه . به این Data Alighment میگن .

این کاری میکنه که پردازنده کامپیوتر سیریع بتونه داده ها رو واکشی کنه .

همچنین Cache Miss هم کمتر میشه .

و یه سری چیزای دیگه که خوب یادم نیس !

Data Structure Padding هم یعنی اینکه شما در هر ساختارتون تعدادی Byte بدون کاربرد میگزاری. چرا ؟

چونکه اگر برای مثال اندازه ی ساختار شما 5 باشه هنگامی که یه شی از اون ساخنه بشه کاری میکنه که شی هایی که پس از این ساخته میشن در آدرس تراز ( Align ) نشده قرار بگیرن . پس شما ( Compiler بیشتر این کار رو میکنه ) سه Byte بدون کاربرد هم میزاری توی ساختار تا ترازبندی انجام بشه .

درباره ی Cache Miss هم اینو بخون : http://fa.wikipedia.org/wiki/%D8%AD%D8%A7%D9%81%D8%B8%D9%87_%D9%86%D9%87%D8%A7%D9%86_%D8%B3%DB%8C%E2%80%8C%D9%BE%DB%8C%E2%80%8C%DB%8C%D9%88

پاسخ داده شده آذر 10, 1392 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
انتخاب شد آذر 13, 1392 بوسیله ی BlueBlade
چرا cache miss کمتر میشه ؟
بعد این که میگن به شانزده align باید باشه یعنی چی ؟
بخاطر اندازه Cache-Line .
مثلا اگر اندازه Cache-Line باشه 64 . ما بر فرض آدرس حافظه رو به قسمت های 64 تایی تقسیم میکنیم. و حالا داده ی شما اندازه اش باشه 32 طوری مثلا نصف داده شما توی یک قسمت 64 تایی باشه و نصفش توی یک قسمت دیگه . اینجا باید ۲ تا قسمت 64 بایتی خوانده بشه و داده ها شیفت داده بشه تا داده ی شما به داده ی 32 بایتی خودتون دسترسی داشته باشید . اینجا به دلیل Align نبودن داده شما ۱ Cache-Line اضافی به Cache شما فرستاده میشه .

شما نسبت به اندازه Cache-Line و یا شرایط دیگه تعیین میکنید که Alignment باید چقدر باشه .
...