PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : چگونه پردازنده‌هاي گرافيكي پردازش بانك‌هاي اطلاعاتي را دگرگون خواهند كرد



Borna66
03-23-2011, 11:56 PM
چگونه پردازنده‌هاي گرافيكي پردازش بانك‌هاي اطلاعاتي را دگرگون خواهند كرد

منبع: اسپكتروم سپتامبر 2009 ترجمه: محمد ناصح

اشاره: تاريخچه فناوري پر از نمونه‌هايي است كه پيشرفت در يك زمينه موجب پايان بخشيدن به تلاش‌هايي در زمينه‌هاي مرتبط ديگر شده است. در سال 1973 لامپ‌خلاء 300B توسط شركت وسترن‌الكتريك به منظور تقويت سيگنال‌هاي تلفن معرفي‌شد، اما بعدها اين فناوري كاربردهايي بسيار جالب‌تر از تقويت‌كننده سيگنال صوتي پيدا كرد. ساعت‌هاي اتمي براي نخستين‌بار در دهه 1960 به‌منظور ردگيري ماهواره‌ به‌كار گرفته شدند و بعدها به‌منظور ارزيابي صحت تئوري‌هاي نسبيت آلبرت اينشتين مورد استفاده قرار گرفتند. امروزه، عملكرد اين ساعت‌ها اساس سيستم موقعيت‌يابي جهاني (GPS) را تشكيل مي‌دهد. فناوري Magnetron نيز در دهه 1920 توسط شركت جنرال الكتريك معرفي شد و در طول جنگ‌جهاني دوم براي ساخت رادارها به‌كار گرفته شد. بعدها اين فناوري با كمي تغيير به فناوري اصلي اجاق‌هاي ماكروويو امروزي تبديل شد.


http://www.shabakeh-mag.com/Data/Articles/Items/2010/10/1004068.jpg

Borna66
03-23-2011, 11:56 PM
حالا زمان اضافه‌شدن يك فناوري جديد به موارد مذكور فرا رسيده است. پردازنده‌هاي جانبي گرافيكي كه در دهه 1970 براي انجام محاسبات حجيم و تكراري ابداع شدند و تصاوير واقعي‌تر را در نمايشگرها به‌نمايش مي‌گذاشتند، امروزه در بانك‌هاي اطلاعاتي عظيم نيز كارايي يافته‌اند.


http://www.shabakeh-mag.com/data/gallery/2010/10/cuda1_s.jpg
پردازش داده‌هاي بانك‌هاي اطلاعاتي، اساس فناوري‌هاي محاسباتي است و بر مبناي گزارش مؤسسه تحقيقاتي فورستر واقع در كمبريج ماساچوست، بازار آن تنها در سال گذشته 27 ميليارد دلار درآمدزايي داشته است. مؤسسه مذكور پيش‌بيني مي‌كند، اين رقم (كه هزينه بانك‌هاي اطلاعاتي جديد، پشتيباني فني و مشاوره را شامل مي‌شود) تا سال 2013 به 32 ميليارد دلار مي‌رسد. هربار كه در سايت eBay در يك حراجي شركت مي‌كنيد، در سايت Netflix فيلمي را جست‌وجو مي‌كنيد، يك عنوان Kindle را در سايت آمازون يا مطالب دلخواه را در سايت گوگل جست‌وجو مي‌كنيد، برنامه‌هاي بزرگي براي كار با بانك‌هاي اطلاعاتي اجرا مي‌شوند و اطلاعات موردنظر را از بين ده‌هاهزار كامپيوتر مي‌يابند.

كاربرد جديد تراشه‌هاي گرافيكي كه تا كنون به‌عنوان موتور بازي‌هاي كامپيوتري به‌كار مي‌رفتند، ديد ما را نسبت به كاربري آن‌ها متحول خواهد كرد. شايد بپرسيد بين بانك‌هاي اطلاعاتي بزرگ در مقياس سازماني با رندركردن غول‌هاي مجازي درون بازي‌هاي كامپيوتري چه رابطه‌اي وجود دارد؟ هر دو فرآيند مستلزم پردازش حجم زيادي از داده‌ها هستند. شبيه‌سازي غول‌هاي مجازي كه ظاهري كاملاً طبيعي دارند، مستلزم پردازش اطلاعات ميليون‌ها پيكسل در هر ثانيه است، در حالي كه جست‌وجو در بانك‌هاي اطلاعاتي بزرگ نيازمند دسترسي به ميليون‌ها ركورد در ثانيه است. پس چرا از همان سخت‌افزاري كه غول مجازي را شبيه‌سازي كرده است، براي انجام وظايف پردازشي دنياي واقعي (مانند جست‌وجوي بانك‌هاي اطلاعاتي) كه كاربرد بيشتري از غول‌هاي مجازي دارند، استفاده نكنيم؟

Borna66
03-23-2011, 11:57 PM
در چند سال گذشته محققان دانشگاه سانتاكروز واقع در ايالت كاليفرنيا و شركت اوراكل به‌دنبال راه‌هايي براي استفاده بهينه از قابليت‌هاي پردازنده‌هاي گرافيكي يا GPU بوده‌اند. اين تراشه‌ها به‌گونه‌اي طراحي شده‌اند كه در كنار پردازنده اصلي سيستم يعني CPU براي پردازش اطلاعات مربوط به بازي‌ها و تصويرسازي علمي به‌كار گرفته شوند. پردازنده‌هاي گرافيكي درواقع نوادگان كارت‌هاي ويديويي قديمي هستند كه تنها محتواي حافظه را در صفحه نمايشگر نشان مي‌دادند. اين پردازنده‌هاي گرافيكي به‌واسطه انجام محاسبات و اجراي عملكردهاي تكراري ساده كه براي رندر كردن خطوط، اشكال چندضلعي و سطوح مورد استفاده در يك صحنه گرافيكي متحرك ضروري هستند، بار محاسباتي CPU را كاهش مي‌دهند. امروز با صرف هزينه لازم براي خريد يك كامپيوتر عادي، يك كارت گرافيكي به‌دست مي‌آوريد كه توان پردازشي ابركامپيوترهاي ده سال قبل را در قالب يك قطعه سخت‌افزاري‌ در اختيارتان مي‌گذارد.


