واحد ممیز شناور

تاریخچه

از لحاظ تاریخی، سیستم‌ها ممیز شناور را از طریق یک کمک پردازنده به جای یک واحد یکپارچه اجرا می‌کنند (اما در حال حاضر علاوه بر CPU، به عنوان مثال GPUها (واحد پردازش گرافیکی) - که کمک پردازنده هستند و همیشه در CPU ساخته نمی‌شوند- برخلاف نسل‌های اولشان، به عنوان یک قاعده در FPUها هستند). این می‌تواند یک مدار یکپارچه، یک مدار کل یا یک کابینه باشد. از آنجا که ابزار محاسبه ممیز شناور ارائه نشده‌است، محاسبات ممیز شناور در نرم‌افزار انجام می‌شود که زمان پردازنده بیشتری را می‌گیرد اما از هزینه سخت‌افزاری اضافی اجتناب می‌کند. برای یک معماری کامپیوتری خاص، دستورالعمل‌های واحد ممیز شناور ممکن است توسط یک کتابخانه از توابع نرم‌افزار شبیه‌سازی شوند؛ این ممکن است به کد زبان ماشین یکسان اجازه دهد که در سیستم‌های دارای سخت‌افزار ممیز شناور یا بدون آن اجرا شود. شبیه‌سازی را می‌توان در هر یک از سطوح مختلف انجام داد: در CPU (واحد پردازش مرکزی) به عنوان میکروکد (که یک عمل معمولی نیست)، به عنوان یک عملکرد سیستم عامل، یا در فضای کاربری کد. هنگامی که فقط قابلیت‌های عدد صحیح در دسترس است، معمولاً روش‌های شبیه‌سازی ممیز شناور CORDID استفاده می‌شوند.
در بیشتر معماری‌های کامپیوتری پیشرفته، عملیات‌های ممیز شناور از عملیات‌های عدد صحیح جدا می‌شود. این قسمت به‌طور قابل توجهی با معماری متفاوت است؛ بعضی‌ها، مانند Intel x86، دارای ثابت ممیز شناور اختصاصی اند در حالی که بعضی از آنها مستقل از برنامه‌های زمانبندی عمل می‌کنند.
دستورالعمل CORDIC معمولاً به خوبی در کمک پردازنده‌های اینتل ۸۰۸۷  ،۸۰۲۸۷، ۸۰۳۸۷ تا ۸۰۴۸۶ و در موتورولا ۶۸۸۸۱ و ۶۸۸۸۲ برای برخی از دستورالعمل‌های ممیز شناور، به عنوان یک راه برای کاهش تعداد دریچه (و پیچیدگی) از زیر سیستم FPU پیاده‌سازی شده‌است.
عملیات‌های ممیز شناور اغلب خطی هستند. در معماری‌های فوق سنجش پیشین (صفتی برای یک نوع معماری ریز پردازنده که آن را قادر می‌سازد تا چند دستورالعمل را در یک چرخه (سیکل) ساعت انجام دهد) بدون اجرای عمومی خارج از دستورالعمل، عملیات نقطه شناور گاهی به صورت جداگانه از عملیات عدد صحیح به صورت خطی انجام می‌شود.
از اوایل دهه ۱۹۹۰، بسیاری از ریزکمک پردازنده‌های دسکتاپ و سرورها دارای بیش از یک FPU (واحد ممیز شناور) هستند.
یک معماری پیمانه ای از معماری بولدوزر، از FPU خاصی به نام FlexFPU استفاده می‌کند، که آن FPU از چندنخی همزمان استفاده می‌کند. هر هسته فیزیکی، در هر دو ماژول (پیمانه)، در مقایسه با Hyperthreading (فراریسمانی) اینتل، که آنجا دو رشته مجازی همزمان، منابع یک هسته فیزیکی واحد را به اشتراک می‌گذارند، یک رشته‌است.

کتابخانه ممیز شناور

