SSE3
Streaming SIMD Extensions 3 ،SSE3، همچنین شناخته شده با اسم کد Intel آن (Prescott New Instructions (PNI، سری سوم دستورالعملهای SSE برای معماری (IA-32 (x86 است. اینتل SSE3 را در اوایل سال ۲۰۰۴ با Prescott revision از نوع پردازنده Pentium 4 خود معرفی کرد. در آوریل ۲۰۰۵، AMD یک زیر مجموعه از SSE3 را در نسخه E (ونیز و سان دیگو) پردازنده Athlon 64 خود معرفی کرد. دستورالعمل SIMD قبلی بر روی پلت فرم x86، از قدیمیترین به جدیدترین، MMX، 3DNow (توسط AMD توسعه یافتهاست، اما توسط پردازندههای اینتل پشتیبانی نمیشود)، SSE و SSE2 هستند.
SSE3 نسبت به SSE2 شامل ۱۳ دستورالعمل جدید میباشد.
تغییرات
تغییر قابل توجهی این است که توانایی کار به صورت افقی در یک ثبات است، به عنوان مخالف حرکت یا عملیات نسبتاً کمتر عمودی تمام دستورالعملهای قبلی SSE است. بهطور خاص، دستورالعملهایی برای افزودن و تفریق مقادیر متعدد ذخیره شده در یک ثبات واحد اضافه شدهاست. این دستورالعملها میتوانند برای افزایش سرعت پیادهسازی برخی از عملیات DSP و 3D استفغده شوند. همچنین یک دستورالعمل جدید بدون نیاز به تغییر حالت گرد کردن کلی، برای تبدیل مقادیر شناور به اعداد صحیح وجود دارد، از این رو از حالت تعلیقهای پر هزینه pipeline جلوگیری میشود. در نهایت، این افزونه LDDQU را اضافه میکند، بارگذاری بردار عدد صحیح جایگزین است که عملکرد بهتر در سیستم عامل مبتنی بر NetBurst برای بارگیریهایی که نیازمند عبور از مرزهای cacheline هستند.
پردازندههای شامل SSE3
- AMD:
- اینتل:
- سلرون D
- سلرون (شروع با Core microarchitecture)
- پنتیوم ۴ (از زمان Prescott)
- پنتیوم D
- Pentium Extreme Edition (اما نه Pentium 4 Extreme Edition)
- پنتیوم دو هسته ای
- پنتیوم (شروع با Core microarchitecture)
- هسته
- Xeon (از Nocona)
- اتوم
- VIA / Centaur:
- Transmeta Efficeon TM88xx (غیر از شماره مدلهای TM86xx)
دستورالعملهای جدید
دستورالعملهای مشترک
ریاضیات
- (ADDSUBPD — (Add-Subtract-Packed-Double
- ورودی: {A0، A1}، {B0، B1}
- خروجی: {A0 - B0، A1 + B1}
- (ADDSUBPS — (Add-Subtract-Packed-Single
- ورودی: {A0، A1، A2، A3}، {B0، B1، B2، B3}
- خروجی: {A0 - B0، A1 + B1، A2 - B2، A3 + B3}
AOS (آرایه ای از سازهها)
- (HADDPD — (Horizontal-Add-Packed-Double
- ورودی: {A0، A1}، {B0، B1}
- خروجی: {A0 + A1، B0 + B1}
- (HADDPS (Horizontal-Add-Packed-Single)
- ورودی: {A0، A1، A2، A3}، {B0، B1، B2، B3}
- خروجی: {A0 + A1، A2 + A3، B0 + B1، B2 + B3}
- (HSUBPD — (Horizontal-Subtract-Packed-Double
- ورودی: {A0، A1}، {B0، B1}
- خروجی: {A0 - A1، B0 - B1}
- (HSUBPS — (Horizontal-Subtract-Packed-Single
- ورودی: {A0، A1، A2، A3}، {B0، B1، B2، B3}
- خروجی: {A0 - A1، A2 - A3، B0 - B1، B2 - B3}
- LDDQU — همانطور که در بالا ذکر شد، این یک بردار عدد صحیح جایگزین ناهماهنگ است. این میتواند برای کارهای فشرده سازی ویدئو مفید باشد.
- MOVDDUP , MOVSHDUP, MOVSLDUP — اینها برای اعداد مختلط و محاسبات موجی مانند صدا مفید هستند.
- FISTTP — مانند دستورالعمل x87 FISTP قدیمی تر، اما تنظیمات حالت گرد کردن ثبات کنترل اعداد اعشاری را نادیده میگیرد و به جای آن از حالت «بریدن» (کوتاه کردن) استفاده میکند. این کار اجازه میدهد تا بارگیری و بارگذاری مجدد پر هزینه ثبات کنترل در زبانهایی مانند C را در حالتهایی که تبدیل اعداد اعشاری به اعداد صحیح به کوتاه کردن نیاز دارد با نادیده گرفتن به صورت استاندارد برطرف کند.
دستورالعملهای اینتل
- MONITOR, MWAIT - اینها برنامههای کاربردی چند رشتهای را بهینهسازی میکنند، به پردازندههایی با قابلیت Hyper-threading عملکرد بهتری میدهند.