1 / 19

به نام خدا

به نام خدا. استفاده عمومی‌از پردازنده‌های گرافیکی GPGPU تهیه کننده: منصور صفری استاد راهنما: مهندس مه لقا افراسیابی بهار 1392. فهرست. معماری پردازنده‌ها تفاوت پردازنده‌های گرافیکی با پردازنده‌های اصلی ( GPU vs CPU ) برنامه نویسی موازی

mervyn
Download Presentation

به نام خدا

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. به نام خدا

  2. استفاده عمومی‌از پردازنده‌های گرافیکی GPGPU تهیه کننده: منصورصفری • استاد راهنما: • مهندس مه لقا افراسیابی بهار 1392

  3. فهرست • معماری پردازنده‌ها • تفاوت پردازنده‌های گرافیکی با پردازنده‌های اصلی (GPU vs CPU) • برنامه نویسی موازی • پردازش‌های مناسب برای اجرا با پردازنده‌های گرافیکی • چگونگی استفاده از پردازنده‌های گرافیکی برای پردازش‌های عمومی • نتیجه‌گیری Hamedan University of Technology 3 GPGPU

  4. معماری پردازنده‌ها Instruction fetcher Memory • حداقل واحد‌های مورد نیاز برای محقق شدن فرآیند پردازش واحدهای حافظه، کنترل و محاسبه و منطق هستند. • دستورالعمل‌ها و داده‌هایی که در حافظه نگهداری می‌شوند توسط واحد کنترل خوانده شده و مورد بررسی قرار می‌گیرند. • واحد محاسبه و منطق با توجه به فرمان‌های صادر شده از واحد کنترل پردازش مناسب را بر روی داده‌ها انجام داده با تکمیل فرآیند پردازش نتایج در واحد حافظه باز نویسی می‌شوند. Instruction decoder Registers ALU Hamedan University of Technology 4 GPGPU

  5. تفاوت پردازنده‌های گرافیکی با پردازنده‌های اصلی • امروزه تقریبا تمامی‌‌پردازنده‌هایی که در سیستم‌ها استفاده می‌شوند بیش از یک هسته محاسباتی دارند. CPU‌های امروزی بین 2 تا 8 هسته محاسباتی دارند که هرکدام می‌تواند با سرعت بسیار بالا محاسبات را انجام دهد. • بزرگترین تفاوت CPU‌ها با GPUها در تعداد هسته‌های محاسباتی (ALU) است. امروزه در GPUها بیش از 512 هسته محاسباتی وجود دارد. Hamedan University of Technology 5 GPGPU

  6. تفاوت پردازنده‌های گرافیکی با پردازنده‌های اصلی معماری GPUها (NVIDIA – Fermi) Hamedan University of Technology 6 GPGPU

  7. برنامه نویسی موازی • تمامی‌سیستم‌عامل‌ها و سخت‌افزارهای کنونی از قابلیت‌های چند برنامگی(multi process) و اجرای چند نخی (multi thread) پشتیبانی می‌کنند و با آنها سازگاری کامل دارند. با این شرایط تنها عاملی که تعیین می‌کند یک برنامه به صورت موازی (چند نخی) اجرا شود یا به صورت تک نخی (single thread) ساختار داخلی خود برنامه است. Hamedan University of Technology 7 GPGPU

  8. برنامه نویسی موازی • جدای از قابلیت‌هایی که سیستم عامل‌ها برای اجرای همزمان برنامه‌ها دارند CPUهای چند هسته ای نیز میتوانند چند پردازش را به صورت واقعا همزمان اجرا کنند. به اینگونه که دستورالعمل‌ها به صورت همزمان به هسته‌های مختلف CPU داده میشود و پردازش میشوند. Hamedan University of Technology 8 GPGPU

  9. پردازش‌های مناسب برای اجرا با پردازنده‌های گرافیکی • از آنجایی که برتری GPUها از نظر تعداد واحدهای ALU نسبت به CPUها کاملا مشهود است و همچنین به این نتیجه رسیدیم که با داشتن تعداد بیشتر ALU میتوان تعداد بیشتری پردازش را به صورت همزمان اجرا کرد، میتوان دریافت که GPUها میتوانند در اجرای انواع خاصی از برنامه‌ها با اختلاف بسیار زیادی از CPUها پیشی بگیرند. Hamedan University of Technology 9 GPGPU

  10. پردازش‌های مناسب برای اجرا با پردازنده‌های گرافیکی • الگوریتم‌های بسیار زیادی وجود دارند که در اجرای آنها محاسبات نسبتا ساده ای باید بارها روی حجم بسیار زیادی از داده‌ها انجام پذیرند. شبیه سازی وقایع فیزیکی، پردازش تصویر، جستجو‌های کلان و هرگونه محاسباتی که به طور کلی با ماتریس‌ها یا بردارها در ارتباط هستند را می‌توان از این نوع الگوریتم‌ها دانست. • اینگونه الگوریتم‌ها و یا برنامه‌ها را براحتی می‌توان به گونه ای نوشت که به قسمت‌های زیادی تقسیم شوند و به صورت همزمان به اجرا درآیند. زیرا قسمت‌های بسیار زیادی از محاسبات در این برنامه‌ها هیچگونه وابستگی به نتیجه یا خاتمه محاسبات قسمت دیگر ندارند. • برای مثال ضرب دو ماتریس: Hamedan University of Technology 10 GPGPU

  11. چگونگی استفاده از پردازنده‌های گرافیکی برای پردازش‌های عمومی • تاکنون ابزارها و کامپایلرهای متفاوتی برای برنامه‌نویسی GPGPU ارائه شده است.هنوز اختلافات بسیار زیادی بین شرکت‌های سازنده GPUها و برنامه نویسان این زمینه وجود. تنها سازندگان GPUها یعنی Nvidia و AMD هرکدام کامپایلر‌های خاص خود را ارائه کرده‌اند که این کار را برای برنامه نویسان دشوار می‌کند ولی هر دو این کمپانی‌ها از OpenCL پشیبانی می‌کنند. Hamedan University of Technology 11 GPGPU

  12. چگونگی استفاده از پردازنده‌های گرافیکی برای پردازش‌های عمومی • قاعده کلی در GPGPU به این صورت است که CPU (HOST) دستورالعمل‌ها (KERNELS) را به بخش‌های مختلف GPU (یا به طور کلی DEVICE) می‌دهد و نتایج را پس می‌گیرد Hamedan University of Technology 12 GPGPU

  13. چگونگی استفاده از پردازنده‌های گرافیکی برای پردازش‌های عمومی در اینجا برنامه جمع دو عدد را با زبان C و با استفاده از CUDA C مشاهده می‌کنید. __global__ void add( int*a, int*b, int*c){ *c = *a + *b; } Intmain( void ) { Inta, b, c; // host copies of a, b, c Int*dev_a, *dev_b, *dev_c; // device copies of a, b, c Intsize = 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

  14. چگونگی استفاده از پردازنده‌های گرافیکی برای پردازش‌های عمومی // 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

  15. چگونگی استفاده از پردازنده‌های گرافیکی برای پردازش‌های عمومی در کدی که مشاهده کردیم تنها دو عدد با هم جمع می‌شدند، در کدی که در ادامه آمده است آرایه ای از اعداد با هم جمع خواهند شد. __global__ void add( int*a, int*b, int*c ) { c[blockIdx.x] = a[blockIdx.x] + b[blockIdx.x]; } #define N 512 intmain( void ) { int*a, *b, *c; // host copies of a, b, c int*dev_a, *dev_b, *dev_c; // device copies of a, b, c intsize = N *sizeof( int); // we need space for 512 integers // allocate device copies of a, b, c cudaMalloc( (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

  16. چگونگی استفاده از پردازنده‌های گرافیکی برای پردازش‌های عمومی // 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

  17. نتیجه‌گیری • استفاده از GPGPU در پردازش‌های وابسته به شبکه • استفاده از GPGPU در آنتی ویروس‌ها • استفاده از GPGPUدر برنامه‌های پردازش سیگنال و پردازش تصویر • استفاده از GPGPU در سرعت بخشیدن به پایگاه‌های داده Hamedan University of Technology 17 GPGPU

  18. Hamedan University of Technology 18 GPGPU

  19. منابع • 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

More Related