ام ام ایکس یک مجموعه دستورالعملواحد با داده های متعدد ( SIMD ) طراحی شده توسط اینتل و معرفی شده در 1997 است.[۱][۲] MMX با خط ریزپردازندهپنتیوم مبتنی بر P5، به عنوان "پنتیوم با تکنولوژی MMX" شناخته می شود. [۳] که از یک واحد مشابه در Intel i860، [۴] و پردازنده پیکسل ویدئویی Intel i750 ساخته شده است. MMX یک قابلیت تکمیلی پردازنده است که توسط پردازنده های جدید آیای-۳۲ اینتل و سایر فروشندگان پشتیبانی می شود.
تبلیغات اولیه شامل تبلیغات در مسابقات سوپربول با این عنوان بود: "نسل جدید محصولات چند رسانه ای شامل گوشی های ویدیویی و بازی های ویدئویی سه بعدی."[۵]
MMX متعاقباً توسط چند برنامه بهوسیلهٔ Intel و دیگران گسترش یافته است: 3DNow! ، SSE ، و ویرایش های جدید AVX.
بررسی اجمالی
نامگذاری
MMX به طور رسمی یک سرواژه بی معنی است که توسط اینتل [۶][۷]علامت گذاری تجاری شده است؛ [۸] به لحاظ غیر رسمی، MMX می تواند مخفف عبارات زیر هم باشد:
Newsweek آن را اینگونه توصیف می کند: "57 دستورالعمل جدید که به طرز میکروسکوپی روی تراشه نقش بسته اند." [۶]
ای ام دی ، در طول یکی از جدال های دادگاهی متعدد خود با اینتل، MMX را مخفف "Matrix Math Extensions" قلمداد کرد. از آنجا که سرواژه سازی نمیتواند علامت تجاری باشد، این حرکت تلاشی برای لغو علامت تجاری اینتل بود. در سال 1995، اینتل به دلیل سوء استفاده از نام تجاری MMX خود، علیه AMD و Cyrix Corp شکایت کرد. AMD و اینتل با این شرایط این جدال را خاتمه دادند که AMD ، ام ام ایکس را علامت تجاری متعلق به اینتل بداند و Intel هم این حق را به AMD برای استفاده از علامت تجاری MMX به عنوان نام فناوری ، و نه نام پردازنده، بدهد. [۹]
جزئیات فنی
MMX هشت ثبات که از MM0 تا MM7 نامگذاری شده اند را شامل می شود و عملیات های روی آن ها را تعریف می کند. هر ثبات 64 بیتی است و می تواند اعداد صحیح 64 بیتی یا چند عدد صحیح کوچکتر را در قالب فرمت بسته بندی ( packed ) نگه دارد: یک دستورالعمل واحد می تواند روی دو عدد صحیح 32 بیتی، چهار عدد صحیح 16 بیتی یا هشت عدد صحیح 8 بیتی اعمال شود. [۱۰]
MMX تنها عملیات مربوط به اعداد صحیح را ارائه می دهد. هنگامی که برای i860 اینتل توسعه داده شد، استفاده از حساب اعداد صحیح معنادار شد (محاسبات 2بعدی و 3بعدی به آن نیاز دارند)، اما هنگامی که کارت های گرافیکی که از این عملیات ها استفاده می کردند رایج شدند، عدد صحیحSIMD در CPU تا حدودی برای برنامه های گرافیکی زائد شد. [نیازمند منبع] از سوی دیگر، عملیات محاسباتی اشباع در MMX می تواند به میزان قابل توجهی برخی از برنامه های پردازش سیگنال دیجیتال را سرعت ببخشد. [نیازمند منبع]
برای جلوگیری از مشکلات سازگاری با مکانیسم تعویض زمینه در سیستم عامل های موجود، ثبات های MMX نام مستعاری برای ثبات های X87 FPU هستند. فرایند تعویض زمینه همچنان ذخیره و بازیابی را انجام می دهد. برخلاف ثبات های x87 که مانند یک پشته رفتار می کنند، ثبات های MMX هر کدام مستقیماً قابل آدرس دهی (دسترسی تصادفی) هستند.
هر عملیاتی که شامل پشته ممیز شناور باشد، ممکن است بر ثبات های MMX تاثیر بگذارد، و بالعکس. بنابراین این نامگذاری کار را با عملیات ممیز شناور و SIMD در یک برنامه دشوار می کند. [۱۱] برای به حداکثر رساندن عملکرد، برنامه نویسان اغلب از پردازنده به طور انحصاری در یک حالت استفاده می کنند، یا تا حد امکان، تعویض نسبتاً آهسته ای بین آنها برقرار می کنند.
هر ثبات 64 بیتی MMX مربوط به بخش مانتیس از یک ثبات x87 80 بیتی است. بنابراین 16 بیت پرارزش تر ثبات x87 در MMX استفاده نمیشود، و این بیت ها همه 1 می شوند، که در نمایش ممیز شناور از آنها به عنوان NaNs یاد می شود. این می تواند توسط برنامه ها بدین صورت مورد استفاده قرار گیرد که تشخیص دهند آیا محتوای یک ثبات به عنوان ممیز شناور در نظر گرفته شده است یا به عنوان داده SIMD.
پشتیبانی نرمافزاری
پشتیبانی نرمافزاری برای MMX در ابتدا آهسته بود. [۵] کامپایلر C اینتل و دیگر ابزار های توسعه دهنده، از تابع ذاتی برای فراخوانی دستورالعمل های MMX و کتابخانه های منتشر شده توسط اینتل با الگوریتم های رایج برداری( vector ) ، استفاده می کردند . اینتل و Metrowerks هر دو سعی در پیاده سازی برداری سازی خودکار روی کامپایلرهای خود داشتند، اما عملیات های زبان C به طرز ضعیفی روی مجموعه دستورالعمل MMX قرار گرفت و الگوریتمهای سفارشی شده تا سال 2000 همچنان باید به زبان اسمبلی نوشته می شدند. [۱۱]
جانشین
AMD ، به عنوان یک رقیب تولید کننده ریز پردازنده x86 ، ام ام ایکس اینتل را با مجموعه دستورالعمل 3DNow خود بهبود داد. 3DNow بیشتر به جهت افزودن پشتیبانی از تک نقطه ای شناور (32 بیتی) به مجموعه دستورالعمل SIMD، و دیگر بهبود های کلی، شناخته شده است.
پش از MMX، نسل بعد معماری x86 اینتل، SSE بود، که همراه با خانواده پنتیوم-III معرفی شد [۱۲] (تقریباً یک سال پس از این که 3DNow شرکت AMD معرفی شد).
SSE با ایجاد یک فایل رجیستر جدید 128 بیتی (XMM0-XMM7) و دستورالعمل های جدید SIMD برای آن، نقص هسته MMX را برطرف کرد (ناتوانی در ترکیب عملیات integer-SIMD با هر عملیات نقطه شناور). همانند 3DNow! ، اس اس ای فقط روی عملیات تک نقطه ای شناور (32 بیتی) تمرکز کرد. عملیات Integer-SIMD همچنان با استفاده از ثبات ها و دستورالعمل های MMX انجام می شود. با این حال، رجیستر-فایل جدید XMM به عملیات های SSE SIMD اجازه داد تا آزادانه با عملیات های MMX یا X87 FPU ترکیب شود.
SSE2 که با پنتیوم 4 معرفی شد، مجموعه دستورالعمل SIMD x86 را با عدد صحیح (8/16/32 بیتی) و پشتیبانی از داده های دو نقطه ای شناور برای رجیستر-فایل XMM توسعه داد. SSE2 همچنین به آپکدهای MMX این اجازه را می داد که از عملوند های ثبات های XMM استفاده کند، اما این پشتیبانی را با آمدن SSE4 (و اخیراً با SSE4.2 که در ریزمعماری هسته معرفی شده است ) پایان داد. [نیازمند منبع] با این حال، از آنجا که پشتیبانی از پردازنده برای هر نسخه از SSE، پشتیبانی از MMX را هم شامل می شود، این عدم پشتیبانی، انواع داده های قابل استفاده توسط x86 SIMD را محدود نمیکند.
MMX در برنامه های جاسازی شده
هسته میکروپروسسوری اینتل و مارول که از PXA270 آغاز می شود شامل یک مجموعه دستورالعملSIMD برای هسته ARM به نام iwMMXt است که عملکرد آن مشابه IA-32 های MMX می باشد. iwMMXt مخفف "Intel Wireless MMX Technology" است. این فناوری، عملیات ریاضی و منطقی را بر روی اعداد صحیح 64 بیتی فراهم می کند (این نرمافزار ممکن است انتخاب کند که دو عملیات 32 بیتی، چهار تا 16 بیتی و یا 8 بیتی را در یک دستور واحد انجام دهد). این برنامه شامل 16 ثبات داده 64 بیتی، و هشت ثبات کنترل 32 بیتی است. همه ی رجیسترها از طریق مکانیزم نگاشت کمک پردازنده ای معماری ARM قابل دسترسی هستند. iwMMXt فضاهای 0 و 1 کمک پردازنده ها را اشغال می کند، و نیز برخی از آپکد های آن با آپکدهای FPA ( ممیز شناور قدیمی ) برخورد می کنند.
نسخه های بعدی پردازنده ARM Marvell از WMMX (Wireless MMX) و نیز WMMX2 (Wireless MMX2) پشتیبانی می کند.