مرا به خاطر بسپار

معرفی حافظه‌ی بافت و کاربرد آن

بازدید: 1526 آخرین به‌روزرسانی: 20 آبان 1401
پردازنده‌های گرافیکی دارای انواعی از حافظه می باشند که یکی از آن‌ها، حافظه‌ی بافت [1] نام دارد. این حافظه دارای ویژگی‌های به خصوصی می‌باشد که برای کاربردهای خاصی برای افزایش سرعت اجرای برنامه مورد استفاده قرار می‌گیرد. در این مقاله ابتدا انواع حافظه در پردازنده‌های گرافیکی NVIDIA به اختصار بیان شده و سپس حافظه بافت و کاربرد آن توضیح داده می‌شود.

انواع حافظه در پردازنده‌های گرافیکی NVIDIA

در پردازنده‌های گرافیکی NVIDIAکه از متداول‌ترین پردازنده‌های گرافیکی هم در رایانه‌های رومیزی و هم در سرورهای پردازشی هستند، حافظه‌های متنوعی وجود دارند که با هدف تسریع برنامه‌های موازی ایجاد شده‌اند. از نظر مکان فیزیکی، داده‌های پردازنده گرافیکی در دو مکان مختلف می‌توانند قرار بگیرند:

1) حافظه دینامیک [2] که در کارت‌های گرافیکی بیرون از تراشه اصلی پردازنده و بر روی کارت قرار دارد. فناوری ساخت این پردازنده‌ها GDDR DRAM [3] است که شباهت‌های بسیاری به حافظه اصلی DRAM رایانه دارد، منتهی از پهنای باند و سرعت بیشتری پشتیبانی می‌کند.
2) حافظه‌های داخلی تراشه پردازنده گرافیکی که درون تراشه قرار دارند و فناوری ساخت آنها همانند حافظه نهان پردازنده‌ها عموما SRAM [5] است.

همانطور که قابل حدس است، دسترسی به داده‌های ذخیره شده در حافظه تراشه اصلی راحت‌تر و سریع‌تر است. پهنای‌باند دسترسی به حافظه دینامیک محدود است و اگر برنامه نیاز به دسترسی پیوسته به این حافظه داشته باشد، می‌تواند به گلوگاه تبدیل شود و کارایی برنامه را پایین بیاورد.
از نگاه کاربر (به عنوان مثال برنامه‌نویس CUDA که در حال توسعه برنامه موازی خود برای اجرا بر روی پردازنده گرافیکی است)، به غیر از رجیسترهای پردازنده، پنج فضای حافظه دیگر برای استفاده وجود دارد.

1) حافظه محلی : جزئی از حافظه دینامیک که مختص متغیرهای محلی هر نخ است. این حافظه برای هر نخ مجزا است.
2) حافظه مشترک : این حافظه بین نخ هایی که در یک بلوک نخ قرار دارند به اشتراک گذاشته می‌شوند و محل آن درون تراشه است.
3) حافظه عمومی : بزرگترین حافظه در دسترس پردازنده گرافیکی است و محل آن همانند حافظه محلی در حافظه دینامیک است. از این حافظه برای به ذخیره داده‌های ورودی و خروجی برنامه و اشتراک گذاری داده بین همه نخ‌ها استفاده می‌شود.
4) حافظه ثابت : برای ذخیره ثابت‌های تعریف شده در برنامه استفاده می‌شود. این حافظه فقط-خواندنی و محل آن در حافظه دینامیک است.
5) حافظه بافت: یک حافظه فقط خواندنی دیگر که در حافظه دینامیک قرار دارد. در ادامه با این حافظه بیشتر آشنا می‌شویم.

جدول زیر ویژگی‌های این حافظه‌ها مانند محل قرارگیری، وجود یا عدم وجود حافظه نهان اختصاصی برای هر یک از آنها، نوع دسترسی، محدوده دید و دوره حیات را نشان می‌دهد.



حافظه بافت

