Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Сверх скорость


Автор: Riddik 3.7.2009, 11:47
Привет. Больше не буду доставать с теми задачами, это последний раз. smile

Просто интересует, как можно сделать сверхбыстро такую элементарную операцию, как сложение.

Вот самая первая http://acm.timus.ru/problem.aspx?space=1&num=1000, надо просто сложить два числа. 

Интересен стал такой момент. В http://acm.timus.ru/rating.aspx?space=1&num=1000 этой задачи находятся практически все на Pascal, делают они это за 0.001 сек.

На С++ такой код 
Код

#include <iostream>
int main()
{
register short a, b;
std::cin>>a>>b;
std::cout<<a+b;
return 0;
}


делает это за 0.015 сек.

Как можно побить рекорд Паскаля без ассемблера?

Автор: andrew_121 3.7.2009, 11:52
На Си

Автор: azesmcar 3.7.2009, 12:01
Цитата(Riddik @  3.7.2009,  11:47 Найти цитируемый пост)
Как можно побить рекорд Паскаля без ассемблера? 

По моему даже с ассемблером никак smile я проверил, он даже на пустую программу 0.015 секунд тратит.
Код

int main()
{
}

вот это проверь smile так что, даже думать не стоит

Автор: Riddik 3.7.2009, 12:04
Так и есть. 

Отчего же так?

Может, сейчас у них просто сервер загружен гораздо больше, чем тогда. Все те паскалевские результаты 2000-2004 в основном. smile

Автор: W4FhLF 3.7.2009, 12:15
Сложение целых чисел осуществляется одной машинной командой add. Причём оба аргумента в регистрах. Померить "время" выполнения одной машинной команды на современных процессорах невозможно. Если верить мануалам от Intel'a то такое сложение выполняется за 1 такт. При этом, допустим, аргументы в регистры читаются из памяти, если эта память не лежит в кеше первого уровня, то операция чтения может занимать от сотен до тысяч тактов. Поэтому любые арифметические операции на фоне чтения из памяти есть капля в море, не говоря уже о выводе на экран. 


Автор: GoldFinch 3.7.2009, 12:16
Riddik, там время работы программы а не время работы сложения
математика говорит, что если Y/X=0, то X+Y=X
в данном случае X - время работы не-сложения, Y- время работы сложения

очевидно проги на паскале грузятся быстрее

Автор: xvr 3.7.2009, 12:16
Приведенный С++ код занимается вводом/выводом. Собственно сложение там занимает вообще незаметное время. Так что минимизировать надо именно ввод/вывод

Автор: GoldFinch 3.7.2009, 12:31
интересно, какая там ОС, 
и можно ли юзать 
#pragma comment(linker,"/entry:main")

Автор: Riddik 3.7.2009, 13:04
Цитата(GoldFinch @  3.7.2009,  12:16 Найти цитируемый пост)
очевидно проги на паскале грузятся быстрее

И как объяснить 49-ю, 52-ю, 53-ю и т.д. строчки?

Причём, ИМХО, именно 49-ый должен быть лучшим, т.к. памяти меньше всего расходовал. Может действительно ввод-вывод оптимизировали?

Автор: zim22 3.7.2009, 13:09
Цитата(GoldFinch @  3.7.2009,  12:31 Найти цитируемый пост)
интересно, какая там ОС, 

Цитата

C and C++ programs are compiled on the server by the 32-bit Intel C++ Compiler 7.0

http://acm.timus.ru/help.aspx?topic=cpp

Автор: GoldFinch 3.7.2009, 15:59
zim22, я про ОС спросил, а не про компилятор

Автор: zim22 3.7.2009, 16:17
Цитата(GoldFinch @  3.7.2009,  15:59 Найти цитируемый пост)
, я про ОС спросил, а не про компилятор

я думал, что этот компилятор только под Windows. ошибался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)