You can edit almost every page by Creating an account. Otherwise, see the FAQ.

افزونه‌های جریانی SIMD

از EverybodyWiki Bios & Wiki
پرش به:ناوبری، جستجو

در محاسبات ، افزونه های جریانی SIMD یا (SSE) یک دستور است ، داده های چندگانه (SIMD ) مجموعه دستورالعمل فرمت به معماری x86 ، طراحی شده توسط اینتل در سال 1999 در معرفی شد.سری پنتیوم III از واحد پردازش مرکزی (CPU ها) کمی پس از پیدایش میکرو دستگاه های پیشرفته (AMD's) که 3DNow! نامیده میشود.که حاوی 70 دستورالعمل جدید است که اکثر آنها بر روی داده های نقطه شناور تک دقت کار می کنند. دستورالعمل SIMD می تواند افزایش دهد عملکرد را وقتی دقیقاً برای انجام عملیات مشابه هشتند روی اشیاء چندگانه انجام دهد. برنامه های کاربردی معمول عبارتند از پردازش سیگنال دیجیتال و پردازش گرافیکی .

IA-32 SIMD اولین تلاش اینتل بود در رابطه مجموعه دستورات MMX بود . MMX دو مشکل اساسی داشت: استفاده مجدد از رجیستر های نقطه شناور x87 که CPU ها در همان زمان قادر به کار در هر دو نقطه شناور و داده SIMD بودند، استفاده می کردند و تنها در اعداد صحیح کار می کردند . دستورالعمل های نقطه شناور SSE در یک مجموعه ثبت نام مستقل جدید عمل می کنند، XMM ثبت می کند، و چند دستورالعمل عددی را که در ثبت نام MMX کار می کنند، اضافه می کند.

پس از آن SSE توسط اینتل به SSE2 ، SSE3 ، SSSE3 و SSE4 گسترش یافت. از آنجا که در ریاضی نقطه شناور پشتیبانی می کند، برنامه های کاربردی گسترده تری نسبت به MMX دارد و محبوب تر می باشد. علاوه بر پشتیبانی از اعداد صحیح در SSE2، MMX به طور عمده یک کد از کار افتاده است ، هرچند در بعضی موارد ممکن است در استفاده از MMX به موازات SSE افزایش کارایی بیشتری انجام شود

.

SSE ابتدا دستورالعمل جدید Katmai ( KNI ) نامگذاری شد، Katmai که نام کد برای اولین بازبینی اصلی Pentium III است. در طول پروژه Katmai اینتل قصد دارد آن را از خط تولید قبلی خود، به ویژه گل سرسبد Pentium II آن را تشخیص دهد . بعداً آن را به عنوان پس زمینه های سیمبیان اینترنت جریان ( ISSE [۱] )، و سپس SSE تغییر نام داد. AMD در نهایت پشتیبانی از دستورالعمل های SSE را با استفاده از پردازنده های Athlon XP و Duron ( مورگان ) آغاز کرد.

ثبات ها[ویرایش]

SSE در اصل هشت ثبات های 128 بیتی جدید را به عنوان شناخته شده اضافه شده XMM0 طریق XMM7 . فرمت های AMD64 از AMD (در اصل به نام x86-64 ) هشت ثبات های XMM8 از طریق XMM15 و این فرمت در معماری Intel 64 تکثیر می شود. همچنین یک MXCSR کنترل / وضعیت 32 بیتی جدید، MXCSR . ثبت های XMM8 از طریق XMM15 فقط در حالت عملیاتی 64 بیتی قابل دسترسی است.

SSE فقط یک نوع داده تک برای ثبات های XMM استفاده کرد:

  • چهار عدد اعداد شناور دقیق 32 بیتی

SSE2 بعداً استفاده از رجیسترهای XMM را گسترش خواهد داد تا شامل موارد زیر شود:

  • دو عدد شناور دو دقت 64 بیتی یا دو
  • دو عدد صحیح 64 بیتی یا
  • چهار عدد صحیح 32 بیتی یا
  • هشت اعداد صحیح کوتاه 16 بیتی یا
  • شانزده بایت یا بایت 8 بیتی.

از آنجائیکه این رجیستر های 128 بیتی دستگاه های اضافی دستگاه هستند که سیستم عامل باید در میان سوئیچ های کار حفظ شود، به طور پیش فرض غیر فعال می شوند تا سیستم عامل به طور صریح آنها را فعال کند. این به این معنی است که سیستم عامل باید بدانید که چگونه از دستورالعمل های FXSAVE و FXRSTOR استفاده کنید . که این تمدید شده جفت دستورالعمل هایی که می تواند تمام x86 را و رجیستر های SSE محلی را یک بار ذخیره کند. این پشتیبانی به سرعت به تمام سیستم عامل های اصلی IA-32 اضافه شد.

اولین CPU برای حمایت از SSE سری ، Pentium III ، منابع مجازی بین SSE و واحد نقطه شناور (FPU) را به اشتراک می گذارد. [۱] در حالی که یک برنامه کامپایل می تواند دستورالعمل های FPU و SSE را در کنار هم قرار دهد، Pentium III یک FPU و یک دستور SSE را در همان چرخه ی ساعت منتشر نخواهد کرد. این محدودیت اثربخشی خط لوله را کاهش می دهد، اما مجلات XMM جداگانه اجازه می دهند عملیات SIMD و عملیات شناور اسکالر بدون خنثی سازی عملکرد از حالت صحیح MMX / تغییر حالت نقطه شناور مخلوط شوند.

دستورالعمل SSE[ویرایش]

SSE هر دو دستورالعمل اسکالر و اعداد نقطه شناور بسته بندی شده شناور را معرفی کرد.

دستورالعمل های نقطه شناور[ویرایش]

  • Memory-to-register/register-to-memory/register-to-register data movement
    • ScalarMOVSS
    • PackedMOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS, MOVMSKPS
  • Arithmetic
    • Scalar – ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
    • Packed – ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
  • Compare
    • Scalar – CMPSS, COMISS, UCOMISS
    • Packed – CMPPS
  • Data shuffle and unpacking
    • Packed – SHUFPS, UNPCKHPS, UNPCKLPS
  • Data-type conversion
    • Scalar – CVTSI2SS, CVTSS2SI, CVTTSS2SI
    • Packed – CVTPI2PS, CVTPS2PI, CVTTPS2PI
  • Bitwise logical operations
    • Packed – ANDPS, ORPS, XORPS, ANDNPS

دستورالعمل عدد صحیح[ویرایش]

  • Arithmetic
    • PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
  • Data movement
    • PEXTRW, PINSRW
  • Other
    • PMOVMSKB, PSHUFW

دستورالعمل های دیگر[ویرایش]

  • MXCSR management
    • LDMXCSR, STMXCSR
  • Cache and Memory management
    • MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

مثال[ویرایش]

مثال ساده زیر، مزیت استفاده از SSE را نشان می دهد. یک عمل مانند افزودن بردار را در نظر بگیرید، که اغلب در برنامه های گرافیکی کامپیوتری استفاده می شود. برای جمع کردن دو بردار تنها دقیق، بردارهای چهار جزء با استفاده از x86 نیاز به چهار دستورالعمل اضافه کردن نقطه شناور دارد.

 vec_res.x = v1.x + v2.x;
 vec_res.y = v1.y + v2.y;
 vec_res.z = v1.z + v2.z;
 vec_res.w = v1.w + v2.w;

این مربوط به چهار دستور x86 FADD در کد هدف است. از سوی دیگر، به عنوان شبه کد زیر نشان می دهد، یک دستور تک بسته 128 بیتی می تواند چهار دستورالعمل اضافی اسکالر را جایگزین کند.

 movaps xmm0, [v1] ;xmm0 = v1.w | v1.z | v1.y | v1.x 
 addps xmm0, [v2]  ;xmm0 = v1.w+v2.w | v1.z+v2.z | v1.y+v2.y | v1.x+v2.x
 movaps [vec_res]  ;xmm0

نسخه های بعدی[ویرایش]

  • SSE2 ، دستورالعمل جدید Willamette (WNI)، معرفی شده با پنتیوم 4 ، یک پیشرفت عمده برای SSE است. SSE2 دو ویژگی مهم را به وجود می آورد: دو نقطه دقت (64 بیتی) برای همه عملیات SSE و عملیات صحیح MMX در 128 بیت XMM. در دستورالعمل اصلی SSE، تبدیل به و از اعداد صحیح داده های عدد صحیح را در ثبت کننده های MMX 64 بیتی قرار داده است. SSE2 برنامهنویس را قادر می سازد که ریاضی SIMD را بر روی هر نوع داده (از اعداد صحیح 8 بیتی به 64 بیت شناور) به طور کامل با پرونده ثبت پرونده XMM، بدون نیاز به استفاده از موردهای MMX یا FPU ثبت کند. این مجموعه مجموعه ای از دستورالعمل ها برای برخورد با انواع داده های معمول ارائه می دهد.
  • SSE3 ، همچنین دستورالعمل جدید Prescott (PNI)، ارتقاء افزایشی به SSE2، اضافه کردن تعداد انگشت شماری از دستورالعمل های ریاضی DSP گرا و برخی از دستورالعمل های مدیریت روند (thread) است.
  • SSSE3 ، دستورالعمل Merom جدید (MNI)، ارتقاء به SSE3 است، با اضافه کردن 16 دستورالعمل جدید که شامل تغییر دادن بایت ها در یک کلمه، ضرب کردن 16 بیت اعداد ثابت با گرد کردن صحیح، و دستورالعمل درون کلمه است. SSSE3 اغلب برای SSE4 اشتباه گرفته می شود، زیرا این اصطلاح در طی توسعه معماری هسته ای مورد استفاده قرار گرفته است .
  • SSE4 ، دستورالعمل جدید Penryn (PNI)، یکی دیگر از پیشرفت های عمده است، اضافه کردن دستورالعمل نقطه ای، دستورالعمل عددی اضافی، آموزش popcnt، و بیشتر.
  • XOP ، FMA4 و CVT16 تکرارهای جدید اعلام شده توسط AMD در ماه اوت 2007 [۲] [۳] و تجدید نظر در ماه مه 2009 است. [۴]
  • Extensions Vector Advanced (AVX)، دستورالعمل جدید Gesher (GNI)، یک نسخه پیشرفته SSE اعلام شده توسط اینتل با یک مسیر داده گسترده از 128 بیت به 256 بیت و دستورات سه اپراتور است (تا 2). پردازنده های اینتل در اوایل سال 2011 با پشتیبانی AVX منتشر شد. [۵] AVX نیاز به پشتیبانی از سیستم عامل دارد.
  • AVX2 ، همچنین به عنوان دستورالعمل های جدید Haswell (HNI) شناخته می شود، گسترش مجموعه دستورالعمل AVX است.
  • AVX-512 (3.1 و 3.2) پسوند 512 بیتی برای دستورالعمل SIMD 256 بیتی Advanced Vector Extensions برای معماری مجموعه دستورالعمل x86 است.

مسائل مربوط به نرم‌افزار و سخت افزار[ویرایش]

با تمام پسوند دستورالعمل های x86، که تا BIOS هست سیستم عامل و برنامه نویسان برنامه کاربردی برای آزمایش و تشخیص وجود و عملکرد مناسب آنهاست.

  • اینتل و AMD برنامه های کاربردی را برای تشخیص آنچه که برنامه های پردازنده پشتیبانی می کند ارائه می دهند.
  • کد CPUID یک دستور تکمیلی پردازنده است (نام آن مشتق از شناسایی پردازنده) برای معماری x86. این در سال 1993 توسط اینتل معرفی شد و پردازنده های 486 پنتیوم و SL را بهبود بخشید.

جذب کاربر از برنامه های x86 با استفاده از حداقل دوره های اولیه حداقل MMX و SSE (در بعضی موارد) توسط برنامه های کاربردی تقریباً 10 سال طول می کشد پس از این گسترش به طور معمول در دسترس است. محاسبات توزیع شده استفاده از این افزونه ها را در جامعه علمی تسریع کرده و بسیاری از برنامه های علمی حاضر به اجرای آن نیستند مگر اینکه CPU از SSE2 یا SSE3 پشتیبانی کند.

استفاده از چندین تجدید نظر در یک برنامه برای مقابله با مجموعه های مختلف از پسوند های موجود، ساده ترین راه حل مشکل بهینه سازی پهنای باند x86 است. کتابخانه های نرم‌افزاری و بعضی از برنامه های کاربردی از انواع چندگانه پشتیبانی استفاده کرده اند و اشاره دارند که استفاده کامل از دستورالعمل های x86 در نهایت ممکن است در حدود 5 تا 15 سال پس از معرفی دستورالعمل ها به کلی تبدیل شود.

شناسایی[ویرایش]

برنامه های کاربردی واسط پردازنده

  • Intel Processor Identification Utility[۶]
  • CPU-Z – CPU, motherboard, and memory identification utility.

منابع[ویرایش]

<references group="" responsive="">

  1. ۱٫۰ ۱٫۱ Diefendorff, Keith (March 8, 1999). "Pentium III = Pentium II + SSE: Internet SSE Architecture Boosts Multimedia Performance" (PDF). Retrieved September 1, 2017.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
  2. Vance, Ashlee (August 3, 2007). "AMD plots single thread boost with x86 extensions". The Register. Retrieved August 24, 2017.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
  3. "AMD64 Technology: 128-Bit SSE5 Instruction Set" (PDF). AMD. August 2007. Retrieved August 24, 2017.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
  4. "AMD64 Technology AMD64 Architecture Programmer's Manual Volume 6: 128-Bit and 256-Bit XOP and FMA4 Instructions" (PDF). AMD. November 2009. Retrieved August 24, 2017.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
  5. Girkar, Milind (October 1, 2013). "Intel® Advanced Vector Extensions (Intel® AVX)". Intel. Retrieved August 24, 2017.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.
  6. "Download the Intel® Processor Identification Utility". Intel. July 24, 2017. Retrieved August 24, 2017.صفحه پودمان:Citation/CS1/en/styles.css محتوایی ندارد.

پیوند به بیرون[ویرایش]


This article "افزونه‌های جریانی SIMD" is from Wikipedia. The list of its authors can be seen in its historical and/or the page Edithistory:افزونه‌های جریانی SIMD. Articles copied from Draft Namespace on Wikipedia could be seen on the Draft Namespace of Wikipedia and not main one.



Read or create/edit this page in another language[ویرایش]