الگوی دسترسی به حافظه
"این مقاله در حال ترجمه از ویکی انگلیسی است
لطفا حذف نشود."
در محاسبات، الگو دسترسی به حافظه یا همان الگوی دسترسی IO، یک الگویی است که یک سیستم کامپیوتر و یا یک برنامه روی حافظه ثانویه میتواند بخواند و بنویسد. این الگو ها در مقطع مرجع محلی دارای تفاوت هایی هستند و به شدت بر عملکرد حافظه نهان تأثیر میگذارند، [۱] و همچنین پیامدهایی برای عملکرد رایانش موازی [۲] و پخش حجم کار در سیستمهای حافظه مشترک دارند. [۳] همچنین، مسائل مربوط به انسجام حافظه نهان می توانند بر عملکرد چند پردازنده تأثیر بگذارد، [۴] به این معنی که الگوهای دسترسی خاص به حافظه سقفی را روی موازی سازی قرار می دهند (که بسیاری از رویکردهای هسته ای به دنبال شکستن آن هستند). [۵]
حافظه رایانه معمولاً به عنوان « دسترسی تصادفی » توصیف میشود، اما پیمایشهایی که با نرم افزار انجام میشوند همچنان برخی از الگوها را نشان میدهند که میتوانند برای کارایی مورد استفاده قرار بگیرند. ابزارهای مختلفی وجود دارد که به طراحان سیستم و برنامه نویس ها برای درک، تجزیه و تحلیل و بهبود در کار با حافظه دسترسی میدهند، از جمله VTune و Vectorization Advisor، [۶] [۷] [۸] [۹] از آن دست ابزارهایی هستند که برای رسیدگی به دسترسی به حافظه GPU مورد استفاده قرار میگیرند.
الگوهای دسترسی به حافظه نیز پیامد هایی برای امنیت دارند، [۱۰] [۱۱] که بعضی را تحریک می کند تا تلاش کنند تا فعالیت یک برنامه را به دلایل امنیتی و حفاظتی از سایرین پنهان کنند. [۱۲] [۱۳]
مثال ها[ویرایش]
متوالی[ویرایش]
الگوی دسترسی متوالی ساده ترین حالت است که در آن دادهها با آدرسدهی افزایش/کاهش مستقیم خوانده، پردازش و نوشته میشوند. این الگوهای دسترسی به شدت توانایی این را دارند که واکشی داشته باشند.
گام به گام[ویرایش]
الگوهای دسترسی دو بعدی و سه بعدی گام به گام یا ساده (مثلا، گام برداشتن در آرایه های چند بعدی ) به طور مشابه به آسانی قابل پیش بینی هستند و در اجرای الگوریتم های جبر خطی و پردازش تصویر میتوان آنها را یافت. برخی از سیستم های دارای DMA یک حالت گام به گام برای انتقال داده ها بین آرایه های دو بعدی بزرگتر و حافظه اسکرچ پد ارائه کردند. [۱۵]
خطی[ویرایش]
یک الگوی دسترسی خطی با "گام به گام" ارتباط نزدیکی دارد، جایی که آدرس حافظه احتمال دارد از ترکیب خطی برخی از شاخص ها محاسبه شود. گام برداشتن در میان شاخص ها به صورت متوالی با یک الگوی خطی، دسترسی گام به گام را به همراه دارد. یک الگوی دسترسی خطی برای نوشتن (با هرگونه الگوی دسترسی برای خواندن های غیر همپوشانی) میتواند تضمین کند که یک الگوریتم احتمال دارد موازی شود، که در سیستم های پشتیبانی از هسته های محاسباتی استفاده میشود.
نزدیکترین همسایه[ویرایش]
الگوهای دسترسی به حافظۀ نزدیک ترین همسایه در شبیه سازی ها ظاهر می شوند و به الگوهای متوالی یا گام به گام مربوط می شوند. یک الگوریتم احتمال دارد یک ساختمان داده را با استفاده از اطلاعات نزدیکترین همسایگان یک عنصر داده (در یک یا چند بعد) برای اجرای محاسبات طی کند. این ها الگوریتم ها که در شبیهسازیهای فیزیک که روی شبکهها کار میکنند، رایج هستند. [۱۶] همچنین نزدیکترین همسایه می تواند به ارتباط بین گره ای در یک خوشه اشاره کند. شبیهسازیهای فیزیک که بر اینگونه الگوهای دسترسی داخلی متکی هستند را با ارتباطات نزدیکترین همسایه بین آنها میتوان با دادههای قسمت بندی شده به گرههای خوشهای موازی کرد؛ که میتواند خوبی هایی برای تأخیر و پهنای باند ارتباط داشته باشد. این حالت از استفاده بر روی توپولوژی شبکه توروس به خوبی قابل نگاشت کردن است. [۱۷]
2 بعدی منسجم فضایی[ویرایش]
در تفسیر سهبعدی، الگوهای دسترسی برای نگاشت بافت و شطرنجیسازی نمونه های ابتدایی کوچک (با کژریختی های دلخواه سطوح پیچیده) خطی نیستند، اما همچنان این قابلیت را دارند که موقعیت مکانی را نشان دهند (مثلاً در فضای صفحه یا فضای بافت). این می تواند از راه ترکیب ترتیب مورتون [۱۸] و کاشی کاری برای نقشه های بافت و داده های بافر فریم (نگاشت منطقه های فضایی بر روی خطوط حافظه پنهان)، یا از طریق تفسیر تعویق افتاده مبتنی بر کاشی و با مرتب سازی های اولیه، به محل حافظه تبدیل شود. [۱۹] همچنین ذخیره و نگه داری ماتریس ها به ترتیب مورتون در کتابخانه های جبر خطی می تواند بسیار خوب و مفید باشد. [۲۰]
پراکنده کردن[ویرایش]
الگوی دسترسی به حافظه پراکنده، خواندن های پشت سر هم را با آدرس دهی فهرست شده/تصادفی برای نوشته ها ترکیب می کند. [۲۱] در قیاس با جمعآوری، این احتمال وجود دارد که بار کمتری روی سلسله مراتب حافظه پنهان بگذارد چراکه یک عنصر پردازشی میتواند نوشتهها را به نحوه ی «آتش بزن و فراموش کن» ارسال کند (بهکلی یک حافظه نهان را دور بزند)، در حالی که از واکشی پیشبینیپذیر (یا حتی DMA) برای دادههای منبع خود استفاده میکند.
با این حال، امکان دارد موازی کردن آن سختتر باشد، چراکه هیچ ضمانتی وجود ندارد که نوشتهها با هم تعامل نداشته باشند، و تعداد زیادی از سیستمها هنوز با این پیشفرض طراحی میشوند که حافظه پنهان، بسیاری از نوشتههای کوچک را به نوشتههای بزرگتر ادغام میکند.
در قدیم، نقشهبرداری بافت رو به جلو تلاش میکرد تا تصادفی بودن را با «نوشتن» کنترل کند، در حالی که به شکل متوالیا ساختار اطلاعات منبع را میخواند.
در کنسول پلیاستیشن 2 از نقشهبرداری وارونه معمولی استفاده میشد، اما نوع پردازش پراکندگی/جمعآوری «روی تراشه» را با استفاده از EDRAM انجام میداد، ضمن اینکه که نمونه سهبعدی (و بسیاری از دادههای بافت) از حافظه اصلی به صورت متوالی توسط DMA تغذیه میشد. و باعث این است که از موارد شاخص های اولیه نمایهسازی شده پشتیبانی نمیکند، و گاهی اوقات نیاز به مدیریت بافتها "در جلو" در لیست نمایش وجود دارد.
جمع آوری[ویرایش]
در الگوی دسترسی حافظه به صورت جمع آوری، خواندن ها به صورت تصادفی آدرس دهی و یا نمایه گذاری می شوند، این در حالی است که نوشته ها ترتیبی (یا خطی) هستند. [۲۱] به عنوان مثال میتوان به نگاشت بافت معکوس اشاره کرد که در آن داده ها می توانند به صورت خطی در خطوط اسکن نوشته شوند، در حالی که آدرس های دسترسی تصادفی بافت حافظه در هر پیکسل محاسبه می شوند.
در قیاس با مثال پراکندگی، اشکال آن این است که ذخیره سازی موقت (و دور زدن تأخیرها) اکنون برای کارآمد بودن خواندن عنصر های کوچک ضروری است، با همه این موارد موازی کردن آن آسان تر است چراکه تضمین شده است در نوشتن ها همپوشانی وجود ندارد. به این ترتیب، رویکرد جمعآوری برای برنامهنویسی gpgpu رایج تر است، که در آن رشتهبندی عظیم (فعالشده توسط موازیسازی) برای پنهان کردن تأخیرهای خواندن استفاده میشود.
ترکیب جمع آوری و پراکنده سازی[ویرایش]
یک الگوریتم احتمال دارد داده ها را از یک منبع گرد آوری کند سپس محاسباتی را در حافظه محلی یا تراشه انجام دهد و در آخر نتایج را در مکان دیگری پراکنده کند. این کار ذاتا عملکرد کامل یک خط لوله GPU هنگام اجرای رندر سه بعدی - جمع آوری رئوس و بافت های نمایه گذاری شده و پراکندگی پیکسل های سایه دار در فضای صفحه است . شطرنجیسازی نمونههای اولیه مات با کمک از بافر عمق «جا به جایی پذیر» است و امکان مرتبسازی دوباره را فراهم میکند که اجرای موازی را تسهیل میکند. در حالت کلی، همگام سازی اولیه مورد نیاز است.
تصادفی[ویرایش]
در نقطه مقابل، یک الگوی دسترسی تصادفی به حافظه است. تعدادی سیستم چند پردازنده ای تخصصی ای هستند تا با این موارد مقابله کنند. [۲۲] رویکرد PGAS ممکن است با مرتبسازی عملیاتها بر اساس دادههای در حال پرواز کمک کند (این کار برای فهمیدن محل یک داده نامرتب کاربرد دارد). [۱۶] ساختارهای دادهای که به طور زیادی به تعقیب اشارهگرها متکی هستند و اغلب میتوانند محل مرجع ضعیفی ایجاد کنند، با این حال مرتبسازی گاهی اوقات میتواند کمک کند. با توجه به یک الگوی دسترسی تصادفی به حافظه، احتمال دارد بتوان آن را تجزیه کرد (از جمله مراحل پراکندگی یا جمعآوری، یا مرتبسازی متوسط دیگر) که این توانایی را دارد تا به طور کلی محل را بهبود بخشد. این مورد اغلب یک پیش نیاز برای موازی سازی است.
رویکردها[ویرایش]
طراحی داده گرا[ویرایش]
طراحی داده گرا رویکردی است که هدف آن به حداکثر رساندن محل مرجع است، از طریق سازماندهی داده ها بر اساس نحوه عبور از آن در مراحل مختلف یک برنامه، که در تضاد با رویکرد رایج تر شی گرا است (یعنی سازماندهی به گونه ای است که چیدمان داده ها به وضوح الگوی دسترسی را منعکس میکند). [۲۳]
در تضاد با محل مرجع[ویرایش]
محل مرجع به ویژگی نشان داده شده توسط الگوهای دسترسی حافظه اشاره دارد. یک برنامه نویس الگوی دسترسی به حافظه را (با کارکرد مجدد الگوریتم ها) برای بهبود محل مرجع [۲۴] و/یا افزایش پتانسیل برای موازی سازی تغییر می دهد. [۲۱] یک برنامهنویس یا طراح سیستم ممکن است چارچوب ها یا انتزاعیها را (مثلاً الگوهای ++C یا توابع درجه بالاتر ) ایجاد کند که یک الگوی دسترسی به حافظه خاص را در بر میگیرد. [۲۵] [۲۶]
ملاحظات مختلف برای الگوهای دسترسی به حافظه به صورت موازی فراتر از محل مرجع، یعنی جداسازی خواندن ها و نوشتن ها، ظاهر میشوند. به طور مثال: حتی اگر خواندن ها و نوشتن ها «کاملاً» محلی باشند، ممکن است به دلیل وابستگی ها، موازی کردن آن امکان پذیر نباشد. تفکیک خواندن ها و نوشتن ها در قسمتهای جداگانه، الگوی دسترسی به حافظه متفاوتی را به همراه دارد، شاید در ابتدا در شرایط محلی محض بدتر ظاهر شود، اما برای استفاده از سختافزار موازی مدرن مطلوب است. [۲۱]
محل مرجع ممکن است به متغیرهای فردی نیز اشاره داشته باشد (به عنوان مثال، توانایی یک کامپایلر برای ذخیره آنها در رجیسترها )، در حالی که اصطلاح الگوی دسترسی به حافظه فقط به داده هایی اشاره دارد که در یک حافظه قابل نمایه سازی (به ویژه حافظه اصلی ) نگهداری می شوند.
همچنین ببینید[ویرایش]
منابع[ویرایش]
- ↑ "data oriented design" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ خطای لوآ در پودمان:Citation/CS1/en/Identifiers در خط 47: attempt to index field 'wikibase' (a nil value).
- ↑ "Analysis of Energy and Performance of Code Transformations for PGAS-based Data Access Patterns" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "enhancing cache coherent architectures with memory access patterns for embedded many-core systems" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "intel terascale" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "QUAD a memory access pattern analyser" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Dymaxion: Optimizing Memory Access Patterns for Heterogeneous Systems" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ خطای لوآ در پودمان:Citation/CS1/en/Identifiers در خط 47: attempt to index field 'wikibase' (a nil value).
- ↑ "Putting Your Data and Code in Order: Data and layout".صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Memory Access Pattern Protection for Resource-constrained Devices" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "understanding cache attacks" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "protecting data in the cloud".صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "boosting-cloud-security-with----oblivious-ram". 24 September 2013.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.proposed RAM design avoiding memory-access-pattern vulnerabilities
- ↑ Chuck Paridon. "Storage Performance Benchmarking Guidelines - Part I: Workload Design" (PDF).
In practice, IO access patterns are as numerous as the stars
صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد. - ↑ "Optimal 2D Data Partitioning for DMA Transfers on MPSoCs" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ ۱۶٫۰ ۱۶٫۱ "partitioned global address space programming". YouTube.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.covers cases where PGAS is a win, where data may not be already sorted, e.g., dealing with complex graphs - see "science across the irregularity spectrum".
- ↑ "Quantifying Locality In The Memory Access Patterns of HPC Applications" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.mentions nearest neighbor access patterns in clusters
- ↑ "The Design and Analysis of a Cache Architecture for Texture Mapping" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.see morton order,texture access pattern
- ↑ "morton order to accelerate texturing" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Morton-order Matrices Deserve Compilers' Support Technical Report 533" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.discusses the importance of morton order for matrices
- ↑ ۲۱٫۰ ۲۱٫۱ ۲۱٫۲ ۲۱٫۳ "gpgpu scatter vs gather". Archived from the original on 2016-06-14. Retrieved 2016-06-13.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Cray and HPCC: Benchmark Developments and Results from the Past Year" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.see global random access results for Cray X1. vector architecture for hiding latencies, not so sensitive to cache coherency
- ↑ "data oriented design" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "optimize-data-structures-and-memory-access-patterns-to-improve-data-locality".صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Template-based Memory Access Engine for Accelerators in SoCs" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
- ↑ "Multi-Target Vectorization With MTPS C++ Generic Library" (PDF).صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.a C++ template library for producing optimised memory access patterns
This article "الگوی دسترسی به حافظه" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:الگوی دسترسی به حافظه. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.