fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web...

32
م ی ح ر ل ا ن م ح ر ل له ا ل م ا س ب ی واز م ش رداز پ از دزش ن ی م س ازش ر گ مازی ع م از : ن ی م س وع ض و مGPU ی س ب و ن امه رن پ وCuda وادی س ر5 کت اد : د5 ن س ا اده ل ز ن ک ی و ف صط م مد ح م ده : ن ه ه دD ازائ

Transcript of fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web...

Page 1: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

بسم الله الرحمن الرحیم

گزارش سمینار درس پردازش موازی

و برنامه نویسیGPUموضوع سمینار : معماری Cuda

استاد : دکتر سوادی

ارائه دهنده : محمد مصطفی وکیل زاده

مقدمه

Page 2: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

CPU ها تفاوت های اساسی زیادی موجود است. در GPU ها و CPUمیان معماری ها یک و یا تعداد اندکی هسته هستند که هر هس77ته ب77ار محاس77باتی زی77ادی را انج77ام

، هزاران هسته محاس77باتی وج77ود دارد ک77ه عم77دتا اینGPUمی دهد. اما در معماری این هس77ته ها دارای . ور موازی قسمت های از برنامه را اجرا می کنند.هسته ها به ط

هستند. هس77ته ها ن77یز ب77ا همglobal به صورت DRAMیک حافظه ی نهان و تعدادی گروه بندی می شوند و حافظه های کوچک مشترک در بین ی77ک دس77ته از پردازن77ده ها نیز وجود دارد. جهت دسترسی ب77ه هس77ته ه77ا و ریس77ه ه77ا )نخ ه77ا( فریم77ورک ه77ای متعددی ارائه شده است که هر ک77دام از این ف77ریم ورک ه77ا روش خاص77ی را جهت موازی سازی فرآیند برنامه استفاده می کنند ، دو فریمورک بس77یار مع7روف در این

یک راب77ط برنامه نویس77یOpenMp می باشد که فریمورک MPI و OpenMpزمینه اس77ت ک77ه از برنامه نویس77ی چندس77کویی و چندپردازش77ی ب77ا حافظ77ه اش77تراکی در زبان ه77ای س77ی، س77ی++ و فرت77رن روی اک77ثر معماری ه77ای پردازن77ده و سیس77تم

HP-UX و AIXعامل های گوناگون نظیر لین77وکس، وین77دوز، م77ک اواس، س77والریس، MPI اس77تانداردی اس7ت ب7ه عن7وان واس7ط تب77ادل پیغ7ام. MPIپشتیبانی می کند.ام7ا

بطور معمول کتابخانه ای است که با اضافه کردن آن در کد برنامه نویس77ی ق77ابلیت ارتباط بین پردازشگر ها را ممکن می سازد . اما ارائه کارت ه77ای گ77رافیکی دارای

هسته های پردازشی متعدد ،سبب بوجود آمدن مسئله جدیدی شد . با این عنوان که چگونه از ظرفیت و ق77درت پردازش77ی ک77ارت ه77ای گ77رافیکی جهت ایجاد و توسعه برنامه هایی که قابلیت م77وازی س77ازی را دارا می باش77ند ، اس77تفاده

-GPGPU )Generalکنیم ، که این موضوع سبب بوجود آمدن اصطالحی با عنوان Purpose computing on Graphics Processing Units( در دنیای Parallel

Cuda و پلتف77رمی ب77ا ن77ام APIشد که یکی از نت77ایج مس77ئله ف77وق ایج77اد و ط77راحی بود . این پلتفرم از ک77ارت ه77ای گ77رافیکی )2007 در سال Nvidiaتوسط شرکت

GPU شرکت )Nvidiaپشتیبانی می کند و باعث می شود تا بتوان مسئولیت بخش هایی از برنامه را که ق7ابلیت م7وازی س77ازی دارن7د جهت اج7را ب7ه ک7ارت گ7رافیکی سپرد . تمرکز اص7لی این گ7زارش ن77یز ب7رروی همین ق7ابلیت انتق7ال ب7ار پردازش77ی

Nvidiaبخش های قابل موازی سازی برنامه ها ب77ه ک77ارت ه77ای گ77رافیکی ش77رکت می باشد.Cuda یا پلتفرم APIتوسط

تاریخچه کارت های گرافیکی۱۹۷۰دهه

Page 3: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

امکان کنترل سخت افزاری ح77االت گ77رافیکی و مت77نی وCTIA و ANTICتراشه های ANTIC-بی77تی را ف77راهم می کردن77د. تراش77ه 8س77ایر ت77اثیرات را ب77ر روی آت77اری

