Сколько операций в секунду выполняет c
Всем привет ! передо мной стоит задача — вычислить сколько операций
( +, -, *, /) произойдет за секунду для каждого типа.
я начал делать и кажется не правильно (покажу на примере int’ов, операции +)
int a = 0; clock_t start1 = clock(); for(int j = 0;j < 1000; j ++) < for (int i = 0; i < 1000;i++) < a = mas1[i] + mas2[i]; >> long double time = 1000 / ( (long double) (clock() - start1) / CLOCKS_PER_SEC ) * 1000000;
В этом фрагменте я выполняю 1.000.000 операций, где mas1 и mas2 — массивы из 1000 элементов, потом в переменную time я :
получаю примерно 20 милисекунд. Делю 1000 (милисекунд в секунде) на результат и умножаю на 1.000.000 (кол-во операций), таким образом получая кол-во операций за секунду.
Прекрасно понимаю что мой алгоритм идиотский, по-этому хотел спросить как его улучшить или переделать)
Последний раз редактировалось ACE Valery; 18.03.2012 в 05:13 .
Developing.ru
Может у кого — нибудь есть примеры кода на С/С++ для определения числа операций в секунду (+,* и т.д.),т.е. для простейшей оценки производительности?
Romeo Сообщения: 3091 Зарегистрирован: 02 мар 2004, 17:25 Откуда: Крым, Севастополь Контактная информация:
Ну в Windows это сделать достаточно сложно. Процессорное время разделяется между процессами операционной системой и мы можем влиять на это достаточно опосредованно.
Самое простое, что может прийти в голову, это выполнить большое количество однородных операций, замерить время выполнения и потом разделить на количество операций. Такой подход нужен для того, чтобы всевозможные погрешности, а также время выполнения функции, возвращающей текущее время имели минимальное влияние на качество результата.
Entites should not be multiplied beyond necessity @ William Occam
—
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
—
Сообщение «Спасибо» малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой «Reputation» в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
somewhere Сообщения: 1837 Зарегистрирован: 31 авг 2006, 17:14 Откуда: 71 RUS Контактная информация:
Есть глобальный счетчик инструкций в микропроцессоре, считываемый командой RDTSC, таким образом можно измерить тактовую частоту процессора либо определенного блока комманд в тактовых циклах. А вот точное число операций за единицу времени узнать невозможно, хотя бы по причине периодических прерываний и из-за других механизмов runtime-оптимизаций процессора.
It’s a long way to the top if you wanna rock’n’roll
3 сообщения • Страница 1 из 1
- Системное и прикладное программирование
- ↳ Win API, Shell..
- ↳ C и C++
- ↳ Delphi и Pascal
- ↳ Программирование на Pascal и Delphi (Object Pascal)
- ↳ Все вопросы ООП
- ↳ Компоненты в Delphi
- ↳ Delphi и WinAPI, ActiveX и OLE , COM и DCOM, и т.д
- ↳ Java
- ↳ MS Office и VB(A).
- ↳ Ассемблер
- WEB программирование
- ↳ JScript, VBScript, DHTML.
- ↳ Perl, PHP, ASP .
- Некатегоризированное
- ↳ Вопрошайка
- ↳ SQL
- ↳ Алгоритмы
- ↳ Дизайн и графика
- Администрирование
- ↳ Apache, IIS.
- ↳ Операционные системы
- Работа
- ↳ Вакансии и заказы для программистов
- ↳ Поиск работы и заказов.
- ↳ Решите мне задачку
- ↳ задачи на Паскале и Delphi
- ↳ задачи на C и C++
- ↳ задачи на Basic и Visual Basic (VB)
- Прочее
- ↳ Жалобная книга
- ↳ Флейм.
Производительность C++ vs. Java vs. PHP vs. Python. Тест «в лоб»
/update/ Статья обновлена по результатам обсуждения. Поправлен код Python (около 40% ускорения), написан код на Perl и Ruby (но меня терзают смутные сомнения, что с ruby я что-то сделал неправитьно), поправлен код на Java (на моей машине корректнее тестировать int, а не long. к тому же int в Java эквивалентен long в C++).
Вопрос производительности (скорости работы) различных языков часто всплывает в комментариях, на форумах, часто необоснованные :). Встречаются статьи, в которых авторы приводят примеры, где выигрывает реализация на том или ином языке.
После прочтения очередной статьи мне захотелось самому разобраться «здесь и сейчас». Сначала захотелось сравнить Java и C++ (не верил я, что в вычислительных тестах ява может догнать и обогнать cpp). 10 минут и простой код на C++ и яве готов: простой цикл и математические операции. После написания теста подумал и перевёл их на php и python. Позже добавился код на perl и ruby.
Итак, пару слов о тесте:
Алгоритм синтетический, долгий цикл (двухуровневый) и в нём вычисление математического выражения. Таким образом оценивается вычислительная производительность самого языка (интерпретатора или скомпилированного кода), никаких привязок к качеству реализации тех или иных библиотек, никаких внешних сервисов, никаких системозависимых операций (диск, сеть, графика).
1) Мне нравится ява и я честно предполагал, что результаты будут лучше. Обновлено: long в 64-х битных системах работает значительно быстрее. При работе с int в 32-х битных системах Java значительно ускоряется (на моей машине быстрее, чем C++, видимо, JVM оптимизирует исполнение по умолчанию)
2) Я догадывался, что php будет медленней C++ и Java, но не думал, что он окажется быстрее Perl.
3) Предполагал, что Python будет сопоставим с PHP, но ошибся. Видимо, стандартная поставка PHP лучше оптимизирует исполнение кода.
4) Я совсем не знаком с Ruby, код взят из одного из комментариев. Причём использован код 1, так как у меня он работает быстрее чем код 2. Возможно, это также связано с тем, что у меня 32bit-система.
5) Я достаточно уважительно отношусь к различным языкам программирования, эта статья ни одним из углов не нацелена на разжигание холиваров. Каждый язык имеет свою нишу и своих поклонников.
Тесты запускались по 5 раз минимум, чтобы избежать случайных всплесков. Запускались из консоли и как «nice -n -9», то есть с максимальным на данный момент приоритетом в системе.
Чтобы не заставлять вас читать всю статью, сразу приведу краткие результаты.

Диаграмма (обновленная):
Старый вариант здесь
На диаграмме слолбец с Ruby частично прозрачен по причине того, что на моей машине скрипт Ruby исполнялся неприлично долго, в то время как в комментарии указано, что скрипт исполняется в 4 раза быстрее скрипта на Python — я в замешательстве.
Столбец с Python прозрачен, так как при включении psyco скрипт ускоряется более чем в 10 раз. Проверил на своей машине. Но это, с моей точки зрения, хак, не отражающий собственную производительность языка.
Столбец с PERL, как могут заметить старожилы, теперь идёт вровень с Python 2.6. Причиной этому послужила смена кода с C-подобного синтаксиса на использование range. Дополнительную производительность (около 12%) можно получить использовав директиву «use integer;», но это, по-моему, тоже хак.
В виде таблицы (тоже обновлённой):
| Язык | Java | Java -server | C++ | C++, -O2 | PHP | Python 2.6 | Python 3.1 | Perl 5.8 | Ruby 1.8 | Ruby 1.9(?) |
| Время исполнения, сек | 5,3 | 2,8 | 8,5 | 2,6 | 62 | 91 | 145 | 91 | 207 | ~30 |
| Производительность, % | 160 | 303 | 100 | 327 | 14 | 9 | 6 | 9 | 4.11 | 28 |
Время исполнения — на P4-1.8Ггц.
Производительность — относительно производительности базового кода на C++.
Добавлен столбец с запуском Java-кода с ключём «-server». После перехода с «long» на «int» (повторюсь, int в java такой же как и long в c++ на 32bit-arch) он начал давать прирост в производительности почти вдвое.
Столбец с Ruby 1.9 на моём железе не тестировался, результат перенесён через сравнение с производительностью Python’а на той же машине.
И, чтобы не быть голословным, тестовый код.
Java, Test01.java (int в Java то же что и long в C++):
package ru.dchekmarev.test.performance;
public class Test01 public static void main(String[] args) // long start = System.currentTimeMillis();
int r = 0;
for ( int i = 0; i < 10000; i++) for ( int j = 0; j < 10000; j++) r = (r + (i * j) % 100) % 47;
>
>
System.out.println( «answer: » + r);
// закомментировано, т.к. замеры делаются из командной строки
// System.out.println(«run time (millis): » + (System.currentTimeMillis() — start));
>
>
Python, Test01.py (вынос кода в функцию ускоряет работу кода почти вдвое, отдельная же инициализация range() на моей машине даёт порядка 5% производительности):
def test():
r = 0
for i in range(0, 10000):
for j in range(0, 10000):
r = (r + (i * j) % 100) % 47
test()
print ( «answer: » , r)
Perl, Test01.pl (обновлено, с range работает на 25% быстрее против c-подобного синтаксиса for):
$r = 0;
# старый вариант, C-подобный синтаксис
# for ($i = 0; $i < 10000; $i++) # for ($j = 0; $j < 10000; $j++) <
for my $i (0..9999) for my $j (0..9999) $r = ($r + ($i * $j) % 100) % 47;
>
>
print «answer: $r\n»;
Вот здесь приведён красивый пример на Perl, но, мне кажется, такой вариант уже слишком специфичен.
r = 0
for i in 0..10_000 do
for j in 0..10_000 do
r = ( r + ( i * j ) % 100) % 47
end
end
puts «answer: #»
Вот здесь в комментариях обсуждают решение на erlang.
Как видите, ничего сложного: два цикла и математическое выражение. Вычислительная задача в чистом виде.
мой оригинал — там старая версия статьи, а также информация об версиях использованного ПО и результаты тестов из консоли.
Ещё раз повторюсь: каждый язык имеет свою нишу, своих поклонников и свои задачи, с решением которых он справляется лучше других.
PS: а вообще, нет смысла загоняться и меряться чем бы то ни было, производительность самого языка важна для достаточно узкого круга задач, т.к. в общем случае, системы, библиотеки и прочая обвязка нынче несоизмеримо тяжелее самой вычислительной задачи.
Сколько операций в секунду выполняет c
GlowCheese → Introducing NeoTLE — the best Discord bot for Codeforces
PUSSY_LICKING_LOLI_69 → Need help finding JOI problems and editorials.
Sherif → Have you seen this data structure before?
IanDeHaan → Teams Going to the 2024 ICPC North America Championship
m aroonrk → AtCoder Regular Contest 173 Announcement
Wasif_Shahzad → I, finally, achieved something in CP
ooaa → Codeforces Round #922 (Div. 2) Разбор
Kolyanchick → . — День 19
Kolyanchick → . — День 20
maomao90 → CodeTON Round 7 (Div. 1 + Div. 2, Rated, Prizes!)
natalina → Codeforces Round #933 (Div. 3)
Zhtluo → All You Need is Randomly Guessing — How to Improve at Codeforces
harsh__h → Codeforces Round #931 (Div. 2)
GDCass1ni → Stop writting editorials for MIKE.
![]()
KADR → Codeforces Beta Round #97: разбор
dakshdixit183 → Ternary Search Implementation
Red0 → Way to Optimize GCC Ordered Set?
i_love_penguins → Codeforces Round #932 (Div. 2)
awoo → Разбор Educational Codeforces Round 162
nisritha35 → Invitation to Turing Cup 2K24 — organized by Turing Hut, VNRVJIET (Prizes worth Rs 75,000)
pajenegod → Slowdown bug affecting C++ (64 bit) on Codeforces
Alfar_ABI → pen
atcoder_official → AtCoder Beginner Contest 343 Announcement
Iceberg → Invitation to Winter Cup 6 Online Mirror (ICPC Rules, Teams Preferred)
visheshgautam.official → Nlogn code giving TLE,someone help this noob