گامی بلند برای تطابق با ابررایانه‌ها

پازل جدید انویدیا

معماری GPUهای انویدیا، کودا نام دارد و به‌تازگی نسل جدید کودا از سوی انویدیا معرفی شده است. نسل جدید که Fermi خوانده می‌شود، تفاوت‌های زیادی با نسل پیشین یعنی GT200 دارد و GPUها را برای ابررایانه‌ها مناسب‌تر می‌کند. مشخصات جدید، GPU را تا حد زیادی از بند سازگاری با گرافیک خارج می‌کند و مدل برنامه‌نویسی کودا را برای زبان برنامه‌نویسی متداول ++C بسیار مناسب می‌کند.
کد خبر: ۳۱۳۷۱۶

هر سخت‌افزاری از میلیون‌ها ترانزیستور تشکیل می‌شود. اگر ترانزیستورهایی که کنار هم قرار می‌گیرند تا یک کارت‌گرافیکی را بسازند، به یک پازل تشبیه کنیم، انویدیا تابه‌حال 3‌بار پازل را به‌هم‌ریخته و از نو بازسازی کرده است. بار اول در سال2006 معماری کارت‌گرافیک‌های خود را دگرگون کرد و G80 را با 681 میلیون قطعه پازل (ترانزیستور) به‌وسیله GeForce 8800 معرفی کرد، بار دوم سال 2008 بود که GT200 را با 5/1میلیارد قطعه پازل با GTX280 معرفی کرد و بار سوم اول اکتبر امسال بود که وعده پازلی به نام فرمی، با 3میلیارد قطعه را داد.

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

در سطح برنامه‌نویسی

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

تفاوت عمده‌ای که در فرمی پدید آمده، آن است که نقاط‌ شکست توسط بخش نرم‌افزاری به‌نامGPU trap handler مدیریت می‌شود که خود یک نخ روی GPU است. این نرم‌افزار اگر نیاز باشد، می‌تواند با کد پردازنده ارتباط داشته باشد. این روش مدیریت، انعطاف‌پذیری بیشتری برای خطایابی ایجاد می‌کند. اوایل اکتبر، انویدیا ابزاری به‌نام Nexus معرفی کرد که ویژوال استودیو را برای برنامه‌نویسی GPU توانمند می‌کند.

کدهای تصحیح خطا برای حافظه

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

کیفیت ممیز شناور

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

افزایش حافظه نهان

دلیل اصلی استفاده از حافظه نهان در پردازنده‌ها کاهش تاخیر دسترسی به حافظه اصلی است. ولی درباره GPU یک عقیده این است که چرا باید فضای چیپ را با به‌کار بردن حافظه نهان هدر کنیم؟ این عقیده مبتنی بر آن است که موازی‌سازی در سطح چیپ آنقدر زیاد است که تاخیر دسترسی به حافظه اصلی را می‌پوشاند و نیازی به حافظه نهان نیست. این عقیده برای کدهایی که موازی‌سازی بالایی دارند صحیح است ولی زمانی که موازی‌سازی بالایی در کد وجود نداشته باشد، حضور حافظه نهان الزامی است. فرمی حافظه نهان سطح اول (مشترک بین 32هسته کودا) k 64 و سطح دوم (مشترک بین تمام هسته‌ها) k 768 خواهد داشت و نسبت به نسل قبلی، این مقادیر تقریبا 2برابر شده‌اند.

یکپارچه کردن فضای آدرس‌دهی

نسل گذشته معماری کودا دارای 3سطح حافظه بود که مشترک، محلی و سراسری نام داشت و هرکدام فضای آدرس مخصوص به‌خود را داشتند. ضمنا مجموعه دستورالعمل‌ها برای برداشت یا ذخیره (load / store) از این حافظه‌ها دستورالعمل‌های متفاوتی داشت. در نسل جدید، این دستورات یکی شده‌ است که ناشی از یکپارچه کردن فضای آدرس‌دهی سه‌گانه سابق است. مجزا بودن فضای آدرس، کارایی بالایی را فراهم می‌کند ولی در عوض برای زبان‌های برنامه‌نویسی مثل C و ++C که برای ذخیره برخی داده‌ها به اشاره‌گرها وابسته‌اند، مشکل‌ساز است. درنقطه مقابل، یکپارچه کردن فضای آدرس سبب می‌شود که آدرس‌دهی غیرمستقیم نیز ممکن شود و کودا بتواند اشاره‌گرها و ارجاع متغیرها را نیز پوشش دهد. هسته‌های فرمی 64بیتی هستند ولی فضای آدرس‌دهی حافظه درآن 40بیت خواهد بود که می‌تواند تا 1ترابایت را پوشش دهد.