پردازش موازي اطلاعات در بازي‌هاي كامپيوتري

تعامل GPU با اطلاعات
پيش از CUDA: يك GPU براي نمايش آدرس بايد هر جزء آن را در قالب مجموعه‌اي از سه عدد توصيف كند. اين اعداد مثلث‌هايي را ايجاد مي‌كنند كه در واقع عناصر سازنده اشياي گرافيكي هستند. يك پردازنده گرافيكي تنها به اين ترتيب مي‌تواند اطلاعات را پردازش كند. پردازنده‌هاي گرافيكي در اصل براي اجراي تعداد كمي عمليات ساده مانند رنگ‌آميزي پيكسل‌ها و پردازش جلوه‌هاي نوري طراحي شده بودند و پردازنده اصلي سيستم بخش اعظم محاسبات مربوط به ترسيم را انجام مي‌داد.
اما هر دستورالعمل توسط بيش از صد پردازنده داخلي موسوم به عناصر پردازشي اجرا مي‌شود. هريك از اين پردازنده‌هاي داخلي عمليات مربوط به بخشي از داده‌ها را به اجرا درمي‌آورد. فرض كنيم يك پردازنده وظيفه دارد مجموعه 64‌ تايي از بردارها را (كه هريك مانند مختصات سه‌تايي بالا تصوير تعريف مي‌شوند) با يك مجموعه 64‌ تايي ديگر جمع كند. يك CPU اين مقادير را به‌طور سري با يكديگر جمع مي‌كند؛ به اين معني كه نخستين مؤلفه گروه x-y-z-w با نخستين مؤلفه از گروه دوم، دومين مؤلفه گروه نخست با دومين مؤلفه گروه دوم و... جمع مي‌شود.
اين وسيله نقليه با استفاده از يك مدل شبكه‌اي متشكل از تعداد بسيار زيادي اشكال مثلثي ساخته شده است. پردازنده گرافيكي با استفاده از يك توصيف بسيار ساده، تمام مثلث‌ها و رنگ‌ها را ترسيم كرده و به‌منظور نمايش در نمايشگر به پيكسل تبديل مي‌كند. اين فرآيند بارها و بارها تكرار مي‌شود. يك GPU مانند CPU سلسله‌اي از دستورالعمل‌ها را اجرا مي‌كند.. پردازنده گرافيكي مي‌تواند تمام 64 بردار مجموعه نخست را با تمام 64 بردار مجموعه دوم به‌طور همزمان جمع كند. علت اين است كه پردازنده‌هاي گرافيكي مي‌توانند مجموعه‌‌هاي اعداد را مانند اعداد منفرد پردازش كنند.
به‌عبارت ديگر، وظيفه‌اي كه اجراي آن توسط CPU مستلزم اجراي 256=4×64 دستورالعمل است، در GPU تنها توسط يك دستورالعمل اجرا مي‌شود. علت اين است كه در GPU بردارها با يك دستورالعمل با يكديگر جمع مي‌شوند و صدها عنصر پردازشي فرآيند جمع 64 بردار را به‌طور همزمان اجرا مي‌كنند.

Borna66
03-23-2011, 11:57 PM
يك GPU در هر ثانيه مي‌تواند ميلياردها عمليات محاسباتي را انجام دهد (تعداد عمليات محاسباتي بعضي از آن‌ها به يك ترافلاپ يا يك تريليون درثانيه مي‌رسد)، در حالي كه توان الكتريكي مصرفي و گرماي توليد شده از آن تنها كمي بيشتر از يك CPU است. با صرف توان الكتريكي و فرآيند خنك‌سازي يكسان، توان پردازشي يك GPU حدود بيست تا سي برابر CPU‌ است. بنابر‌اين، ميزان توان مصرفي GPU به‌ازاي هر عمليات محاسباتي بسيار كمتر از CPU است.

براي مثال كارت گرافيكي Nvidia GeForce GTX 285 را درنظر بگيريد. اين كارت گرافيكي با قيمتي معادل يك CPU چهارهسته‌اي و توان مصرفي 1/5 برابر آن (حدود 200 وات) پردازنده‌اي را در اختيار كاربر مي‌گذارد كه در هرثانيه يك تريليون محاسبه رياضي (يعني 20 برابر توان محاسباتي CPU) را انجام مي‌دهد. از آنجا كه در يك سرور مي‌توان تا چهار كارت گرافيكي را به‌كار گرفت، مي‌توان با استفاده از اين تجهيزات، توان پردازشي سيستم‌هاي امروزي را چندگام به جلو برد. استفاده از چهار GPU به‌جاي يك CPU كارايي سيستم را تا هشتاد برابر و توان مصرفي آن را تنها تا شش برابر افزايش مي‌دهد. به اين ترتيب، با كاهش تعداد كامپيوترها هزينه‌هاي خنك‌سازي ديتاسنتر نيز كاهش مي‌يابد.

