Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62

Быстродействие приложения

03.12.2014, 12:20. Показов 3592. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Возникла необходимость реализации в приложении многократного использования формул с числами с плавающей запятой. И заметила, что использование float очень замедляет работу программы, что недопустимо.
Так, нужно в цикле каждые 100 мс просчитать формулу с использованием float 100 000 раз, результат перевести в int и записать его в элемент массива.

Если посмотреть загрузку ЦП в компе, то можно увидеть следующее:
- без использования формул с float и без преобразования float в Int - 6-9%
- с использованием формулы с float - 9-14%
- с использование формулы с float и прямым преобразованием float в int - 14-18%



Используется процессор AMD FX(tm)-4100, ОЗУ - 4ГБ

Существует ли в C++ Builder возможность оптимизации кода с использованием float? Используется ли при расчетах математический сопроцессор, и как это можно определенно узнать? Как можно ускорить такие вычисления?

Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2014, 12:20
Ответы с готовыми решениями:

Быстродействие программы
Необходимо мнение опытных программистов. У меня есть модуль (большой - 800 строк кода и тяжелый - не сразу выполняет расчеты). Пишу...

Быстродействие многопоточного приложения
Здравствуйте. Я работаю сисадмином и по совместительству неплохо знаю C++ ( не гуру, но все же). Сейчас поступила задача написать простое...

Разделение серверной части приложения - влияние на быстродействие!
Добрый день, уважаемые коллеги! Помогите с экспертной оценкой! Есть приложение на Access. Данные хранятся в одном файле mdb на общем...

44
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.12.2014, 14:51
Студворк — интернет-сервис помощи студентам
Ваш код у меня считает 31мсек (милисекунда)! i7-2600К 4700МГц. Если число шагов увеличить на порядок, то 240 мсек
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
03.12.2014, 14:53  [ТС]
Цитата Сообщение от gumi250 Посмотреть сообщение
Ваш код у меня считает 31мсек (милисекунда)! 2600К 4700МГц. Если число шагов увеличить на порядок, то 240 мсек
Что у меня тогда не так???? Комп в целом работает нормально
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
03.12.2014, 14:54
Цитата Сообщение от tus1 Посмотреть сообщение
Бред - как может быть, что многократно превосходящий по скорости процессор компьютера выполняет те же операции намного медленнее?

Твой кортекс то и делает что выполняет твой код только, а ОС помимо кода еще выполняет кучу другого кода, и прерываний у него вагон
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
03.12.2014, 14:57  [ТС]
Цитата Сообщение от demmax2004 Посмотреть сообщение
Твой кортекс то и делает что выполняет твой код только, а ОС помимо кода еще выполняет кучу другого кода, и прерываний у него вагон
в ОС в отличие от кортекса, еще 3 дополнительных ядра
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.12.2014, 15:00
Может у вас настройки проекта неправильные? Например если я включу CodeGuard, то 31мсек превратятся в 1800
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
03.12.2014, 15:19  [ТС]
Цитата Сообщение от gumi250 Посмотреть сообщение
Может у вас настройки проекта неправильные? Например если я включу CodeGuard, то 31мсек превратятся в 1800
Отключила CodeGuard, был включен. Результат такой же. Что еще может быть?
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.12.2014, 15:27
А вы готовый проект сюда выложите.
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
03.12.2014, 15:28  [ТС]
Цитата Сообщение от gumi250 Посмотреть сообщение
Может у вас настройки проекта неправильные? Например если я включу CodeGuard, то 31мсек превратятся в 1800
Можете посмотреть мой проект только с этой формулой?
Вложения
Тип файла: rar test2.rar (7.47 Мб, 5 просмотров)
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
03.12.2014, 15:30
У меня такой код как
C++
1
2
3
4
5
6
7
8
    int intPerem;
    float ff; 
    float floatPerem = 32.5;
    for(int i = 0; i<100000000; i++)
    {
        ff = ff + 0.5;
        intPerem = intPerem + (int)floatPerem;
    }
считается за 113 мс, на Athlon x2 240
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.12.2014, 15:47
Ваш код из проекта примерно такой:
C++
1
2
3
4
5
6
7
8
uint32_t intPerem;
float floatPerem = 32.5;
int T=GetTickCount();
for(uint32_t i = 0; i<100000000; i++)
{   intPerem = (uint32_t)floatPerem;
}
Edit1->Text=GetTickCount()-T;
CurrentFrequency = intPerem;
Код теста который вы сдесь приводили не содержал строки CurrentFrequency = intPerem; Казалось бы какая разница. Но как я и говорил. Если такой строки нет, то компилятор видит, что intPerem не используется и генерит код с пустым телом цикла. Код из вашего проекта считается у меня 1.6 сек.
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
03.12.2014, 15:50
Цитата Сообщение от gumi250 Посмотреть сообщение
что intPerem не используется и генерит код с пустым телом цикла
Поэтому intPerem надо объявлять как volatile
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
03.12.2014, 15:58  [ТС]
Так почему у вас 1,6 сек, что уже как-то сопоставимо с микроконтроллерами, а у меня - 20 сек., хоть наши процессоры настолько не отличаются??????
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
03.12.2014, 16:04
Еще не забывай что у кортексов RISC архитектура, это тебе не PC проц
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.12.2014, 16:15
Цитата Сообщение от tus1 Посмотреть сообщение
Так почему у вас 1,6 сек, что уже как-то сопоставимо с микроконтроллерами, а у меня - 20 сек., хоть наши процессоры настолько не отличаются??????
Давай подумаем. Мы берем один проект компилим его, допустим с одинаковыми настройками, т.к. я ваши настройки не менял (XE5 и XE6). Запускаем на разных компах. Я бы сказал, что разница в скорости из-за компов.