پردازشگری مخصوص برای نگاشت )در حالت برنامه نویسی( متن و داده گرافیکی جی مینر، ط77راحی تراش77ه گ77رافیکیANTICبه خروجی تصویری بود. طراح تراشه

را برای کمودور آمیگا نیز بر عهده داشت.۱۹۸۰دهه

و کوم77ودور آمیگ77ا۸۰ را ب77ه ده77ه GPUشاید بتوان ای77ده اولی77ه ش77کل گیری مفه77وم نسبت داد. این کامپیوتر اولین دس77تگاهی ب77ود ک77ه ب77ا ی77ک واح77د پ77ردازش گ77رافیکی استاندارد ارائ77ه می ش77د و از ویژگی ه77ای گ7رافیکی قاب77ل مالحظه ای در زم77ان خ77ود

Texas کمپ77انی ۱۹۸۷به77ره می ب77رد. در همین ده77ه و در س77ال Instrumentاولین ارائه کرد.TMS34010ریزپردازنده دارای قابلیت های گرافیکی را با نام

۱۹۹۰دهه روند رشد کارت های گرافیکی و پردازنده های دارای قابلیت های گرافیکی۹۰در دهه

به شکل روزافزونی پیش رفت و برای اولین بار پردازنده ها و کارت های گرافیکی با قابلیت رندر تصاویر و وی7دیوهای س7ه بعدی ارائ7ه ش7دند. ولی نقط7ه آغ7از آنچ7ه ک7ه

و محص77ول متف77اوت کمپ77انی انوی77دیا ب77از۱۹۹۹ می نامیم به سال GPUامروز آن را می گردد.

Nvidia GeForce 256 که به آن( NV10اولین کارت گرافیک تجاری )نیز می گویند بود ک77ه توانس77ت قابلیت ه77ای س77ه بعدی و انتق77ال و ن77وردهی را در ی77ک س77خت افزار تجاری برای مصرف کننده ارائه دهد و از آنجا که بعدها قابلیت س77ایه زنی پیکس77لی و برداری به آن اضافه شد، بس77یار انعطاف پ77ذیرتر و قابل برن77امه ریزی تر از کارت ه77ای

گرافیکی سه بعدی هم دوره خود بود.۲۰۰۵ تا ۲۰۰۰سال های

و قابلیت ه77ای مش77ابهOpenGL و با وجود رابط برنامه ای چ77ون NV10پس از ارائه آن در دیرکت اکس، مسیر رشد پردازنده های گرافیکی به سمت قابلیت ه77ای بیش77تر برنامه پ77ذیری پیش می رفت. پ77ردازش ه77ر پیکس77ل توس77ط ی77ک برنام77ه کوت77اه ک77ه ورودی های آن بافت تصویر را مشخص می کرد، امکان پذیر بود و هر شکل هندس77ی پیش از آنکه بر روی نمایشگر پدیدار شود، می توانست توسط یک برنامه کوت77اه ب77ه

یاGeforce 3 خود را با نام GPUشکل دلخواه پردازش گردد. انویدیا نسخه جدیدتر NV20وارد ب77ازار ک77رد ک77ه اولین پردازن77ده گ77رافیکی مجه77ز ب77ه ق77ابلیت س77ایه زنی

محص7ول جدی7دیATI کمپانی رقیب انویدیا یع7نی ۲۰۰۲برنامه پذیر بود. اما در اکتبر را معرفی کرد که اولین پردازنده گرافیکی مبتنی برR300 یا Radeon 9700به نام

Page 4: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

Direct3D 9.0در دنیا بود. سایه زن های پیکسل و شکل این پردازنده گرافیکی، قادر بودند محاسبات ممیز شناور طوالنی و حلقوی را پیاده س77ازی نماین77د و ب77ه س77رعت،

را پیدا کردند. سایه زنی پیکس77ل معم77وال در م77واردیCPUانعطاف پذیری در حد یک ( کاربرد دارد کهBump Mappingچون ایجاد پستی و بلندی بر روی سطح اجسام )

منجر به ایجاد یک بافت بر روی یک شکل می گ77ردد ت77ا آن جس77م ب77راق، ک77در، زب77ر،صاف یا حتی کنده کاری شده به نظر برسد.

تا کنون۲۰۰۶ ، پردازن77ده های گ77رافیکی ب77ه دس77تگاه های محاس77باتیGeForce 8با معرفی س77ری

ه77ا ق77د علمCPUه77ای م77وازی در مقاب77ل GPUعم77ومی تری تب77دیل ش77دند. ام77روزه ه77ایGPUکرده اند و به همین دلیل یکی از زمینه های پژوهش77ی مهم کن77ونی، یع77نی

( توانس77تهGPU )رایانش و محاسبات عم77ومی ب77ر روی en:GPGPUهمه منظوره یا در بسیاری از حوزه ها مثل فراگیری ماش77ین )ی77ادگیری ماش77ین(، ه77وش مص77نوعی، اکتشاف نفت، پردازش تصویر، جبر خطی، آمار، بازس77ازی س77ه بعدی و ح77تی تع77یین قیمت در بازار سهام، به یکی از پرکاربردترین زمینه های تحقیقاتی و ص77نعتی تب77دیل گردد. پلتفرم کودا )زبان برنامه نویسی( که شرکت انویدیا آن را توسعه داده اس77ت،

OpenCL است که از GPUیکی از قدیمی ترین مدل های برنامه نویسی موازی برای Khronos یک استاندارد آزاد است که توس77ط گ77روه OpenCLنیز پشتیبانی می کند.

پش77تیبانیARM، انوی77دیا و AMD توس77ط اینت77ل، OpenCLتع77یین گردی77ده اس77ت. در ای77االت متح77ده و منطق77هGPGPUمی شود و پرطرفدارترین پلتفرم های توس77عه

آسیا-اقیانوسیه است. و قابلیت ه77ای مش77ابهOpenGL و با وجود رابط برنامه ای چ77ون NV10پس از ارائه

آن در دیرکت اکس، مسیر رشد پردازنده های گرافیکی به سمت قابلیت ه77ای بیش77تر برنامه پ77ذیری پیش می رفت. پ77ردازش ه77ر پیکس77ل توس77ط ی77ک برنام77ه کوت77اه ک77ه ورودی های آن بافت تصویر را مشخص می کرد، امکان پذیر بود و هر شکل هندس77ی پیش از آنکه بر روی نمایشگر پدیدار شود، می توانست توسط یک برنامه کوت77اه ب77ه

یاGeforce 3 خود را با نام GPUشکل دلخواه پردازش گردد. انویدیا نسخه جدیدتر NV20وارد ب77ازار ک77رد ک77ه اولین پردازن77ده گ77رافیکی مجه77ز ب77ه ق77ابلیت س77ایه زنی

محص7ول جدی7دیATI کمپانی رقیب انویدیا یع7نی ۲۰۰۲برنامه پذیر بود. اما در اکتبر را معرفی کرد که اولین پردازنده گرافیکی مبتنی برR300 یا Radeon 9700به نام

Direct3D 9.0در دنیا بود. سایه زن های پیکسل و شکل این پردازنده گرافیکی، قادر بودند محاسبات ممیز شناور طوالنی و حلقوی را پیاده س77ازی نماین77د و ب77ه س77رعت،

را پیدا کردند. سایه زنی پیکس77ل معم77وال در م77واردیCPUانعطاف پذیری در حد یک ( کاربرد دارد کهBump Mappingچون ایجاد پستی و بلندی بر روی سطح اجسام )

منجر به ایجاد یک بافت بر روی یک شکل می گ77ردد ت77ا آن جس77م ب77راق، ک77در، زب77ر،صاف یا حتی کنده کاری شده به نظر برسد.

Page 5: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

تا کنون۲۰۰۶ ، پردازن77ده های گ77رافیکی ب77ه دس77تگاه های محاس77باتیGeForce 8با معرفی س77ری

ه77ا ق77د علمCPUه77ای م77وازی در مقاب77ل GPUعم77ومی تری تب77دیل ش77دند. ام77روزه ه77ایGPUکرده اند و به همین دلیل یکی از زمینه های پژوهش77ی مهم کن77ونی، یع77نی

( توانس77ته درGPU )رایانش و محاسبات عم77ومی ب77ر روی GPGPUهمه منظوره یا بس77یاری از حوزه ه77ا مث77ل فراگ77یری ماش77ین )ی77ادگیری ماش77ین(، ه77وش مص77نوعی، اکتشاف نفت، پردازش تصویر، جبر خطی، آمار، بازس77ازی س77ه بعدی و ح77تی تع77یین قیمت در بازار سهام، به یکی از پرکاربردترین زمینه های تحقیقاتی و ص77نعتی تب77دیل گردد. پلتفرم کودا )زبان برنامه نویسی( که شرکت انویدیا آن را توسعه داده اس77ت،

OpenCL است که از GPUیکی از قدیمی ترین مدل های برنامه نویسی موازی برای نیز پشتیبانی می کند.

Cudaمقدمه ای بر موضوعي نيست که به توض77يح ني77از داش77ته باش77د.GPUمزاياي برنامه نويسي روي

اين که مي توان با استفاده از پردازنده هاي گرافيکي، سرعت بعضي از برنامه ه77ا را تا ده ها برابر افزايش داد. با اين حال، تا مدت ها اين مزيت به وسيله يک مانع ب77زرگ

ه77ا ب77ود.GPUمح77دود ش77ده ب77ود . اين م77انع در واق77ع ش77يوه برنامه نويس77ي ب77راي ،Cبرنامه نويساني که با زبان هايي مانند Cجاوا، زبان هاي دات نتي، پ77ايتون و ، ++

بسياري از زبان هاي برنامه نويسي معمول ديگر آشنا بودند، به طور ط77بيعي عالقه اي به يادگيري زبان يا پلتفرم جديدي نداشتند. آن ها ترجيح مي دانند که بتوانند به وسيله

همين زبان ها براي پردازنده هاي گرافيکي نيز برنامه نويسي كنند. اين دقيقا همان چيزي اس77ت ک77ه ک77ودا را محب77وب ک77رده اس77ت. ب77ا اس77تفاده از اين

نوش77ته و س77پس روي پردازن77دهCمعماري شما مي تواني77د برن77امه خ77ود را ب77ا زب77ان گرافيکي اج77را ك77رده و از س77رعت اج77راي آن ل77ذت ببري77د. م77ورد مهم ديگ77ر وج77ود پلتفرمي بود که بتواند روي دستگاه هاي مختلف اج7را ش7ود. ک7ودا ب7ا اين ش7عار ک7ه مي تواند براي شما سطحي قابل قبول از کارايي و مقياس پذيري را در يک زمان ب77ه ارمغ77ان آورد، وارد ب77ازار برنامه نويس77ي ش77د. درب77اره اين معم77اري گفت77ه مي ش77ود : »کودا معماري اي است که به ج77اي مح77دود کردن ش77ما توس77ط ک77ارايي ي77ک س77ري کتابخانه، اجازه مي دهد کار مورد نظرتان را انجام دهيد.« با وجود اين که ک77ودا روي تراشه هاي گرافيكي اج77را مي ش77ود، در واق77ع برنامه نويس77ي ک77ودا ب77ا برنامه نويس77ي

GPGPU تفاوت دارد. درگذشته، نوشتن نرم افزار براي GPUبه اين معني ب77ود ک77ه برنامه بنويسيد. در مقابل، همان طور که عن77وان ش77د، ک77ودا ب77ه ش77ماGPUبه زبان

نيز اجراGPUاجازه مي دهد با زبان هاي معمول برنامه اي بنويسيد که مي تواند روي شود. همچنين به دليل آن که کودا مي توان77د نرم اف77زار ش77ما را ب77ه ص77ورت مس77تقيم

Page 6: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

روي سخت افزار گرافيکي کامپايل کند، کارايي ب77ه دس77ت آم77ده ن77يز اف77زايش پي77دامي کند.

اما مزيت اصلي ک77ودا چيس77ت؟ ب77ه ط77ور کلي، مهم ت77رين فاي77ده اي ک77ه اس77تفاده از پردازن77ده هاي گ77رافيکي ب77راي توس77عه دهنده در پي دارد، توان77ايي اج77راي رش77ته هاي پردازشي بسيار زياد در يک زمان است. به اين ترتيب، اگر برنامه ش7ما ب7ه گ7ونه اي

ه77اTaskهاي بسيار زياد و سبک تشکيل ش77ده باش77د، يع77ني تع77داد Taskباشد که از بسيار باال، اما م77يزان ني77از آن ه77ا ب77ه پردازن77ده کم باش77د، ک77ودا مي توان77د عملک77ردي خيره کننده را براي شما به ارمغان بياورد. البته توانايي هاي کارت هاي گ77رافيکي روز به روز در حال افزايش است. به عن77وان مث77ال، بورد ه77اي جدي77د ش77امل پهن77اي بان77د

Floating Pointحافظه باالتر، انتقال داده غيرهمزمان، عمليات اتماتيک و محاسبات نيز مي شوند که مي تواند دست برنامه نويس را بازتر كند.

NVIDIA شرکت Fermiمعماری بیشتر به عملکرد باال در ح77وزهNvidia کارت های گرافیکی شرکت Fermiمعماری

Computingمی پردازد، تا عملکرد آن در بازیها. با اینحال، ویژگیهای جدی77د و بهب77ود در عین ح77ال ش77واهدی را در رابط77ه ب77ا آنچ77ه ک77ه می توانی77د در ح77وزهFermiیافته

Nvidia انتظار داش77ته باش77ید، ف77راهم می کنن77د. Nvidia بعدی GPUاجرای بازیها از مع77رفی ک77رد و بخش عم77ده ای از2009 خ77ود را در اواخ77ر س77ال Fermiمعم77اری

High متمرک77ز بودن77د ک77ه محص77والت Tesla برروی Fermiمباحث اولیه در رابطه با Performance Computing(HPC) شرکت Nvidia .را در بر می گیرد Nvidiaت77أثیر

GPU بع77دی را ب77ه هم77راه اطالع77ات مش77روح3 جدید خود بر بازیه77ا و گرافیکه77ای تشریح کرد. CES 2010 در نمایشگاهFermiدرباره مشخصات تراشه های

GPU های Fermi:از ویژگیهای زیر برخوردار خواهند بود میلیارد ترانزیستور دارد3- نزدیک به

GDDR5 DRAM گیگابایت حافظه 6- پشتیبانی از حداکثر

DirectX 11- پشتیبانی از

CUDA هسته 512- دارای

,… C++,C- پشتیبانی از زبان برنامه نویسی مع77رفی ش77ده اس77ت. اینGT200 تنه77ا چن77د س77ال بع77د از معم77اری Fermiمعماری

استCUDA(Compute Unified Device Architecture) هسته 512معماری شامل سازماندهی شده اند.SM (Streaming Processor) واحد اجرایی به نام 16که در

Page 7: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

که در شکل ذیل بصورت ستونهای عمودی سبز رنگ نشان داده ش77ده ان77د،SMهر نیز شناخته میCUDA است که تحت عنوان پردازنده های CUDA هسته 32حاوی

های پی77اده س77ازیSM موجود در CUDA برابر بیشتر از تعداد هسته های 4شوند و است.Nvidia قبلی شرکتGPUشده در طراحی های

Fermi شمای کلی معماری – 1شکل

Gigaواحد Thread global Schedulerمش77خص1 که ب7ه رن77گ ن7ارنجی در ش77کل ه77ا توزی77ع و زمانبن77دی می کن77د و تع7ویض متنSM را روی threadاس77ت، بلوکه7ای

thread ها را در ط77ول اج77را م77دیریت می کن77د و در این م77ورد نقش dispatcherرا خود ی77ک زمانبن77د دارد ک77ه در ادام77ه مط77رح خواه77د ش77د.SMایفا می کند. البته هر GigaThread میکروثانیه است. در داخل واحد 25 برابر GPUزمان تعویض متن در

هزاران رشتهHTS قرار گرفته است. HTS (Hardware Thread Scheduler)یک های قابل دسترس77ی توزی77عSM را مدیریت نموده، کارها را بین GPUفعال بر روی

Page 8: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

کرده و سوئیچهای مضمون را م77دیریت می کن77د. ب77ا پی77اده س77ازی نگه77داری برنام77ه )بجای پیاده س77ازی ن77رم اف77زاریHTSزمانبندی بصورت سخت افزاری و از طریق