Borna66
03-23-2011, 11:57 PM
در حال حاضر، محققان توان محاسباتي پردازنده‌هاي گرافيكي را در سرورها به‌كار گرفته‌اند. در اواسط سال 2007 شركت Nvidia يك ابركامپيوتر مبتني بر GPU را عرضه كرد كه پلتفرم Tesla خوانده مي‌شد. اين كامپيوتر توانايي انجام محاسبات لازم را براي شبيه‌سازي پروژه‌هاي بيولوژي سلولي، آسيب‌شناسي دارويي و زمين‌شناسي دارد. سيستم‌هاي جديد Tesla از چهار GPU و تقريباً هزار هسته تشكيل شده‌اند كه قابليت كار با سرعت محاسباتي ترافلاپ را دارند. در ماه ژوئن 2009 كلاستر Tsubame در دانشگاه توكيو كه از 170 سرور تسلا تشكيل شده است، در فهرست پانصد ابر كامپيوتر برتر دنيا ‌رتبه 41 را به‌خود اختصاص داد. كارايي اين ابر كامپيوتر در آزمون Linpack به حجم محاسباتي 77 ترافلاپ رسيد. آزمون اخير آن دسته از برنامه‌هاي علمي را شبيه‌سازي مي‌كند كه براي حل معادلات خطي به‌كار گرفته مي‌شوند.

به‌دلايلي واضح،‌ ما به تمام پيشرفت‌هاي افزايش‌دهنده كارايي فرآيند پردازش بانك‌هاي اطلاعاتي علاقه داريم. ما يك الگوريتم جست‌وجوي موازي را توسعه داديم كه از ساختار منحصربه‌فرد پردازنده‌هاي گرافيكي به‌خوبي بهره‌مي‌برد و در آزمون‌هاي انجام گرفته، نتايج خوبي كسب كرده است.

تا‌كنون مقدمات كار فراهم شده، اما براي رسيدن به هدف نهايي راه درازي باقي مانده است. افزايش كارايي پردازنده‌هاي گرافيكي همراه نتايج حاصل از تحقيق و توسعه و تمايل صنايع به افزايش بازده و كاهش هزينه‌ها (شامل هزينه‌هاي توان مصرفي، خنك‌سازي و فضاي ديتاسنتر) زمينه را براي به‌كارگيري اين تراشه‌ها در فضاي خارج از حوزه گرافيك فراهم مي‌كند.

تا اواسط دهه 1990 كارت‌هاي ويديويي تنها وظيفه نمايش اطلاعات موجود در بخشي از حافظه سيستم بر صفحه نمايشگر را برعهده داشتند. بعدها پردازنده‌هاي گرافيكي بخش ‌بيشتري از وظايف CPU را بر عهده گرفتند. اما پردازنده‌هاي گرافيكي اوليه قابليت برنامه‌نويسي نداشتند و تنها توانايي اجراي عمليات ترسيم اشكال ساده را داشتند.

با افزايش درخواست براي بازي‌هاي كامپيوتري واقعي‌تر (كه علت اصلي تحول پردازنده‌هاي گرافيكي بود) نتايج جالبي به‌دست آمد. يك كارت گرافيكي چهارصد دلاري مي‌توانست با يك مدار تصويرساز سفارشي كه تنها چندسال قبل، پيشرفته‌ترين فناوري زمان خود محسوب مي‌شد و حدود دويست‌هزار دلار قيمت داشت، رقابت كند. توسعه‌دهندگاني كه با اين توان پردازشي سروكار داشتند، كم‌كم به فكر افتادند كه چه كاربردهاي ديگري مي‌توان براي آن يافت؟ هدف اصلي انتقال بخشي از بار محاسباتي از CPU‌ به GPU بوده است.

Borna66
03-23-2011, 11:58 PM
با تمام اين اوصاف، معماري پردازنده‌ها و پردازنده‌هاي گرافيكي تفاوت‌هاي بنياديني دارد و به‌همين دليل، كار با آن‌ها مستلزم بهره‌گيري از رويكردهاي برنامه‌نويسي متفاوت است. از ديدگاه يك برنامه‌نويس، پردازنده گرافيكي دستگاهي با عملكردهاي موازي است در حالي كه عملكرد پردازنده اصلي سيستم به‌صورت سري انجام مي‌شود. يك CPU دستورالعمل‌ها را يكي پس از ديگري اجرا مي‌كند و هر دستورالعمل نيز تنها يك وظيفه را (مانند جمع كردن يا تعويض محتواي دو بخش از حافظه سيستم) انجام مي‌دهد. در مقابل يك GPU مي‌تواند چند جفت از اعداد را به‌طور همزمان جمع كند. علت اين است كه GPU از چندين پردازنده متصل به‌هم تشكيل شده است.

اما علت معماري متفاوت GPU و CPU ‌چيست؟ پردازنده‌هاي گرافيكي به‌منظور انجام پردازش‌هاي بسيار زياد و تعيين نحوه رنگ‌بندي پيكسل‌هاي نمايشگر طراحي شده‌اند. در گرافيك كامپيوتري، صحنه‌ها با استفاده از اشكال مثلثي ساخته مي‌شوند و هر مثلث با استفاده از سه‌بردار توصيف مي‌شود. يك بردار مجموعه‌اي از مختصات است كه موقعيت نقطه‌اي را در فضاي سه‌بعدي مشخص مي‌كند.

هر يك از اين بردارها توسط چهار مقدار x، y، z و w تعريف مي‌شوند (متغير w تنها يك فاكتور جبري است كه براي توصيف يك نقطه با استفاده از مختصات همگن به‌كار مي‌رود. اين مختصات براي شبيه‌سازي دگرديسي اشكال هندسي كاربرد دارند). بنابر‌اين، يك مثلث با سه رأس آن به‌صورت ‌{(x0, y0, z0, w0), (x1, y1, z1,w1),‌ (x2, y2, z2, w2)} تعريف مي‌شود. همچنين هريك از پيكسل‌هاي تشكيل‌دهنده مثلث نيز بايد رنگ‌آميزي شوند. رنگ هر پيكسل توسط يك بردار با چهار مقدار قرمز، سبز، آبي و درصد شفافيت مشخص مي‌شود. حال براي درك بهتر حجم عمليات محاسباتي، يك صحنه گرافيكي را درنظر بگيريد كه از ميليون‌ها مثلث تشكيل شده و در يك فيلم انيميشني حداقل 24 فريم در ثانيه نمايش داده مي‌شود.

پيش از ظهور پردازنده‌هاي گرافيكي براي ترسيم يك مثلث در فضاي سه‌بعدي، پردازنده سيستم بايد دقيقاً شكل ظاهري مثلث، موقعيت بردارها نسبت به بيننده، پيكسل‌ها و بخش‌هايي از پس‌زمينه را كه براي بيننده قابل مشاهده بود، رنگ تمام پيكسل‌ها و‌... پردازش مي‌كرد. اين فرآيند بسيار طولاني بود. با وجود اين‌كه يك GPU عمليات محدودي را اجرا مي‌كند، ‌توانايي آن در اجراي موازي عمليات محاسباتي فوق‌العاده است. اين پردازنده‌ها مي‌توانند صدها و حتي هزاران مثلث را بدون هيچ مشكلي و تنها در يك لحظه ترسيم كنند.

Borna66
03-23-2011, 11:58 PM
از همان ابتداي كار محققان ايده‌هاي جالبي براي استفاده از اين توان پردازشي عظيم براي انجام ساير وظايف محاسباتي در ذهن خود داشتند. در سال 2002 مارك هريس كه امروزه به‌عنوان محقق گرافيك كامپيوتر در Nvidia مشغول كار است، واژه GPGPU (سرنام General-Purpose computation on Graphics-Processing Units) را براي اشاره به فرآيند پردازش چندمنظوره با استفاده از واحد پردازش گرافيكي به‌كار گرفت.

شايد بپرسيد، اين رويكرد چه دستاوردي داشت؟ اجازه دهيد پاسخ را با واضح‌ترين مزيت اين رويكرد آغاز كنيم. پردازنده‌هاي گرافيكي به‌گونه‌اي طراحي شده‌اند كه يك وظيفه را كه همان ترسيم مثلث‌ها در نمايشگر سيستم است، بسيار خوب انجام مي‌دهند. زيرا اين تجهيزات در اصل براي فروش در بازار بازي‌هاي كامپيوتري طراحي شدند. تا همين اواخر برنامه‌نويسي GPU‌ يكي از «هنرهاي سياه» علوم كامپيوتر محسوب مي‌شد. اصول اين كار بسيار محرمانه و دشوار بود و تنها در اختيار تعداد محدودي از هكرها و محققان قرار داشت. انجام اين كار مستلزم اجراي يك فرآيند نگاشت دومرحله‌اي بود. ابتدا برنامه‌نويس بايد اطلاعات مربوط به مسئله را دريافت كرده و آن را روي اطلاعات گرافيكي نگاشت مي‌كرد تا GPU‌ بتواند با آن كار كند. سپس بايد روش مناسبي را به‌منظور تشريح عمليات موردنياز حل مسئله براي GPU مي‌يافت. بنابر‌اين بايد به‌گونه‌اي GPU را فريب مي‌داد و عمليات محاسباتي موردنظر را در قالب فرآيند ترسيم مثلث‌ها در اختيار آن قرار مي‌داد، زيرا ترسيم مثلث‌ها تنها فرآيند قابل درك براي GPU بود. در اين رابطه به بخش «پردازش موازي اطلاعات در بازي‌هاي كامپيوتر» مراجعه كنيد.

به‌منظور كار با رئوس مثلث بايد تركيبي از ابزارهاي برنامه‌نويسي مانند OpenGL، Microsoft DirectX، CG يا زبان‌هاي برنامه‌نويسي اختصاصي بعضي از پردازنده‌هاي گرافيكي به‌كار گرفته مي‌شد كه به‌طور خاص براي كارهاي گرافيكي طراحي شده بودند. اين فرآيند بسيار پيچيده و جالب به نظر مي‌رسيد، اما بسيار زمان‌گير بود و منافع اقتصادي نداشت. خوشبختانه مدتي بعد، معماري CUDA معرفي شد و همه‌چيز را تغيير داد.


الگوريتم P-ARY

