Арифметическое отрицание считается операцией с плавающей запятой? - PullRequest
0 голосов
/ 24 июня 2010

В настоящее время я измеряю производительность некоторого кода в FLOPS. Этот код представляет некоторые арифметические инструкции отрицания, подобные этой:

d = -a

, где d и a - переменные с плавающей запятой. В архитектуре, которую я сейчас использую, есть определенные инструкции по отмене. Должен ли я принимать во внимание этот вид операций для измерения FLOPS? Какие виды операций приходится на FLOPS? Есть соглашение или что-нибудь?

Ответы [ 3 ]

2 голосов
/ 24 июня 2010

Как сказал @Андрей, чтобы убедиться, что вы должны проверить дизассемблированный код.

Но в целом да, инструкция, скорее всего, будет выполняться на FPU. Он просто немного переворачивается, поэтому можно было бы сделать и на целочисленных единицах, но, поскольку вы работаете со значениями с плавающей запятой, они, скорее всего, уже загружены в регистры FP, и поэтому потребует значительных затрат на перемещение их в регистры общего назначения, переключение битов и их перемещение назад.

Я не знаю, существует ли полное универсальное руководство по «что следует считать FLOP», но это, скорее всего, инструкция, которая выполняется на FPU, и поэтому она конкурирует с другими инструкциями FP для ресурсов на процессоре, так что да, я бы включил его в подсчет FLOPS.

2 голосов
/ 24 июня 2010

попробуйте разобрать код и проверить, как выполняется эта операция.

если он использует инструкцию FCHS (изменить знак), то вы можете считать это операцией с плавающей запятой.

MSVC (Visual Studio 2008)

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

fchs - видите это?

1 голос
/ 24 июня 2010

Существует определенное соглашение для расчета FLOPS с использованием LINPACK в качестве своего рода стандартного теста.

...