Добавлено через 5 минут
В 64 битах 171 мсек с volatile и в дебаг версии (т.к. можно точно посмотреть наличие тела цикла и оно есть), в релиз версии 31мсек. Поэтому я сейчас все пишу на 64 бита.
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
03.12.2014, 16:20  [ТС]
Цитата Сообщение от demmax2004 Посмотреть сообщение
Еще не забывай что у кортексов RISC архитектура, это тебе не PC проц
В том то и дело, что у CISC ахитектуры больше MIPS на МГц, за счет сложных конвейеров и расширенной архитектуры команд.

Добавлено через 3 минуты
Цитата Сообщение от gumi250 Посмотреть сообщение
Давай подумаем. Мы берем один проект компилим его, допустим с одинаковыми настройками, т.к. я ваши настройки не менял (XE5 и XE6). Запускаем на разных компах. Я бы сказал, что разница в скорости из-за компов
То есть по-вашему это- нормальная разница между вашим процессором от Intel с большей частотой и моим от AMD с меньшей частотой?

Цитата Сообщение от gumi250 Посмотреть сообщение
В 64 битах 171 мсек с volatile и в дебаг версии (т.к. можно точно посмотреть наличие тела цикла и оно есть), в релиз версии 31мсек. Поэтому я сейчас все пишу на 64 бита.
А в XE5 можно создать проект под 64 бита?
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.12.2014, 16:34
Цитата Сообщение от tus1 Посмотреть сообщение
А в XE5 можно создать проект под 64 бита?
Вроде да
Цитата Сообщение от tus1 Посмотреть сообщение
То есть по-вашему это- нормальная разница между вашим процессором от Intel с большей частотой и моим от AMD с меньшей частотой?
У вас есть другие объяснения? Ну чтобы эксперимент был совсем корректным вы можете скомпилить ваш проект с включенными в exe библиотеками, так что бы он запускался на любых компах и позапускать его на разных компах. Можете сюда выложить. Я запущу. Тогда мы точно увидим разницу компов.

Добавлено через 9 минут
4.1E9Гц/1E8*21сек=861 тактов проца на такт цикла в AMD FX(tm)-4100 (частота наверняка менее 4100)
48E6Гц/1E8*94сек=45 тактов проца на такт цикла в Cortex M0
84E6Гц/1E8*16сек=13.44 тактов проца на такт цикла в Cortex M4
4,7E9Гц/1Е8*1,8сек=85 тактов проца на такт цикла в 32 битах i7-4700.
4,7E9Гц/1Е8*0,031сек=1,4 такта проца на такт цикла в 64 битах i7-4700.
Всетаки это 64 битные процы и архитектура у них 64 битах, которая вроде получше чем 32 битах. Вообщем для 64 бит вполне нормально.
0
120 / 142 / 46
Регистрация: 31.10.2014
Сообщений: 721
Записей в блоге: 1
03.12.2014, 16:36
Цитата Сообщение от gumi250 Посмотреть сообщение
так что бы он запускался на любых компах и позапускать его на разных компах. Можете сюда выложить. Я запущу. Тогда мы точно увидим разницу компов.
Да я тоже запущу на своем слабеньком
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
03.12.2014, 16:54  [ТС]
Да, ребята, вы наверно правы, что-то у меня с процом.
Попробовала на компе AMD Phenom (tm) II X4 3 ГГЦ - результат - 3 сек.,
на AMD Athlon 2.8 ГГЦ - 12 сек.
У меня 3,6 ГГЦ - 20 сек.

То ли что-то с виндой и надо переставлять..

Добавлено через 28 секунд
Да, и еще вопрос: как вы точно замеряете время выполнения?
0
 Аватар для gumi250
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
03.12.2014, 16:55
Точность ~20msec
C++
1
2
3
4
5
6
7
8
uint32_t intPerem;
float floatPerem = 32.5;
int T=GetTickCount();
for(uint32_t i = 0; i<100000000; i++)
{   intPerem = (uint32_t)floatPerem;
}
Edit1->Text=GetTickCount()-T;
CurrentFrequency = intPerem;
0
0 / 0 / 0
Регистрация: 13.10.2009
Сообщений: 62
03.12.2014, 18:04  [ТС]
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2014, 18:04

Изображение как background формы снижает быстродействие приложения
Суть такая, когда выставляю в качестве background в form1 изображение, то приложение начинает подтормаживать, если же просто цвет, то всё...

Быстродействие БД
Добрый день, коллеги. Хотелось бы посоветоваться. Не очень понятно написано в большинстве источников про оптимизацию работы. Вот,...

Быстродействие и БД
Здравствуйте! Пишу программу - библиотеку для работы с электронными книгами (в смысле с файлами). Информация хранится в БД (Access). ...

Быстродействие
на рисунке баллон с газом

Быстродействие
Здравствуйте у меня случилась вот такая проблема. Играл я в одну игру (лицензия), чего пришлось перезагружать компьютер. После перезагрузки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru