powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / GNU C/C++ vs. Free Pascal
20 сообщений из 20, страница 1 из 1
GNU C/C++ vs. Free Pascal
    #33226721
Рыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прожужжали мне помашь уши... якобы FP компилер делает чудовищно
быстрые экзешники (относительно гну сей). Вот. Удосужился проверить
сей "факт" на простой задаче:

Given the list of numbers, you are to sort them in non decreasing order.
Input:
t – the number of numbers in list, then t lines follow [t <= 10^6].
Each line contains one integer: N [0 <= N <= 10^6]
Output:
Output given numbers in non decreasing order.
Time Limit: 5s.


Паскаль решение. Упорно не укладывается в тайм лимит!
Размер экзешника: 16 KB.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
{$I-,Q-,R-,S-}
const mx= 1000000 ;
var m,n,i,j: longint;
a: array[ 0 ..mx] of longint;

begin
fillchar(a,sizeof(a), 0 );
readln(m);
repeat
readln(n); inc(a[n]);
dec(m); until m= 0 ;
for i:= 0  to mx do
for j:= 1  to a[i] do writeln(i);
end.


C/C++ решение ("алгоритм" идентичен паскалевскому). Время: ~2s.
Размер экзешника: 3.50 KB.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#include <stdio.h>
#define MX  1000000 

long m,n,i,j,a[MX+ 1 ];

int main(void) {
    for (i= 0 ; i<=MX; i++) a[i]= 0 ;
    scanf("%d",&m);
    for (i= 1 ; i<=m; i++) {scanf("%d",&n); a[n]++;};

    for (i= 0 ; i<=MX; i++) {
          for (j= 1 ; j<=a[i]; j++) printf("%d\n",i);
        };
return  0 ;
}
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #33226821
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
начинается.
шаг в сторону от темы - стреляю
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #33226898
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рыт...якобы FP компилер делает чудовищно
быстрые экзешники (относительно гну сей).


1) Хм.. ну я бы сказал что это сильно зависит от опций
компиллятора. Приведите ключи командной
строки для FP и CPP.

Рыт
..."алгоритм" идентичен паскалевскому...


2) По моему fscanf(...) не является аналогом readln(...).
То-же я-бы сказал про вывод. Инициализация массивов
нулями выполняется уж слишком по разному.

3) До выполнения метода main могут срабатывать
загрузчики, статические конструкторы и пр. штуки,
которые искажают временную картину. Следует учесть
это.

Неплохо-бы глянуть asm -овские сорсы. Это многое прояснит.

Я - бы взял более сложный алгоритм с меньшим количеством
ввода-вывода и большим временем работы.

Вообще-то данный тест достаточно субъективен.
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #33226975
Рыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
C++ programs are compiled this way:
Код: plaintext
1.
2.
3.
 
/usr/bin/g++ -pipe -O2 -lm -s -fomit-frame-pointer -DONLINE_JUDGE
-o/tmp/tested /sources/tested.cpp 

Фри Паскаль и его четыре директивы {$I-,Q-,R-,S-}:
отключение проверок входных данных, переполнения, границ массивов и стека.
По-моему, это максимум что можно сделать для ускорения будущего экзешника.

>Инициализация массивов нулями выполняется уж слишком по разному.
Я же дал ФП фору! fillchar работает намного быстрее брутального
Код: plaintext
1.
for i:= 1  to N do a[i]:= 0 ;

>Неплохо-бы глянуть asm-овские сорсы. Это многое прояснит.
Ой.

>Я бы взял более сложный алгоритм с меньшим количеством
>ввода-вывода и большим временем работы.

Возьмем задачу BSHEEP - поиск выпуклой оболочки (и ее длины) множества
точек на плоскости. Там много вычислений помимо ввода-вывода. Смотрим
ее best solutions: http://spoj.sphere.pl/ranks/BSHEEP/

И что мы видим? Одни только С-решения!
Как мне (ZZZ) удалось занять там 4-е место со своим ФПаскаль-кодом?
Только потому что я заюзал свой собственный самопальный алгоритм.
Если бы я юзал более-менее стандартный алгоритм, то меня бы там не
стояло (на 1-й странице best solutions).
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #33227164
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рыт
Возьмем задачу BSHEEP - поиск выпуклой оболочки (и ее длины) множества
точек на плоскости. Там много вычислений помимо ввода-вывода. Смотрим
ее best solutions: http://spoj.sphere.pl/ranks/BSHEEP/

И что мы видим? Одни только С-решения!
Как мне (ZZZ) удалось занять там 4-е место со своим ФПаскаль-кодом?
Только потому что я заюзал свой собственный самопальный алгоритм.
Если бы я юзал более-менее стандартный алгоритм, то меня бы там не
стояло (на 1-й странице best solutions).


Вы достигли эффекта путем улучшения оценки временной сложности BSHEEP?
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #33227307
Рыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну да. Типа этого.
У большинства сишных решений сложность = O(n*log(n)),
а у меня она равна (приблизительно) 0.25*O(n*log(n)).

Т.е., если бы я юзал их алгоритм, но на ФПаскале, то
мое время было бы не 1.29 с, а ~ 5 секунд.

