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

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به ناوبری پرش به جستجو

یک واحد ممیز شناور (به اختصار FPU، که گاهی کمک‌پردازندهٔ ریاضی نیز خوانده می‌شود) بخشی از یک سیستم کامپیوتری است که به‌طور خاص برای انجام عملیات ریاضی بر روی اعداد شناور طراحی شده‌است.[۱] نمونه‌هایی از این عملیات عبارتند از: جمع، تفریق، ضرب، تقسیم، جذر و عملیات بیتی. بعضی از سیستم‌ها (مخصوصا نسخه‌های قدیمی تر، معماری مبتنی بر میکرو کد) نیز می‌توانند توابع غیر جبری فراوانی مانند محاسبات نمایی یا مثلثاتی را انجام دهند، اگرچه در اکثر پردازنده‌های پیشرفته این اعمال با استفاده از روال‌های کتابخانه نرم‌افزاری انجام می‌شود.

در بیشتر طراحی‌های رایانه ای چند منظوره، یک یا چند FPU (واحد ممیز شناور) ممکن است به عنوان واحد اجرایی در واحد پردازش مرکزی (سی پی یو) جای گرفته باشند؛ با این حال بسیاری از پردازنده‌های جاسازی شده از پشتوانهٔ سخت‌افزاری برای عملیات ممیز شناور (fp) برخوردار نیستند (در حالیکه آنها را به‌طور معمول به صورت استاندارد، حداقل ۳۲ بیتی می‌کنند).

هنگامی که یک CPU (هستهٔ پردازندهٔ مرکزی) برنامه ای را اجرا می‌کند که نیاز به عملیات نقطه شناور دارد، سه راه برای انجام آن وجود دارد:

  • شبیه‌ساز واحد ممیز شناور (یک کتابخانه ممیز شناور)
  • افزونه FPU
  • FPU یکپارچه

تاریخچه[ویرایش]

از لحاظ تاریخی، سیستم‌ها ممیز شناور را از طریق یک کمک پردازنده به جای یک واحد یکپارچه اجرا می‌کنند (اما در حال حاضر علاوه بر 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ها) ارائه می‌شوند.

جستارهای وابسته[ویرایش]

خواندن بیشتر[ویرایش]

  • Anderson, Stanley F.; Earle, John G.; Goldschmidt, Robert Elliott; Powers, Don M. (January 1967). "The IBM System/360 Model 91: Floating-Point Execution Unit". IBM Journal of Research and Development. 11 (1): 34–53. doi:10.1147/rd.111.0034. ISSN 0018-8646.
  • "11.13. Using the FPU". www.freebsd.org. Retrieved 2018-03-10.
  • Muller, Jean-Michel (2006). Elementary Functions: Algorithms and Implementation (2 ed.). Boston: Birkhäuser. p. 134. ISBN 978-0-8176-4372-0. LCCN 2005048094. Retrieved 2015-12-01.
  • Nave, Rafi (March 1983). "Implementation of Transcendental Functions on a Numerics Processor". Microprocessing and Microprogramming. 11 (3–4): 221–225.
  • Palmer, John F.; Morse, Stephen Paul (1984). The 8087 Primer (1 ed.). John Wiley & Sons Australia, Limited. ISBN 0471875694. 9780471875697. Retrieved 2016-01-02.
  • Glass, L. Brent (January 1990). "Math Coprocessors: A look at what they do, and how they do it". Byte. 15 (1): 337–348. ISSN 0360-5280.
  • Jarvis, Pitts (1990-10-01). "Implementing CORDIC algorithms - A single compact routine for computing transcendental functions". Dr. Dobb's Journal: 152–156. Retrieved 2016-01-02.