هدف اولیه طراحی این حافظه برای بهبود عملکرد خط لوله‌های رندرینگ دوبعدی و سه‌بعدی بوده ‌است. وقتی یک تصویر سه‌بعدی بر روی نمایشگر رایانه رندر می‌شود، چند مرحله پردازش انجام می‌شود. یکی از گام‌های نهایی پردازش، اعمال یک بافت به شیء مورد نظر است. بافت یک تصویر دوبعدی است که در حافظه ذخیره‌شده و رنگ و جزئیات پوسته هر یک از اشیاء موجود در صحنه سه‌بعدی را مشخص می‌کند. ذخیره این تصویر دوبعدی در حافظه بافت اجازه می‌دهد تا دسترسی به آن سریعتر انجام شود که این کار باعث افزایش کارایی رندرینگ صحنه و در نتیجه کیفیت بهتر انیمیشن، فیلم‌ها یا بازی‌ها می‌شود. به دلیل ویژگی‌های منحصر به فرد حافظه بافت، این حافظه علاوه بر رندرینگ در تسریع کاربردهای عمومی که بر روی داده‌های دوبعدی اجرا می‌شود نیز پرکاربرد است.

همانطور که در جدول فوق بیان شد، این حافظه دارای یک حافظه نهان اختصاصی درون تراشه می‌باشد. بنابراین بخشی از داده‌های ذخیره شده در این حافظه در هر لحظه بسته به نیاز در حافظه نهان بافت به طور موقت ذخیره می‌شوند تا دسترسی به آنها سریع‌تر انجام شود. در ادامه بعد از بررسی حافظه نهان بافت با ویژگی‌های حافظه بافت و کاربرد آن بیشتر آشنا خواهیم شد.

حافظه نهان بافت

از آنجا که در خیلی از کاربردها دسترسی به حافظه بعضا به صورت پشت سر هم و به خانه‌های متوالی و مجاور است، یک حافظه نهان عادی که در اغلب پردازنده‌ها وجود دارد طوری ساخته شده است که در حین دسترسی به یک داده، خانه‌های مجاور آن را نیز در همان لحظه از حافظه اصلی به حافظه نهان منتقل می‌کند، تا در صورتی که پردازنده به سراغ خانه مجاور برود، داده مورد نظر در حافظه نهان موجود باشد و سرعت دسترسی افزایش یابد. این داده‌ها مجاورت یک‌بعدی دارند، یعنی در خانه‌های پشت سر هم در یک ردیف از حافظه قرار دارند. از آنجا که در کاربردهایی مانند پردازش تصویر، ممکن است پیکسل‌هایی که در سطح دوبعدی مجاورند در یک لحظه دسترسی و پردازش ‌شوند، نیاز به حافظه‌ای است که این مجاورت دوبعدی را در حین بارگذاری و دسترسی به داده‌ها لحاظ کند. حافظه نهان بافت برای استفاده حداکثری از مجاورت مکانی دوبعدی طرحی شده است. به این ترتیب هنگامی که نخ‌ها به داده‌های مجاور دوبعدی در حافظه بافت نیاز داشته باشند، نرخ برخورد حافظه نهان افزایش می‌یابد. این حافظه نهان درون هر یک از پردازنده‌های درونی یک پردازنده گرافیکی که SM [6] نام دارند وجود دارد.

برای مثال مطابق شکل زیر، با خواندن هر یک از این داده‌ها، داده‌های مجاور نیز وارد حافظه نهان شده و بقیه نخ‌ها نیازی به دسترسی به حافظه دینامیک برای خواندن داده خود ندارند. در صورتی‌که در یک حافظه نهان عادی، در صورت دسترسی به یکی از داده‌ها، فقط داده‌های هم ردیف آن بارگذاری می‌شود. بنابراین استفاده از حافظه بافت این اجازه را می‌دهد تا بتوان داده‌های غیرمجاور را نیز در یک لحظه در حافظه نهان بارگذاری و استفاده کرد.



ویژگی های حافظه بافت

برای بهبود عملکرد حافظه بافت، عملیات مختلفی به صورت سخت افزاری در کنار آن درون پردازنده گرافیکی تعبیه شده است که در ادامه مهم‌ترین آن‌ها به اختصار ذکر می‌شوند.

