پرش به محتوا

کاربر:Milkymell/Fermi (microarchitecture)

از ویکی‌پدیا، دانشنامهٔ آزاد

فرمی نام رمز یک ریزمعماری واحد پردازش گرافیکی (GPU) است که توسط انویدیا توسعه یافته است و اولین بار در آوریل 2010 به عنوان جانشین ریزمعماری تسلا برای خرده فروشی عرضه شد. این ریزمعماری اولیه مورد استفاده در سری GeForce 400 و سری GeForce 500 بود. به دنبال آن Kepler قرار گرفت و در کنار Kepler در سری‌های GeForce 600، سری GeForce 700 و GeForce 800، در دو مورد آخر فقط در GPUهای موبایل استفاده شد. در بازار ایستگاه های کاری، فرمی در سری Quadro x000، مدل های Quadro NVS و همچنین در ماژول های محاسباتی Nvidia Tesla استفاده کرد. تمامی پردازنده‌های گرافیکی فرمی رومیزی در 40 نانومتر، پردازنده‌های گرافیکی فرمی موبایل در 40 و 28 نانومتر تولید شدند. Fermi قدیمی‌ترین ریزمعماری NVIDIA است که از رندر API مایکروسافت Direct3D 12 feature_level 11 پشتیبانی می‌کند.

این معماری به افتخار انریکو فرمی، فیزیکدان ایتالیایی نامگذاری شده است.

بررسی اجمالی

[ویرایش]
عکس. 1. معماری فرمی انویدیا



</br> قرارداد در ارقام: نارنجی - برنامه ریزی و ارسال. سبز - اعدام؛ آبی روشن -رجیسترها و کش ها.





تصویری از پردازنده گرافیکی GF100 موجود در کارت‌های GeForce GTX 470

واحدهای پردازش گرافیکی فرمی (GPU) دارای 3.0 میلیارد ترانزیستور هستند و یک طرح شماتیک در شکل 1 نشان داده شده است.


چند پردازنده جریانی (SM): از 32 هسته CUDA تشکیل شده است (به بخش های جریان چند پردازنده و هسته CUDA مراجعه کنید).

زمان‌بندی جهانی GigaThread: بلوک‌های رشته را بین زمان‌بندی‌های رشته SM توزیع می‌کند و سوئیچ‌های زمینه بین رشته‌ها را در طول اجرا مدیریت می‌کند (به بخش زمان‌بندی Warp مراجعه کنید).

رابط میزبان: GPU را از طریق گذرگاه PCI-Express v2 به CPU متصل می کند (پیک نرخ انتقال 8 گیگابایت بر ثانیه).

DRAM: به لطف قابلیت آدرس دهی 64 بیتی تا 6 گیگابایت حافظه DRAM GDDR5 پشتیبانی می شود (به بخش معماری حافظه مراجعه کنید).

فرکانس ساعت: 1.5 گیگاهرتز (توسط NVIDIA منتشر نشده است، اما توسط Insight 64 تخمین زده شده است).

حداکثر عملکرد: 1.5 TFlops.

ساعت حافظه جهانی: 2 گیگاهرتز.

پهنای باند DRAM: 192 گیگابایت بر ثانیه.

چند پردازنده جریانی

[ویرایش]

هر SM دارای 32 هسته CUDA تک دقیق، 16 واحد بارگذاری/ذخیره، چهار واحد عملکرد ویژه (SFUs)، یک بلوک 64 کیلوبایتی از حافظه روی تراشه با سرعت بالا (به بخش فرعی L1 + حافظه مشترک مراجعه کنید) و یک رابط برای حافظه نهان L2 ( زیربخش L2 Cache را ببینید).

واحدهای بارگیری/فروشگاه

[ویرایش]

اجازه دهید آدرس های مبدا و مقصد برای 16 رشته در هر ساعت محاسبه شود. داده ها را از/به حافظه پنهان یا DRAM بارگیری و ذخیره کنید.

واحدهای عملکرد ویژه (SFUs)

[ویرایش]

دستورات ماورایی مانند سینوس، کسینوس، معکوس و جذر را اجرا کنید. هر SFU یک دستور را در هر رشته، در هر ساعت اجرا می کند. یک Warp بیش از هشت ساعت اجرا می شود. خط لوله SFU از واحد دیسپاچ جدا شده است و به واحد دیسپاچ اجازه می دهد در زمانی که SFU اشغال است به واحدهای اجرایی دیگر صادر کند.

هسته CUDA

[ویرایش]

واحد منطق حسابی عدد صحیح (ALU): از دقت کامل 32 بیتی برای همه دستورالعمل ها، مطابق با الزامات زبان برنامه نویسی استاندارد پشتیبانی می کند. همچنین برای پشتیبانی موثر از عملیات 64 بیتی و دقیق پیشرفته بهینه شده است.

