Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2013, 16:13   #21
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>

int main(void)
{
    for(long int i = 0; i<500000; ++i)
     printf("%ld\n", i);
    getch();
    return 0;
}
Код на Си. Выводит быстрее и значительно. Если при Паскале приходится ждать 2 минуты, то сейчас затрачивается примерно секунд 15. Не могу привести доказательства как в прошлом сообщении, так как такого таймера на Си не писал.

Если такое время затрачивается просто на то, чтобы вывести числа, то по идее, если программа выполняет помимо этого другие действия, а именно обработку большого массива, то время выполнения основной программы должно быть еще больше, даже если код будет супер оптимальным.

Последний раз редактировалось Metaluk; 11.02.2013 в 16:16.
Metaluk вне форума Ответить с цитированием
Старый 11.02.2013, 16:40   #22
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
#include <stdio.h>
#include <conio.h>

int main(void)
{
    for(long int i = 0; i<500000; ++i)
     printf("%ld\n", i);
    getch();
    return 0;
}
А где массив?
Abstraction вне форума Ответить с цитированием
Старый 11.02.2013, 17:11   #23
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Metaluk
Я думаю тебе надо покопаться в настройках компилятора твоего паскаля. И да, на Си у тебя нет массива.

Вот такой код на прологе (а все знаю какой он медленный):
Код:
for(Start, Finish, [Start|T]):-
  Start >= Finish, T = [], !;
  V is Start + 1, for(V, Finish, T).
goal:-
  for(1, 500000, L), write(L).
выполняется вот так долго:
Цитата:
real 0m0.763s
user 0m0.568s
sys 0m0.033s
тоесть моментально, притом, кроме того, что это пролог, тут сначала элементы ложатся в список (да, кстати, динамический), а потом уже этот список выводится (т.е. делается 2 прохода по списку).

И это я засек на своем очень старом ноутбуке (P6100, 2ГГц).
-------
но на прологе быстро вышло тока с хвостовой рекурсией. С логическим выводом он выводил до 32000 где-то 4 минуты, дальше я ждать не стал.
------------
Цитата:
real 0m8.306s
user 0m6.351s
sys 0m0.327s
а это время, если выводить до 5000000
---------------------
А твой код на Си (который без массива ваще) работает вот столько:
Цитата:
real 0m3.190s
user 0m0.212s
sys 0m1.432s
компилировал g++ без оптимизации

Последний раз редактировалось rrrFer; 11.02.2013 в 17:26. Причина: добавил
rrrFer вне форума Ответить с цитированием
Старый 11.02.2013, 17:52   #24
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

С массивом на Си время работы примерно такое же, поэтому не стал приводить.

Хм. Вообще не понимаю тогда. Ваше время буквально ничто по сравнению с моим. В чем причина-то?
Где что смотреть/поменять?

Протестировал с помощью Visual C++ 6.0. Примерно столько же времени заняло. Гораздо больше, чем 3 секунды.

Последний раз редактировалось Metaluk; 11.02.2013 в 18:00.
Metaluk вне форума Ответить с цитированием
Старый 11.02.2013, 18:19   #25
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
В чем причина-то?
Если я вывожу каждое значение на отдельной строке - то время примерно 4 секунды с 500000
rrrFer вне форума Ответить с цитированием
Старый 11.02.2013, 18:41   #26
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

Итого почти в 4 раза быстрее, чем у меня, при условии, как Вы пишете, что использовали очень старый ноутбук.
Metaluk вне форума Ответить с цитированием
Старый 11.02.2013, 19:48   #27
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Metaluk, давайте определимся, скорость чего мы пытаемся измерить.

В данном случае Ваш код пытается измерить производительность Windows при выводе информации на консоль. Никакого отношения к производительности собственно программ это отношения не имеет.
Кроме того, мне кажется, задача по выводу на экран миллиона чисел вряд ли может вообще хоть что-то показывать - это абсолютно нежизненная ситуация.
Давайте будем измерять во-первых - сравнимое, а во вторых - полезное. Например, скорость вывода в файл.
Программа ниже демонстрирует скорость вывода в файл:
1. Текстовой информации - по одному числу за операцию вывода.
2. Бинарной информации - по одному числу за операцию вывода.
3. Бинарной информации - весь массив одной операцией.
4. Текстовой информации - здесь показано, как можно оптимизировать вывод текстовой информации.