در پیکربندیهای قدیمی(، توسعه دهن77دگان ن77رم افزاره77ای ک77اربردی می توانن77د ن77رم ها اج77راSMهائی با تعداد دلخواهی از GPUافزارهائی را طراحی کنند که بر روی

شوند. دارای یک ناحی77هSM واحد 16 نمایش داده شده است، این 1همانطور که در شکل

L2حافظه نه77ان 768 KB اش77تراکی دارن77د ک77ه بین تم77ام SM.ه77ا مش77ترک اس77ت 6 ش77امل Fermiهمچنین واحدهای آبی رنگ حافظه ها و ثبات ه77ا هس77تند. معم77اری

می رس77انند. ه77رCUDA بیتی است که داده ها را به هسته ه77ای 64کنترلر حافظه GDDR5کنترلر حافظه از DRAM پشتیبانی می کند که باعث می ش77ود Fermiب77ه

تب77دیلGDDR5 با قابلیت به77ره گ77یری از حافظ77ه Nvidia سطح باالی GPUبهترین گردد. به این ترتیب می توان پیش بینی کرد ک77ه پهن77ای بان77د م77تراکم این ت77رکیب در

Fermi کن77ترلر حافظ7ه 8 درص77د ب7االتر از 30 تقریبا DDR3در Geforce GTX 280 این است که اس77تانداردGDDR5 به GDDR3خواهد بود. یک برتری دیگر حرکت از

حافظه جدید پهنای باند باالتری را برای هر پایه ت77أمین می نمای77د و این ب77دان مع77نی بی77تی( در مقایس77ه384 می تواند از یک اینترفیس حافظه کوچکتر)Fermiاست که

GTX بیتی در 512با اینترفیس حافظه استفاده کن77د. ی77ک این77ترفیس حافظ77ه280 کوچکتر به معنای نیاز کمتر به مصرف ب77رق عملی77اتی ب77وده و در عین ح77ال ب77ه پای77ه

ازCPU و GPUه77ای کم77تری نی77از دارد. این77ترفیس میزب77ان بعن77وان اتص77ال م77ابین PCI-Eطریق یک اینترفیس 8 مسیره عم77ل می کن77د ک77ه بای77د ب77ا ح77داکثر ن77رخ 16

گیگابایت بر ثانیه عمل نماید. نش77ان داده ش77ده اس77ت. در داخ77ل هر2 در ش77کلSMمعماری و اجزای درونی یک

SM چهار ستون شامل دو ستون از هس77ته ه77ای ،CUDA هس77ته، ی77ک32 ب77ه تع77داد Special واحد و ی77ک س77تون )16 به تعداد LD/ST(Load/Store)ستون Functions)

SFU واحد قرار گرفته اند. واحدهای 4 به تعداد LD/STآدرس77های مب77داء و مقص77د تعیین می کند که داده ه77اLD/ST هسته تعیین می کنند. درواقع 16داده ها را برای

ها ن77یز ان77واع خاص77یSFU و یا از حافظه نهان خوانده و یا نوشته شوند. DRAMاز از دستورالعملها نظیر محاسبه کسینوس و یا جذر ریشه دوم را اجرا می نمایند. هر

SFUمی تواند یک دستورالعمل را برای هر رشته اجرا کند. ب77رای ه77ر ک77دام از این ه77اSFU سخت افزار مختص آن وجود دارد و تمام این اعم77ال در SFUتوابع در هر

بصورت سخت افزاری و به روش درونیابی مربعی اجرا می شوند که برنامه آنها در وج77ود دارد بن77ابراین در ه77ر پ77السSFU واح77د 4 قرار دارد. چون ROMیک حافظه

دستور بطور موازی در این واحدها می توانند اجرا شوند.4ساعت نخ م77وازی را برنام77ه ری77زی می کن77د ک77ه تحت32 گ77روه ه77ائی متش77کل از SMهر

Wrap، دو SMه7ا ش77ناخته می ش7وند. در داخ7ل هرWrapعن77وان Schedulerو دو

Page 9: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

Instructionواحد Dispatch قرار گرفت77ه ان77د. این پیکربن77دی می توان77د دو Wrapرا س77تون را اش77غال می کنن77د.4بطور همزمان اجرا نمای77د ک77ه هرک77دام دو س77تون از

Doubleبعنوان مثال اگ77ر ی77ک دس77تورالعمل اعش77اری Precision(64-Point)ص77ادر را اشغال خواهد ک77رد. ب77ه این ت77رتیب دو س77تونCUDAگردد، هر دو ستون هسته

دیگر خالی خواهند ماند.

SM معماری و اجزای داخلی یک – 2شکل

Page 10: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

Fermi نمایش سلسله مراتب حافظه در معماری – 3شکل

Fermi نمایش سلسله مراتب حافظه نهان و حافظه مشترک در معماری – 4شکل

است که توسط هسته های آن قابلL1 حافظه نهان اشتراکی 64KB دارای SMهر نم77ایی از وض77عیت حافظ77ه ه77ای در دس77ترس4 و 3اس77تفاده اس77ت. در ش77کلهای

Wrapی7ک ناحی7ه SMنم7ایش داده ش7ده اس77ت. عالوه ب7ر این در ه7ر Scheduler، Dispatch .و ثبات ها وجود دارند Wrap Scheduler زمانبندی و توزیع threadها را

ن77یز عملی77ات تع77ویض متن را م77دیریت میDispatchروی هسته ها برعه77ده دارد و کند.

Page 11: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

SM نمایش هسته کودا در یک – 5شکل

ی7کCUDA نم7ایش داده ش77ده اس7ت. ه7ر هس7ته CUDA نمایش هس7ته 5در شکل ( را درSingle-Precisionعملیات عدد صحیح و یک عملیات اعشاری با دقت واح77د )

اجرا می کند. به این ترتیب، یک سطح فرکانس77یthreadهر پالس ساعت برای هر (TELOPS ترافالپس )5.1 گیگاهرتزی به معنای حداکثر نرخ عملیاتی معادل با 5.1

خواهد بود.Fermiبرای ( و ی7کINT، ی77ک واح7د منطقی محاس77بات ع7دد ص7حیح )CUDAدر داخل هر هسته

( قرار دارد.FPواحد منطقی محاسبات اعشاری )

6شکل

IEEEپشتیبانی از استاندارد جدید

Page 12: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

، این نکته خواهد ب77ود ک77ه از اس77تانداردHPC برای Fermiجالبترین جنبه از معماری اس77تفاده می کن77د) بج77ای اس77تاندارد2008-754 یعنی IEEEحساب اعشاری جدید

شناخته می شد(. استاندارد جدید شامل دستورالعمل1985-754قدیمی که با نام FMA(Fuse Multi-Add) بی77تی ب77رای عملی77ات32 می باش77د. بعالوه، اع77داد ص77حیح

از نیز بخشی خواهند بود. در گذشته،ALU(Arithmetic Logic Unit) Fermiضرب ALU سخت افزار GPU بیتی محدود بود.24 به اعداد صحیح

س77ابقMAD(Multiply-Add) بسیار مطلوب ت77ر از دس77تورالعمل FMAدستورالعمل هر دو عملیات ضرب و جمع را در یک مرحله واحد انج77ام میFMAخواهد بود زیرا

دهد که به این ترتیب امکان گرد کردن دقیق تری را فراهم می سازد. دستورالعملMAD.گاهی باعث کاهش دقت در مرحله اضافی خود می گردید

Fermi (اختصاصا برای کاربردهای محاسباتی با دقت مض77اعف Double-Precision) نظیر شیمی کوانتومی و جبر خطی طراحی شده است که باز با گرایش ب77ه س77مت

HPC عملیات ضرب/ جمع می توانند در ه77ر س77یکل کالک16 انطباق دارند. حداکثر برابر عملیات انجام ش77ده ب77ر روی معم77اری4 اجرا شوند که تقریبا SMبر روی هر

GT 200.خواهد بود IEEE بیتی عملیات اعشاری 32دقت

، پش77تیبانی از آخ77رین اس77تاندارد دقت اعش77اریFermiی77ک وی77ژگی جدی77د دیگ77ر در IEEE است. ویژگی جدید اصلی در این اس77تاندارد، پش77تیبانی از2008-754، یعنی است، اعداد کوچکی که تقریبا معادل صفر هستند.Subnormalاعداد IEEE منتش77ر ک77رد. این اولین2008 را در آگوس77ت س77ال 2008-754 اس77تاندارد

به بع77د1985 در سال 1985-754بروز رسانی استاندارد اعشاری از زمان انتشار سال ک77ار م77داوم7 منتهی گردید، به 2008-754بود. فرآیند بازنگری که به انتشار

نیاز داشت. ( به جابجائی ممیز اعشاری نسبت به اعداد صحیح درFloatingعبارت ممیز شناور )

یک عدد منطقی اشاره دارد. شما می توانید آن را بعن77وان ی77ک عالمت علمی ب77رای ب77رای انج77ام س77ریع و دقی77ق عملی77اتGPUمحاسبات در نظر بگیری77د. توان77ائی ی77ک

برخوردار است.GPUاعشاری، از اهمیت باالئی در تعیین سطح عملکرد معادل صفر در نظر گرفته می ش77دند ک77ه ب77هSubnormalدر گذشته، اینگونه اعداد

افت دقت محاسبات منتهی می گردید. با اینحال، افت دقت مذکور تحم77ل می ش77د زیرا اینگونه اعداد بصورت نرم افزاری اداره می شدند و گاهی اوق77ات ب77ه ه77زاران سیکل محاسباتی نیاز داشتند که با یک ت77أثیر منفی ب77ر عملک77رد هم77راه ب77ود. اکن77ون

Fermi اع7داد Subnormalرا بص77ورت س7خت اف7زاری اداره می کن7د ک7ه مش7کالت

Page 13: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

عملکردی را از بین خواهد ب77رد.اج77ازه بدهی77د ب77ه ی77ک مث77ال ب77رای اس77تفاده از دقتاعشاری جدید در گرافیکهای کامپیوتری اشاره کنیم:

- یک تابع متداول شامل دو عملیات است: ض77رب دو ع77دد و جم77ع ک77ردن ی77ک ع77دد(.A x B+C=Resultسوم)

( ه77ر دو عملی77ات را در داخ77ل ی77کmultiply-add)MAD- در گذش77ته، دس77تورالعمل سیکل واحد انجام می داد. ب77ا اینح77ال نتیج77ه ض77رب بای77د کوت77اه می ش77د ک77ه گ77اهی

اوقات با خطاهائی در گرد کردن همراه بود. -Fermi از دستورالعمل fused multiply-add(FMA)استفاده می کن77د ک77ه امک77ان

بهره گیری از دقت کامل) بدون کوتاه سازی( را در مرحله ضرب فراهم می س77ازد و در عین حال سطح عملکردی خود را نیز حفظ می نماید. برای مثال الگوریتمه77ای مورد استفاده برای راندوی اشکال هندسی با تقاطع ظری77ف، بط77ور قاب77ل مالحظ77ه

سود خواهند برد.FMAای از دقت تأمین شده در HPCبازیها یا

تص77میمNvidiaبعضی از کاربران در مجموعه طرفداران بازیها از این موض77وع ک77ه جدید خود تکیه نمای77د،GPU مبتنی بر HPC و Teslaگرفته بود بیشتر بر گزینه های

های مخصوص بازیها و کاربردهای گرافیکیGPUناامید شده بودند. بدیهی است که را به خود اختصاص داده ان77د، در حالیک77هNvidiaدر حال حاضر بخش اعظم تجارت

HPC.فعال تنها بخش کوچکی از درآمد این شرکت را تشکیل می دهد Nvidia امیدوار است HPC،نهایتا تا سطح یک حوزه درآمد س77از بزرگ77تر رش77د کن77د

ه7ا میGPU در HPC معتقد است ک7ه تأکی7د ب7ر پی7اده س7ازی قابلیته7ای Halhillاما تواند این شرکت را با تصمیم گیریهای دشواری در مسیر خود مواج77ه س77ازد. او می

ب77ه نوآوریه77ای س77لطهNvidiaگوید:» با نگاه ب77ه آین77ده، من پیش بی77نی می کنم ک77ه ها احتماال در مسیر خود ب7اGPUجویانه و جسورانه خود ادامه خواهد داد. با اینحال،

هاHPCیک دو راهی مواجه خواهند شد. در یک نقطه، ویژگیهای طراحی شده برای های در نظر گرفته ش77ده ب77رای مص77رف کنن77دگان ع77امGPUاحتماال به مانعی برای

ه77ا ب77رای اج77رای بازیه77ا و بس77یاری از ن77رمGPUتبدیل خواهند گردی77د. ب77رای مث77ال، نیازی ندارند«.ECCافزارهای کاربردی دیگر در حوزه مصرف کنندگان عام به

Halfhill ادام77ه می ده77د:» احتم77اال Nvidia روزی مجب77ور خواه77د ش77د ت77ا GPUه77ای و بازار مصرف کنن77دگان ع77ام ط77راحی نمای77د.HPCجداگانه ای را برای حوزه های

پروژه های ط77راحی جداگان77ه می توانن77د هزین77ه بیش77تری را ب77ر این ش77رکت تحمی77ل نموده و تا حدودی مزیت استفاده از بازار بزرگ مصرف کنندگان عام برای کمک به

ها را خنثی کنند«.HPCهای مخصوص GPUهزینه های توسعه GPU در مقابل CPU

Page 14: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

با پ77ذیرش کام77ل جامع77هNvidia شرکت Tesla و سکوی Fermiهای GPUحتی اگر HPC مواجه شوند، چنین انتقالی به معنای پایان کار CPU.ها نخواهد بود

Halfhill در این زمینه می گوید:» ما ب77ه هیچوج77ه ب77ه زم77ان منس77وخ ش77دن CPUه77ا هنوز پادش77اه سیس77تمهای ک77امپیوتری اس77ت وCPUها نزدیک نیستیم. GPUتوسط

CPUاین موقعیت را در آینده قابل پیش بینی حفظ خواهد کرد. قدم بع77دی، ادغ77ام نظ77یرEmbedded بر روی یک تراشه واحد است که از قبل در سیس77تمهای GPUو

ش77رکت اینت77ل وLarrabeeتلفنه77ای س77لولی اتف77اق افت77اده و ب77زودی ب77ا تراش77ه اتفاق خواهد افتاد«.PC در حوزه AMD شرکت Fusionمعماریهای

CPUدارای مزایای بخصوصی است، مثال برای آن دسته از نرم افزارهای ک77اربردی که به تعداد محدودی از رشته های پردازشی نیاز دارند و یا شامل ترکیب ب77زرگی از

ه7ا در آن دس77ته از ن7رم افزاره77ایGPUعملیات گون7اگون هس77تند. از س7وی دیگ77ر، کاربردی که به رشته های متعددی با توالیهای طوالنی از دس77تورالعملها نی77از دارن77د،

ها در هنگ77امGPU اشاره می کند، Pattersonدارای برتری می باشند. همانطور که ها هنوز باید چالشهای مختلفی را پشت س77ر بگذارن77د. ب77رای مث77ال،CPUمقایسه با

GPU ها باید با حجم نسبتا پائین حافظ7هGPU و ن77اتوانی در انج77ام I/Oمس77تقیم ب7ه مقابله نمایند.GPUحافظه

Patterson می گوید:» ما هنوز به منس77وخ ش77دن CPUه77ا نزدی77ک نش77ده ایم، زی77را GPUها با نقطه ضعفهای متعددی مواجه هستند و مشخص نیست ک77ه چق77در ط77ول

خواهد کشید تا شاهد برطرف گردیدن این نقطه ضعف ها باشیم«.On-chipپیکربندی حافظه

از آنجائیکه الگوریتمه77ا و ن77رم افزاره77ای ک77اربردی محاس77باتی، همگی رفت77ار نس77بتا می توان7د حافظ77ه خ7ود را ب7رای انطب77اق ب7اFermi دارن77د، GPUمتفاوتی با حافظه

نیازهای یک نرم افزار کاربردی پیکربندی نماید. صرفنظر از اینکه الگ77وریتم ی77ا ن77رم میFermi بیشتر، L1افزار کاربردی به حافظه اشتراکی بیشتری نیاز دارد یا کاشه

خود را به همان صورتی که برنامه ن77ویس مش77خص می کن77دOn-chipتواند حافظه مجددا برای انطباق با این نیازها پیکربندی نماید.

در بر مي گرفتن77د،SM کيلوبايت حافظه اشتراکي را براي هر 16معماريهاي قبلي، مجهز است که مي توان77دSM براي هر On-chip کيلوبايت حافظه 64 به Fermiاما

) و ي77ا ب77العکس(L1 کيلوب77ايت کاش77ه 48 کيلوبايت حافظه اش77تراکي و 16بصورت تقسيم گردد.

، برنامه اي که ب77ه اس77تفاده گس77ترده از حافظ77هNvidia- حافظه اشتراکي: به گفته سه برابر سريعتر اج77را ش77ود زي77را اينFermiاشتراکي نياز دارد، مي تواند بر روي

کيلوب77ايت پيکربن77ديهاي16 کيلوبايت حافظه اش77تراکي را در مقايس77ه ب77ا 48تراشه

Page 15: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

قبلي در دسترس برنامه قرار مي دهد. با سه برابر شدن مق77دار حافظ77ه اش77تراکي در مقايسه با معماريهاي قبلي، نرم افزارهاي ک77اربردي معين مي توانن77د از حافظ77ه اشتراکي اضافي بعنوان کاشه تحت مديريت نرم افزار استفاده کنند که باعث بهبود

عملکرد خواهد شد. امکانL1 کيلوبايت حافظه کاشه 48: براي ساير برنامه ها، دسترسي به L1-کاشه

اجراي سريعتر در مقايسه با پيکربنديهاي قبلي را فراهم مي سازد، زيرا برنام77ه ه77ا 768 داراي Fermi دسترس77ي پي77دا کنن77د. DRAMمجب77ور نخواهن77د ب77ود دائم77ا ب77ه

،Texture يکپارچه مي باشد که تمام انواع درخواس77تها)L2کيلوبايت کاشه Storeو Load.را اداره مي نمايد )