بهره‌برداري از پردازش موازي : بانك‌هاي اطلاعاتي به‌منظور اجتناب از بازبيني تمام ركوردها هنگام ورود هر درخواست، از فهرست‌هاي مرتب شده‌اي موسوم به ايندكس استفاده مي‌كنند. هر پردازنده عهده‌دار پردازش بخش يكساني از يك ايندكس و جست‌و‌جوي نخستين ورودي در بخش اختصاصي خود است.
مقايسه نتايج (يافتن بخشي كه نخستين ركورد آن در حروف الفبا از نظر موقعيت از ساير بخش ها بالاتر و از كليدواژه جست‌‌وجو پايين‌تر قرار دارد) براي تعداد محدودي از افراد يا پردازنده‌ها كار دشواري نيست. اما اگر تعداد پردازنده‌ها به بيش از صد عدد افزايش يابد، چه اتفاقي رخ مي‌دهد؟
تعداد ارتباطاتي كه براي اجراي اين وظيفه برقرار مي‌شود با افزايش تعداد پردازنده‌ها، به‌صورت نمايي افزايش مي‌يابد. يك راهبرد بهتر اين است كه اجازه دهيد هر پردازنده دو عمل مقايسه را براي نخستين و آخرين ركورد بخش اختصاصي خود انجام دهد. اين راهبرد براي GPU به‌خوبي عمل مي‌كند. هر يك از عناصر پردازشي GPU نخستين و آخرين ركورد بخش مخصوص به خود را به‌طور همزمان بررسي كرده و منتظر اعلام نتيجه نهايي يا كاهش حجم داده‌هاي مورد جست‌و‌جو توسط يكي از پردازنده‌ها مي‌شود.
جست‌و‌جوي باينري
يافتن Jane Doe با استفاده از جست‌‌وجوي باينري به شيوه متداول، مستلزم اجراي ده مرحله است.

جست‌وجو با الگوريتم P-ARY
اكنون يافتن Jane Doe با استفاده از عناصر پردازشي (PEs)، مستلزم اجراي پنج مرحله است.

Borna66
03-23-2011, 11:58 PM
يكي از كارمندان روياپرداز شركت Nvidia به‌نام جان نيكولز متوجه توان بالقوه فرآيند GPGPU شد و در سال 2007 معماري Computer Unified Device Architecture به دنيا معرفي شد. اين معماري تاريخچه پردازش‌هاي چندمنظوره با استفاده از پردازنده‌هاي گرافيكي را به دوبخش مجزا شامل بخش پيش از معرفي CUDA و بخش پس از معرفي CUDA تقسيم كرد. با استفاده از معماري CUDA استفاده از پردازنده‌هاي گرافيكي براي كاربردهاي مختلف بسيار ساده‌تر شد. حال اين پردازنده‌ها عملياتي بيش از ترسيم مثلث‌ها را انجام مي‌دهند، دستورالعمل‌هايي فراتر از ترسيم را اجرا و اطلاعاتي بيش از داده‌هاي مربوط به مختصات و رنگ‌ها را درك مي‌كنند. به‌عنوان مثال، امروزه يك برنامه‌نويس بدون نياز به استفاده از اعداد اعشاري مي‌تواند نامي مانند Jane Doe را در قالب يك دنباله كاراكتري ساده مانند {J,a,n,e,…} ذخيره كند.

شركت Nvidia در مسير ساخت محيط برنامه‌نويسي مناسب به‌منظور افزايش دسترسي GPGPU تنها نيست. شركت ATI كه يكي از بزرگ‌ترين توليدكنندگان كارت‌هاي گرافيكي است (و امروزه با عنوان گروه محصولات گرافيكي AMD شناخته مي‌شود) يك فناوري چندمنظوره محاسبات GPU را با عنوان Stream SDK معرفي كرده است. هر دو شركت Nvidia و AMD به‌همراه آي‌بي‌ام، اپل، اينتل و سايرين تمام تلاش خود را روي زبان برنامه‌نويسي موازي OpenCL متمركز كرده‌اند كه امكان نوشتن برنامه‌هايي براي GPU، CPU و ساير فرآيندهاي مربوطه را با استفاده از يك رويكرد مشترك فراهم مي‌كند. زبان OpenCL در واقع يك نگارش محلي از كودا است.

Borna66
03-23-2011, 11:58 PM
براي درك علت استفاده از پردازنده‌هاي گرافيكي در مراكز داده ابتدا بايد با نيازمندي‌هاي برنامه‌هاي جديد مراكز داده آشنا شويد. جست‌و‌جوي بانك‌هاي اطلاعاتي بزرگ مانند گوگل يا eBay معمولاً به‌معناي يافتن گروه كوچكي از ركوردهاي خاص از بين ميليون‌ها نمونه موجود است. يك پردازنده بايد اين اقدام را حداكثر در چند ميلي‌ثانيه انجام دهد. اين فرآيند براي صدها يا هزاران كاربر تكرار مي‌شود كه هريك همان بانك اطلاعاتي را براي يافتن اطلاعات مختلف جست و‌جو مي‌كنند.

فرض كنيم، eBay را براي يافتن يك توليدكننده صدا از نوع گرام اديسون كه در سال 1906 ساخته شد، جست‌وجو مي‌كنيد. اين توليد كننده صدا، اصوات درون سيلندرهاي مومي قديمي را به صداهاي قابل فهم تبديل مي‌كند. چيزي كه به‌دنبال آن هستيد، يك توليدكننده صدا است كه به دو سيلندر پلاستيكي از جنس سلولويد مجهز باشد كه به احتمال در قرن گذشته توليد شده‌اند. بنابر اين، درخواست خود را در نوار جست و‌جوي eBay وارد مي‌كنيد و با اين اقدام زنجيره‌اي از رخدادها آغاز مي‌شود. ابتدا فرم دريافت اطلاعات (كه مترجم بين كد پس‌زمينه يك برنامه و ساختار گرافيكي موجود در صفحه وب است‌) كليدواژه‌هاي ورودي را براي سرور ارسال مي‌كند.

سپس برنامه‌اي روي سرور، اين كليد واژه‌ها را (توليدكننده صداي اديسون) با حدود بيست ميليون فهرست مربوط به حراج‌هاي فعال در eBay مقايسه مي‌كند تا تمام يا بعضي از كليدواژه‌ها را در بانك اطلاعاتي آن بيابد. در اين بين هجده نتيجه منطبق با كليدواژه‌ها يافت مي‌شود.

