موضوع مقاله: SSE2 | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # SSE2 | مقدمه: این مجموعه دستورالعمل های قبلی SSE را گسترش می دهد و به طور کامل جایگزین MMX می شود. | ## بخش 1: SSE2 | SSE2 تعداد 144 دستورالعمل جدید برای SSE اضافه کرده است که دارای 70 دستورالعمل است. امکانات اکثر دستورالعمل های SSE2 اجرای عملیات برداری اعداد صحیح را پیاده سازی می کند که در MMX نیز پیدا می شوند. آن ها به جای ثبات های MMX، از ثبات های XMM استفاده می کنند که گسترده تر است و برای بهبود عملکرد قابل توجهی در برنامه های تخصصی امکان پذیر است. SSE2 همچنین عملیات بردار اعداد شناور دستورالعمل SSE را با اضافه کردن پشتیبانی از نوع داده دو برابر دقیق، کامل می کند. سایر افزونه های SSE2 شامل مجموعه ای از دستورات کنترل کش هستند که عمدتاً برای به حداقل رساندن آلودگی کش هنگام پردازش بی نهایت اطلاعات و تکمیل کامل از دستورالعمل های تبدیل فرمت عددی است. این ثبات های اضافی تنها زمانی که در حالت 64 بیتی اجرا می شوند قابل مشاهده هستند. اینتل این ثبات های اضافی را به عنوان بخشی از حمایت خود از معماری x86-64 ( یا در سخنرانی اینتل، "Intel 64" ) در سال 2004 تصویب کرد. اگر کدهای طراحی شده برای x87 به نقاط با کمترین دقت با دو رقم اعشار دقت SSE2 منتقل شوند، ترکیبات خاصی از عملیات ریاضی یا داده های ورودی می تواند منجر به انحراف عددی قابل ملاحظه ای شود که می تواند مسئله ای قابل بازبینی در محاسبات علمی باشد، مثلاً هنگامی که نتیجه محاسبات میبایست با نتایج ایجاد شده از معماری ماشین های مختلف مقایسه شود. | ## بخش 2: SSE2 | یک مسئله مرطبت این است که از لحاظ تاریخی استانداردهای زبان و کامپایلر در معماری خود از رجیستر 80 بیتی x87 که دو متغیر دقت افزایش یافته را در مقایسه با فرمت های دو و یک دقت که در SSE2 پیاده سازی می شوند گرد هم آمده اند: گرد کردن دقت های اضافه شده در مقادیر متوسط به مقادیر با دو برابر دقت به طور کامل تعریف نشده و وابسته به جزئیات پیاده سازی است مانند زمانیکه رجیسترها حافظه را پر کرده بودند. از آنجا که طول یک ثبات SSE2 دو برابر طول یک ثبات MMX می باشد، شمارنده های حلقه و دسترسی به حافظه ممکن است برای دستیابی به این هدف ممکن است به تغییر نیاز داشته باشند . با این حال، بارگیری و ذخیره 8 بایتی در XMM در دسترس هستند، بنابراین این مورد به خیلی مورد نیاز نیست. اگر چه یک دستور SSE2 می تواند با دو برابر داده نسبت به یک دستور MMX عمل کند، عملکرد ممکن است به طور قابل توجه افزایش نیافته باشد. دو دلیل عمده این ها هستند: دسترسی به داده های SSE2 در حافظه که با یک مرز 16 بایت همسان نیستند می توانند پنالتی قابل توجهی را تحمل نمایند و کارایی دستورالعمل های SSE2 در اجرای پیاده سازی های x86 قدیمی تر از نصف دستورات MMX است. از آن ها که فایل های ثبات MMX و x87 را به جای یکدیگر می نامند، استفاده از MMX، از اجرای دستورات x87 به صورت پیش فرض جلوگیری خواهد کرد. در برخی از سیستم عامل ها، x87 خیلی مورد استفاده قرار نمی‌گیرد اما هنوز ممکن است در بعضی از نقاط بحرانی مانند pow که در آن دقت زیاد مورد نیاز است، استفاده می شود. در چنین مواردی، حالت نادرست عدد شناور از عدم انتشار emms ممکن است برای میلیونها دستورالعمل قابل شناسایی نباشد، و در نهایت موجب خروجی نادرست در شناور شدن می شود و NaN باز می گرداند. | ## بخش 3: SSE2 | از آنجا که این مشکل در کد MMX مشخص نیست، پیدا کردن و اصلاح اشکال می تواند بسیار وقت گیر باشد. از آن جا که SSE2 این مشکل را ندارد، معمولاً عملکرد بهتری را دربر دارد و رجیسترهای بیشتری را در کد 64 بیتی فراهم می کند، باید برای تقریباً تمام کارهای برداری ترجیح داده شود. استفاده کامپایلر هنگامی که برای اولین بار در سال 2000 معرفی شد، SSE2 با ابزارهای توسعه نرم‌افزار پشتیبانی نمی شد. برای مثال، برای استفاده از SSE2 در یک پروژه مایکروسافت ویژوال استودیو ، برنامه نویس مجبور بود که به صورت دستی کد اسمبلی درخط بنویسد یا کد مورد نظر را از یک منبع خارجی وارد کند. پشتیبانی پردازنده SSE2 یکی از افزونه های معماری IA-32 بر اساس مجموعه دستورالعمل x86 است. این همچنین تعداد ثبات های XMM را دو برابر می کند، که امکان عملکرد بهتر را فراهم می کند. | ## جمع‌بندی | SSE2 همچنین برای نصب ویندوز 8 (و نسخه های بعدی) یا مایکروسافت آفیس 2013 (و بعد از آن) "برای افزایش قابلیت اطمینان برنامه های جانبی و درایورهای در حال اجرا در ویندوز 8" به عنوان یک نیازمندی محسوب می شود.