1. نرمال‌سازی مختصات بافت [7] : در کاربردهایی که نیاز است پردازش بافت مستقل از اندازه بافت انجام شود، با استفاده از این امکان می‌توان مختصات بافت را به صورت خودکار به بازه بین 0 و 1 نگاشت کرد. به عنوان مثال هر خانه از یک بافت با اندازه 64 در 32 پیکسل به طور عادی با دو عدد بین 0 تا 63 و 0 تا 31 آدرس‌دهی می‌شود. با استفاده از نرمال‌سازی، این دو عدد به اعدادی در بازه 0 تا 1 نگاشت می‌شوند. بنابراین مستقل از اندازه بافت، مختصات همه بافتها همیشه در بازه 0 تا 1 خواهد بود که این امر انعطاف پذیری و سهولت استفاده را در پی دارد.
2. نرمال سازی مقادیر هر تکسل [8] : با استفاده از این امکان نیز می‌توان به صورت خودکار و در سخت افزار، همه مقادیر یک بافت را به بازه 0 تا 1 یا 1- تا 1 نگاشت کرد.
3. فیلترسازی: یکی از ویژگی‌های پرکاربرد حافظه بافت، فیلترسازی می‌باشد. این روش نیز به صورت خودکار توسط حافظه‌ی بافت انجام می‌پذیرد. این قابلیت اجازه می‌دهد در صورت خواندن مقدار یک مختصات که در حافظه بافت وجود ندارد با درون‌یابی خطی مقدار این مختصات از روی مقدار مختصات همسایه به‌دست آید.
4. آدرس دهی و مدیریت خودکار محدوده‌های آرایه: این قابلیت برای مدیریت ایندکس‌های خارج از محدوده استفاده می‌شود، به این صورت که اگر ایندکس مورد نظر به خانه¬ی خارج از محدوده ی اشاره کند به 2 شکل زیر می‌تواند آن را مدیریت کند:
• روش Clamp: در این روش در صورتی که مقدار ایندکس کوچکتر از صفر باشد آن را برابر صفر در نظر می‌گیرد و به خانه ی صفر از آرایه مد نظر اشاره خواهد کرد و درصورتی که مقدار آن از طول آرایه بیشتر باشد، برابر ایندکس خانه‌ی آخر آرایه در نظر گرفته می‌شود.
• روش Wrap: هر ایندکس را از مقدار جزء صحیح آن کم می‌کند و بدین طریق به ازای هر مقدار داده شده، همواره در بازه نرمال شده مختصات قرار می‌گیرد.

موارد استفاده و جمع بندی

به طور کلی در کاربردهایی که نیاز به خواندن و پردازش داده‌های مجاور دوبعدی داشته باشیم، استفاده از حافظه‌ی بافت باعث بهره‌وری بیشتر از سخت افزار و تسریع کاربرد می‌شود. همچنین برای بهبود عملکرد این حافظه با توجه، برخی از عملیات پراستفاده به صورت سخت‌افزاری در آن تعبیه شده ‌است تا علاوه بر اضافه کردن قابلیت انعطاف‌پذیری در کد، سرعت اجرا را نیز در این کاربردها افزایش دهد.

مطالعه بیشتر در مورد ویژگی‌های حافظه بافت و نحوه استفاده از آن:

[i] https://docs.nvidia.com/cuda/pdf/CUDA_C_Programming_Guide.pdf
[ii] http://cuda-programming.blogspot.com/2013/02/texture-memory-in-cuda-what-is-texture.html

پانویس:
  1. Texture Memory
  2. Dynamic Random-Access Memory (DRAM)
  3. Graphics Double Data Rate DRAM
  4. Static RAM
  5. Streaming Processor
  6. Normalized texture coordinates
  7. به هر خانه از یک بافت، تکسل گویند.
تا چه حد این مطلب برای شما مفید بود؟
بر اساس رای 7 نفر

اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

ثبت نظر

نظر دادن