کارتهای گرافیکی مجهز به چند پردازنده در دورهای از تاریخ با استقبال چشمگیری روبهرو شدند؛ اما پس از مدتی رو به سقوط رفتند.
در دنیای کارتهای گرافیکی، بیشتربودن آمار و ارقام اغلب بهمعنای بهتربودن قدرت و بهرهوری است. هستههای سایهزنی بیشتر، رم بیشتر، پهنای باند بیشتر و… همگی بهمعنای بهرهوری بهتر و تنظیمات باجزئیاتتر برای بازیها بودهاند؛ البته برای رسیدن به چنین وضعیتی، همیشه به تراشههای بزرگتر نیاز بوده است. طراحان و تولیدکنندگان همیشه از خود میپرسیدهاند: «چگونه میتوان به سرعت و بهرهوری بیشتر در کارتهای گرافیکی دست پیدا کرد؟» درواقع، همواره این سؤال مطرح بود: «اگر پردازندهها در حداکثر ابعاد و تعداد ترانزیستور باشند، چگونه میتوان سرعت را بازهم افزایش داد؟»
پاسخ به پرسش مذکور ساده است: باید تعداد تراشهها را افزایش دهیم. البته قطعا اجرای چنین راهکاری آسان نیست. افزایش تعداد پردازندهها در کارتهای گرافیکی در دورهای از تاریخ سختافزار رخ داد؛ اما دورهای طولانی نبود. درادامهی این مطلب ، کارتهای گرافیکی را بررسی میکنیم که با بهرهمندی از چند GPU، به غولهای واقعی بهرهوری و قدرت و البته قیمت تبدیل شدند.
ظهور کارتهایی با پردازندهی چندگانه
پیشازآنکه تاریخچهی کارتهای گرافیکی با چند GPU را شروع کنیم، ابتدا نگاهی به کارتهای امروزی و نحوهی طراحی و پیکربندی قطعات الکترونیکی روی آنها خواهیم انداخت. روی برد مداری که پس از برداشتن سیستم خنککننده دیده میشود، قطعهی سیلیکونی بزرگی مشاهده میکنیم که همان پردازندهی گرافیکی یا GPU است.
تمامی فرایندهای محاسبهای و مدیریت دادهها که برای شتابدهی به پردازش ویدئو و دادههای دوبعدی و سهبعدی نیاز است، در داخل یک تراشه انجام میشود. تراشههای دیگری که روی برد مداری کارت گرافیک حضور دارند، ماژولهای DRAM مخصوص GPU و تعدادی کنترلرهای ولتاژ هستند.
ساختار کارتهای گرافیکی همیشه اینچنین نبوده است؛ زیرا برخی از کارتهای گرافیک سهبُعدی اولیه چند تراشه داشتند که همهی آنها GPU محسوب نمیشدند. بهعنوان مثال، کارت Voodoo1 از شرکت 3dfx که در سال ۱۹۹۶ به بازار عرضه شد، دو پردازنده روی برد مداری داشت؛ اما تنها یکی از آنها وظیفهی مدیریت و پردازش بافتها را برعهده میگرفت و دیگری پیکسلها را باهم ترکیب میکرد.
در کارت گرافیکی Voodoo 1 و بسیاری از کارتهای گرافیکی ابتدایی در بازار سختافزار، به تراشهای مجزا برای انجام وظایف پردازشی دوبُعدی نیاز بود. شرکتهایی همچون ATI و انویدیا و S3 پس از مدتی روند جدیدی در طراحی در پیش گرفتند و تلاش کردند تمامی پردازندههای مستقل را در ساختاری واحد تجمیع کنند.
هرچه تعداد قطعات سیلیکونی روی یک کارت گرافیکی بیشتر میشد، هزینههای تولید افزایش پیدا میکرد؛ بههمیندلیل، پردازندههای بازار مصرفکننده بسیار سریع بهسمت ساختار تراشههای واحد پیش رفتند. بااینحال در همان دوران، کارتهای گرافیکی حرفهای بازار مصرفکننده مانند Voodoo 1 اغلب از ساختار چندتراشهای استفاده میکردند.
شرکت 3DLabs زمانی بهعنوان غول دنیای پردازش گرافیکی، خصوصا در صنعت رندر حرفهای شناخته میشد و این شرکت زمانی با ساختن محصولات غولپیکر پردازش گرافیکی بهشهرت رسید. یکی از محصولات که در تصویر زیر مشاهده میکنید، Dynmic Pictures Oxygen 402 نام دارد و با چند تراشه در دورهای از تاریخ صنعت سختافزار بهعنوان غول حرفهای پردازش گرافیکی شناخته میشد.
کارت گرافیک غولپیکر 3DLabs دو تراشهی بزرگ داشت که در سمت چپ و پایین تصویر مشاهده میکنید. این تراشهها وظیفهی پردازش دوبُعدی و مدیریت خروجی ویدئو را برعهده داشتند. چهار شتابدهنده نیز در زیر هیتسینکهای کارت قرار دارند که کل پردازشهای سهبُعدی را انجام میدهند. در آن زمان، پردازش رئوس هندسی در سمت CPU انجام میشد که بعدا سایر بخشهای رندر را در سمت کارت گرافیک ترکیب میکرد.
تراشههای Oxygen رئوس هندسی را به مثلث تبدیل میکردند و سپس هر فریم با ترکیب رندر رنگ و بافت، به پیکسل منتقل میشد. صرفنظر از فرایند رندر که خود جزئیات و مشخصات خاصی دارد، این سؤال مطرح میشود: «چرا به چهار شتابدهندهی رندر سهبُعدی نیاز بوده است و چرا شرکت سازنده تراشهی بزرگ یکپارچهای تولید نمیکرد؟»
ترکیب قدرت چند پردازندهی گرافیکی
برای درک دلیل استفاده از چند پردازنده در کارتهایی همچون محصول 3dLabs، ابتدا باید نگاهی کلی به فرایند تولید و نمایش تصاویر سهبعدی بیندازیم. ازلحاظ تئوری، میتوان تمامی محاسبات لازم را با استفاده از CPU انجام داد؛ اما پردازندههای مرکزی اغلب برای وظایف انشعابی و تصادفی در ساختار خطی طراحی میشوند.
گرافیک سهبعدی برخلاف وظایف مرسوم پردازندههای مرکزی بسیار سادهتر است؛ اما به حجم عظیمی از فعالیتهای موازی در مراحل متعدد نیاز دارد. فعالیتها و پردازشهای موازی و چندمرحلهای نیز از توان و قدرت CPU خارج خواهد بود. اگر پردازندهی مرکزی مشغول وظیفهی رندرکردن یک فریم باشد، دیگر نمیتواند کار متفرقهای انجام دهد.
پردازندههای گرافیکی بهدلیل همان محدودیتهایی متولد شدند که پردازندههای مرکزی در حوزهی وظایف موازی داشتند. اگرچه هنوزهم فعالیتهای مقدماتی برای یک فریم سهبُعدی پردازندهی مرکزی انجام میشود، محاسبههای ریاضی مخصوص گرافیک به تراشهای مخصوص نیاز دارند. تصویر زیر روند زمانی پردازش چهار فریم را نشان میدهد که در آن، پردازندهی مرکزی وظایف موردنیاز در هر دوره را ایجاد میکند.
دستورالعملها و اطلاعاتی که نشان میدهند چه دادهای برای چه مرحلهای نیاز خواهد بود، از پردازندهی مرکزی به پردازندهی گرافیکی ارسال میشوند. اگر ارسال دستورالعملها بیش از زمان موردنیاز برای تنظیمکردن فریم بعدی طول بکشد، در نمایش فریمها با تأخیر مواجه میشویم و بهنوعی باید منتظر پایانیافتن فرایند پردازش و رندر روی فریم اول بمانیم.
از نگاهی دیگر، میدانیم که نرخ فریم GPU کمتر از CPU است. تراشهی گرافیکی قدرتمندتر قطعا زمان موردنیاز برای رندرکردن فریم را کاهش میدهد؛ اما اگر ازلحاظ کیفیت و شرایط ساخت چنین پردازندههایی در سطح مهندسی و هزینهی تولید محدودیتهایی داشته باشیم، چه راهکارهای دیگری پیشنهاد میشوند؟
دو راهکار برای رفع مشکل طراحی و تولید تراشههای گرافیکی بزرگتر وجود دارد: ۱. استفاده از GPU دیگر برای شروع رندر فریم بعدی در زمانی است که GPU اول رندر فریم اول را انجام میدهد؛ ۲. میتوان فشار کاری رندر هر فریم را بین چند تراشه تقسیم کرد. راهکار اول بهنام alternate frame rendering یا AFR شناخته میشود.
دیاگرام بالا چگونگی اجرای ساختار AFR را نشان میدهد. همانطورکه میبینید، فاصلهی زمانی بین نمایش فریمها روی نمایشگر درمقایسهبا حالت استفاده از پردازندهی گرافیکی واحد کمتر شده است. نرخ فریم کلی نیز بهتر میشود؛ هرچند هنوزهم در سطحی پایینتر از CPU قرار دارد.
با روش AFR همچنان تأخیر درخورتوجهی بین زمان کار روی فریم اول و نمایش آن روی نمایشگر وجود دارد. دلیل چنین تأخیری آن است که هنوز برای پردازش کل یک فریم، به یک GPU وابسته هستیم. راهکار دیگر که وظیفهی کاری رندر فریم را بین دو یا چند پردازندهی گرافیکی تقسیم میکند، روشی متمرکز بر اشتراکگذاری بخشهای گوناگون فریم در بلوکهای متنوع دارد که بهنام split frame rendering شناخته میشود. بهبیانِبهتر، در این روش خطوط پیکسلها با ایجاد تغییر در وظیفهی رندر ایجاد میشوند. این راهکار در کارت گرافیک Dynami Oxygen اجرا میشد.
با استفاده از روش بالا، هر فریم با سرعت بسیار بیشتری پردازش میشود و تأخیر بین انجام کار در CPU و نمایش فریم به میزان چشمگیری کاهش مییابد. نرخ فریم کلی نیز شاید بهتر از AFR نباشد؛ ولی پایداری و ثبات بیشتری دارد.
هر دو روشی که در بالا توضیح دادیم، میتوان با استفاده از چند کارت گرافیکی بهجای چند پردازنده روی یک کارت گرافیکی اجرا کرد. فناوریهایی همچون CrossFire از شرکت AMD و SLI از شرکت انویدیا هنوزهم در صنعت حضور دارند؛ البته امروزه در بازار مصرفکننده، دیگر اثر زیادی از ساختارهایی با چند کارت گرافیکی نیست.
در این مقاله فقط کارتهای گرافیکی مجهز به چند GPU را بررسی میکنیم؛ پس درادامه، بازهم همان ساختار را دنبال خواهیم کرد.
اژدها وارد میشود
کارتهای گرافیکی شرکت 3DLabs به چند پردازندهی گرافیکی واقعا قدرتمند مجهز بودند؛ ولی قیمت بسیار گرانی هم داشتند. بهعنوان مثال، کارت Oxygen 402 به قیمت ۳،۶۹۵ دلار فروخته میشد که با نرخ امروزی تقریبا قیمتش ۶ هزار دلار میشود! دراینمیان، شرکت دیگری هم محصولاتی با چند پردازندهی گرافیکی تولید و عرضه میکرد که قیمتی مقرونبهصرفه داشتند.
دو سال پس از معرفی Oxygen 402 به بازار و در سال ۱۹۹۹، شرکت ATI Technologies کارت گرافیکی Rage Fury MAXX را معرفی کرد. در آن زمان، این شرکت کانادایی سابقهی بیش از ۱۰ سال فعالیت در دنیای گرافیک را در کارنامهاش داشت و محصولات خانوادهی Rage نیز بسیار محبوب بودند.