ما هي التعليمات التي يجب أن أستخدمها لعمليات النقطة العائمة؟
-
02-10-2019 - |
سؤال
أنا معتاد إلى حد ما تعليمات x87 لمعالجة أرقام النقاط العائمة في مجموعة x86. ومع ذلك ، قرأت في مكان ما أن هذه نادرا ما كانت تستخدم بعد الآن. (ولم يُسمح به في برامج تشغيل Windows 64 بت)[1]
إذا كان هذا هو الحال ، فما هي التعليمات التي يجب أن أستخدمها؟ لقد رأيت شيئًا عن SSE ، لكن ما لم أكن مخطئًا ، تمت إضافة هذه التعليمات مؤخرًا ولن تكون متوفرة على الرقائق القديمة. (مثل Pentium II ، وما إلى ذلك)
ما هي التعليمات ينبغي أنا أستخدم؟
المحلول
إذا كنت على استعداد لنسيان التوافق المتخلف ، فإن SSE هو الطريق للذهاب. لديها مجموعة تعليمية أكثر ثراء ودعم المتجهات. إذا كنت ترغب في التحسين لأي معالج يعمل ، فيجب أن تحاول الكتابة بلغة أعلى مستوى وتجميع مع ICC ، والتي تتحقق من المعالج يعمل حاليًا وتنفيذ التعليمات البرمجية المحسّنة لذلك.
في نهاية اليوم ، يعتمد ذلك على المستخدمين المتوقعين لبرنامجك.
نصائح أخرى
إذا كنت بحاجة إلى أن تكون متوافقًا للخلف ، فسيتعين عليك استخدام تعليمات X87. خلاف ذلك ، كما يقول Nathan Flemman ، قد تكون تعليمات SSE# هي السبيل للذهاب ، أيضًا لأن الكود بالنسبة لهم أسهل إلى حد ما في الكتابة (يستخدمون نموذج التسجيل العادي ، في حين يستخدم X87 مكدسًا).
بعد قولي هذا ، هناك عدة أسباب تجعلك ترغب في استخدام رمز X87 (أو خلط رمز X87/SSE):
(1) يوفر x87 دقة أعلى ، أي حساب نقطة عائم 80 بت. (كلاهما ، يوفر X87/SSE عوامات 32 بت و 64 بت.
(2) يوفر x87 بعض العمليات التي لا تغطيها مجموعات تعليمات SSE# ، وهي تعليمات للعمليات الثلاثية (SIN ، COS ، ...) واللوغاريتمات.