واحد نقطه شناور (FPU)

[ویرایش]

استاندارد جدید ممیز شناور IEEE 754-2008 را پیاده سازی می کند و دستورالعمل ضرب-افزودن ذوب شده (FMA) را برای محاسبات دقیق تکی و دوگانه ارائه می دهد. حداکثر 16 عملیات ضرب-افزودن ذوب شده با دقت دوگانه را می توان در هر SM، در هر ساعت انجام داد.

ضرب و جمع

[ویرایش]

ضرب-جمع (FMA) ضرب و جمع (یعنی A*B+C) را با یک مرحله گرد نهایی انجام می دهد، بدون از دست دادن دقت در جمع. FMA دقیق تر از انجام عملیات جداگانه است.

زمان بندی پیچ و تاب

[ویرایش]

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

هر SM می تواند دستورالعمل هایی را صادر کند که هر دو از چهار ستون اجرای سبز نشان داده شده در شکل 1 را مصرف می کند. برای مثال، SM می تواند 16 عملیات از 16 هسته ستون اول را با 16 عملیات از 16 هسته ستون دوم یا 16 عملیات ترکیب کند. از واحدهای بارگیری/ذخیره با چهار واحد SFU یا هر ترکیب دیگری که برنامه مشخص می کند.

توجه داشته باشید که عملیات ممیز شناور 64 بیتی هر دو ستون اول اجرا را مصرف می کند. این بدان معناست که یک SM می تواند تا 32 عملیات ممیز شناور تک دقیق (32 بیتی) یا 16 عملیات ممیز شناور با دقت دوگانه (64 بیتی) را در یک زمان صادر کند.

موتور GigaThread

[ویرایش]

موتور GigaThread بلوک های نخ را برای SM های مختلف برنامه ریزی می کند

Dual Warp Scheduler

[ویرایش]

در سطح SM، هر زمان‌بندی تاب، تارهای 32 رشته‌ای را در واحدهای اجرایی خود توزیع می‌کند. نخ ها در گروه های 32 رشته ای به نام Warps برنامه ریزی می شوند. هر SM دارای دو زمان‌بندی چرخش و دو واحد اعزام دستورالعمل است که اجازه می‌دهد دو تار به طور همزمان صادر و اجرا شوند. زمان‌بندی تاب دوگانه دو تاب را انتخاب می‌کند و از هر تاب یک دستورالعمل را به گروهی متشکل از 16 هسته، 16 واحد بارگذاری/ذخیره یا 4 SFU صادر می‌کند. بیشتر دستورالعمل ها می توانند دوگانه صادر شوند. دو دستورالعمل عدد صحیح، دو دستورالعمل شناور، یا ترکیبی از دستورات عدد صحیح، ممیز شناور، بار، ذخیره و SFU را می توان همزمان صادر کرد. دستورالعمل های دقیق دوگانه از ارسال دوگانه با هیچ عملیات دیگری پشتیبانی نمی کند.

اجرا

[ویرایش]

قدرت پردازش تئوری تک دقیق یک GPU Fermi در GFLOPS به صورت 2 (عملیات در هر دستورالعمل FMA در هر هسته CUDA در هر چرخه) × تعداد هسته های CUDA × سرعت ساعت سایه زن (به گیگاهرتز) محاسبه می شود. توجه داشته باشید که نسل قبلی تسلا می‌توانست MAD+MUL را به‌طور موازی به هسته‌های CUDA و SFU دوگانه صادر کند، اما فرمی این توانایی را از دست داد زیرا فقط می‌تواند 32 دستورالعمل در هر چرخه در هر SM صادر کند که فقط 32 هسته CUDA خود را کاملاً مورد استفاده قرار می‌دهد. بنابراین، نمی توان از SFU ها برای رسیدن به بیش از 2 عملیات در هر هسته CUDA در هر چرخه استفاده کرد.

قدرت پردازش تئوری با دقت دوگانه یک GPU فرمی 1/2 عملکرد دقیق در GF100/110 است. با این حال، در عمل این قدرت با دقت دوگانه تنها در کارت‌های حرفه‌ای Quadro و Tesla در دسترس است، در حالی که کارت‌های GeForce مصرف‌کننده تا 1/8 محدود شده‌اند.

حافظه

[ویرایش]

حافظه نهان L1 در هر SM و حافظه پنهان L2 یکپارچه که همه عملیات (بارگذاری، ذخیره و بافت) را سرویس می دهد.

ثبت کننده ها

[ویرایش]