سپس نرم‌افزار eBay اين نتايج را براي شما نمايش مي‌دهد. درباره هر يك از اين نتايج بايد نام، تصوير مربوطه، تعداد قيمت‌هاي پيشنهادي و مدت‌زمان باقي‌مانده از حراج به‌نمايش درآيد. تمام اين اطلاعات بايد در مدت زمان كمتر از دو ثانيه از منابع مختلف گردآوري شده و به‌نمايش درآيند. پس از ادغام تمام اين اطلاعات در قالب يك صفحه وب، برنامه مذكور آن را در پنجره مرورگر شما بارگذاري مي‌كند. اما مدت زمان دوثانيه‌اي علاوه بر اين كه دربرگيرنده زمان جست‌وجوي اطلاعات در بانك اطلاعاتي است، شامل زمان لازم براي بازيابي، مرتب‌سازي، بارگذاري تصاوير و جبران تأخير عملكرد شبكه، پهناي باند كم، سرعت اتصال پايين و به احتمال سرعت پايين كامپيوتر كاربر نيز مي‌شود. به اين معنا كه مدت زمان دسترسي به بانك اطلاعاتي eBay تنها كسر بسيار كوچكي از زمان دوثانيه‌اي است كه براي مشاهده نتايج جست‌و‌جو درباره توليدكننده صداي اديسون در انتظار به‌سر برديد. در واقع بيشتر زماني كه منتظر دريافت نتايج جست‌و‌جو هستيد، براي انتقال اطلاعات از برنامه‌هاي متفاوت سرور كه در شبكه‌هاي مختلف توزيع شده‌اند، به كامپيوتر شما ‌صرف مي‌شود. مجموع تمام اين فاكتورها و زمان مناسب پاسخ‌گويي كه امكان جست‌وجوي بانك‌اطلاعاتي eBay را فراهم مي‌كند، چيزي حدود چند هزارم ثانيه است.

درنظر داشته باشيد كه گوگل، آمازون و eBay در هر ثانيه بايد حجم زيادي از درخواست‌ها را پاسخ‌گو باشند. هنگامي كه توليدكننده صدا را جست‌‌وجو مي‌كنيد، دويست نفر در جست‌‌وجوي لباس ارغواني رنگ، سه هزار نفر در جست‌و‌جوي حراج‌هاي انگشتر الماس و شش‌هزار نفر ديگر در جست‌و‌جوي كتاب‌هاي دست‌دوم و‌... هستند. براي كسب يك دورنماي كلي از اين شرايط بهتر است بدانيد نرم‌افزار eBay با دريافت هر درخواست بيش از 24 ميليون فهرست را جست‌و‌جو مي‌كند. سايت آمازون روزانه صدها هزار كالا را به‌فروش مي‌رساند و نرم‌افزار گوگل بايد كاربران را از بين 182 ميليون نام حوزه ثبت شده در سراسر جهان، به آدرس موردنظر آن‌ها راهنمايي كند.

Borna66
03-23-2011, 11:59 PM
ديسك‌هايي كه در سرورهاي شركتي مورد استفاده قرار مي‌گيرند، براي پاسخ‌گويي همزمان چندين درخواست در مدت چند هزارم ثانيه بسيار كند هستند. آيا بهتر نيست به‌جاي انتظار براي جست‌وجوي صدها يا شايد هزاران ديسك كند، تمام بانك اطلاعاتي را درون يك حافظه بسيار سريع ذخيره كنيم؟ اين دقيقاً كاري است كه بانك‌هاي اطلاعاتي سازماني قصد انجام آن را دارند.

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

البته، اين رويكرد هزينه‌هاي جانبي دارد؛ استفاده از ديتاسنترهاي بزرگ مستلزم صرف انرژي زياد، هزينه خنك‌سازي و تهيه فضاي مناسب است. با افزايش حجم اطلاعات آنلاين و تعداد كاربران (و در نتيجه افزايش بار كاري سرورها) چاره‌اي جز افزايش تعداد و كارايي سرورها نيست. از طرفي پردازنده‌هاي گرافيكي نيز مي‌توانند وظايف محاسباتي سرورهاي فعلي را با صرف انرژي الكتريكي بسيار كمتر انجام دهند.

"نمونه‌اي از برنامه‌هايي كه مي‌تواند از پردازنده‌هاي گرافيكي به‌خوبي بهره‌برداري كند، ‌بانك‌ اطلاعاتي پروژه‌هاي فضايي است كه داده‌هاي موجود در آن‌شباهت زيادي به اطلاعات گرافيكي دارد. در واقع اين داده‌ها نخستين سري از اطلاعاتي بودند كه به‌منظور پياده‌سازي عمليات پيچيده پردازنده‌هاي گرافيكي براي تركيب نتايج حاصل از گروه‌هاي داده‌اي مختلف به‌كار گرفته شدند."

Borna66
03-23-2011, 11:59 PM
نرم‌افزارهاي سازماني دليل ديگري نيز براي روي آوردن به پردازنده‌هاي گرافيكي دارند. اطلاعات سازماني تمام چيزي است كه شركت‌ها براي ادامه تجارت خود به آن نياز دارند. اين اطلاعات براي eBay شامل تمام فهرست‌ها، مشخصات كاربران، بازخورد و پيشنهاداتي است كه از يكصد ميليون نفر كاربر خود در سراسر جهان گردآوري مي‌كند. رشد حجم اطلاعات سازماني نسبت به ميزان افزايش تعداد ترانزيستورهايي كه در يك تراشه به‌كار مي‌روند كمتر است (قانون مور)، بنابر‌اين، ظرفيت حافظه كامپيوتر سريع‌تر از اطلاعات سازماني افزايش مي‌يابد. دلايل اين واقعيت نيز كاملاً واضح هستند. اكنون امكان نگه‌داري بانك‌هاي اطلاعاتي بزرگ درون حافظه سيستم فراهم شده است، به اين معني كه مي‌توان داده‌ها را تنها در چند هزارم ثانيه از حافظه استخراج كرد.

