هل الحساب النفي يعتبر عملية النقطة العائمة؟

StackOverflow https://stackoverflow.com/questions/3109298

  •  29-09-2019
  •  | 
  •  

سؤال

أقوم حاليًا بقياس أداء بعض التعليمات البرمجية في التقلبات. يعرض هذا الرمز بعض الإرشادات النفيات الحسابية مثل هذا:

d = -a

أين d و a هي متغيرات نقطة عائمة. الهندسة المعمارية التي أستخدمها حاليًا لديها تعليمات نفي محددة. هل يجب أن أأخذ في الاعتبار هذا النوع من العمليات لقياس التقلبات؟ أي نوع من العمليات تمثل التقليب؟ هل هناك اتفاقية أو أي شيء؟

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

المحلول

كما قال Andrey ، للتأكد من أنه يجب عليك التحقق من الرمز المفكك.

ولكن بشكل عام ، نعم ، من المحتمل أن تنفذ التعليمات على FPU. إنه ببساطة ينقلب قليلاً ، لذا فهو استطاع يتم القيام به على وحدة عدد صحيح أيضًا ، ولكن نظرًا لأنك تعمل على قيم النقاط العائمة ، فمن المرجح أن يتم تحميلها بالفعل في سجلات FP ، وبالتالي سيكون هناك قدر لا بأس به من النفقات العامة لنقلها إلى سجلات الأغراض العامة ، والتقليب قليلا ونقلهم مرة أخرى.

لا أعرف ما إذا كان هناك دليل عالمي كامل لـ "ما ينبغي أن يتم احتسابه على أنه تقلب" ، ولكن على الأرجح تعليمات تنفذ على FPU ، وبالتالي فهي تتنافس مع تعليمات FP الأخرى للموارد على وحدة المعالجة المركزية ، لذا نعم ، أود أن أدرجها في عدد التقلبات.

نصائح أخرى

حاول تفكيك الرمز وتحقق من كيفية تنفيذ هذه العملية.

إذا كان يستخدم التعليمات FCHS (تغيير علامة) ثم يمكنك النظر في تشغيل نقطة العائمة.

MSVC (Visual Studio 2008)

    double c = -b;
00971397  fld         qword ptr [b] 
0097139A  fchs             
0097139C  fstp        qword ptr [c] 

FCHS - انظر ذلك؟

هناك نوع من الاتفاقية لحساب التقلبات باستخدام LINPACK كنوع من المعيار القياسي.

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