چرا این فصل نهایی اهمیت دارد
هر مکانیزمی که تاکنون در این مجموعه پوشش داده شد — دستورات، محاسبات، پایپلاینینگ، و سلسلهمراتب حافظه — بر سریعتر اجرا کردن برنامههای منفرد توسط یک هسته پردازنده واحد تمرکز داشته است. این فصل تمرکز را به سیستمهای ساختهشده از بسیاری پردازندهای که با هم کار میکنند، و چالشهای نرمافزاری و سختافزاری منحصربهفردی که بهطور خاص از این تغییر ناشی میشوند، تغییر میدهد.
چرا نوشتن برنامههای موازی واقعاً دشوار است
تقسیم کار یک برنامه در سراسر چند هسته از نظر اصولی ساده بهنظر میرسد، اما در عمل مسائلی معرفی میکند که برنامهنویسی پیدرپی هرگز با آنها مواجه نمیشود. یک برنامهنویس باید کار را به قطعات مستقل تقسیم کند، ارتباط و همگامسازی بین آن قطعات را با استفاده از مکانیزمهایی مانند دستورات اتمیک که پیشتر در این مجموعه بحث شد هماهنگ کند، و داده مشترک را بهدرستی در سراسر هستهها با تکیه بر تضمینهای انسجام کش که نیز پیشتر بحث شد مدیریت کند.
قانونی که بهره موازیسازی را محدود میکند
حتی با هماهنگی کامل، یک محدودیت بنیادین باقی میماند: هر بخشی از یک برنامه که نمیتواند موازی شود همچنان بهصورت پیدرپی اجرا میشود، و حداکثر بهره ممکن را صرفنظر از اینکه چند هسته اضافه شود محدود میکند. این رابطه، معروف به Amdahl's Law، توضیح میدهد چرا صرفاً اضافه کردن هستههای بیشتر به یک سیستم بهبود کارایی متناسبی را تضمین نمیکند، بهویژه برای برنامههایی با بخش پیدرپی قابلتوجه.
اگر 90% یک برنامه قابلموازیسازی باشد
و 10% باید پیدرپی باقی بماند،
حتی تعداد بینهایتی از هستهها
میتوانند برنامه را حداکثر 10 برابر سریعتر کننددستهبندی سختافزار موازی: طبقهبندی فلین
یک چارچوب کلاسیک، معروف به Flynn's Taxonomy، سیستمهای کامپیوتری را بر اساس اینکه چند جریان همزمان از دستورات و داده پردازش میکنند دستهبندی میکند.
SISD (Single Instruction, Single Data): یک پردازنده تکهستهای سنتی که یک دستور را روی یک قطعه داده در یک زمان اجرا میکند، مدلی که بهطور ضمنی در سراسر بیشتر این مجموعه پیش از این فصل فرض شده بود.SIMD (Single Instruction, Multiple Data): یک دستور بهطور همزمان روی چند عنصر داده عمل میکند، همان مفهومی که پیشتر در این مجموعه درباره موازیسازی زیرکلمهای معرفی شد.MISD (Multiple Instruction, Single Data): چند دستور بهطور همزمان روی همان جریان داده عمل میکنند، یک پیکربندی نادر که عمدتاً در سیستمهای تخصصی تحملپذیر خطا استفاده میشود.MIMD (Multiple Instruction, Multiple Data): چند پردازنده مستقل هرکدام دستورات خودشان را روی داده خودشان اجرا میکنند، که بیشتر سیستمهای چندهستهای و چندپردازندهای امروزی را توصیف میکند.
SPMD: یک مدل برنامهنویسی عملی درون MIMD
بیشتر برنامههای موازی دنیای واقعی از یک سبک خاص به نام SPMD (Single Program, Multiple Data) استفاده میکنند، جایی که هر پردازنده همان برنامه را اجرا میکند، اما روی بخش متفاوتی از کل داده عمل میکند، و میتواند مسیرهای اجرای متفاوتی را از میان همان برنامه بر اساس داده خاصی که پردازش میکند طی کند. این از نظر فنی نوعی استفاده سختافزاری MIMD است، چون هر پردازنده واقعاً جریان دستور خودش را اجرا میکند، اما با سادگی عملی نوشتن فقط یک برنامه بهجای بسیاری برنامه کاملاً متفاوت.
پردازش برداری: شکلی ساختاریافته از موازیسازی داده
Vector Processors مفهوم SIMD را بیشتر گسترش میدهند، و روی کل آرایهها، یا بردارها، از داده با استفاده از دستورات تخصصی طراحیشده بهطور خاص برای این هدف عمل میکنند، که از نظر تاریخی در محاسبات علمی مهم بوده و ارتباط نزدیکی با افزونههای SIMD پهن مانند AVX که پیشتر در این مجموعه بحث شد دارد.
چرا این چارچوب طبقهبندی همچنان اهمیت دارد
حتی اگرچه سیستمهای واقعی امروزی اغلب چند مورد از این دستهها را بهطور همزمان ترکیب میکنند — یک سیستم چندهستهای MIMD که هر هسته منفرد نیز از دستورات SIMD پشتیبانی میکند — Flynn's Taxonomy همچنان یک نقطه شروع مفهومی مفید برای درک مبادلات بنیادینی است که هر سبک سختافزار موازی بین پیچیدگی برنامهنویسی و کارایی قابلدستیابی ایجاد میکند.