زمان دقيق دسترسي به ديسك بين چهار تا ده هزارم ثانيه است. با وجود اين كه زمان مذكور كافي به‌نظر مي‌رسد، هنگام پاسخ‌گويي به ميليون‌ها درخواست، اين مدت زمان به چندين ساعت مي‌رسد. نمونه‌اي از برنامه‌هايي كه مي‌تواند از پردازنده‌هاي گرافيكي به‌خوبي بهره‌برداري كند، ‌بانك‌ اطلاعاتي پروژه‌هاي فضايي است كه داده‌هاي موجود در آن‌شباهت زيادي به اطلاعات گرافيكي دارد. در واقع اين داده‌ها نخستين سري از اطلاعاتي بودند كه به‌منظور پياده‌سازي عمليات پيچيده پردازنده‌هاي گرافيكي براي تركيب نتايج حاصل از گروه‌هاي داده‌اي مختلف به‌كار گرفته شدند. در نتيجه اگر كارايي و زمان پاسخ‌گويي بانك اطلاعاتي به‌واسطه بهره‌گيري از ديسك‌هاي كند محدود نشده باشد، پردازنده‌اي مانند GPU تأثير بسياري بر كارايي كل سيستم خواهد داشت. نكته جالب توجه اين كه برنامه‌هاي جست‌‌وجو تا‌كنون از توانايي فوق‌العاده پردازنده‌هاي گرافيكي در پردازش موازي اطلاعات استفاده نكرده‌اند. به‌تازگي يك الگوريتم جست‌و‌جوي موازي طراحي شده است كه حداكثر توان GPU را بر‌اساس يك راهبرد تقسيم كننده به‌كار مي‌گيرد تا فرآيندهاي جست‌و‌جو سريع‌تر انجام گيرند. اين الگوريتم p–ray نام دارد كه در آن p تعداد پردازنده‌ها را نمايش مي‌دهد. براي درك عملكرد اين الگوريتم، ‌ابتدا نحوه جست‌وجوي شماره‌ها را در دفتر تلفن درنظر بگيريد. فرض كنيد به‌دنبال شماره تماس شخصي به نام Godot هستيد. به‌جاي ورق زدن تمام صفحات دفتر تلفن، مي‌توانيد آن را از وسط باز كنيد تا ببينيد نخستين حرف از نخستين نام موجود در صفحه باز شده قبل از حرف نخست نام Godot است يا بعد از آن قرار مي‌گيرد. بر‌اساس نتيجه به‌دست آمده، بخش نخست يا دوم دفتر تلفن را بر‌اساس همين رويكرد باز ‌كنيد. به‌واسطه هربار تكرار اين راهبرد حجم اطلاعات مورد جست‌و‌جو را به نصف كاهش مي‌دهيد تا به يك صفحه برسيد. با استفاده از اين راهبرد يافتن شماره تماس شخصي به نام Godot در يك دفترتلفن فرضي با 1024 صفحه تنها به ده تكرار نياز دارد. در زبان كامپيوتر، اين راهبرد با عنوان جست‌‌وجوي باينري شناخته مي‌شود و پياده‌سازي آن امكان‌پذير است؛ زيرا داده‌هاي موردنظر درحال حاضر درون بانك اطلاعاتي ثبت شده‌اند.

در‌صورت تمايل مي‌توانيد از سه دوست ديگر خود نيز كمك بگيريد و پس از تقسيم دفترتلفن به چهار قسمت، هرشخص در بخش مخصوص به‌خود اطلاعات را جست‌‌وجو كند. اگر هريك از شما راهبرد باينري را به‌كار بگيريد، زمان جست و‌جو از ده مرحله به هشت مرحله كاهش مي‌يابد. البته، تنها يك نفر شماره Godot را پيدا مي‌كند و زمان سايرين هدر مي‌رود. اگر از شماره‌هاي دفترتلفن خود يك نسخه اضافي نيز تهيه كرده باشيد، راه حل مناسب ديگري هم در اختيار داريد. هر شخص كار جست‌وجو را از نخستين نام موجود در قسمت خود شروع مي‌كند. اگر حرف نخست اين نام (فرضاً Bekket) قبل از حرف نخست Godot قرار داشت، دفتر را نگه داشته ودر غير اين صورت آن را كنار مي‌گذارد. بخش حاوي شماره موردنظر نيز به چهار قسمت تقسيم مي‌شود و اين فرآيند ادامه مي‌يابد تا هرشخص تنها يك برگ از دفتر را در اختيار داشته باشد و يكي از آن‌ها شماره Godot‌ را بيابد.

اين الگوريتم از رويكرد پيشين نيز سريع‌تر است. هر‌بار تكرار فرآيند مستلزم صرف زمان يكساني با دور قبل است. به اين ترتيب، تمام دفتر يك بار جست‌‌وجو مي‌شود، اما اين كار توسط چهار شخص انجام مي‌گيرد. با هربار تكرار الگوريتم، حجم اطلاعات مورد جست‌‌وجو به يك چهارم كاهش مي‌يابد. حال جست‌و‌جوي يك دفتر تلفن 1024 صفحه‌اي تنها با پنج مرحله شامل تقسيم 1024 صفحه به 256 به 64 به 16 به 4 و در نهايت به 1 صفحه، انجام مي‌پذيرد (بخش الگوريتم p-ary را ببينيد).

