|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Здарова други! Илья. Белая Сова. Дима-Т. Саша-Меркурий. Лётчик Петрав. Изопропил. Petalvik. Softwarer. Володя двухтысячный. Сидоров. Анонимосы. И Базист. И все остальные мемберы этого форума и модеры. В продолжнение топика https://www.sql.ru/forum/1172924-1/o-primenimost-yazykov Я долго искал задачку которая меряет достаточно шИроко CPU и при этом мало задействует memory+I/O. И нашёл. Оригинал здесь http://tproger.ru/translations/business-card-raytracer/ Card-raytraсer - это довольно компактное (2k) приложение на С++ которое моделирует т.н. алгоритм обратной трассировки луча . Это демка. Или tech-demo. Ее полезным результатом является графичский файл который демонстрирует возможности машинной графики. Время работы - небольшое. Около 1 минуты. У меня имеется отфильтрованная и отформатированная до читабельности версия сорца на С++ Чуть позже я ее опубликую. Задание. 1. Портировать приложение Card-raytraсer с С++ на Java/C#/Python 2. Замерять производительность на одной конфигурации железа Нужно получить что-то вроде таблички. Card-raytraсer benchmarks ConfigurationElapsed time(+STDOUT)Elapsed time(no out)MinGW/MS/C++Oracle/Java/1.7/1.8MS.Net/C#Python/psyco 3. Сделать выводы. Заметки и мысли: При портировании Card-raytraсer можно в принципе менять код для удобства воспроизведения в конкретном ЯП. Можно менять типы float -> double, юзать другие структуры данных и дженерики с шаблонами. Единственное ограничение - алгоритм а в особенности его сложность должны остаться без изменения. Тоесть количество рекурсивных отражений луча от шаров должны быть сохранены. Для полноты сравнения нужно сравнить исходные данные. Конфигурацию сцены, количество предметов и разрешение картинки (по дефолту 512х512) желательно также сохранить. Можно поиграть с ключами оптимизации сред и компилляторов для достижения нужного эффекта. Для более точного замера времени можно сделать 3-5 запусков одного и того же entry-point с усреднением. Если вывод на STDOUT станет узким местом то его можно закомментарить и сделать замер времени работы алгоритма без вывода. Для этого я предусмотрел 3-ю колонку таблицы. Количество ЯП и конфигураций вобщем-то не ограничивается. Хотя в топике выше мы обсуждали С++/Java в основном. С уважением ваш покорный слуга mayton. P.S. Следующие 2 бенчмарка должны охватывать Memory + I/O. P.P.S. Все исходники для замеров на githab P.P.P.S. Результаты замера от 04.07.18 21541279 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 22:09 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
mayton, я бы взялся на Python, а может даже и на Common моём любимом Lisp... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 22:16 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Ну ОК. Добавим позицию. Щас приаттачу сорц. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 22:29 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
mayton, когда напишем -- тогда и добавим. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 22:31 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
mayton, Ну и на этом тесте ты получишь распределение как на Scimarke. Разве что ручками приспособить векторные операторы типа SSE или GPU. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 22:35 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Слегка улучшенный сорц. Отформатировал. Переименовал имена сущностей в более читабельные. Секции инициализации переменных переписал без запятой. Не видя особого смысла в поддержке float - переписал на другой тип. Развернул typedefs. Добавил некоторые макросы. Матрицу "шаров" просто переписал в hex-константах чтоб было наглядно. Поскольку юнит теста не было - просто повторно запустил и сравнил картинку. Вроде ничего не поломал. Вобщем готово. Go! Go! Код: plaintext 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. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 23:00 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Зимарглmayton, Ну и на этом тесте ты получишь распределение как на Scimarke. Разве что ручками приспособить векторные операторы типа SSE или GPU. Думаю что обсуждать GPU нет особого смысла. Мы ведь сравнивали языки-платформеры и обсуждали memory-management. Как к этой теме прикрутить обсуждение GPU - я не знаю. Да и very-specific всё это. Мало кто поддержит IMHO. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 23:04 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
maytonЗимарглmayton, Ну и на этом тесте ты получишь распределение как на Scimarke. Разве что ручками приспособить векторные операторы типа SSE или GPU. Думаю что обсуждать GPU нет особого смысла. Мы ведь сравнивали языки-платформеры и обсуждали memory-management. Как к этой теме прикрутить обсуждение GPU - я не знаю. Да и very-specific всё это. Мало кто поддержит IMHO. мне кажется что данный кейс будет тестировать скорость общения процессора со своим кешем на любом языке программирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 23:36 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Наука говорит что отсутствие результата - тоже есть результат. Впереди еще 2 бенчмарка. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 23:41 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Не совсем потял чего там считается, точнее ничего не понял :) Код понятен, остальное мелочи. На С уже написано 18105911 , пусть будет эталоном. Только я бы подправил немного: 1. Добавить какой-нибудь расчет контрольной суммы для проверки результата. А то какая-то куча символов непонятная лезет. 2. функцию Random() заменить на генератор который во всех ЯП даст одинаковый результат. 3. Добавить замер времени. Сделаю попозже. ИМХУ задачка для алгоритмических ЯП. Попробую на фоксе переписать, хотя подобные считалки не самая сильная его сторона. C# чуть-чуть освоил, тоже попробую, заодно потренируюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 09:37 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Dima T1. Добавить какой-нибудь расчет контрольной суммы для проверки результата. А то какая-то куча символов непонятная лезет. это PPM, скорми ppm2tiff и любуйся контрольная сумма не не поможет ибо из за возможных небольших ошибок округления побитового совпадения не будет. алгоритм сравнения картинок - это будет следующий этап ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 09:59 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Изопропилэто PPM, скорми ppm2tiff и любуйся Скачал отсюда http://gnuwin32.sourceforge.net/packages/tiff.htm (Binaries и Dependencies в зипе) сохраняю вывод твоего кода в 1.ppm Код: sql 1.
1.ppmP6 512 512 255 ▼∟'▼∟'▼∟... затем Код: sql 1.
выдает "1.ppm: Not a PPM file." Попробовал код оригинала http://tproger.ru/translations/business-card-raytracer/ тоже самое. похоже какой-то неправильный ppm2tiff.exe или я не так запускаю Хотел глянуть как изнутри правильный PPM должен выглядеть, но tiff2ppm нет в том пакете. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 10:55 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Dima T1. Добавить какой-нибудь расчет контрольной суммы для проверки результата. А то какая-то куча символов непонятная лезет. Это картинка. Ее можно открыть в IrfanView. Проверять контрольные суммы не стоит. Мы имеем дело с численным методом который использует плавающую арифметику точность которой зависит от имплементации в конкретных средах и ЯП. Я думал о модульном тесте. Но если его суть заключается в нечётком сравнении картинок то я-бы пока повременил. Думаю для нас достаточно будет визуальной оценки результата. Открыть 2 браузера и сравнить 2 картинки глазами. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 10:56 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Dima Tвыдает "1.ppm: Not a PPM file." Возможно. Старина Пол Гекберт использовал какой-то устаревший формат PPM с двоичным кодированием RGB троек. Если переписать на текст где белый цвет выглядит как FFFFFF то думаю будет всё ОК. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 10:59 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
maytonDima Tвыдает "1.ppm: Not a PPM file." Возможно. Старина Пол Гекберт использовал какой-то устаревший формат PPM с двоичным кодированием RGB троек. Если переписать на текст где белый цвет выглядит как FFFFFF то думаю будет всё ОК. У меня открылся без вопросов... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 11:10 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
mayton, Другое прикольное направление развития этого дела было бы задание других начальных данных для того, чтобы шарики на картинке писали какие-то другие буквы, например, ZIV... -- т.е. твои инициалы. И тогда можно было бы изготавливать персональные визитки таким образом. Можно делать бизнес... такой странный гиковатый бизнес. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 11:13 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Сюда фикс накатить. Правда я-бы предложил разобраться как матрицу растянуть. И камеру чуть назад отодвинуть. Чтобы значить хотя-бы слово "mayton" влезло. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 11:22 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
maytonЭто картинка. Ее можно открыть в IrfanView. Поставил IrfanView - открывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 12:09 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Поднял репозитарий на сорсфорже. Пока пустой. Туда буду заливать эксперименты. https://sourceforge.net/p/card-raytracer-bench/code/HEAD/tree/ Прошу прощения что не Git. С последним я работаю недавно и еще не могу оперативно решать вопросы. Есть также некоторые идейные завтыки которые меня ставят пока в состояние ступора (merge vs rebase к примеру). Поэтому пока SVN Вопрос ко всем. Какова должна быть структура? Как удобнее. Вариант 1. Создать в транке директории /trunk/cpp, /trunk/python, /branches/java ... etc. Это простой и плоский вариант. Вариант 2 . Работать в транке на сях. В бранчах иметь /branches/pyhon, /branches/java Вариант 3 . Создать отдельный репозитарий для каждой конфигурации. С последним я думаю это будет не быстро т.к. сорсфорж ограничил меня в количестве создаваемых проектов в сутки. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 12:24 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Делай по 1 варианту. Кода немного будет, не запутаемся. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 12:43 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Наверное нужно еще написать на шелле некий лаунчер который последовательно гоняет все тесты по всем конфигурациям и формирует отчётик табличкой. Это необходимо в силу того что у всех - разное железо и придётся как-то сравнивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 12:48 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Можно просто вывести, результат. Думаю 3-5 раз запустить и среднее записать сильно не напряжет. Предлагаю дописать в С версию в конец Код: plaintext 1. 2. 3. 4.
и в начало Код: plaintext 1.
Или может сразу прописать вывод в конкретный файл в текущей папке? Например test-c.ppm, test-java.ppm и т.д. Какой смысл перенаправлять в разные если каждый раз одно и тоже пишется. Позапускал с выводом в файл >1.ppm ПроцВремяi7-3770K 3.5 ГГц14.05 секi5-660 3.33 ГГц28.67 сек ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 13:12 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
Dima T, залил в репку . https://sourceforge.net/p/card-raytracer-bench/code/HEAD/tree/trunk/cpp/card-raytracer.cpp Напомни свой ник. Добавлю. Коллеги. Кому надо - дам доступ на write. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 14:05 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
maytonDima Tвыдает "1.ppm: Not a PPM file." Возможно. Старина Пол Гекберт использовал какой-то устаревший формат PPM с двоичным кодированием RGB троек. Если переписать на текст где белый цвет выглядит как FFFFFF то думаю будет всё ОК. Старина честно использовал пробел как whitespace :) замена на \n решает проблему. а P6 - никак не устаревший ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 14:17 |
|
Тяпничный бенчмарк CPU (part-1)
|
|||
---|---|---|---|
#18+
неплохой тест для качества генерируемого кода компиляторами. Компайлер Версия Время Intel 15.0.3 08.816 clang 3.4.2 16.433 GCC 4.8.3 16.516 cat /proc/cpuinfo | grep model model name : Intel(R) Xeon(R) CPU E5-2643 0 @ 3.30GHz ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2015, 14:20 |
|
|
start [/forum/topic.php?fid=16&startmsg=39042872&tid=1339613]: |
0ms |
get settings: |
14ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
433ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 551ms |
0 / 0 |