Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
Привет, переживаю когнитивный диссонанс в связи с тем, что потоковый ввод/вывод медленней printf. Иcточник: олимпиадные задачи это вообще как возможно? Я как-то думал, что разрешение перегрузки операторов << и >> при компилировании сделает наоборот потоковый io много быстрее чем printf... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 12:59 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
Для олимпиадных задач скорость ввода/вывода не критична, т.к. объемы незначительны. А так оба способа тормозные из-за тормозных парсеров. Самый быстрый способ читать блоками по 4-8 кб и парсить самодельным парсером заточенным под свою структуру. Не раз обсуждали, например тут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 13:24 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
зеленый админПривет, переживаю когнитивный диссонанс в связи с тем, что потоковый ввод/вывод медленней printf. Иcточник: олимпиадные задачи это вообще как возможно? Я как-то думал, что разрешение перегрузки операторов << и >> при компилировании сделает наоборот потоковый io много быстрее чем printf... Если ты про Визуал Студио, то в последней версии которую я видел, внутри операторов << и >> стояли printf и scanf. Если мне не изменяет память это была VS2003. Может они до сих пор там? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 15:39 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
YesSqlЕсли ты про Визуал Студио, то в последней версии которую я видел, внутри операторов << и >> стояли printf и scanf. Вы имеете в виду, что внутри с помощью sprintf и sscanf работали через промежуточный буфер, а уже буфер писался/читался из потока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2016, 17:44 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyYesSqlЕсли ты про Визуал Студио, то в последней версии которую я видел, внутри операторов << и >> стояли printf и scanf. Вы имеете в виду, что внутри с помощью sprintf и sscanf работали через промежуточный буфер, а уже буфер писался/читался из потока? Да, это я и имел ввиду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 10:15 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
Dima TА так оба способа тормозные из-за тормозных парсеров. Из-за какого извините парсера тормозным будет потоковый ввод-вывод? Мне Страуструп в книжке обещал парсинг на этапе компиляции за счет оверлоадинга операторов. Что отнюдь не хуже самодельного заточенного парсера YesSql Если ты про Визуал Студио... Нет, я в принципе про нормальный компилятор. Я лично пользуюсь gcc под cygwin. YesSql внутри операторов << и >> стояли printf и scanf. Не, я однозначно не про визуал студию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 13:05 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
зеленый админDima TА так оба способа тормозные из-за тормозных парсеров. Из-за какого извините парсера тормозным будет потоковый ввод-вывод? Мне Страуструп в книжке обещал парсинг на этапе компиляции за счет оверлоадинга операторов. Что отнюдь не хуже самодельного заточенного парсера ХЗ чего ты там вычитал и кто тебе чего наобещал. Я же дал ссылку, там был код, бери да тести. Кстати топик начался именно из-за тормозов потокового чтения. Пример на основе чтения и разбора большого файла с числами. Добавил потоковый разбор Код: 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. Результат в MS VC 2015Use file big.txt ONLY READ: Count 6911 blocks Time 0.031000 sec. Block Read 10000000 numbers CheckSum 47B5 Time 0.138000 sec. Stream Read 10000000 numbers CheckSum 47B5 Time 4.329000 sec. Потоковый способ (read_stream) в 30 раз медленнее самодельного парсера (read_ints). Можешь потестить другие компиляторы. Должно компилироваться любым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 13:46 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
[quot Dima T]зеленый админпропущено... Результат в MS VC 2015Use file big.txt ONLY READ: Count 6911 blocks Time 0.031000 sec. Block Read 10000000 numbers CheckSum 47B5 Time 0.138000 sec. Stream Read 10000000 numbers CheckSum 47B5 Time 4.329000 sec. Потоковый способ (read_stream) в 30 раз медленнее самодельного парсера (read_ints). Можешь потестить другие компиляторы. Должно компилироваться любым. Результат в g++ (GCC) 5.3.1 on Linux 4.4.3-300.fc23.x86_64Use file big.txt ONLY READ: Count 12797 blocks Time 0.012521 sec. Block Read 10000000 numbers CheckSum 619D29BC Time 0.202639 sec. Stream Read 10000000 numbers CheckSum 619D29BC Time 0.990503 sec. fscanf Read 10000000 numbers CheckSum 619D29BC Time 1.315379 sec. зеленый админпереживаю когнитивный диссонанс в связи с тем, что потоковый ввод/вывод медленней printf. На нормальном компиляторе все работает правильно. fscanf добавка к Диминому тесту Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 15:09 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
зеленый админПривет, переживаю когнитивный диссонанс в связи с тем, что потоковый ввод/вывод ntf... совет простой: не переживай! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2016, 23:55 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
YesSqlНа нормальном компиляторе все работает правильно. В винде такое же отношение результатов и для mingw ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 00:04 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
SiemarglYesSql На нормальной системе и с нормальным компилятором все работает правильно. В винде такое же отношение результатов и для mingw Я не знаком с MinGW MinGWMinGW provides a complete Open Source programming tool set which is suitable for the development of native MS-Windows applications, and which do not depend on any 3rd-party C-Runtime DLLs. ( It does depend on a number of DLLs provided by Microsoft themselves, as components of the operating system; most notable among these is MSVCRT.DLL, the Microsoft C runtime library. Additionally, threaded applications must ship with a freely distributable thread support DLL, provided as part of MinGW itself). Но подозреваю что он использует Микросовтовскую библиотеку. С теми-же scanf и printf в потоковых операторах. Может кто-либо прояснить? А может в виндовсе такой ввод-вывод. Интересно посмотреть как этот тестик будет выглядеть на виндовс сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 00:27 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
YesSql, Спс за тесты. По крайней мере scanf, конечно, должен быть не быстрее чем потоковый. 30% прироста внушительны. Dima T, тоже спс. Верю, что в vc можно добиться и все 30x ускорения. Но и результат 5x в gcc внушителен. Выходит, не заточено преобразование строки в число... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 14:45 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
cygwin x64 + gcc version 5.3.0 (GCC) g++ read_test.cpp -O3 $ ./a.exe Use file big.txt ONLY READ: Count 12796 blocks Time 0.155000 sec. Block Read 10000000 numbers CheckSum 52634B0F Time 1.155000 sec. Stream Read 10000000 numbers CheckSum 52634B0F Time 7.036000 sec. fscanf Read 10000000 numbers CheckSum 52634B0F Time 13.478000 sec. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 14:55 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
зеленый админрезультат 5x в gcc внушителен. Выходит, не заточено преобразование строки в число... Я думаю что в gcc может быть еще меньший разрыв. Как сказал один мудрец. "Сначала программа делается быстрой, а потом доводится до рабочего состояния". (c) ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 16:19 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
OoCc, хз. Но тут нужно разрабов библиотек переспрашивать или самому оверлоадить оператор >> на собственный класс а-ля MyInteger. Вот что разрабы предлагают: Код: 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. т.е. создают на стеке каждый раз объект да еще условный оператор на него гоняют зачем-то... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 22:57 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
зеленый админ, http://en.cppreference.com/w/cpp/io/basic_istream/sentry ага, дергают каждый раз поток и проверяют, готов ли к выводу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2016, 23:01 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
зеленый админOoCc, хз. Но тут нужно разрабов библиотек переспрашивать или самому оверлоадить оператор >> на собственный класс а-ля MyInteger. т.е. создают на стеке каждый раз объект да еще условный оператор на него гоняют зачем-то... Я не имел ввиду конкретный код. Это был филосовский пост. От "Proof of concept" до "Product" очень длинный путь. То что дает на первом этапе 30 кратное увеличение производительности на втором этапе может быть не столь быстрым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2016, 09:39 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
Dima T, У тебя в коде немножечко ошибка в блокрид. Если файл не заканчивается переводом строки, последнее число не читается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2016, 13:42 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
SiemarglDima T, У тебя в коде немножечко ошибка в блокрид. Если файл не заканчивается переводом строки, последнее число не читается. Как посмотреть. Писалось под вариант с переводом строки в конце. Отсутствие перевода строки можно рассматривать как нарушение формата хранения. Может там кроме перевода еще несколько последних разрядов обрезано, корректно ли читать такое? Зависит от задачи. Т.к. особенности не обсуждались - не стал дописывать. По-хорошему после выхода из цикла while(), надо добавить сохранение Код: plaintext 1. 2. 3. или наоборот сообщение об ошибке Код: plaintext 1. 2. 3. Скорость разбора не поменяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2016, 14:05 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
может сначала профилировщиком прогнать и замеры сделать - сколько вобще занимает ввод вывод.. обычно это разовые операции: прочитать файл, основная работа по модификации, записать файл.. я думаю, что даже если разогнать парсер в 30 раз, на конечной производительности это никак не скажется. особенно если это не с файла ввода, а человек что-нибудь пишет: он будет писать гораздо дольше любого парсера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 13:46 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
alexy_blackя думаю, что даже если разогнать парсер в 30 раз, на конечной производительности это никак не скажется. особенно если это не с файла ввода, а человек что-нибудь пишет: он будет писать гораздо дольше любого парсера. Ни разу не видел людей вбивающих инфу в консоль. Лабы студентов не рассматриваем. Но многократно встречаются задачи: взять инфу полученную извне (файлы) и что-то с ней поделать. Например 18740263 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2016, 19:29 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
Dima TНи разу не видел людей вбивающих инфу в консоль. гы, ну да, меня через форум не видно :) я постоянно сижу по ssh на хостинге, да ин на домашнем компе тоже в консоли.. Dima TНо многократно встречаются задачи: взять инфу полученную извне (файлы) и что-то с ней поделать.поделать что? например распарсить на регулярках.. думаю если увеличить скорость чтения файла в 30 раз, то это будет примерно такое же увеличение производительности как ускорение регулярок в 2 раза.. да и к тому же чтение с диска медленное в принцепе (если конечно не из файловой системы в оперативке). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 19:46 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
alexy_blackDima TНо многократно встречаются задачи: взять инфу полученную извне (файлы) и что-то с ней поделать.поделать что? сцылку зачем стер? То и поделать. Например скачать тот файлик с умершими паспортами, распарсить и подготовить к использованию, т.е. к проверке паспорта на валидность. alexy_blackдумаю если увеличить скорость чтения файла в 30 раз, то это будет примерно такое же увеличение производительности как ускорение регулярок в 2 раза.. Ничего не понял, давай код, затестим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 20:13 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
ссылку я прочитал.. просто не стоит же задача "прочитать паспортные данные и вырубится". например выделить людей по какому-то признаку. вот те же ругулярки - найти людей с фамилией подходящей под регулярку.. я о коде и говорил - тут без профилировщика не обойтись.. а если говрить о каком-то нереально большом кол-ве людей, то скорее нужна база данных - читаешь небольшой индекс а там все написано где читать о нужно человеке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2016, 23:28 |
|
||
|
printf vs потоковый ввод/вывод
|
|||
|---|---|---|---|
|
#18+
alexy_blackссылку я прочитал.. просто не стоит же задача "прочитать паспортные данные и вырубится". например выделить людей по какому-то признаку. вот те же ругулярки - найти людей с фамилией подходящей под регулярку.. Я же писал, прочитать данные и подготовить к использованию. Даже "найти людей с фамилией подходящей под регулярку.." можно гораздо быстрее если данные в которых искать заранее подготовлены к поиску. Например люди отсортированы по фамилии, а в регулярке задана первая буква Х. Остается проверить только всех на букву Х, что гораздо быстрее чем проверить вообще всех. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2016, 20:00 |
|
||
|
|

start [/forum/topic.php?fid=57&startmsg=39186838&tid=2017893]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 271ms |
| total: | 415ms |

| 0 / 0 |
