مقدمهای درباره برنامهنویسی Cو زمانبندی است و مسلماً این یک مقدمه بسیار کوتاه است. بنابراین، این اصلاً یک دوره کامل برنامهنویسی Cنیست و همچنین یک دوره کامل نیست. دوره در مورد زمانبندی است، اما حداقل ماهیت چیزهایی را که واقعاً برای این دوره نیاز دارید را به تصویر میکشد تا کمی با برنامههای C بازی کنید. و سپس البته آنها را روی دستگاههای HPC اجرا کنید که به نوعی دسترسی دستهای نیاز دارد. این چیزی است که ما انجام میدهیم. میخواهم اساساً کمی با ایده استفاده از زمانبندیها که دسترسی همزمان را برنامهریزی میکنند، آشنا شوم. اساساً همه چیز در اینجا در ابر رایانههای موجود در ماشینهای HPC قرار دارد، اما قبل از شروع با مطالب این سخنرانی، اجازه دهید ببینیم چه چیزی داریم. آخرین بار واقعاً اولین سخنرانی واقعی در مورد مفاهیم بود که اساساً یک مرور کلی از محاسبات با کارایی بالا بود و در واقع چند اصطلاح را نیز توضیح داد که درک آنها بسیار مهم است.
حافظه را در یک گره توزیع میکنید که اینجا مشاهده میکنید که اساساً میتوانید وارد کنید که این بخش از پردازنده خواهد بود یا این یا آن که البته این مثالهای مفصل است و البته در یکی از دو سخنرانی بعدی در مورد این صحبت خواهیم کرد.
بنابراین در قسمت بعدی که داشتیم کمی بیشتر به فناوریهای اکوسیستم HPC نگاه میکردیم، این ایده را داشتیم که اساساً مشکل پردازندههای امروز و گذشته بیشتر و بیشتر این بود که قرار دادن هستههای بیشتر روی تراشه با خطا مواجه میشود، زیرا همگی فرکانس بالا یا کلاک بالا هستند. فرکانس آنها بسیار داغ میشوند، بنابراین یکی از ایدهها این است که به جای آن چیزی به نام پردازشگر معماری ایجاد کنید که صدها هزار هسته داشته باشد، اما فقط با عملکرد متوسط، بنابراین آنقدر داغ نیستند و با این کار میتوانید فقط بیشتر از آن استفاده کنید. و موارد دیگر روی تراشه و این ایده واحد پردازش گرافیکی به اصطلاح GPU با یک حافظه دستگاه در اینجا است که معمولاً باید توسط یک CPU میزبان و از طریق حافظه خانه تغذیه شود، بنابراین CPUتا GPU مستقل در حال حاضر روشن هستند. اما اکثریتی که امروزه وجود دارد هنوز به یک CPU کامل نیاز دارد تا دادهها را در حافظه خود قرار دهد و سپس از این حافظه میتوانید آن را در حافظه دستگاه آپلود کنید و سپس اساساً اجازه دهید روی هستههای زیادی اجرا شود. مفهومی به نام شتاب است، بنابراین برنامه عادی خود را که اصطلاحاً GPUsو در حال حاضر دارید تسریع کنید، فرض کنید سهم بازار ارائه شده توسط NVIDIA است، اگرچه چندین فروشنده مختلف در حال حاضر به طور قابل توجهی به عقب افتاده اند و روشی که میتوانید به خوبی محاسبات را ببینید. در اینجا اساساً بسیاری از قطعات محاسباتی مستقل وجود دارد که در اینجا ضرب بردار ماتریس را مشاهده میکنید که در آن این کد رنگی را دارید که نشان میدهد برای محاسبه اساساً این بخش خاص، این مثال بسیار ساده البته اکنون به این فکر کنید که ما در مورد ماتریس ممکن صحبت خواهیم کرد. صد و هزار در جهت نه چهار در چهار، بلکه بسیار بزرگتر، ایده این است که شما میتوانید به طور مستقل این را به زیبایی بر اساس کد رنگ محاسبه کنید، به عبارت دیگر، اساساً در این ماتریس و تجارت متفاوت به هیچ ستون دیگری نیاز ندارید. موازی مستقل و زیبا است برای قرار دادن یک پردازنده گرافیکی، نیازی به محاسبات عظیم در تمام این بخشهای مختلف ندارد، اما در کل مسلماً شما مقدار زیادی را محاسبه میکنید، اما البته میتوانید مشکل را به گونهای که واقعاً مستقل است حل کنید.
این را واقعا در بسیاری از زمینههای کاربردی مختلف داشته باشید، به ویژه در یادگیری عمیق، جایی که در یکی از سخنرانیهای بعدی هنگامی که اصول اولیه HPC MPIو OpenMP را با برنامهنویسی حافظه مشترک ایجاد کردیم، در مورد آن صحبت خواهیم کرد، سپس کمی در مورد GPUs صحبت خواهیم کرد و شتابدهندهها و استفاده از آنها در یادگیری عمیق، یک شبکه یادگیری عمیق را در اینجا میبینید که در آن تانسورهای زیادی در اینجا محاسبه میکنند، این یک ماتریس چند بعدی است اگر بخواهید و اساساً یک ماتریس سه بعدی است، برای مثال اگر میخواهید به عنوان مثال در اینجا باشد، اما واقعاً اینطور نیست. مهم نیست، زیرا اگر به همه این ضرب ماتریس یا ضرب بردار ماتریس نگاه کنید، گاهی اوقات اینها همه عملیات ساده هستند و از این رو میتوانید اساساً این مشکل را روی یک GPUقرار دهید که اهمیت بسیار زیادی دارد.