به نام خدا
استفاده عمومی از پردازنده های گرافیکی
GPGPU
:تهیه کننده
صفری منصور
:استاد راهنما
مهندس مه لقا افراسیابی
1392بهار
فهرست
معماری پردازنده ها•
GPUتفاوت پردازنده های گرافیکی با پردازنده های اصلی )•
vs CPU)
برنامه نویسی موازی•
پردازش های مناسب برای اجرا با پردازنده های گرافیکی•
چگونگی استفاده از پردازنده های گرافیکی برای •
پردازش های عمومی
نتیجه گیری•
Hamedan University of Technology 3 GPGPU
حداقل واح-د های م-ورد نی-از ب-رای پ-ردازش فرآین-د ش-دن محق-ق و کن--ترل حافظ--ه، واح--دهای
محاسبه و منطق هستند.
ک-ه داده ه-ایی و دس-تورالعمل ها می ش-وند نگه-داری حافظ-ه در توس-ط واح-د کن-ترل خوان-ده ش-ده
و مورد بررسی قرار می گیرند.
واح-د محاس-به و منط-ق ب-ا توج-ه از ش-ده ص-ادر فرمان ه-ای ب-ه واح-د کن-ترل پ-ردازش مناس-ب را ب-ا داده انج-ام داده ه-ا روی ب-ر تکمی-ل فرآین-د پ-ردازش نت-ایج در نویس-ی ب-از حافظ-ه واح-د
می شوند.
معماری پردازنده هاInstruction
fetcher
Instructiondecoder
MemoryRegisters
ALU
Hamedan University of Technology 4 GPGPU
تفاوت پردازنده های گرافیکی با پردازنده های اصلی
ام-روزه تقریب-ا تمامی پردازن-ده هایی ک-ه در سیس-تم ها اس-تفاده می ش-وند هس-ته 8 ت-ا 2 ه-ای ام-روز-ی بین- CPUبیش -از ی-ک هس-ته م-حاس-ب-اتی دار-ن-د.
م-حاس-بات-ی دارن-د- ک-ه هر-ک-دا-م م-ی ت-وا-ن-د ب-ا -س-رعت -بس-ی-ار -ب-اال- م-حاس-با-ت را انجام دهد.
( ALUه-ا در تع-داد هس-ته های محاس-باتی )GPU ه-ا ب-ا CPUبزرگ-ترین تف-اوت هس-ته محا-سباتی و-جو-د دار-د. 512ها ب-یش -از GPUاست.- امر-وزه د-ر
Hamedan University of Technology 5 GPGPU
تفاوت پردازنده های گرافیکی با پردازنده های اصلی
(NVIDIA – Fermi )هاGPUمعماری
Hamedan University of Technology 6 GPGPU
برنامه نویسی موازی
تمامی سیس-تم عامل ها و س-خت افزارهای کن-ونی از قابلیت ه-ای چن-د ( پش-تیبانی multi thread( و اج-رای چن-د نخی )multi process )برن-امگی
می کنن-د و ب-ا آنه-ا س-ازگاری کام-ل دارن-د. ب-ا این ش-رایط تنه-ا ع-املی اج-را ب-ه ص-ورت م-وازی )چن-د نخی( برنام-ه ی-ک تع-یین می کن-د ک-ه
( نخی ت-ک ص-ورت ب-ه ی-ا خ-ود single threadش-ود داخلی س-اختار )برنامه است.
Hamedan University of Technology 7 GPGPU
برنامه نویسی موازی
اج-رای همزم-ان ب-رای از قابلیت ه-ایی ک-ه سیس-تم عامل ه-ا جدای ه-ای چن-د هس-ته ای ن-یز میتوانن-د چن-د پ-ردازش را CPUبرنامه ه-ا دارن-د
ب-ه ص-ورت واقع-ا همزم-ان اج-را کنن-د. ب-ه اینگون-ه ک-ه دس-تورالعمل ها مختل-ف هس-ته های ب-ه همزم-ان ص-ورت و CPUب-ه میش-ود داده
پردازش میشوند.
Hamedan University of Technology 8 GPGPU
پردازش های مناسب برای اجرا با
پردازنده های گرافیکی
نس-بت ب-ه ALUه-ا از نظ-ر تع-داد واح-دهای GPUاز آنج-ایی ک-ه برت-ری CPU ه-ا ک-امال مش-هود اس-ت و همچ-نین ب-ه این نتیج-ه رس-یدیم ک-ه ب-ا
بیش-تر تع-داد ب-ه ALUداش-تن را پ-ردازش بیش-تری تع-داد میت-وان ه-ا میتوانن-د در GPUص-ورت همزم-ان اج-را ک-رد، میت-وان دری-افت ک-ه
ه-ا CPUاج-رای ان-واع خاص-ی از برنامه ه-ا ب-ا اختالف بس-یار زی-ادی از پیشی بگیرند.
Hamedan University of Technology 9 GPGPU
پردازش های مناسب برای اجرا با
پردازنده های گرافیکی
الگوریتم ه-ای بس-یار زی-ادی وج-ود دارن-د ک-ه در اج-رای آنه-ا محاس-بات نس-بتا س-اده ای بای-د باره-ا روی حجم بس-یار زی-ادی از داده ه-ا انج-ام پذیرن-د. ش-بیه س-ازی وق-ایع ف-یزیکی، پ-ردازش تص-ویر، جس-تجو های کالن و هرگون-ه محاس-باتی ک-ه ب-ه ط-ور کلی ب-ا ماتریس ه-ا ی-ا برداره-ا
در ارتباط هستند را می توان از این نوع الگوریتم ها دانست.
اینگون-ه الگوریتم ه-ا و ی-ا برنامه ه-ا را براح-تی می ت-وان ب-ه گون-ه ای ص-ورت ب-ه و ش-وند تقس-یم زی-ادی قس-مت های ب-ه ک-ه نوش-ت از زی-ادی بس-یار قس-مت های زی-را درآین-د. اج-را ب-ه همزم-ان محاس-بات در این برنامه ه-ا هیچگون-ه وابس-تگی ب-ه نتیج-ه ی-ا خاتم-ه
محاسبات قسمت دیگر ندارند.
برای مثال ضرب دو ماتریس:
Hamedan University of Technology 10 GPGPU
چگونگی استفاده از پردازنده های گرافیکی برای
پردازش های عمومی
کامپایلره--ای و ابزاره--ا تاکنون برنامه نویس--ی ب--رای متف--اوتی
GPGPU هن-وز اس-ت. ش-ده ارائ-ه بین زی---ادی بس--یار اختالف--ات
س--ازنده و GPUش--رکت های ه--ا وج-ود. زمین-ه این نویس-ان برنام-ه
Nvidiaه-ا یع-نی GPUتنه-ا س-ازندگان هرک-دام کامپایلر ه-ای خ-اص AMDو
خ-ود را ارائ-ه کرده ان-د ک-ه این ک-ار را ب-رای برنام-ه نویس-ان دش-وار می کن-د از کمپانی ه--ا این دو ه--ر ولی
OpenCL.پشیبانی می کنند
Hamedan University of Technology 11 GPGPU
چگونگی استفاده از پردازنده های گرافیکی برای
پردازش های عمومی
در کلی که GPGPUقاعده است صورت این به CPU (HOST)( دس--تورالعمل ها KERNELS بخش ه--ای ب--ه را )( می ده-د و نت-ایج را DEVICE )ی-ا ب-ه ط-ور کلی GPUمختل-ف
پس می گیرد
Hamedan University of Technology 12 GPGPU
چگونگی استفاده از پردازنده های گرافیکی برای
پردازش های عمومی
مشاهده می کنید.CUDA C و ب-ا اس-تفاده از Cدر اینج-ا برنام-ه جم-ع دو ع-دد را ب-ا زب-ان
__global__ void add( int *a, int *b, int *c){*c = *a + *b;
}Int main( void ) {Int a, b, c; // host copies of a, b, cInt *dev_a, *dev_b, *dev_c; // device copies of a, b, cInt size = sizeof( int); // we need space for an integer
// allocate device copies of a, b, c
cudaMalloc( (void**)&dev_a, size );cudaMalloc( (void**)&dev_b, size );cudaMalloc( (void**)&dev_c, size );a = 2;b = 7;
Hamedan University of Technology 13 GPGPU
چگونگی استفاده از پردازنده های گرافیکی برای
پردازش های عمومی
// copy inputs to device
cudaMemcpy( dev_a, &a, size, cudaMemcpyHostToDevice);cudaMemcpy( dev_b, &b, size, cudaMemcpyHostToDevice);
// launch add() kernel on GPU, passing parameters
add<<< 1, 1 >>>( dev_a, dev_b, dev_c);
// copy device result back to host copy of c
cudaMemcpy( &c, dev_c, size, cudaMemcpyDeviceToHost);cudaFree( dev_a);cudaFree( dev_b);cudaFree( dev_c);
Return 0;}
Hamedan University of Technology 14 GPGPU
چگونگی استفاده از پردازنده های گرافیکی برای
پردازش های عمومی
در ک-دی ک-ه مش-اهده ک-ردیم تنه-ا دو ع-دد ب-ا هم جم-ع می ش-دند، در ک-دی ک-ه در- ادامه آم-ده ا-ست آر-ایه ای- از اعداد -با هم- جمع خو-اهند شد-.
__global__ void add( int *a, int *b, int *c ) {c[blockIdx.x] = a[blockIdx.x] + b[blockIdx.x];}#define N 512int main( void ) {int *a, *b, *c; // host copies of a, b, cint *dev_a, *dev_b, *dev_c; // device copies of a, b, cint size = N *sizeof( int); // we need space for 512 integers// allocate device copies of a, b, ccudaMalloc( (void**)&dev_a, size );cudaMalloc( (void**)&dev_b, size );cudaMalloc( (void**)&dev_c, size );a = (int*)malloc( size );b = (int*)malloc( size );c = (int*)malloc( size );random_ints( a, N );random_ints( b, N );Hamedan University of Technology 15 GPGPU
چگونگی استفاده از پردازنده های گرافیکی برای
پردازش های عمومی
// copy inputs to device
cudaMemcpy( dev_a, a, size, cudaMemcpyHostToDevice);cudaMemcpy( dev_b, b, size, cudaMemcpyHostToDevice);
// launch add() kernel with N parallel blocks
add<<< N, 1 >>>( dev_a, dev_b, dev_c);
// copy device result back to host copy of c
cudaMemcpy( c, dev_c, size, cudaMemcpyDeviceToHost);free( a ); free( b ); free( c );cudaFree( dev_a);cudaFree( dev_b);cudaFree( dev_c);return 0;}
Hamedan University of Technology 16 GPGPU
نتیجه گیری
در پردازش های وابسته به شبکهGPGPUاستفاده از •
در آنتی ویروس هاGPGPUاستفاده از •
در برنامه های پردازش سیگنال و GPGPUاستفاده از •
پردازش تصویر
در سرعت بخشیدن به پایگاه های دادهGPGPUاستفاده از •
Hamedan University of Technology 17 GPGPU
Hamedan University of Technology 18 GPGPU
منابع
• Matthew Scarpino, OpenCL in Action: Manning
Publications Co, 2012.
• Jason Sanders, Edward Kandrot. CUDA by example:
NVIDIA Co, 2012.
• CUDA - NVIDIA Developer Zone (
https://developer.nvidia.com/category/zone/cuda-zone)
• OpenACC Home (www.openacc-standard.org)
Hamedan University of Technology 19 GPGPU