>По моему scanf(...) не является аналогом readln(...).

Ес-но, на "молекулярном" уровне - это разные вещи, но по
сути - это одно и то же.
И вот загадка: что мешает автору FP компилера сделать read()
таким же быстрым как и scanf()? (если он быстрее)
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #33227382
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РытНу да. Типа этого.
У большинства сишных решений сложность = O(n*log(n)),
а у меня она равна (приблизительно) 0.25*O(n*log(n)).


Ну .. обычно при сравнении алгоритмов константу перед
формулой не учитывают. Она определяется только реализацией.
То есть, если я возьму и использую свои знания
в ассемблере и создам собственную реализацию BSHEEP -
то я как минимум буду стоять выше вас по рейтингу?
Но делать этого я не буду потому-что: 1) лень. 2) мне
это неинтересно.
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #33227493
Рыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНо делать этого я не буду потому-что: 1) лень. 2) мне
это неинтересно.
Весьма знакомые чуйства.
Я прямо-таки содрогаюсь, глядя на свои 100 строк кода (весьма
убористым "почерком"; при нормальном форматировании их будет
не меньше 200) задачи BSHEEP.
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #33229017
Рыт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну чё господа-коллеги...... загадка разгадана:
https://spoj.sphere.pl/forum/viewtopic.php?t=3162
Плохо конечно что в наше время чудес почти не бывает.
Без чудес жизнь человека превращается в чудовищный фарс.
Я вот шел сегодня мимо пятиэтажек; возле них растут яблони.
И какие-то молодые тетки и их сынки-подростки трусили яблоки.
Дык я что тогда подумал: вид человека, пихающего туда-сюда
яблоню... 10000 лет прошло, а как был человек гамадрилой так
ею и остался. Хоть ты ему 10 мобил к поясу привяжи.
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #33230539
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РытНу чё господа-коллеги...... загадка разгадана:
Для меня загадка, когда FP стал быстрым. Когда я его смотрел, пару лет назад, он делал не просто тормозной, а чудовищно тормозной код.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
GNU C/C++ vs. Free Pascal
    #39150126
Рыт,

а почему Вы а)на Си использовали 3-й уровне оптимизации, а на free pascal нет? для чистоты эксперимента необходимо создавать равные условия, а не те которые Вам нравятся. Или и там, и там -О2, или и там , и там нет(вообще-то, надо оба уровня сравнить).
б) как Вам уже сказали, до самого кода выполняются, различные иниты и прочее(однажды, я видел пример на Ада, и комментарии(специалиста) : смысл заключался в том, что на Ада программы стартуют дольше, потому, что много инициализации проводят сразу, зато потом работают быстрее, так как в процессе уже ничего инициализировать не надо, все уже есть готовое. Из этого вывод: надо было запускать счётчик, когда доходит до Вашей процедуры, и останавливать перед выходом. И приоритет(если Вы не в RTOS работаете) ставить realtime.
И вот только при реализации этих условий Вы можете говорить о КАЧЕСТВЕННОМ СРАВНЕНИИ СКОРОСТИ РАБОТЫ ГЕГНРИРУЕМОГО КОМПИЛЯТООАМИ КОДА.
А если Вы считаете, что Вы все сделали правильно, тогда Вы -сраный холиварщик, не гнущающийся стремными методами!
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #39150153
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимо проходящий читательсмысл заключался в том, что на Ада программы стартуют дольше, потому, что много инициализации проводят сразу, зато потом работают быстрее, так как в процессе уже ничего инициализировать не надо


классный бред
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #39150162
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С новым годом братия. Over 10 лет прошло. Да и Рэт уже не торт.
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #39150253
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РытПрожужжали мне помашь уши... якобы FP компилер делает чудовищно
быстрые экзешники (относительно гну сей).

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

GCC же наоборот очень небыстрый компилятор.
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #39151847
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилМимо проходящий читательсмысл заключался в том, что на Ада программы стартуют дольше, потому, что много инициализации проводят сразу, зато потом работают быстрее, так как в процессе уже ничего инициализировать не надо


классный бред
аргументируй
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #39151848
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonС новым годом братия. Over 10 лет прошло. Да и Рэт уже не торт.
при этом главный вывод из поста некроманта - правильный
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #39151863
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizИзопропилпропущено...



классный бред
аргументируй
что там такого особенного инициализировать, чтоб запуск приложения замедлить?
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #39154015
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилtchingizпропущено...

аргументируй
что там такого особенного инициализировать, чтоб запуск приложения замедлить?
я не знаю ниодного ассемблера,
но дебаг версия си инициализирует автоматическую память там чемто,
а релиз - нет.
Значит дебаг, теоретически, медленее работает.
Наверно, можно чегото сделать в статической памяти.


а
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #39154016
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а аду я не знаю.
У них были какие то модули, или пакеты - может их можно по разному инициализировать?
...
Рейтинг: 0 / 0
GNU C/C++ vs. Free Pascal
    #39154093
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тестили скорости , топик на 30 страниц, вот промежуточные результаты 18131400 free паскаль вдвое медленнее плюсов, и не только плюсов.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / GNU C/C++ vs. Free Pascal
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]