Форум программистов, компьютерный форум CyberForum.ru

Уменьшение времени выполнения цикла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Andrew_ku
0 / 0 / 0
Регистрация: 02.04.2011
Сообщений: 31
03.06.2011, 18:53     Уменьшение времени выполнения цикла #1
Нужна помощь, мне надо засечь время выполнения цикла, который инициализирует элементы массива.
А потом надо как-то развернуть цикл и засечь уже время выполнения развернутого цикла. И у меня два вопроса:
1) Как засечь время такого маленького цикла(пробовал и clock() и GetTickCount() не улавливают) ?
2) Как вообще развернуть этот цикл?

Помогите пожалуйста! Очень надо.

Напишу код всей проги а не только цикла
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
int sum;
 char ch,p;
int main ()
{  
  srand(time(0)); 
 
  
  int const L=80;
 
 int Array[L];
   
  
    for(int i=0;i<L;i++)
    
 
        Array[i]=rand()%20;
 
 
 
    cout<<endl<<"Massiv soderzhit:"<<endl;
    for (int i=0; i<L; i++)
    {
      cout<<"["<<i+1<<"]"<<Array[i]<<"  ";
    }
 
    for(int i=0;i<L;i++)
      {
        int sum=0;
        while (Array[i]!=0)
     {
        sum += Array[i]%10;
        Array[i] /= 10;
     }
 
      cout<<"\nSumma cifr elementa[ "<<i+1<<"]"<<sum;
 
    }    
      
        
  
   getch(); 
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2011, 18:53     Уменьшение времени выполнения цикла
Посмотрите здесь:

Ошибка времени выполнения C++
Окно программы во время выполнения цикла C++
C++ Ошибка времени выполнения.
Оптимизация времени выполнения C++
Условие выполнения цикла C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.06.2011, 19:27     Уменьшение времени выполнения цикла #2
попробуйте Ваше полученное время - число (если оно реально маленькое, то оно будет равно 0) умножить, например, на 100 или 1000 и т.д., пока не будет выведено число, отличное от нуля...
Andrew_ku
0 / 0 / 0
Регистрация: 02.04.2011
Сообщений: 31
03.06.2011, 19:47  [ТС]     Уменьшение времени выполнения цикла #3
Цитата Сообщение от Mиxaил Посмотреть сообщение
попробуйте Ваше полученное время - число (если оно реально маленькое, то оно будет равно 0) умножить, например, на 100 или 1000 и т.д., пока не будет выведено число, отличное от нуля...
Пытался..( Все равно выводил 0
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.06.2011, 19:58     Уменьшение времени выполнения цикла #4
Andrew_ku, 80 итераций цикла, выполняется за очень-очень маленькое время... если поставить 1Е6, тут уже ощутимо должно быть... Короче говоря, сделайте больше число итераций цикла...
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
03.06.2011, 20:08     Уменьшение времени выполнения цикла #5
а у меня выводит 0,063 sec. (code::blocks) он, кстати, автоматически выдает время выполнения программы.
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.06.2011, 20:13     Уменьшение времени выполнения цикла #6
no0ker, Вы умножали на что - то? Или у Вас очень слабый комп
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
03.06.2011, 20:16     Уменьшение времени выполнения цикла #7
ну, у меня старенький ноутбук плюс куча параллельных задач.
и еще - вы можете засечь 6 сотых секунды? =)
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.06.2011, 20:19     Уменьшение времени выполнения цикла #8
Теоретически, это можно, но не заметно... =)
no0ker
100 / 87 / 4
Регистрация: 17.12.2010
Сообщений: 416
03.06.2011, 20:23     Уменьшение времени выполнения цикла #9
ну как бы сказать, человек может отследить 50 гц, а это как никак 0,02 сек.
и на время работы влияет вывод с помощью cout. если без него, время колеблется от 0,016 до 0,000.
и еще, видимо мой пк все-таки круче ваших - он не только успевает выполнить программу, но еще и засечь время. =))
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
03.06.2011, 20:24     Уменьшение времени выполнения цикла #10
Пингвин рулит
Код
real	0m0.003s
user	0m0.000s
sys	0m0.000s
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
03.06.2011, 20:24     Уменьшение времени выполнения цикла #11
Цитата Сообщение от Andrew_ku Посмотреть сообщение
1) Как засечь время такого маленького цикла
Можно
QueryPerformanceCounter
QueryPerformanceFrequency
Ещё лучше
http://www.agner.org/optimize/#testp
Цитата Сообщение от Andrew_ku Посмотреть сообщение
2) Как вообще развернуть этот цикл?
Типа такого. Если L чётное
C++
1
2
3
4
5
for (int i = 0; i < L ; i += 2)
{
  Array[i] = rand() % 20;
  Array[i + 1] = rand() % 20;
}
Если компилируется нормальным компилятором с включенной оптимизацией, быстрее не станет.
denix
 Аватар для denix
63 / 63 / 2
Регистрация: 11.01.2009
Сообщений: 130
03.06.2011, 20:25     Уменьшение времени выполнения цикла #12
Andrew_ku, таймером воспользуйся
drfaust
250 / 140 / 36
Регистрация: 02.10.2008
Сообщений: 489
Записей в блоге: 1
Завершенные тесты: 1
03.06.2011, 20:37     Уменьшение времени выполнения цикла #13
Andrew_ku, Как я понял дело в оптимизации цикла.
1. Можно данную операцию: Arr[i]=rand()%20; "затормозить", дав ей в "навесок" что-то типа delay(100);

2. Можно этот цикл воткнуть внутрь другого цикла, и так несколько раз, пока время не станет о-очунь заметно.
З.Ы. Стоит также отключить оптимизацию в компиляторе...
Union
 Аватар для Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
03.06.2011, 20:39     Уменьшение времени выполнения цикла #14
Добавь этот цикл в другой цикл, и проведи его n тыс раз подряд. Полученное число подели на количество циклов (n). Так ты получишь среднее время выполнения своего цикла.
Andrew_ku
0 / 0 / 0
Регистрация: 02.04.2011
Сообщений: 31
03.06.2011, 21:17  [ТС]     Уменьшение времени выполнения цикла #15
Цитата Сообщение от Mиxaил Посмотреть сообщение
Andrew_ku, 80 итераций цикла, выполняется за очень-очень маленькое время... если поставить 1Е6, тут уже ощутимо должно быть... Короче говоря, сделайте больше число итераций цикла...
Можно конечно попробовать сделать больше итераций, но не знаю можно ли (все таки в задаче 80 сказано).... Может есть все таки какая-нибудь функция на подобии clock(), но более точная?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2011, 23:02     Уменьшение времени выполнения цикла
Еще ссылки по теме:

C++ Выход из цикла или продолжение выполнения в С++
Уменьшение времени работы программы C++
Операторы в условии выполнения цикла while C++

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

Или воспользуйтесь поиском по форуму:
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
03.06.2011, 23:02     Уменьшение времени выполнения цикла #16
Andrew_ku, можно использовать вполне нормальное предложение Union'a, но время будет с небольшой погрешностью, хотя... для 80 итераций...!
Yandex
Объявления
03.06.2011, 23:02     Уменьшение времени выполнения цикла
Ответ Создать тему
Опции темы

Текущее время: 06:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru