چرا بسیاری از نرم‌افزارها از پردازش موازی پشتیبانی نمی‌کنند؟

چرا بسیاری از نرم‌افزارها از پردازش موازی پشتیبانی نمی‌کنند؟

اگر به بخش Task Manager سیستم‌عامل خود مراجعه کنید متوجه می‌شوید که بسیاری از نرم‌افزارها تنها از توان یکی از هسته‌ها استفاده می‌کنند و در اکثر شرایط باقی هسته‌ها بلامصرف هستند. اگر نرم‌افزارها نمی‌توانند از توان پردازنده‌ها استفاده کنند، چرا خود پردازنده یا سیستم‌عامل دستورات مربوط به آن‌ها را خرد نکرده و به پردازنده ارسال نمی‌کنند؟ متاسفانه راهی وجود ندارد که نرم‌افزارها را جوری تغییر داد که بتوانند از چند هسته استفاده کنند. دلیل این موضوع نیز در آن است که تنها سازنده‌ی نرم‌افزار و شخصی که کدهای مربوط به آن را نوشته می‌تواند دستورات مربوط به آن را جوری تغییر دهد که دستورات خرد شده و بین هسته‌ها تقسیم شوند در غیر اینصورت اگر دستورات خرد شوند ممکن است تقدم و تاخر اجرای آن‌ها بهم خورده و برنامه درست کار نکند.

شاید برخی بر این باور باشند که اگر دو هسته بر روی یک دستور کار کنند سرعت اجرای آن افزایش یابد؛ اما چنین موضوعی امکان پذیر نیست برای درک بهتر موضوع تصور کنید که یک شخص قرار باشد با دو ماشین از یک مکان به مکان دیگر منتقل شود، شخص باید یکی از خودروها را برای انتقال خود انتخاب کند و حتی اگر هر دو هسته به سمت مقصد حرکت کنند باز هم شخص در یک زمان مشخص به مقصد می‌رسد و وجود دو خودرو نمی‌تواند وی را زودتر به نتیجه برساند.

پس در نهایت با ارائه‌ی پردازنده‌های چند هسته‌ای قدرت آن‌ها به شدت افزایش یافت و سرعت کامپیوترها زیاد می‌شود. اما اگر نرم‌افزارها برای پردازش موازی دستوارت طراحی نشده باشند، قدرت و بازده‌ی پردازنده‌ی تک هسته‌ای با همان معماری اما هسته‌های بیشتر چندان متفاوت نیست. تقریبا تمام سیستم‌عامل‌ها از ویندوز تا مک تا توزیع‌های لینوکس همگی از پردازش موازی پشتیبانی می‌کنند. بسیاری از اپلیکیشن‌های بزرگ مانند محصولات ادوبی، نرم‌افزارهای ویرایش تصاویر یا ویدیو، نرم‌افزارهای فشرده‌سازی، اپلیکیشن‌های رمزگشایی یا فشرده سازی، نرم‌افزارهای مهم سرورها و همچنین برخی از بازی‌های مجهز به موتورهای پیشرفته قادر به استفاده از توان چند هسته در پردازنده‌ هستند. اما عموم اپلیکیشن‌های موبایل و نرم‌افزارهای ساده‌ی تحت سیستم‌عامل‌های دسکتاپ قادر به موازی سازی نیستند. فرایند موازی سازی نرم‌افزارها بحث بسیار پیچیده‌ای است که پیاده سازی آن توسط عموم توسعه‌دهندگان نرم‌افزاری دشوار است و اغلب از آن صرفنظر می‌کنند.