Я выполняю критическую работу с высокой производительностью на С++, и в настоящее время мы используем целочисленные вычисления для задач, которые являются по сути плавающей точкой, потому что "быстрее". Это вызывает множество неприятных проблем и добавляет много раздражающего кода.
Теперь я помню, как читал о том, как расчеты с плавающей запятой были настолько медленными примерно примерно через 386 дней, где я считаю (IIRC), что есть дополнительный соучастник. Но, безусловно, в настоящее время с экспоненциально более сложными и мощными процессорами он не имеет никакого значения в "скорости" при выполнении вычисления с плавающей точкой или целым числом? Тем более, что фактическое время вычисления крошечное по сравнению с чем-то вроде того, что вызывает срыв трубопровода или извлечение чего-либо из основной памяти?
Я знаю, что правильный ответ заключается в контроле на целевом оборудовании, что было бы хорошим способом проверить это? Я написал две крошечные программы на C++ и сравнивал их время работы с "временем" в Linux, но фактическое время выполнения слишком изменчиво (не помогает мне работать на виртуальном сервере). Если не потратить весь мой день на сотни тестов, сделать графики и т.д., То я могу сделать, чтобы получить разумный тест относительной скорости? Любые идеи или мысли? Я совершенно не прав?
Программы, которые я использовал следующим образом, они не идентичны никакими способами:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
int main( int argc, char** argv )
{
int accum = 0;
srand( time( NULL ) );
for( unsigned int i = 0; i < 100000000; ++i )
{
accum += rand( ) % 365;
}
std::cout << accum << std::endl;
return 0;
}
Программа 2:
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <time.h>
int main( int argc, char** argv )
{
float accum = 0;
srand( time( NULL ) );
for( unsigned int i = 0; i < 100000000; ++i )
{
accum += (float)( rand( ) % 365 );
}
std::cout << accum << std::endl;
return 0;
}
Спасибо заранее!
Изменить: платформа, о которой я забочусь, - это обычные x86 или x86-64, работающие на настольных компьютерах Linux и Windows.
Изменить 2 (добавлено из комментария ниже): В настоящее время у нас есть обширная база кода. На самом деле я столкнулся с обобщением, что мы "не должны использовать float, поскольку вычисление целых чисел выполняется быстрее" - и я ищу способ (если это правда), чтобы опровергнуть это обобщенное предположение. Я понимаю, что было бы невозможно предсказать точный результат для нас, не выполняя всю работу и не профилируя ее впоследствии.
В любом случае, спасибо за все ваши прекрасные ответы и помощь. Не стесняйтесь добавлять что-нибудь еще:).