هر SM دارای 32K رجیستر 32 بیتی است. هر رشته به رجیسترهای خود دسترسی دارد نه به رجیسترهای رشته های دیگر. حداکثر تعداد رجیسترهایی که می تواند توسط یک هسته CUDA استفاده شود 63 است. تعداد رجیسترهای موجود به خوبی از 63 به 21 تنزل می یابد زیرا حجم کار (و در نتیجه نیاز به منابع) با افزایش تعداد رشته ها افزایش می یابد. رجیسترها پهنای باند بسیار بالایی دارند: حدود 8000 گیگابایت بر ثانیه.

L1 + حافظه مشترک

[ویرایش]

حافظه روی تراشه که می‌تواند برای ذخیره‌سازی داده‌ها برای رشته‌های جداگانه (رجیستر ریختن/حافظه L1) و/یا برای اشتراک‌گذاری داده‌ها بین چندین رشته (حافظه مشترک) استفاده شود. این حافظه 64 کیلوبایتی را می توان به عنوان 48 کیلوبایت حافظه مشترک با 16 کیلوبایت حافظه نهان L1 یا 16 کیلوبایت حافظه مشترک با 48 کیلوبایت حافظه نهان L1 پیکربندی کرد. حافظه مشترک رشته‌های درون یک بلوک رشته را قادر می‌سازد تا با یکدیگر همکاری کنند، استفاده مجدد گسترده از داده‌های روی تراشه را تسهیل می‌کند و ترافیک خارج از تراشه را تا حد زیادی کاهش می‌دهد. حافظه مشترک توسط رشته های موجود در همان بلوک رشته قابل دسترسی است. دسترسی با تأخیر کم (10-20 چرخه) و پهنای باند بسیار بالا (1600 گیگابایت در ثانیه) تا مقادیر متوسطی از داده ها (مانند نتایج متوسط در یک سری محاسبات، یک ردیف یا ستون داده برای عملیات ماتریس، یک خط) فراهم می کند. از ویدئو و غیره ). دیوید پترسون می‌گوید که این حافظه مشترک از ایده اسکراچ‌پد [۱]

حافظه محلی

[ویرایش]

حافظه محلی است که به عنوان یک محل حافظه را برای نگهداری "ریخته" ثبت بوده است. ریختن رجیستر زمانی اتفاق می‌افتد که یک بلوک رشته به فضای ذخیره‌سازی رجیستر بیشتر از آنچه در یک SM موجود است نیاز دارد. حافظه محلی فقط برای برخی از متغیرهای خودکار (که در کد دستگاه بدون هیچ یک از واجد شرایط __device__، __shared__، یا __constant__ اعلان شده اند) استفاده می شود. به طور کلی، یک متغیر خودکار در یک ثبات قرار دارد به جز موارد زیر: (1) آرایه هایی که کامپایلر نمی تواند آنها را تعیین کند با مقادیر ثابت نمایه می شوند. (2) سازه های بزرگ و یا آرایه که فضای ثبت نام بیش از حد مصرف. هر متغیری که کامپایلر تصمیم می گیرد به حافظه محلی بریزد زمانی که یک هسته از رجیسترهای بیشتری نسبت به موجود در SM استفاده می کند.

حافظه نهان L2

[ویرایش]

حافظه نهان L2 یکپارچه 768 کیلوبایتی، مشترک بین 16 اس ام اس، که همه را از/به حافظه جهانی بارگیری و ذخیره می کند، از جمله کپی ها به/از میزبان CPU، و همچنین درخواست های بافت. زیرسیستم کش L2 همچنین عملیات اتمی را اجرا می کند که برای مدیریت دسترسی به داده هایی که باید در بلوک های رشته یا حتی هسته ها به اشتراک گذاشته شوند، استفاده می شود.

حافظه جهانی

[ویرایش]

قابل دسترس برای همه رشته ها و همچنین میزبان (CPU). تأخیر بالا (400-800 سیکل).

فشرده سازی ویدئو

[ویرایش]

Nvidia NVDEC (که قبلا NVCUVID نامیده می شد) و همچنین Nvidia PureVideo را ببینید .

فناوری NVENC انویدیا هنوز در دسترس نبود، اما در جانشین، Kepler معرفی شد .

  • GF100
  • GF104
  • GF106
  • GF108
  • GF110
  • GF114
  • GF116
  • GF118
  • GF119
  • GF117

منابع

[ویرایش]

عمومی

[ویرایش]

لینک های خارجی

[ویرایش]

[[رده:ریزمعماری‌های گرافیک]] [[رده:ریزمعماری‌های انویدیا]]

  1. Patterson, David (September 30, 2009). "The Top 10 Innovations in the New NVIDIA Fermi Architecture, and the Top 3 Next Challenges" (PDF). Parallel Computing Research Laboratory & NVIDIA. Retrieved October 3, 2013.