Считается ли арифметическое отрицание как операция с плавающей запятой?
-
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 в качестве своего рода стандартного эталона.