Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: [C++] Скорость выполнения  (Прочитано 6175 раз)
0 Пользователей и 1 Гость смотрят эту тему.
The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« : 14-08-2009 07:53 » 

Привет:)

Процессор быстрее выполняет операции(в частности, умножение и логические выражения в условиях) с int чем с float?
Намного быстрее?

В целях оптимизации стоит ли заменить тип операндов с float на int, если их много и таких операций процессор должен высчитывать около 10 со скоростью 100 раз в секунду (помимо кучи других ,ессно:))
В принципе, "плавающая" часть вещественных чисел нужна только в двух местах, и то там можно обойтись приведением типов.
Стоил ли это делать?

И ещё, какое приведение (С или С++) будет работать быстрее:
Код:
foo(float);
...
int i;
float f;
foo(f*(float)i); //или foo(f*static_cast<float>(i));  

Тем более что в целевые компьютеры должны попадать довольно старенькие машины, с частотой процессора около 600 Гц.


2. Ещё вопрос. Для повышения быстродействия имеет ли смысл делать следующее: у некоторых классов в программе есть много (с десяток) данных-членов (типы int и float), которые постоянно используются, как регуляторы или параметры чего-либо, и при этом не меняются, только раз инициализируются в конструкторе.
Так вот, сделать их всех const именно в целях хоть какого-нибудь повышения производительности имеет смысл?  
Знаю, что если не меняются, то в правилах хорошего тона программирования их и так следует объявлять const, но а в целях скорости, делаются ли какие-нибудь оптимизации компилятором и т.д.?
« Последнее редактирование: 14-08-2009 08:19 от The Nameless One » Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 14-08-2009 08:24 » 

The Nameless One, если у тебя действительно большой объём вычислений, который обеспечивает существенную нагрузку - да, несомненно, стоит использовать целочисленные операции.
Мультимедийные кодеки в массе своей именно так и реализованы: все операции, включая тригонометрические, производятся над целыми числами.

Приведение, имхо, можно в указанном примере вообще не выполнять - неявного хватит с лихвой.
Записан
The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 14-08-2009 08:26 » 

Вад,  спасибо!
А что насчет const:) ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 14-08-2009 08:27 » 

1)
если быстродействие прямо таки страдает, то есть смысл использовать целые числа вместо float

надо просто потестировать и посмотреть Улыбаюсь

а вот это

foo(f*(float)i);

можно записать так

foo(f*i);

всё равно каст i к float произойдёт


2) const на быстродействие не повлияет. Оптимизацию надо делать исходя из контекста, а мы его не знаем, так как кода ты не показал Ага
Записан

The Nameless One
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 14-08-2009 08:35 » new

Алексей1153++, спасибо!

Кода много-вато уже, да и свой индусский код мне стыдно показывать:)
Пока мне и так очень хорошо помогаете, спасибо всем!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines