سؤال

أعلم أن X87 لديه دقة داخلي أعلى، والتي ربما يكون الفرق الأكبر الذي يراه الناس بينها وبين عمليات SSE. ولكن يجب أن أتساءل، هل هناك أي فائدة أخرى لاستخدام X87؟ لدي عادة الكتابة -mfpmath=sse تلقائيا في أي مشروع، وأتساءل عما إذا كنت أفتقد أي شيء آخر تقدم X87 FPU.

هل كانت مفيدة؟

المحلول

للحصول على ASM مكتوب يدويا، يحتوي X87 على بعض التعليمات التي لا توجد موجودة في مجموعة تعليمات SSES.

خارج الجزء العلوي من رأسي، كل شيء من الأشياء المثلثية مثل FSIN و FCOS و FATAN و FATAN2 وبعض الأشياء الأسية / اللوغارمية.

مع gcc -O3 -ffast-math -mfpmath=387, ، GCC9. إرادة لا يزال فعلا مضمنة. sin(x) كما fsin تعليمات، بغض النظر عما سيستخدمه التنفيذ في LIBM. فيhttps://godbolt.org/z/euc5gp.).

تدعو MSVC __libm_sse2_sin_precise عند تجميعها لمدة 32 بت x86.


إذا قضاء الكود الخاص بك في معظم الوقت في ممارسة علم المثلثات، فقد ترى زيادة أو خسارة أداء طفيفة إذا كنت تستخدم X87، اعتمادا على ما إذا كان تنفيذ مكتبة الرياضيات القياسية الخاصة بك باستخدام SSE1 / SSE2 أسرع أو أبطأ من Microcode البطيء fsin على أي وحدة المعالجة المركزية التي تستخدمها.

لا يضع البائعون وحدة المعالجة المركزية في وحدة المعالجة المركزية الكثير من الجهد في تحسين دليل Microcode لتعليمات X87 في أحدث أجيال من وحدات المعالجة المركزية لأنها تعتبر عموما عموما ونادرا ما تستخدم. (انظر إلى حساب UOP وإنتاجية لتعليمات X87 المعقدة في طاولات تعليمات الضباب Agner في الأجيال الأخيرة من وحدات المعالجة المركزية: المزيد من الدورات مما كانت عليه في وحدة المعالجة المركزية القديمة). أحدث وحدة المعالجة المركزية، كلما كان X87 أكثر احتمالا أكثر أبطأ من العديد من تعليمات SSE أو AVX لحساب وظائف سجل أو إكسب أو أسراب أو Trig.

حتى عندما يكون X87 متاحا، لا تختار جميع مكتبات الرياضيات استخدام التعليمات المعقدة مثل fsin لتنفيذ وظائف مثل sin(), ، أو لا سيما إكسب / سجل حيث الحيل الصحيحة لمعالجة أنماط بت القائمة المستندة إلى سجل FP مفيدة.

تستخدم بعض خوارزميات DSP الكثير من Trig، ولكن عادة ما تستفيد كثيرا من Vectureization التلقائي مع مكتبات الرياضيات SIMD.

ومع ذلك، بالنسبة لرمز الرياضيات حيث تقضي معظم وقتك في القيام الإضافات والضرب وما إلى ذلك. SSE عادة أسرع.


ذات صلة أيضا: Intel Underestimates حدود الأخطاء بمقدار 1.3 كوينتيليون - أسوأ حالة ل fsin (إلغاء الكارثي ل fsin المدخلات بالقرب جدا بي.) سيء للغاية. يمكن للبرامج أن تفعل أفضل ولكن فقط مع تقنيات بدقة بطيئة.

نصائح أخرى

  1. انها موجودة على الأجهزة القديمة حقا.

EOF

تعليمات FPU أصغر من تعليمات SSE، لذلك فهي مثالية لأشياء Demoscene

  • هناك تراث كبير وتوافق نظام صغير مع X87: SSE هو ميزة معالج جديدة نسبيا. إذا كان التعليمات البرمجية الخاصة بك هو تشغيل متحكم مضمن، فهناك فرصة جيدة لن تدعم تعليمات SSE.

  • عادة ما توفر الأنظمة التي لا تملك تثبيت FPU محاكات 80x87 التي ستجعل الرمز يعمل بشفافية (أكثر أو أقل). لا أعرف من أي محاكي SSE - بالتأكيد واحدة من أنظمتي ليس لديها أي، لذا فإن أحدث إصدارات عناصر Adobe Photoshop ترفض التشغيل.

  • تحتوي تعليمات 80x87 على خصائص عملية متوازية جيدة تم استكشافها وتحليلها بالكامل منذ تقديمها في عام 1982 أو نحو ذلك. قد تتوقف الحيوانات المستنسخة المختلفة من X86 على تعليمات SSE.

التحويل بين float و double هو أسرع مع x87 (عادة مجانا) من SSE. مع x87، يمكنك تحميل وتخزين float, double أو long double إلى أو من مكدس السجل وتحويلها إلى أو من الدقة الممتدة دون تكلفة إضافية. مع SSE، هناك حاجة إلى تعليمات إضافية للقيام بتحويل النوع إذا تم خلط الأنواع، لأن السجلات تحتوي float أو double القيم. تعليمات التحويل هذه سريعة إلى حد ما ولكنها تأخذ وقتا إضافيا.

الإصلاح الحقيقي هو الامتناع عن الخلط float و double بشكل مفرط، لا تستخدم X87، بالطبع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top