فناوری گیگاترد

برجسته‌ترین ویژگی نسل جدید کودا، اضافه‌شدن واحدی به‌نام GigaThread است که وظیفه تبادل اطلاعات بین حافظه اصلی سیستم و حافظه متعلق به GPU را به‌عهده دارد. مسیر دسترسی، مجزای مسیر PCI Express V2 است که کارت گرافیک ازطریق آن به مادربورد متصل می‌شود. در نسل قبلی، محدودیت بزرگی برای کدهایی که روی GPU اجرا می‌شدند، وجود داشت و آن این بود که برای دسترسی به اطلاعات حافظه اصلی سیستم از روی GPU، ابتدا باید یک کپی از اطلاعات روی حافظه اصلی سیستم، به حافظه GPU می‌آمد و سپس مورد استفاده قرار می‌گرفت. ولی فرمی می‌تواند اطلاعات روی حافظه اصلی را مستقیم آدرس‌دهی کند. این مسیر جدید دسترسی به حافظه اصلی، سرعت بالایی دارد و ارتباط را از طریق خط SDT2 2 برقرار می‌کند. گیگاترد، مستقل از نخ‌های در حال اجرا با حافظه اصلی ارتباط برقرار می‌کند یعنی ارتباط آن GPU را متوقف نمی‌کند. بخشی به‌نام HTS 3 در گیگاترد وجود دارد که وظیفه مدیریت سخت‌افزاری نخ‌های سپرده شده به GPU را دارد. HTS وظیفه تعویض محتوا بین نخ‌های جاری را نیز دارد. در سیستم‌های چندفرآیندی امروزی، بسیار مهم است که فرآیند در حال اجرا، خیلی سریع از پردازنده خارج شود و جای خود را به فرآیند بعدی انتخاب شده بدهد. در گذشته، این مفهوم برای GPUها چندان مطرح نبود، زیرا عموما GPUها بیش از یک فرآیند را اجرا نمی‌کردند. ولی امروزه بسیار مهم است که سرعت تعویض محتوا برای GPU بالا باشد، زیرا چندین فرآیند از آن استفاده می‌کنند. در فرمی، تعویض محتوا بین 20 تا 25میلی ثانیه به طول می‌کشد که 10برابر سریع‌تر شده‌است.

جمع‌بندی و آمار و ارقام

- فرمی بیش از 3میلیارد ترانزیستور خواهد داشت و با فن‌آوری 40نانومتری ساخته خواهد شد.

- فرمی 512هسته از نوع کودا دارد، ولی نسل قبلی کودا نهایتا 240هسته (کارت‌های تسلا) داشت. (در نسل قبل از فرمی، هر 8هسته کودا یک SM5 نامیده می‌شد و در کارت‌های تسلا 30عدد SM 4 وجود داشت که جمعا 240=8*32 هسته کودا تشکیل می‌شد و این 8 هسته دارای حافظه مشترکی بودند که مخصوص یک SM بود و از دسترس دیگرSMها دور بود (سطح اول نهان). در فرمی هر 32هسته یک SM را تشکیل می‌دهند و جمعا 16عدد SM دارد. 16*32 برابر است با 512هسته کودا.)

- فرمی می‌تواند 512=(16*32) عملیات ممیز شناور یا صحیح را در هر کلاک انجام دهد که این رقم در نسل قبلی 240=(8*30) بود.

- فرمی برای دسترسی به حافظه داخلی خود از GDDR5 استفاده خواهد کرد که سرعت آن حدودا 30درصد بیشتر از نسل قبل است که از GDDR3 استفاده می‌کرد.

پی‌نوشت

1. Breakpoint

2. Streaming Data Transfer

3. Hardware Thread Scheduler

4. Streaming Multiprocessor

منبع:

http://www.nvidia.com/

احمد لشگر

newsQrCode
ارسال نظرات در انتظار بررسی: ۰ انتشار یافته: ۰

نیازمندی ها