Показать сообщение отдельно
Старый 24.12.2018, 10:39   #2
Arsie
Сотрудник Segnetics
 
Аватара для Arsie
 
Регистрация: Jan 2006
Адрес: Russia, SPb
Сообщения: 18 117
Благодарил(а): 15 раз(а)
Поблагодарили: 660 раз(а) в 604 сообщениях
По умолчанию Ответ: Оптимизируем программы на с++

Цитата:
Сообщение от Gromov Посмотреть сообщение
Пишите, пожалуйста, критику и отзывы.
У меня этот способ ускорения вылезает первым по запросу "linux считать математику быстрее"

Для получение наилучшего результата я советую подставить разные ключи оптимизации, бывает так, что -Ofast замедляет программы, а не ускоряет их. Бывает и такое, что -Ofast делает программу неработоспособной, если важна точность вычислений, потому что -Ofast включает в себя ключ -ffast-math - обработка математики с понижением точности.

Цитата:
This option is not turned on by any -O option besides -Ofast since it can result in incorrect output for programs that depend on an exact implementation of IEEE or ISO rules/specifications for math functions. It may, however, yield faster code for programs that do not require the guarantees of these specifications.

Например, широко известная проблема

Цитата:
int3 cell;
for(cell.x = 0; cell.x < cells.x; ++cell.x)
for(cell.y = 0; cell.y < cells.y; ++cell.y)
for(cell.z = 0; cell.z < cells.z; ++cell.z)
{
int id = cell.x*cells.y*cells.z + cell.y*cells.z + cell.z;
float3 moment = moments_ram_raw.get(id);
}
Переменная moment будет иметь разные значение с ключом -Ofast и без ключа -Ofast.

Мой совет: никогда не использовать -Ofast, а просто использовать -O3, например.


__________________
Программа делает то что написал программист, а не то что он хотел.

Добро всегда побеждает зло. Кто победил - тот и добрый.
Arsie вне форума   Ответить с цитированием