Borna66
03-23-2011, 11:59 PM
اگر خواننده دقيقي باشيد، متوجه مي‌شويد كه تعداد مراحل جست‌و‌جو با وجود كمك ساير افراد، تنها به ميزان پنجاه درصد كاهش يافته است. با وجود اين كه به‌نظر مي‌رسد پيشرفت ناچيزي است (و هزينه زيادي را در پي دارد) در شرايطي كه بايد ده‌ها ميليون ركورد را در كسري از ثانيه جست‌‌وجو كنيد، اين پيشرفت ارزش حياتي مي‌يابد. اگر منابع كافي در اختيار داريد (با توجه به اين كه پردازنده‌هاي گرافيكي امروزي بيش از دويست هسته دارند) مي‌توانيد افراد بيشتري را در اجراي الگوريتم p-ary به‌كار بگيريد تا زمان پاسخ‌گويي كاهش يابد. به‌عنوان مثال، با استفاده از 32 شخص (يا پردازنده) مي‌توانيد 1024 ركورد را در دو مرحله جست‌‌وجو كنيد.

"يك GPU‌ كه به قيمت يك پردازنده عادي خريداري مي‌شود، با استفاده از جست‌‌وجو به شيوه p-ary مي‌تواند سرعت پاسخ‌گويي به‌هر درخواست را تا دويست درصد افزايش دهد. تنها در چنين شرايطي است كه حداكثر كارايي GPU مورد استفاده قرار مي‌گيرد و بيش از شش ميليون نتيجه جست‌‌وجو را در يك ثانيه در اختيار كاربر مي‌گذارد."

يك GPU‌ كه به قيمت يك پردازنده عادي خريداري مي‌شود، با استفاده از جست‌‌وجو به شيوه p-ary مي‌تواند سرعت پاسخ‌گويي به هر درخواست را تا دويست درصد افزايش دهد. انجام هزاران جست‌و‌جو در بانك‌هاي اطلاعاتي حاوي ميليون‌ها ركورد، براي بعضي از برنامه‌هاي وب يك فرآيند عادي است. تنها در چنين شرايطي است كه حداكثر كارايي GPU مورد استفاده قرار مي‌گيرد و بيش از شش ميليون نتيجه جست‌‌وجو را در يك ثانيه در اختيار كاربر مي‌گذارد. براي جست‌‌وجوي يك دفترتلفن 1024 صفحه‌اي به استفاده از GPU نيازي نيست.

به‌علت اين‌ كه GPU روي يك كارت PC نصب شده است‌، تمام داده‌ها پيش از اين كه در اختيار GPU‌ قرار گيرند، توسط يك گذرگاه به نسبت كند روي كارت PC كپي مي‌شوند. برنامه‌هايي با حجم پردازشي بالا مانند برنامه‌هاي شبيه‌سازي فيزيكي، دچار چنين محدوديت‌هايي نمي‌شوند. اما، اغلب برنامه‌هاي بانك اطلاعاتي حجم محاسباتي به نسبت كمي دارند در عوض نيازمند اداره حجم زيادي از داده‌ها هستند.

Borna66
03-23-2011, 11:59 PM
از آن‌جا كه حافظه كارت‌هاي گرافيكي با سرعت زيادي افزايش مي‌يابد (و در آخرين مدل‌ها به چهار گيگابايت رسيده است)، استفاده از حافظه آن‌ها به‌عنوان حافظه موقت، موجب كاهش ترافيك اطلاعات در گذرگاه كارت pc‌ مي‌شود و در نتيجه كارايي افزايش مي‌يابد. نسل جديد پردازنده‌هاي گرافيكي امكان تبادل ناهمگام اطلاعات را نيز فراهم مي‌كنند. البته، اين ويژگي ترافيك حافظه را كاهش نمي‌دهد، اما امكان ارجاع بي‌درنگ نتايج را فراهم مي‌كند كه اين امر به نوبه خود موجب كاهش زمان پاسخ‌گويي مي‌شود. صرف‌نظر از بانك‌هاي اطلاعاتي توانمند‌تر و بازي‌هاي گرافيكي واقعي‌تر،‌ gpuها به خودي خود هيچ مفهوم جديدي را كه انجام آن توسط cpu ممكن نباشد، ارائه نمي‌كنند. با وجود اين ممكن است كليد يك تحول تاريخي باشند. پردازنده‌هاي گرافيكي توان پردازشي ابركامپيوترها را همه‌گير مي‌كنند؛ همان‌طور كه كامپيوترهاي شخصي، توان پردازشي كامپيوترها را در اختيار همه قرار دادند. چنين توان پردازشي عظيمي پيش از اين تنها در اختيار اداره‌هاي دولتي، مؤسسات تحقيقاتي و سازمان‌هاي بزرگ قرار داشت.

به‌عنوان مثال، ممكن است يك محقق الگوريتم مناسبي را براي طراحي ماشيني داراي هوش مصنوعي برابر با هوش انسان توسعه داده باشد، اما تا‌كنون توان پردازشي لازم براي پياده‌سازي آن در اختيار وي قرار نگرفته باشد. مفهومي كه ما انسان‌ها از آن به‌عنوان «تجربه» ياد مي‌كنيم، در دنياي هوش مصنوعي، «بانك اطلاعاتي» ناميده مي‌شود.