![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Форумчанин
Регистрация: 16.09.2011
Сообщений: 114
|
![]()
Всем привет!
Я написал программу с использованием MPI (Message Passing Interface). Мне нужно замерить время работы всей программы и отдельных ее частей. Для замера времени использовал функцию MPI_Wtime(). Программа выдавала не такие результаты, какие мне были нужны. Тогда я стал разбираться в чем же дело, писать различные тесты и т.д. И вот один из тестов показал мне странный результат: я замерил время работы ДВУХ операций сложения чисел типа double и время работы ЧЕТЫРЕХ операций сложения чисел типа double. В результате получилось, что время работы четырех сложений почти такое же как и для двух сложений. Если подумать, то время работы двух сложений должно быть почти в два раза меньше, чем четырех. Может я что-то не учитываю или неправильно понимаю. Очень нужна помощь, т.к. сроки поджимают! У кого есть какие либо предположения или может кто-то знает в чем дело - поделитесь знаниями пожалуйста. Код описанного теста ниже (он простой и его не так много, как кажется). Результат двух операций сложения выводится как "Oper Time 1", четырех операций - "Oper Time 2". Код:
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
![]()
эти сложения выполняются за такое ничтожное время что там и мерять то нечего
можешь также попробывать убрать все оптимизации компилятора. |
![]() |
![]() |
![]() |
#3 | ||
Форумчанин
Регистрация: 16.09.2011
Сообщений: 114
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 29.09.2010
Сообщений: 636
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 16.09.2011
Сообщений: 114
|
![]()
Ну я смотрел так: Проект -> Свойства -> С/С++ -> Оптимизация
Там в верхней строке написано, что отключено. Да и в других строках тоже самое. Я сам сначала думал на оптимизацию, стал в интернете искать как отключить. Нашел где посмотреть (описано в первой строке). Там посмотрел - оказалось что выключено. Пробовал писать #pragma optimize("", off) - результат не изменился ![]() |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 16.09.2011
Сообщений: 114
|
![]()
Что же, никто не знает совсем? Буду рад любым догадкам.
|
![]() |
![]() |
![]() |
#7 |
somewhere else
Участник клуба
Регистрация: 17.07.2008
Сообщений: 1,409
|
![]()
Нормальный способ измерять время это присваивание процессу максимального приоритета и измерять нужно не время как таковое, а количество тактов затраченных на вычисления. Для этого есть команда rdtsc, к слову вам вообще в раздел ассемблера, помнится Goodwin98 создавал тему(в разделе ассемблера), где выкладывал полигон для тестов, правда, он на ассемблере, но суть всех действий, думаю, будет вполне понятна.
Мне почему-то кажется, что даже если этот самый MPI делает тоже самое, он непременно накладывает определенные задержки, которые совсем не линейны. Хотя по правде говоря, смысл таких точных измерений есть только в случае с очень короткими отрезками кода.
"Тяжело в учении, легко в бою" - А.В. Суворов
|
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 16.09.2011
Сообщений: 114
|
![]() Цитата:
Я запускал этот тест на кластере. На узле, где он запускался, не было других процессов, поэтому думаю, что дело не в приоритете. Мне нужно измерить именно время, а не количество тиков, т.к. нужно учесть время пересылки между процессами (в моей программе несколько взаимодействующих между собой процессов). Вообще программа была написана для тестирования на кластере, но писал я ее дома и никаких проблем не было, пока не стал тестить на кластере. |
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 16.09.2011
Сообщений: 114
|
![]()
Всем спасибо! Закрывайте.
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 28.12.2011
Сообщений: 27
|
![]()
Если аппаратно поддерживается счетчик производительности, попробуй связку функций: QueryPerformanceCounter и QueryPerformanceFrequency
Код:
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Высокоточный замер времени | KimboSlice | C# (си шарп) | 9 | 08.05.2011 09:58 |
Замер времени выполнения | nickel-j | Компоненты Delphi | 3 | 28.05.2010 17:02 |
Профилирование (Измерение времени работы программы) | megakatapuz | Общие вопросы C/C++ | 0 | 06.01.2010 23:04 |
Подсчет времени работы алгоритмов | Solncelikiy | Общие вопросы C/C++ | 2 | 15.12.2009 20:15 |
Вычисление времени работы программы | Monte-Kristo | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 12.06.2009 13:25 |