Считается ли арифметическое отрицание как операция с плавающей запятой?

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