GPU و شتاب گرافيك سهبعدي
علي حسيني
زماني كه كارتهاي گرافيكي دوبعدي در PCها مورداستفاده بودند، يك كاربر براي دستيابي به شتاب گرافيكي سهبعدي (3D Acceleration) بايد از يك كارت ويژه در كنار كارتهاي رايج دوبعدي استفادهميكرد. با رايج شدن قابليتهاي گرافيك سهبعدي، كارتهاي گرافيك، با دو قابليت همزمان دوبعدي/ سهبعدي، جايگزين كارتهاي گرافيكي سهبعدي شدند. اين كارتهاي تركيبي 2D/3D، تابعهاي استاندارد 2D را با قابليتهاي شتاب 3D در يك كارت تلفيق مينمايند و راهبرد موثرتري را براي دستيابي دوستداران بازيهاي كامپيوتري به بازيهاي بهتر فراهم ميكنند. تقريبا همه كارتهاي گرافيكي امروزي داراي نوعي شتابدهنده سهبعدي ويژه هستند. ولي كارايي آنها بسته به نوعشان بسيار متفاوت است. GPU يا پردازنده گرافيكي تراشهاي است كه تقريباً همه كار شتابدهندگي گرافيكي سهبعدي را در كارتهاي مدرن امروزي انجام ميدهد. علت اينكه به بخشي از پردازشهاي گرافيكي "شتاب نرمافزاري"يا "شتاب سختافزاري" گفته ميشود، اين است كه اين دستورها، فيلترها و افكتهاي خاص كه به برخي از آنها در اين مقاله اشاره خواهد شد، كار ترسيم، ايجاد بافت و افزودن جلوههاي ويژه را با سرعت بسيار بيشتري نسبت به روشهاي گذشته انجام ميدهند.
nVidia و پيدايش GPU
nVidia در روزسي و يكم آگوست سال 1999،GPU را به صنعت كامپيوترهاي شخصي معرفي نمود. GPU، پردازندهاي است با مجموعهاي از موتورهاي رندركننده، تبديل و نوردهي (T&L)، تنظيمكننده و برشدهنده چندضلعي كه قادر است در هر ثانيه دستكم ده ميليون چند ضلعي را مورد پردازش قرار دهد.
با انجام دادن كار Transform &Lighting) T&L) بخش بزرگي از كار CPU به GPU واگذار ميشود و از بار پردازشيCPU كم ميشود و CPU ميتواند دادههاي ديگري را مورد پردازش قرار دهد. از اينرو سيستمهايي كه از GPU در بوردهاي گرافيكي خود استفاده ميكنند، نسبت به سيستمهاي ديگر از كارايي بسيار بيشتري برخوردارند. يكي از عللي كه باعث ميشود GPU سريعتر از CPU پردازشهاي گرافيكي را انجام دهد، تك منظوره بودن است.
CPU براي اجراي يك بازي، بايد همه دادهها و امكانات بازي را مورد پردازش قرار دهد؛ مانند هوش مصنوعي، اجراي فايلهاي گرافيكي و صوتي و انجام دادن هر آنچه كه موردنياز است تا بازي بارگذاري، اجرا و انجام شود. درضمن، پردازش گرافيكي يكي از سنگينترين كارهايي است كه يك پردازنده بايد انجام دهد. با واگذاري اين كار به واحد پردازش گرافيكي، اين پردازنده ويژه، درگير ديگر پردازشهاي سيستم نميشود و از اينرو سريعتر از پردازنده اصلي اين كار را انجام ميدهد. با اين كار، طراحان بازي ميتوانند با دستي فراختر به ساخت بازيهايي با گرافيك پيچيدهتر و جزئيات بيشتر اقدام كنند.
T&L، دو موتور جدا از هم در پردازنده گرافيكي براي ترسيم تعداد بسيار زيادي چندضلعي در برنامههاي گرافيكي پيچيده است. انتقال (Transform) تعيينكننده پيچيدگي و تعداد اشيا، بدون ايجاد وقفه درميزان نمايش فريمها براي نشان دادن روي صفحه نمايشگر است. Lighting (نوردهي) هم با تغيير نوردهي اشيا براساس منابع نور به صحنه افزوده ميشود.
![]() |
شكل1- با پردازش پردازههاي گرافيكي توسط پردازنده گرافيكي شتابدهنده، CPU ميتواند دستورات ديگري را انجام دهد. |
شكل 1، تفاوت پردازش در سيستمهايي كه از يك پردازنده گرافيكي معمولي در كارت گرافيك و يك CPU استفاده ميكنند را با سيستمهايي كه از يك پردازنده گرافيكي شتابدهنده (GPU) بهره ميبرند نشان ميدهد.
در اين شكل، نمودار اول، سه پردازه رندرينگ، T&L و پردازههاي فيزيكي، هوش مصنوعي و اجراي بازي را نشان ميدهد. در سيستمهاي معمولي، T&L، هوش مصنوعي، پردازش فيزيكي مدلها و پردازههاي انجام بازي همگي توسط CPU انجام ميشود.
انجام همه اين دستورها توسط CPU، باعث ميشود كه طراحان بازي، از هوش مصنوعي و جزئيات فيزيكي كمتري استفاده كنند. در نمودار دوم، پردازههاي رندرينگ و تبديل و نوردهي توسط GPU انجام ميشود. از اينرو طراحان بازي ميتوانند از هوش مصنوعي و جزئيات فيزيكي بيشتري در بازيهايشان استفاده كنند. چرا كه CPU ميتواند آسانتر از پيش آنها را پردازش كند.
![]() |
شكل 2 |
nVidia با شكل 2، تاثير يك GPU در بالا بردن كارايي يك سيستم و اينكه طراحان بازي با وجود اين سختافزار تا چه اندازه ميتوانند جزئيات بيشتر و پيچيدهتري را در بازيهايشان قرار دهند نشان ميدهد.
اتومبيل سمت چپ با جزئيات كمتر نشاندهنده سادهتر بودن طرحها در صورت عدم استفاده از GPU و اتومبيل سمت راست با پيچيدگي و جزئيات بيشتر، نشاندهنده گرافيكي با جزئيات بيشتر در صورت استفاده از GPU و شتاب سختافزاري است.
![]() |
شكل 3 - كارت گرافيكي nVidia Geforce 7800 GTX با پردازندههاي گرافيكي پيشرفته و 512 مگابايت حافظه رم. |
در ساخت GPUهاي موجود روي بوردهاي گرافيكي Geforce از حدود بيست و سه ميليون ترانزيستور (بيش از دو برابر پيچيدهتر از پردازندههاي پنتيوم 3) استفاده شده است كه توانايي پردازش پانزده ميليون چندضلعي و 480 ميليون پيكسل در ثانيه را دارد و از 128 مگابايت حافظه فريم بافر پشتيباني ميكند.
يكي از تازهترين محصولات nVidia تا سال 2006، GPUهاي Geforce 7800 GTX است كه در پردازشگر گرافيكي آن از سيصد و دو ميليون ترانزيستور استفاده شده است و ميتواند 13.2 ميليارد پيكسل را در هر ثانيه پر كند. بزرگترين تفاوتهاي اين كارت گرافيك با نوع پيشين خود، عبارتند از:
- موتورهاي بافت و پيكسل جديد
- استفاده از بيست و چهار مسير در ساختار آن در مقايسه با شانزده مسير در مدل قبلي
- بهينهترشدن مسيرها وافزايش كارايي و قابليت برنامهريزي shader
- افزايش سرعت كلاك
nVidia براي افزايش شگفتانگيز سرعت GPUهاي نسل چهارم خود از فناوري nVidia CineFX 4.0 استفاده ميكند. با استفاده از اين فناروي، توسعهدهندگان ميتوانند افكتهاي گرافيكي پيشرفتهتر و با كيفيت بيشتري را براي بازيهاي كامپيوتري و نرمافزارهاي گرافيكي ديگر ايجاد كنند. CineFX 4.0 از DirectX 9.0 پشتيباني ميكند.
nVidia SLI نيز فناورياي است كه اين شركت با استفاده از آن از دو GPU به صورت موازي براي افزايش كارايي سيستم گرافيكي استفاده ميكند.
![]() |
شكل4- GPU كارت گرافيك nVidia Geforce 7800 GTX |
nVidia، از فناوري UltraShadow II نيز در شتاب گرافيكي براي ايجاد سايههاي پيچيده استفاده ميكند. (شكلهاي 3 و 4)
اما شركت nVidia در ساخت اين تراشهها تنها نيست و ATi نام مهم ديگري در اين حوزه است.
در سال 2003، شركت مايكروسافت و ATI Technologies قراردادي بستند كه برطبق آن، ATI بايد فناوريهاي گرافيكي سفارشي و پيشرفتهاي را براي نسل بعدي كنسولهاي اكسباكس فراهم ميكرد.
Bob Feldstein، سرپرست بخش مهندسي شركت ATI Technologies ميگويد: <هدف اين شركت ساخت يك پردازنده گرافيكي بود كه تا پنج سال نيازي به ارتقا نداشته باشد.>
C1 نام رمزي بود كه در ATI، پيش از بسته شدن قرارداد با مايكروسافت براي اين پردازنده به كار ميرفت و پس از قرارداد از نام Xenos براي آن استفاده شد. 175 مهندس روي ساخت اين GPU كار كردهاند و در آن از 337 ميليون ترانزيستور استفاده شده است.
اين قرارداد با ATI، به همكاريهاي پيشين مايكروسافت و nVidia پايان داد.
شتاب سختافزاري و نرمافزاري شكل5 - فراخوانيهاي OpenGl API شكل6 - فراخواني Direct 3D API
منظور از شتاب سختافزاري (hardware 3D acceleration)، رندر نمودن و ترسيم گرافيك سه بعدي با استفاده از پردازندههاي گرافيكي كارتهاي گرافيك (GPU) به جاي استفاده از پردازنده اصلي (CPU) است. چنانچه اين كار به وسيله CPU انجام شود، به آن شتاب نرمافزاري (software acceleration) گفته ميشود. چرا كه CPU براي هرگونه ترسيم گرافيكي، از كتابخانههاي گرافيكي پلتفرم نرمافزاري سيستم خود مانند Mesa در سيستمهاي لينوكس و كامپوننتهاي DirectX در سيستم ويندوز استفاده ميكند. اگر اينكار را GPU انجام دهد، به آن شتاب سختافزاري گفته ميشود.
اما فناوري شتابدهندههاي سهبعدي در بازيهاي كامپيوتري تاريخچهاي چندساله دارد.
در سال 1974، Ed Catmull (كسي كه بعدها سرپرست بخش گرافيك شركت لوكاس فيلم شد) پيشنهاد استفاده ازtexturing mapping ،zbuffering، و modeling را با سطوح خميده داد.اين روشها هنوز هم در همه كارتهاي شتابدهنده استفاده ميشوند.
Texture mapping، روشي براي ترسيم بافت روي يك شي و محاسبه رنگ بافت براي هر پيكسل است و Zbuffer بخشي از حافظه گرافيكي است كه براي ذخيره بعد سوم (Z) يا اطلاعات عمق درباره اشياي رندر شده به كار ميرود. مقدار Zbuffer يك پيكسل، مشخص ميكند كه آن پيكسل در پشت پيكسل ديگر قرار دارد يا جلوي آن. اينكار از جايگزيني (overwriting) اشياي پسزمينه با اشياي پيشزمينه جلوگيري ميكند.
دو سال بعد، Jim Blinn، روشهاي reflection mapping و bump mapping را توسعه داد كه بدون افزودن چندضلعيهاي اضافي، جزئياتي را به مدل سهبعدي ميافزود.
Bump mapping، يك روش سايهپردازي با استفاده از بافتهاي چندگانه و افكتهاي نورپردازي است كه براي شبيهسازي چروك، فرورفتگي و برآمدگي سطوح بهكار ميرود و بسيار پركاربرد است. چون به يك سطح سهبعدي، بدون اينكه به پيچيدگي هندسي آن بيفزايد، جلوههايي مانند سختي و جزئياتي مانند فرورفتگي ميبخشد.
Reflection mapping، قابليت سختافزار در استخراج سريع اطلاعات از صحنه است كه اين اطلاعات ميتواند در ايجاد بافتهاي شفاف مورد استفاده قرار گيرد.
به علت وجود تنوع گسترده در كارتهاي گرافيك، و سخت شدن برنامهنويسي براي آنها توسط توسعهدهندگان، APIهاي گرافيكي به عرصه آمدند كه بازيگران اصلي آن، امروز DirectX و OpenGL هستند. OpenGL كتابخانه مدلسازي و سهبعديسازي است كه بسيار سريع و قابل حمل است.
براي مطمئن بودن از سازگاري يك سختافزار خاص با OPenGL، آن قطعه بايد تست كاركرد OpenGL را پشت سر بگذارد كه مجموعهاي از تستهاي طراحي شده براي ايجاد اطمينان از طراحي و توليد سيستمي مناسب براي رندرهاي سهبعدي است. شكل 5، مراحل اين تست را نشان ميدهد.
زماني كه OpenGL API فراخواني ميشود، دستورها در بافر دستور، و دادههاي برآمدگي و بافت در بافر يكساني قرار ميگيرند. وقتي بافر خالي ميشود، محتواي آن به مرحله بعدي در pipeline ميرود. مرحله انتقال و نوردهي با برآمدگيها براي آمادهسازي و قرارگيري در مكان خود، محاسبه ميشوند و محاسبات نوردهي براي رندركردن رنگ و سايهزني در هر برآمدگي بهكار ميرود. پس از مرحله T&L، داده وارد مرحله rasterization ميشود.
Rastirizer در واقع با استفاده از مشخصات هندسي و بافتها تصويري دوبعدي ايجاد ميكند. اين تصوير سرانجام وارد فريم بافر ميشود كه در حافظه كارتگرافيك قرار دارد. (تصوير در اين مرحله ميتواند روي نمايشگر نشان داده شود).
DirectX نيز كتابخانه توسعه چندرسانهاي است كه توسط مايكروسافت ساخته شده است. يكي از كامپوننتهاي آن Direct 3D است كه در اصل توسط شركتي انگليسي به نام RenderMorphics ساخته شده است و سپس توسط مايكروسافت توسعه داده شد و كامپوننتي از كتابخانه DirectX گرديد.
D3D) Direct 3D)، مستقل از نوع سختافزار ميتواند به شتابدهندههاي گرافيكي و توابع رندركننده گرافيك سهبعدي دسترسي پيدا كند. در شكل6، نحوه فراخواني Direct 3D نشان داده شده است.
بافر اجرا (Execure Buffer) درDirect 3D كمي شبيه بافر دستور (Command Buffer) در OpenGL است. بافر اجرا شامل اطلاعات هندسي و دستورهايي براي اجرا است. برخلاف بافر دستور در OPenGL، بافرهاي اجرا در D3D كمي كند هستند.
آخرين بخش در فراخواني D3D ،DirectDraw است كه در واقع دسترسي به فريم بافر را برعهده دارد. محدوديت ديگرDirect 3D نسبت به OpenGL آن است كه تنها از سه ضلعيها پشتيباني ميكند. ولي OpenGL از چندضلعيها پشتيباني مينمايد.
روشهاي پيشرفته در رندر گرافيكي
در ادامه، افكتهايي كه در گرافيكهاي پيشرفته كامپيوتري مورد استفاده قرار ميگيرند معرفي ميشوند كه مقدار زيادي از كار پردازندههاي گرافيكي، پردازش آنهاست. بخش بزرگي از اين افكتها براي رفع خطاي ديد و نمايش درست صحنهها به كار ميروند كه به برخي از آنها اشاره ميشود.
Anti-aliasing شكل 7 - صفحه چپ بدون استفاده از فيلتر Bilinear و نقشه MIP و صفحه سمت راست با استفاده از آن ساختهشدهاست. شكل 8- ساخت تصويرهاي کوچک تر براي اصلاح زاويهها
بيشتر كاربران دوست دارند تصويرها را در كامپيوتر، با وضوحي بسيار بالا ببينند. تنها وضوح بالاي نمايشگر نميتواند به اين خواسته آنان پاسخ دهد. چون اين چشم انسان است كه وضوح تصويرها را تشخص ميدهد. به همين علت يك فيلم MPEG1 با وضوح 320 در 240 پيكسل با كيفيت بهتري از يك تصوير سهبعدي رندر شده با وضوح 1024 در 768 پيكسل ديده ميشود. به همين علت anti-aliasing نقشي تعيينكننده در ايجاد تصويري نزديك به واقعيت دارد.
يك مانع بر سر راه نمايش گرافيك با وضوح بسيار خوب افكت under-sampling است. اين افكت باعث ميشود كه اشياي داراي بافت، با كوچكترشدن تصوير وضوح بيشتري پيدا كنند.
براي نمونه بازسازي مجازي يك صفحه شطرنجي روي مانيتور كه در فضاي سهبعدي تا دوردست ادامه مييابد؛ مانند آنچه كه در شكل 7 ديده ميشود.
بدون استفاده از فيلتر درخشندگي جزئي (shimmering)، چشم شما صفحه را در دوردست با خانههاي درهم رفته ميبيند. ولي با افزودن اين فيلتر، آن بخشهاي صفحه، با رنگ درخشنده خاكستري ديده ميشود كه در آنجا رنگ پيكسلها يكي سياه و يكي سفيد است.
اين خطاي ديد كه در شكل 7 نشان داده شده است ميتواند توسط فيلتر bilinear و نقشههاي MIP كاهش داده شود. ايده اصلي نقشه MIP براساس پيش پردازش بافتها در مراحل گوناگون است كه پس از بافتهاي كوچكتر براي چند ضلعيهاي دورتر از محدوده ديد استفاده ميشود.
فيلتر bilinear نيز براي بافتهايي كه بزرگنمايي شدهاند تا سطوح ناصاف آنها صافتر ديده شود به كار ميرود. (شكل 8)
يك روش ديگر براي رفع خطاي ديد كه با استفاده از شتابدهنده سختافزاري پيادهسازي ميشود، supersamplingاست. supersampling صحنه گرافيكي را در بافري با گنجايش بيشتر از وضوح نمايشگر ترسيم ميكند و اندازه آن را تا جايي كه قابل نمايش روي مانيتور باشد، كاهش ميدهد.
اين فيلتر، گروهي از پيكسلها را از تصوير اصلي برميگزيند و تاثير آنها بر يكديگر را محاسبه ميكند. نتيجه اين جمعبندي، در يك تصوير بيت مپ فيلتر شده قرار ميگيرد و سپس به فريم بافر منتقل ميشود تا تصويري بدون خطاي ديد نشان داده شود؛ هر چند اين كار به اندازه قابل توجهي حافظه ويديويي و پهناي باند نياز دارد. (پهنايباند هنوز هم محدوديت اصلي بسياري از شتابدهندههاي سختافزاري است. بيشتر شتابدهندهها مانند محفظهاي بزرگ با گذرگاهي تنگ هستند).
روش ديگر كه در كارتهاي Geforce 3 از آن استفاده شده، multisampling است. nVidia سازنده اين كارتها، اين روش را به صورت انحصاري به كار برده و آن را High Resolution Antialiasing) HRAA) يا Quincunx antialiasin ناميده است. اين روش از فيلتر بازسازيكننده يا reconstruction filter استفاده ميكند كه از دادههاي پيكسلهاي اطراف يك پيكسل در يك نقطه خاص استفاده كرده و رنگ آن نقطه را محاسبه ميكند.
در روش Quincunx ،nVidia، براي رفع خطاي ديد، ديگر ناچار نيست وضوح هشتصد در ششصد را به 1600 در 1200 افزايش و سپس هنگام انتقال به سختافزار آن را كاهش دهد. Quincunx مجموعهاي از پنج شي است كه چهار عدد از آنها در چهاروجه يك مكعب و پنجمي در وسط آن قرار ميگيرد. اين كار، اطلاعات را از پيكسلهاي اطراف يك پيكسل خاص استخراج ميكند تا خطهايي را كه كاملاً افقي يا عمودي نيستند صاف نشان دهد. اين كار به معني كاهش قابل توجه در اشغال حافظه و پهنايباند است.
Motion Blur
چشم انسان تنها قادر به پردازش صحيح 25 تا سي فريم در هر ثانيه است و در صحنههاي تاريك اين تعداد، كاهش مييابد. به همين خاطر هم انيميشنهاي سهبعدي بلادرنگ با وجود اينكه ميزان نمايش آنها، 24 فريم در ثانيه است، با دقت كمتري نسبت به فيلمهاي سينمايي كه با همان سرعت نمايش داده ميشوند به نظر ميآيند.
نوعي از aliasing زماني (temporal aliasing) را ميتوان در فيلمهاي سينمايي يا حتي در دنياي واقعي نيز ديد.
در يك فيلم كابويي هنگامي كه چرخهاي گاري به حركت درميآيند، پس از چند ثانيه كه سرعت چرخش آنها افزايش مييابد، ناگهان به نظر ميرسد كه چرخها شروع به چرخش در جهت مخالف ميكنند. اين امر زماني اتفاق ميافتد كه سرعت حركت چرخها از سرعت ثبت فريمها توسط دوربين بيشتر ميشود. در دنياي واقعي نيز زماني كه سرعت چرخش چرخهاي يك اتومبيل از سرعت پردازش تصوير توسط چشم شما (25 تا سي فريم در ثانيه) بيشتر ميشود، به نظر ميرسد كه چرخها در جهت مخالف ميچرخند.
در گرافيكهاي سهبعدي، بدون استفاده از تار كردن حركت (motion blurring)، حاصل كار حتي بدتر از فيلمهاي سينمايي خواهد شد. motion blurring با افزودن ويژگي (blur تار كردن)، حركتهاي تند را به نرمي و در جهت درست آن بازسازي ميكند تا ديگر جهت چرخش چرخها يا هر حركتي نظير اين، وارونه به نظر نرسد.
Depth of Field
شكل 9- چگونگي پردازش Accumulative Buffer در ايجاد Focus.
چشم انسان ميتواند روي يك شي خاص، متمركز يا فوكوس شود و جاهاي ديگر تصوير در حالت disfocus يا معمولي قرار گيرد. اين افكت ميتواند با استفاده از بافري به نام accumulative buffer ساخته شود. ايده اين كار، رندر كردن چندگانه با منبع نقطه ديد با اختلاف جزئي در اطراف موقعيت اصلي است.
هدف نقطه ديد در محدوده فوكوس قرار ميگيرد. در شكل7، چگونگي كار accumulative buffer نشان داده شده است. در شكل 9، محدوده فوكوس، پر رنگتر از محدوده ديد معمولي است.
تفاوت در شتابدهندهها
در پايان، يكي از تفاوتهاي شتاب سختافزاري و شتاب نرمافزاري را ميتوان با يكي از screen saverهاي ويندوز ديد. معمولاً در بيشتر ويندوزهاي امروزي و نيز ويندوز اكسپي، يك محافظ صفحهنمايش به نام 3D Text وجود دارد كه به وسيله آن ميتوانيد كارايي دو روش شتاب نرمافزاري و سختافزاري را در نمايش گرافيك سهبعدي ببينيد.
براي اين كار، نخست وضوح صفحه نمايشتان را تا آنجا كه مانيتورتان از آن پشتيباني ميكند افزايش دهيد، مانند 1024*1280 با كيفيت رنگ 32 بيتي. معمولاً اگر كارت گرافيك شما به درستي نصب شده باشد بايد گزينهDisable hardware 3D rendering غيرفعال باشد. آن گزينه را علامت بزنيد تا انتخاب شود. با اين كار، شما ميخواهيد رندر اين متن گرافيكي سهبعدي را بدون استفاده از پردازنده كارت گرافيك انجام دهيد. سپس به منويProperties كه بازگرديد و سپس روي Preview كليك كنيد تا screen saver، نمايش داده شود.
خواهيد ديد كه اين مدل سه بعدي چندان نرم و سريع به نمايش در نميآيد؛ زيرا اين مدل با شتاب نرمافزاري رندر ميشود. براي فعال نمودن شتاب سختافزاري، دوباره آنچه را كه در بالا گفته شد انجام دهيد. ولي در آخرين منو، علامت گزينه Disable hardware rendering را برداريد. با اين كار، رندر با استفاده از شتاب سختافزاري و پردازنده كارت گرافيك شما انجام ميشود. اين بار با كليك روي Preview، نرمتر و سريعتر به نمايش در آيد.
براي دسترسي به كنترل ميزان شتاب سختافزاري نيز ميتوانيد در دسكتاپ كليك راست كنيد و به ترتيبproperties ،setting ،advanced و troubleshoot را برگزينيد. در بخش Hardware acceleration ميتوانيد مقدار آن را كم يا زياد كنيد. معمولاً براي بازيهاي كامپيوتري پيشنهاد ميشود شتاب سختافزاري روي Full باشد.
منابع
A Review Of 3-D Accelerator Technology
For Games
Nathan Chia ، Richard Cant ، David Al-Dabass
www.nVidia.com
www.PCTechGuide.com
www.pcper.com
www.megalong.com
www.gentoo.com