برخی از سخت‌افزارهای ممیز شناور، تنها از ساده‌ترین عملیات‌ها - جمع، تفریق و ضرب - پشتیبانی می‌کنند اما حتی پیچیده‌ترین سخت‌افزار ممیز شناور هم تعداد محدودی عملیات را پشتیبانی می‌کند. به عنوان مثال، هیچ‌یک از آنها از محاسبه‌های دلخواه دقیق به‌طور مستقیم پشتیبانی نمی‌کنند.
هنگامی که یک CPU (هسته پردازنده مرکزی) برنامه ای را اجرا می‌کند که نیاز به عملیات ممیز شناوری دارد که به‌طور مستقیم توسط سخت‌افزار پشتیبانی نمی‌شود، از یک سری عملیات‌های ساده شناور استفاده می‌کند. در سیستم‌های بدون سخت‌افزار شناور نقطه ای، CPU آن را با استفاده از یک سری عملیات ساده‌تر محاسباتی نقطه ثابت که در واحد محاسبات منطقی عددی اجرا می‌شود، شبیه‌سازی می کند.
نرم‌افزاری که رشته‌های ضروری دستورهای لازم برای عملیات نقطه شناور را لیست می‌کند معمولاً در یک کتابخانه نقطه شناور وجود دارد.

واحدهای ممیز شناور یکپارچه

در بعضی موارد، ممکن است واحدها ممیز شناور تخصصی باشند و بین عملیات‌های ممیز شناور ساده‌تر (خصوصاً جمع و ضرب) و عملیات‌های پیچیده‌تر مانند تقسیم، تقسیم شوند. در برخی موارد، ممکن است تنها عملیات ساده در سخت‌افزار یا میکرو کد انجام شود، در حالی که عملیات پیچیده‌تر به عنوان نرم‌افزار اجرا می‌شود.
در برخی از طراحی‌های جدید، قابلیت FPU با واحدها برای انجام محاسبه‌های SIMD (یک دستور چند داده‌ای) ترکیب شده است؛ یک مثال در این مورد، تقویت کردن دستورهای x87 است که با دستورهای SSE تنظیم شده در معماری x86-64 که در پردازنده‌های جدیدتر اینتل و AMD استفاده شده‌است، می‌باشد.

افزودنی‌های FPUها

در دهه ۱۹۸۰، رایج بود که FPUهای موجود در IBM PC / میکرو رایانه‌های سازگار کاملاً از CPU جدا باشد و معمولاً به عنوان یک افزودنی اختیاری فروخته می‌شد و تنها در صورتی که نیاز به افزایش سرعت یا توانا ساختن برنامه‌های سنگین ریاضیاتی بود خریداری می‌شد.
IBM PC , XT و اکثر دستگاه‌های سازگار مبتنی بر ۸۰۸۸ یا ۸۰۸۶ دارای یک سوکت برای کمک پردازنده اختیاری ۸۰۸۷ بودند. AT و سیستم‌های مبتنی بر ۸۰۲۸۶ به‌طور کلی برای ۸۰۲۸۷ و ماشین‌های مبتنی بر ۸۰۳۸۶ / 80386SX نیز به ترتیب برای ۸۰۳۸۷ و 80387SX سوکت دار شده بودند اگر چه نسخه‌های جدیدتر برای ۸۰۲۸۷ سوکت دار شده بودند ولی از آنجایی که ۸۰۳۸۷ هنوز وجود نداشت سایر کمپانی‌ها کمک پردازنده‌ها را برای سری‌های Intel x86 تولید کردند که شامل CYRIX , WEITEK می‌شد.
کمک پردازنده‌ها برای خانوادهٔ موتورولا ۶۸۰۰۰، ۶۸۸۸۱ و ۶۸۸۸۲ موجود بودند. آنها در رایانه‌های بر مبنای MOTOROLA 68020/68030 مانند سری‌های SUN 3 (خورشید ۳) مرسوم بودند و همچنین به‌طور گسترده به نسخه‌های نهایی و پیشرفتهٔ مکینتاش اپل و سری‌های COMMODORE AMIGA اضافه شده بوند اما بر خلاف سیستم‌های سازگار با IBM PC سوکت‌ها برای اضافه کردن کمک پردازنده‌ها در نسخه‌های سطح پایین چندان رایج نبود.
همچنین دستگاه‌های جانبی ریزپردازندهٔ FPU برای دستگاه‌های واحد میکروکنترلر (MCUs به / μCs) / تک هیئت مدیره کامپیوتر (SBCها)، وجود دارد که برای فراهم کردن قابلیت محاسبهٔ ممیز شناور سودمند هستند. این افزودنیهای FPUها مستقل از پردازنده و میزبان هستند، که نیازهای برنامه‌نویسی خود (عملیات، مجموعه دستورالعمل‌ها و غیره) را پردازش می‌کنند و اغلب با محیط‌های یکپارچه و توسعه یافتهٔ خود (IDEها) ارائه می‌شوند.