Сам текст:
Код:
uses windows, strings;
var
  i,j,k,m,t0,t1 : longint;
  t : text;
  f : file;
  a : array[0..1000000-1]of longint;
  b : array[0..8191]of char;
  s : string;
begin
  assign(t,'opt_time.txt');
  rewrite(t);
  t0 := GetTickCount;
  for i := 0 to 1000000-1 do
    writeln(t,i);
  t1 := GetTickCount;
  close(t);
  writeln('Formatted: Elapsed time: ',t1-t0);

  assign(f,'opt_time.dat');
  rewrite(f,1);
  t0 := GetTickCount;
  for i := 0 to 1000000-1 do
    blockwrite(f,i,sizeof(i));
  t1 := GetTickCount;
  close(f);
  writeln('Non formatted (one number per cycle): Elapsed time: ',t1-t0);

  assign(f,'opt_time.bin');
  rewrite(f,1);
  for i := 0 to 1000000-1 do
    a[i] := i;
  t0 := GetTickCount;
  blockwrite(f,a,sizeof(a));
  t1 := GetTickCount;
  close(f);
  writeln('Non formatted (total array): Elapsed time: ',t1-t0);

  assign(f,'opt_time2.txt');
  rewrite(f,1);
  t0 := GetTickCount;
  for j := 0 to 999 do begin
    k := 0;
    for i := 0 to 999 do begin
      s := inttostr(a[i + j*1000]);
      move(s[1], b[k], length(s));
      inc(k, length(s) + 2);
      b[k-2] := #13;
      b[k-1] := #10;
    end;
    blockwrite(f,b,k);
  end;
  t1 := GetTickCount;
  close(f);
  writeln('Formatted (buffered): Elapsed time: ',t1-t0);

end.
Результат работы (Intel Atom 1.6 ГГц):
Код:
Formatted: Elapsed time: 11860
Non formatted (one number per cycle): Elapsed time: 5390
Non formatted (total array): Elapsed time: 31
Formatted (buffered): Elapsed time: 1250
время - в мс.

Последний раз редактировалось s-andriano; 11.02.2013 в 19:55.
s-andriano вне форума Ответить с цитированием
Старый 11.02.2013, 21:18   #28
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

Ошибка компиляции.
Metaluk вне форума Ответить с цитированием
Старый 11.02.2013, 21:30   #29
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Любая ошибка компиляции имеет свой номер и свое описание.

Да, я пользуюсь TMT 4.01. Для FPC, вероятнее всего, нужно поменять список подключаемых модулей.
Если слишком большой массив - уменьшить его (для пробы) либо переделать на динамический.

Последний раз редактировалось s-andriano; 11.02.2013 в 21:32.
s-andriano вне форума Ответить с цитированием
Старый 12.02.2013, 22:17   #30
Metaluk
Пользователь
 
Регистрация: 06.02.2013
Сообщений: 21
По умолчанию

Заменил
Код:
s := inttostr(a[i + j*1000]);
На
Код:
str(a[i + j*1000], s);
Результаты:
Код:
Formatted: Elapsed time: 282
Non formatted (one number per cycle): Elapsed time: 2078
Non formatted (total array): Elapsed time: 109
Formatted (buffered): Elapsed time: 125
Metaluk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про обращение серверного языка веб-программирования Амелия Паскаль, Turbo Pascal, PascalABC.NET 0 03.06.2012 12:18
And once again. Вопрос общего характера по выбору языка программирования. eepive Помощь студентам 6 13.05.2011 10:37
много материалов по компиляторам, трансляторам, транслитераторам, лексическим анализаторам и т.п. Marsel737 Свободное общение 1 03.09.2010 17:58
тест по Операционным системам,средам и оболочкам guns'ik Помощь студентам 0 26.04.2010 19:13
Вопрос по языкам программирования mixer94 Помощь студентам 4 08.06.2009 12:22