Hydra 200بررسی اجمالی ASIC(Application-Specific از طری77ق س77خت اف77زار Hydraموت77ور Integrated Circuit)به همراه یک درایور نرم افزاری کار می کند. تولیدکنندگان مادربرد، تراشه Hydra را مابین پل شمالی CPU و GPU.ها نصب می کندHydra از ترکیبی از سخت افزار و نرم افزار استفاده می کند که Lucidبرای ایجاد

نفر می رسند ک77ه60 به Lucid خود ایجاد نموده است. پرسنل Multi-GPUفناوری هر دو گروه مهندسین نرم افزار و سخت افزار را در بر می گیرند و در حوزه هائی

بعدی، طراحی تراشه، ش77بکه س77ازی و س77ایر مهارته77ا، تخص77ص3نظیر گرافیکهای بسیار مهم است که کارکنانی ب77ا س77وابق ف77نیLucid، برای Remezدارند. به گفته

بای77د کاره77ای بس77یار مختلفی را انج77امHydraمتنوع را در اختیار داشته باش77د زی77را دهد. او می گوید:» تراشه باید انبوهی از داده ها را اداره نماید ک77ه از هم77ه ج77ا می

آیند«.

Hydra در مسیر Call ها و دس77تورالعملهائی ک77ه ازCPU ب77ه GPUه77ا فرس77تاده می (. س77پس،OpenGL ی77ا DirectXش77وند، ق77رار می گ77یرد) نظ77یر جریانه77ای فرم77ان

درRemezکارهائی که باید انجام شوند را دقیقا تعیین نموده سازماندهی می کن77د.

شکل7

Page 16: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

این رابطه می گوید:» ایجاد یک فریم واحد با هزاران آبجکت و وظیفه مختل77ف س77ر و کار دارد. فرض کنید که من می توانم هریک از این وظایف را با آگ7اهی از زم7انی ک7ه الزم دارن77د، حافظ77ه م77ورد نی77از آنه7ا و س77ایر م77وارد مش77ابه شناس77ائی نم77ایم و

GPUهمچنین تصور کنید که من وظیف77ه در اختی77ار دارم.1000 برای انج77ام 1000 مح77ول کنم، می ت7وانم تم7امGPUاگر بتوانم بطور همزمان ی7ک وظیف7ه را ب7ه ه7ر

نتایج را بصورت بالدرنگ ترکیب نمایم«. او اضافه می کند:» در دنیای واقعی، ما برای انجام همین ک77ار تالش می ک77نیم، ام77ا هر وظیفه به سایر وظایف وابسته است. تمام این وظایف به یکدیگر ارتباط دارند. پس چگونه می توانیم این مش77کل را ح77ل ک77نیم؟ م77ا ی77ک وظیف77ه واح77د را ب77ر روی

GPU های متعددی مقیاس دهی می نمائیم«. سپسHydraبا استفاده از داده ه77ای ه7اGPUهای نصب شده، وظایف را مابین GPUتاریخی مرتبط با سطوح عملکردی

توزیع کرده و تالش می نماید تا یک بار کاری را برای آنها تأمین کند که قابلیتهای هرGPU.برای ایجاد یک جریان کاری روان را به حداکثر برساند

ها را بطور خودکار اداره نموده و نح77وه تقس77یم ب77ارGPU کار با Hydraتراشه های را ب77اMulti-GPU نتوان77د پیکربن77دی Hydraکاری را تعیین می کنند. اگر به هر دلیلی

ها بکار بین77دازد، بط77ور خودک77ار ب77هGPUیک بازی خاص و یا یک ترکیب بخصوص از ب77ر میSingle-GPUیک سطح پائینتر انتقال یافت77ه و سیس77تم را ب77ه ی77ک پیکربن77دی

گرداند. کاربر به هیچوجه مجبور نیست تنظیمات سیستم را برای انجام اینکار تغی77یردهد.

ه7ا مس77تقیما ب77ا یک77دیگرGPU[ مش7اهده می کنی77د، خ7ود 1همانطور ک77ه در ش7کل ] ه77ا از طری77ق تراش77هGPUارتباط ندارند. تمام کار اش77تراک گ77ذاری داده ه7ا در بین

Hydra انج77ام می ش77ود. هرگون77ه داده ای ک77ه م77ابین CPU و GPUه77ا ب77ه اش77تراک عبور کند. این پیکربندی به تولیدکنن77دگانHydraگذاشته می شود نیز باید از تراشه

مادربردها اجازه می دهد تا انعطاف پذیرترین گزینه های طراحی را ایجاد نمایند. ها اختصاص یافته است و همچ77نینGPU به مقیاس دهی Hydraاز آنجائیکه سیستم

اتف77اق نمی افت77د،Hydraبه دلیل آنکه هیچ منطق پردازش گرافیکی بر روی تراشه GPUشیوه های متداولی که در حال حاضر برای تقسیم بار کاری م77ابین ی77ک جفت

مورد استفاده قرار می گیرند) نظیر فریمه77ای ی77ک در می77ان و ی77ا تقس77یم ف77ریم( رابهبود می بخشد.

Alternate- فریم یک در میان) Frame در تکنیک فریمهای یک در میان، ه77ر :)GPU به نوبت فریمها را بطور یک در میان راندو می نماید. این تکنیک گاهی اوقات باعث ایجاد مشکالت تأخیری می گردد، مگر آنکه هر فریم به م77دت زم77ان مس77اوی ب77رای

ه7ا یکس7ان نباش77ند، تکنی77کGPUپ7ردازش نی77از داش7ته باش77د. ب77ا اینح77ال هنگامیک77ه فریمهای یک در میان بخوبی کار نخواهد کرد.

Page 17: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

Split-Frame هن77وز از تکنی77ک Dual-GPU- تقسیم فریم: تعداد کمی از معماریه77ای نمایش یک بخش معین از تصویر را ادارهGPUاستفاده می کنند. با این تکنیک، هر

می نماید. تکنیک تقسیم فریم باعث کاهش مشکالت مربوط به گلوگ77اه ه77ای س77ایه باید کل تصویر راGPU( می گردد، اما از آنجائیکه هر Pixel Shadingزنی پیکسل )

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

Cudaبرنامه نویسی توسط جهت برنامه نویسی توسط کودا باید در ابتدا یکسری اصطالحات را فرا گرفت.

Host( پردازنده اصلی سیستم : Cpu( به همراه حافظه آن )Ram )Device( پردازنده گرافیکی : Gpuبه همراه حافظه آن )

هر هسته اي که روي يک دستگاه کودا اجرا مي شود، تع77دادي متغ77ير دروني دارد ک77هاز روي تنظيمات اجراي هسته تنظيم مي شوند. اين متغيرها عبارتند از :

-BlockIdx.که انديس بالک در داخل گريد را نشان مي دهد : -ThreadIdx.که انديس رشته پردازشي در درون بالک را نشان مي دهد : -BlockDim.که تعداد رشته هاي پردازشي داخل بالک را نشان مي دهد :

ب77رايInteger يا س77اختارهايي هس77تند ک77ه ش77امل مق77ادير Structureاين ها در واقع متغيرها مي شوند. به عنوان مثال، بالک ها به دليل ساختارهاي سه بعدي، سه مؤلف77ه

x ، y و z دارند. در مقابل گريدها به دليل دو بعدي بودن دو مؤلف77ه x و yدارن77د. و استفاده کنیم یعنی در یک بعد عملیات م77ورد نظ77ر را انج77ام می دهیم.xاگر تنها از

مي ت77وان از اينidxبه اين ترتيب، براي محاس77به ان77ديس رشته پردازش77ي ي77ا هم77ان روش استفاده کرد :

int idx = blockIdx.x * blockDim.x + threadIdx.x;

به اين ترتيب، ابتدا مشخص مي شود که ش77روع بالک از چ77ه رش77ته پردازش77ي اس77ت، سپس به اندازه ان7ديس رشته پردازش77ي در آن بالک جل7و مي رويم. در نوش77تن ک7د اين هسته نکت7ه ديگ77ري ن7يز وج7ود دارد. از آنج77ا ک7ه ممکن اس77ت تع7داد رش7ته هاي پردازشي توليد شده بيشتر از اندازه آرايه باشد، بايد انديس ب77ه دس77ت آم77ده ب77راي رشته پردازشي بررسي شود تا بزرگ تر از ان77دازه آراي77ه نباش77د. در ص77ورتي ک77ه اين شرط درباره رشته پردازشي صدق نكند، به طور مشخص آن رشته پردازش77ي خ77اص

نبايد کاري را انجام دهد )يعني نبايد عمليات اضافه کردن يک را اجرا کند(.CudaMemcpy و CudaMallocدستورات

Page 18: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

عم7ل مي کن77د و ح7افظه اي راC در زب77ان alloc همانند دس77تور CudaMallocدستور براي متغير مشخص شده به عنوان پارامتر در نظر مي گيرد.

ب77راي ک77پي کردن مق77دارC در زبان Memcpy همانند دستور CudaMemcpyدستور حافظه اي از ميزبان به دستگاه کودا و برعكس به کار مي رود.

__global کلمه کلیدی که بیانگر اجرا شدن کدهای فوق در س77مت : __Deviceمی اجرا شده است.Hostباشد و نشان دهنده این است که تابع فوق از سمت

Triple گانه )3براکت Angle Barcketsاین عالمت ها نش77انه ی77ک فراخ77وانی از : ) می باشد.Device به سمت Hostسمت مثال :

mykernel<<<a,b>>>();

b تعداد بالک های درون هر گرید را مشخص می کند و مق77دار aدر این مثال مقدار ( درون یک بالک را مشخص می کند Threadتعداد ریسه های )

برنامه صدا می زنیم :main را در داخل تابع adderمثال: یک تابع با نام int main()

{

1. size_t size= N*sizeof(int); //simply an integer2. int *a_h,*b_h,*c_h;3. a_h = (int *)malloc(size);4. b_h = (int *)malloc(size);5. c_h = (int *)malloc(size);6. for(int i=0; i&lt;N; i++)7. a_h[i]=b_h[i]=1;8. int *a_d,*b_d,*c_d;9. cudaMalloc(&amp;a_d,size);

10. cudaMalloc(&amp;b_d,size);11. cudaMalloc(&amp;c_d,size);12. cudaMemcpy(a_d,a_h,size,cudaMemcpyHostToDevice);13. cudaMemcpy(b_d,b_h,size,cudaMemcpyHostToDevice);14. adder&lt;&lt;&lt;N,1&gt;&gt;&gt;(a_d,b_d,c_d);15. cudaMempy(c_h,c_d,size,cudaMemcpyDeviceToHost);16. return 0;

}

Page 19: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

h . پس7وند a_h,b_h,c_h داریم ب7ه ن7ام ه7ای int سه آرای7ه از ن7وع mainطبق تابع نش77ان دهن77ده اینd میباشد و پس77وند Hostمعموال برای نشان دادن تعلق متغیر به

وa_h( ق77رار دارد. Deviceمورد است که متغیر ما روی حافظه ی کارت گرافی77ک )b_h هر دو از سایز N.هستند و مقدار تمام خانه های آنها یک داده شده است

بری77زیم. طب77ق توض77یحات ب77االc_hمیخ77واهیم جم77ع این دو آرای77ه را درون آرایه ی بفرس77تیم. ب77رای اینک77ه بت77وانیمadderنمی توانیم مستقیما این سه آرایه را ب77ه ت77ابع

تهی77ه میک77نیم و ب77ه ج77ای انه77ا ب77ه ت77ابعb_h و a_hاینکار را انجام دهیم ی77ک ک77پی از میفرستیم اما قبل از ان باید متغیر های مورد نظر را تعریف کنیم.

همونطور که در کد باال میبینید نوع تعریف متغیر ها هیج تفاوتی با تعری77ف متغ77یر در ندارد. تفاوت در تخصیص حافظه میباش77د. در ح77الت ع77ادی ب77رای تخص77یصCزبان

استفاده میکنیم. ام77ا اینج77ا از کلم77ه یmallocحافظه به یک آرایه از کلمه ی کلیدی به صورت زیر استفاده میکنیم :cudaMallocکلیدی

cudaMalloc(&amp;a_d,N*sizeof(int));

cudaMalloc(&amp;b_d,N*sizeof(int));

cudaMalloc(&amp;c_d,N*sizeof(int));

تفاوت دیگری که اینجا مشهود است این مورد می باشد که متغیر مورد نظ77ر را ب77هعنوان آرگومان اولیه به تابع میدهیم.

حال میتوانیم عمل کپی را انجام دهیم ، با دستور زیر :cudaMemcpy(a_d,a_h,size,cudaMemcpyHostToDevice);

cudaMemcpy(b_d,b_h,size,cudaMemcpyHostToDevice);

عمل تابع فوق مشخص شده اس77ت ام77ا ی77ک آرگوم77ان آن همچن77ان ناش77ناخته ب77اقی ( می باشد به کودا اعالم می کند کهflagمیماند. این آرگومان که در واقع یک پرچم)

این عملیات قرار است در چه جهتی انجام شود. ما در اینجا می خواستیم آرای77ه ه77ا منتق77777777ل ک77777777نیم پس از عب77777777ارتdevice ب77777777ه host را از b_h و a_hی

cudaMemcpyHostToDeviceاستفاده کردیم. ب7ه ط77ور مش77ابه در آخ7ر از عب7ارت cudaMemcpyDeviceToHostاس77تفاده ک77ردیم زی77را میخواس77تیم آرایه ی محاس77به

کپی کنیم. همچنین میت77وانیمc_h را که روی دستگاه قرار داشت درون c_dشده ی درون دس777777تگاه هم ک777777پی انج777777ام ب777777دهیم ب777777ا اس777777تفاده از پ777777رچم

cudaMemcpyDeviceToDevice. در مثال باال برروی بالک ها عمل فوق را انجام دادیم اما اگر بخواهیم عمل فوق را

برروی نخ ها انجام دهیم باید به روش ذیل عمل نماییم .

Page 20: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

ابتدا هر نخ را آدرس دهی ک77نیم س77پس از آدرس نخ ف77وق در دس77تورات ذک77ر ش77دهاستفاده نماییم.

با توجه به فرمول فوق شکل انتزاعی نخ ها بصورت مقابل خواهد بود.

منابع

http://cuda.blogfa.com/category/5

http://elmavaran.ir

http://softday.blog.ir

Page 21: fumblog.um.ac.irfumblog.um.ac.ir/gallery/1020/[5] گزارش سمینار... · Web viewمعماری Fermi شامل 6 کنترلر حافظه 64 بیتی است که داده ها

Edward Kandrot;Jason Sanders.(2010) CUDA by Example: An Introduction to General-Purpose GPU. Addison-Wesley

Shane Cook .(2012)CUDA Programming: A Developer's Guide to Parallel Computing with GPUs. Morgan Kaufmann

Ty McKercher; John Cheng; Max Grossman .(2014) Professional CUDA C Programming. Wrox