Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Допустим, есть файл, состоящий из 100 000 000 000 чисел int, каждое число записано с новой строчки. Надо последовательно его прочесть. Мне кажется, будет намного быстрее, если читать не число за числом, а сразу много чисел читать и загружать в локальный массив (вектор), проводя загрузку несколько раз. Как можно это сделать? Если есть ещё более быстрый способ -- ещё лучше. я знаю, что можно использовать [code cpp] std::fstream[code], но есть ли более быстрый способ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2015, 22:35 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
И ещё вопрос: почему файл с Код: plaintext 1. числами занимает ощутимо больше, чем 1 МБ, даже если числа внутри файла ничем не разделены? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2015, 22:39 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereДопустим, есть файл, состоящий из 100 000 000 000 чисел int, каждое число записано с новой строчки. Надо последовательно его прочесть. Мне кажется, будет намного быстрее, если читать не число за числом, а сразу много чисел читать и загружать в локальный массив (вектор), проводя загрузку несколько раз.Правильно, читаешь блок байтиков и расшифровываешь их из буфера в массив. log_hereя знаю, что можно использовать [code cpp] std::fstream[code], но есть ли более быстрый способ?Самостоятельно написать аналог, но убрать из него все проверки на ошибки чтения и расшифровки, а потом молиться что ошибки не случаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 01:57 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_here...Как можно это сделать?...есть ли более быстрый способ? тут очень важно знать - что хотите получить на выходе? Если например Вам нужно отсортировать их - то всё гораздо проще :) если речь вести чисто о чтении с диска, то надо читать как можно более элементарными средствами оси блоками размером соизмеримыми по времени обработке с временем чтения этих блоков. Это и будет оптимум (подсказка дня - почему индексные страницы у локальных баз данных единицы килобайт?). удачи вам (круглый) ЗЫ А что значит запись 1024 * 1024 / sizeof(int) ???? это типа 1 048 576 интов или 1 048 576 разделить на размерность инта ???? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 01:57 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
kolobok0тут очень важно знать - что хотите получить на выходе? Если например Вам нужно отсортировать их - то всё гораздо проще :) Например, хочу прочесть и пересчитать какие-то особенные элементы (скажем, бОльшие, чем 100). kolobok0ЗЫ А что значит запись 1024 * 1024 / sizeof(int) ???? 1 048 576 разделить на размерность инта ???? вторая версия -- правильная. Правильно, читаешь блок байтиков и расшифровываешь их из буфера в массив. Ну так я и прошу простейший способ (код) того, как это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 02:40 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_here...прочесть и пересчитать какие-то особенные элементы (скажем, бОльшие, чем 100). 1 048 576 разделить на размерность инта ...как это сделать. 1) эту задачу необходимо сразу делать по ходу чтения(на это как бы намекает большие величины для хранения всего).. 2) а теперь переведите свой вопрос на русский: ...почему файл с (1 048 576 разделить на размерность инта) числами занимает ощутимо больше, чем 1 МБ, даже если числа внутри файла ничем не разделены? в переводе вопроса, необходимо указать а) размерность инта б) тип числа в который пишется (1 048 576 разделить на размерность инта) 3) как это сделать = цикл. в цикле чтение фрагмента файла, вычисление того чего нужно. написать код, запостить сюда, Вам укажут на недочёты и в какую сторону двигаться дальше... ну либо в раздел работа и нанимаете того, кто это сделает за бабки. но лучше самому... удачи вам (круглый) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 02:58 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereЕсли есть ещё более быстрый способ -- ещё лучше. Есть: один поток читает блоками, второй обрабатывает. Т.к. самое узкое место тут чтение с диска, то оно должно быть непрерывным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 14:04 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima Tодин поток читает блоками, второй обрабатывает. Человек простое чтение и обработку написать не может, а ты ему предлагаешь потоки синхронизировать?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 14:06 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_here, лучшее - враг хорошего. Напиши макет который хоть как-то работает и опубликуй его в форуме. Далее по обстановке неравнодушные энтузиасты предложат тебе решение по оптимизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 14:39 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Но, как я указывал, здесь элементы заходят по одному, а не пачкой, что гораздо медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 16:15 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereздесь элементы заходят по одному, а не пачкой, что гораздо медленнее. Во-первых, увеличь ему буфер до 32-64к, как показано здесь: http://en.cppreference.com/w/cpp/io/basic_streambuf/pubsetbuf Во-вторых, избавься от набивания чисел в список, это медленная операция. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 16:26 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, buf1 работает быстрее buf2 всего лишь в 2 раза, а не в 10, как я ожидал. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 16:54 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Избавься от getline. Каков результат в мегабайтах в секунду? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 17:08 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, как избавляться от getline? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. время только увеличилось. про время: в файле input.txt 1 000 000 элементов, читается за 1.3 с и 2.6 с соответствунно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 17:25 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereкак избавляться от getline? Используй массив char вместо string и file.getline. Какую букву из "мегабайты в секунду" ты не понял?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 17:30 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
7.8 МБ / 1.3 c = 6 МБ/c и 7.8 МБ / 2.6 c = 3 МБ/c сообветственно. Dimitry SibiryakovИспользуй массив char вместо string и file.getline. Не мог бы расписать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 17:43 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereНе мог бы расписать? Читаешь блок X байт (символов). Дальше разбираешь посимвольно. Примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 0 замени на недопустимое значение, если невозможно - добавь флаг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 18:45 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Тесты, что я видел, показывают что потоки (iostreams) С++ работают довольно медленно. Соответственно, хотите скорость - читайте и парсите напрямую. Хотя почему так - хз, они не для скорости предназначены изначально. Кому надо, пусть ковыряет подробности. Я как-то смотрел генерированный ассемблер, он был ужасен =) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 23:38 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Написал так, работает быстрее. Только как понять, что достигнут конец файла, ведь так можно до бесконечности цикл с "i" проходить? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2015, 23:55 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Посмотри как тут пишут. http://www.cplusplus.com/reference/istream/istream/read/ Вообще по настоящему перформить с файлами надо без std. IMHO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 00:11 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereДопустим, есть файл, состоящий из 100 000 000 000 чисел int, каждое число записано с новой строчки. Надо последовательно его прочесть. Мне кажется, будет намного быстрее, если читать не число за числом, а сразу много чисел читать и загружать в локальный массив (вектор), проводя загрузку несколько раз. Как можно это сделать? Если есть ещё более быстрый способ -- ещё лучше. я знаю, что можно использовать [code cpp] std::fstream[code], но есть ли более быстрый способ? на самом деле все равно, как читать. лишь бы не посимвольно. если читать строку gets() или аналогом, то будет вполне хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 01:24 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereИ ещё вопрос: почему файл с Код: plaintext 1. числами занимает ощутимо больше, чем 1 МБ, даже если числа внутри файла ничем не разделены? во первых, они таки разделены, переводами строк (1 или2символов) во вторых, числа наверняка записаны как строки, поэтому надо считать не как size of int , а порядок числа, умножить на size of char. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 01:28 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
MasterZivна самом деле все равно, как читать. лишь бы не посимвольно. если читать строку gets() или аналогом, то будет вполне хорошо. лишь бы не посимвольно -- это лишь бы не как в buf3()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 01:34 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereНаписал так, работает быстрее. Только как понять, что достигнут конец файла, ведь так можно до бесконечности цикл с "i" проходить? Читай хэлп на std::istream::read() И проверка у тебя не очень корректная. Что будет если встретятся последовательности "12-345", "12x345" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 07:04 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereлишь бы не посимвольно -- это лишь бы не как в buf3()? Я не знаю, что такое buf3(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 15:18 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
простейший конечный автомат - никак не изобразить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2015, 15:50 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_here, А покажи сырой формат файла input_file.txt что в нем лежит - первые n-строк. и какие правила его формирования? если длина записей "плавает" у тебя buf3 не будет работать корректно. рекомендую кроме скорости чтения считать контрольную сумму данных из фала - чтобы заранее словить и логические ошибки алгоритма. также попробуй сделать buf4() с использованием boost::iostreams::mapped_file_source у тебя файл 90 гиг - усложнит чуток и придется прыгать по сегментам, но зато исключишь лишнюю копию данных в памяти - все упрется в диск и cpu. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 12:23 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
У меня какое-то адское déjà vu. Почему мы всё время рекомендуем новичкам использовать Memory Mapped Files даже там где задача - ярко выраженно требует поточной обработки. Коллеги. Поясните. Что за тренд такой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 12:29 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, Тут нет тренда. если автор ищет способ ускорить чтение файла - почему-бы не попробовать все способы? Также вы ведь не знаете все условия задачи. может для оптимального решения достаточно поправить несколько строк в том софте, который сохраняет пары int-значений в виде текста в 100 гиговый файл а потом заставляет другой процесс героически парсить это гавно. ну и если не сложно приведите свой пример поточной обработки. рассмотрим его плюсы и минусы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 14:51 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
PPAможет для оптимального решения достаточно поправить несколько строк в том софте, который сохраняет пары int-значений в виде текста в 100 гиговый файл а потом заставляет другой процесс героически парсить это гавно. memory mapped file на 100 гигов - здесь явно не при делах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 15:17 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
PPAесли автор ищет способ ускорить чтение файла - почему-бы не попробовать все способы? Судя по замерам не ту проблему он решает log_here7.8 МБ / 1.3 c = 6 МБ/c и 7.8 МБ / 2.6 c = 3 МБ/c это медленно даже если файл тянуть по 100 Мбитной сетке. Как-то тестил: чтение блоками по 64Кб оптимально, дальнейшее увеличение блока ускорения не дает. Мап тоже тестил, получилось одинаково по скорости. Проблема тут не в скорости чтения файла, а в скорости разбора. Тут парсер надо делать быстрый. Допустим скорость чтения 50 Мб/с (неоптимальное чтение среднего HDD), тогда получается что 10% времени чтение - 90% обработка. Ускорим мы чтение до 500 Мб/с: 1% чтение - 90% обработка. И толку от этих 9% ускорения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 15:31 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
PPAТакже вы ведь не знаете все условия задачи. может для оптимального решения достаточно поправить несколько строк в том софте, который сохраняет пары int-значений в виде текста в 100 гиговый файл а потом заставляет другой процесс героически парсить это гавно. Я согласен. Давайте заслушаем ВСЕ условия задачи. Кстати я-бы не начал перформить до тех пор пока не узнал бы целевую ОС. Судя по путям у афтора Linux - но хотелось-бы услышать подтверждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 15:35 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonУ меня какое-то адское déjà vu. Почему мы всё время рекомендуем новичкам использовать Memory Mapped Files даже там где задача - ярко выраженно требует поточной обработки. Коллеги. Поясните. Что за тренд такой? Да вот я тоже не знаю, тем более что Memory Mapped Files ничего не ускоряют... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 17:06 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
MasterZivДа вот я тоже не знаю, тем более что Memory Mapped Files ничего не ускоряют... они ж для разделения данных между процессами, а не для ускорения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 17:48 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
ИзопропилMasterZivДа вот я тоже не знаю, тем более что Memory Mapped Files ничего не ускоряют... они ж для разделения данных между процессами, а не для ускорения. Коллеги! Ну блин куда мы заехали? При чём тут разделение? Сабж не о том. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 18:09 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, сколько мегабайт в секунду является нормальным на твой взгляд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 18:14 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Скорость линейного чтения с диска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 18:15 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Опять двадцать пять. Вы о чём? Хотите что-бы я назвал скорость современного дискового интерфейса типа Sata-3 ? Я ее не помню дословно. Что такое нормально? Чтоб юзер был доволен текущим приложением. Вот это и есть критерий нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 18:18 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Пользователь никогда (или почти никогда) не бывает доволен быстродействием программы. А "скорость линейного чтения с диска" - нормальный и объективный критерий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 18:21 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovА "скорость линейного чтения с диска" - нормальный и объективный критерий. Лучше всё же не полагаться на линейность, а в качестве критерия использовать скорость копирования этого же файла в /dev/nul. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 18:29 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Изопропилmayton, сколько мегабайт в секунду является нормальным на твой взгляд? ~100 мб/с в среднем нормально. Замерить точнее просто: в фаре запускаешь копирование, в качестве места назначения пишешь nul. Будет показывать скорость чтения конкретного файла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 18:31 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima TБудет показывать скорость чтения конкретного файла. из кэша..... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 18:48 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Давайте вернёмся к нашей задаче. У нас 100 млрд целых чисел в текстовом файле и автору нужно это всё загрузить в коллекцию STD. Вот как-то в таком вот аспекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 19:29 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonВот как-то в таком вот аспекте. память прикупил топикстартер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 19:38 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima TБудет показывать скорость чтения конкретного файла. из кэша..... Это со второго раза и то в случае если кэш больше файла. Если не путаю речь о 90 Гб, тут рядовой комп точно не закэширует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 19:54 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
На самом деле - афтор чёртов партизан и не говорит что он дальше будет делать с числами а это мега важно для оптимизации. Далее. Линух или Виндовс. Хер ево знает но пускай будет линух. Вот шаблон который я скачал в стековервлоу http://stackoverflow.com/questions/28197649/reading-binary-file-in-c-in-chunks Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Его можно взять за основу. Есть блочное чтение и достаточно низкий уровень API. Можно еще поискать open/read/close. Далее. Работаем с байтами. Если автору нужны символы - то конвертит. Синхронная работа. Код: plaintext 1. 2. 3. Собственно здесь должен быть некий finite-state-machine который разбирает поток символов на целые числа. Код: plaintext 1. 2. 3. 4. 5. Поскольку работаем синхронно - то чуть блокируем I/O. Для асинхронной работы нужно увеличить буфер и работать с двумя буферами или с кольцом и в 2 процесса. Вот вобщем-то такое моё предложение. Буду рад улучшениям и пожеланиям. Не возражаю против магии Хогвартса mmaped-files но прошу аргументации. Если лучше - то почему. Что достигаем? Что теряем? Напомню что в смежном топике мы при тестинге на запись не учитывали отложенный flush и получали неверную картину фиксации записи. Напомню также что афтор упорно пытается прогрузить 100 млрд в коллекцию. Возможно мы отговорим его от такого странного хода но в любом случае memory надо использовать по хозяйски и не вносить в уравнение "свободная память" нечто что не укладывается в прогноз по minimal requrements. Напомню также что решение любой задачи не должно быть краш-тестом для других приложений которые тихо зависнут или умрут по I/O timeout. Нужно помнить о кооперативном разделении всех ресурсов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 20:49 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonНапомню также что афтор упорно пытается прогрузить 100 млрд в коллекцию. с этого начинать нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2015, 22:33 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, ОС - Linux. Предположим для простоты, что собираюсь сортировать (внешняя сотрировка). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 01:52 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
log_hereПредположим для простотыдавай реальную задачу, алгоритмы внешней сортировки в любом учебнике описаны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 06:51 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Создание тестового файла Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. у меня получилось 5398 Мб. Меряем фаром скорость чтения (копирование в nul) - 620 Мб/с Время 8,7 сек. это минимально возможное время. Цикл только чтение Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Время 9,1 сек. т.е. всего на 5% больше минимума. Замер на С++ (std::ifstream) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Время 9,5 сек. Чуть хуже, но не критично. 9% больше минимума. Добавляем примитивный парсер: все что не числа - то разделители Код: 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. Время 16,7 сек. т.е. уже почти половина времени пошла на разбор. А тут еще никакого сохранения нет. Как уже написал 18497959 - парсер надо оптимизировать, а не чтение ускорять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 07:46 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima T, отрицательные числа - не обрабатываешь, за переполнением - не следишь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 08:10 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
С указателями чуть быстрее Код: 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. Померил еще зависимость времени от размера буфера РазмерВремя4 Кб 15.18 Кб 14.816 Кб 14.932 Кб 14.864 Кб 15.5128 Кб 15.6256 Кб 15.8512 Кб 16.0 ХЗ почему так. Может из-за кэша проца. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 08:14 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima T, отрицательные числа - не обрабатываешь, за переполнением - не следишь Я же написал что парсер минимальный. Просто для демонстрации его влияния на общее время работы. ХЗ какие правила разбора у ТС. Может там еще строки учитывать надо, т.е. в одной строке несколько чисел и т.д. и т.п. Я к тому что чтение ускорять бесполезно - надо разбор ускорять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 08:19 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima TЯ же написал что парсер минимальный. Просто для демонстрации его влияния на общее время работы. усложнение серьёзно повлияет на время работы - демонстрация ни о чём ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 08:21 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Изопропилусложнение серьёзно повлияет на время работы Я разве обратное утверждаю? Мой примитивнейший парсер уже почти вдвое замедлил работу. Это несерьезное влияние? Изопропилдемонстрация ни о чём Скорость работы родных средств разбора ТС уже потестил, с их результатов топик и родился. Я о том что ТСу надо парсер свой писать и затачивать его под свою задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 09:06 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Добавил отрицательные и контроль переполнения Код: 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. Время 18.7 сек Не особо замедлилось. Всего на 25% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 09:33 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Задачка с собеседования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 09:35 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima T, грязненько парсер выглядит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 10:00 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
ИзопропилDima T, грязненько парсер выглядит Напиши чистенько если время есть. Накидал по-быстрому первое что в голову пришло. Работает вроде правильно, но особо не тестил. Что именно не понравилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 10:23 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima TИзопропилDima T, грязненько парсер выглядит Напиши чистенько если время есть. Накидал по-быстрому первое что в голову пришло. Работает вроде правильно, но особо не тестил. Что именно не понравилось? Дима! 9 секунд чистого чтения против 15 секунд чтения + парсера? Верно я понял твои цифры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 11:27 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, ты все правильно понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 11:30 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Тогда курим двух-процессный режим. Возможно там будут нюансы. Но неплохо было-бы сделать 1 процесс-поставщик который поставляет готовые chunks (чётный - нечётный), а второй за ним подбирает и парсит. Это для модели когда скорость чтения с диска достаточно равномерна. Если будут сильные рывки - тогда имеет смысл сделать буферы побольше двух. И завернуть их в бублик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 11:36 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonНо неплохо было-бы сделать 1 процесс-поставщик который поставляет готовые chunks (чётный - нечётный), а второй за ним подбирает и парсит так следует действовать и с единственным процессом - получили буфер(синхронно/асинхронно, прочитали из хэндла/получили из фильтра и т д) - передали буфер парсеру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 12:05 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Изопропил, согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 12:10 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Асинхронное всё API здесь? Или еще где-то? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 13:33 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonАсинхронное всё API здесь? Или еще где-то? Код: plaintext 1. Если мы говорим о линуксе то это user-space эмуляция POSIX AIO linux aio сдесь Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 17:44 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Ну тогда всё чики-пики. Только я щас метаюсь между форумом и багофиксом поставки. Может кто-то "запилит" AIO-реализацию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 17:47 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonНу тогда всё чики-пики. Только я щас метаюсь между форумом и багофиксом поставки. Может кто-то "запилит" AIO-реализацию? Нет никакого смысла использовать POSIX AIO эмуляцию. Делайте "true unix way" один процесс читает и выдает в stdout а другой берет из stdin и парсирует. Просто в реализации и оптимально. Можно и еще упростить - вместо первого процесса и bash сойдет. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 18:03 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
YesSql, некислую часть задач новичков в С++ можно свести к bash, grep, awk ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 18:12 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonМожет кто-то "запилит" AIO-реализацию? про AIO не в курсе. Хотел по-быстрому переделать под два потока на WinAPI: один читает, второй парсит. Переписал, но криво работает, 3 часа уже ошибку ищу. Вроде элементарная задача. Подозревать WinAPI в кривости последнее дело, явно сам где-то накосячил, не найду - выложу на общее обсуждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 18:13 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima TmaytonМожет кто-то "запилит" AIO-реализацию? про AIO не в курсе. Хотел по-быстрому переделать под два потока на WinAPI: один читает, второй парсит. Переписал, но криво работает, 3 часа уже ошибку ищу. Вроде элементарная задача. Подозревать WinAPI в кривости последнее дело, явно сам где-то накосячил, не найду - выложу на общее обсуждение. Давай в sourceforge. Я тоже покурю. Только вечером. Заодно сравним мультипоточность Win и мультипроцессность в Пингвине. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 18:19 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima TХотел по-быстрому переделать под два потока на WinAPI на WinAPI лучше будет completion port и один поток ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 18:42 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Начитался про lock-free алгоритмы, хотел на практике затестить, задача подходящая, но похоже что-то я недопонял. Подождем до завтра. Утром обычно все понятнее становится. Не взлетит - выложу на общее о(б)суждение :) Взлетит - тоже выложу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 18:42 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Изопропилна WinAPI лучше будет completion port и один поток Нет цели сделать на/под WinAPI, т.е. только под Win. Есть обратная цель - сделать универсально. Но де-факто есть VC2008 на XP. Там нет С++11 с трэдами и <atomic>. От XP отказаться пока не готов: VC2012 где есть С++11 - не ставится. Надо наверно уже переехать на W7, но жаба давит: там где живет 5 виртуалок на XP - еле влазит одна W7. SSD не резиновые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 18:57 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
А мне вот это интересно попробовать https://www.freebsd.org/ru/features.html Многопоточая модель M:N через pthreads делает возможным масштабируемое исполнение потоков на множестве CPU, ставя множество пользовательских потоков в соответствие малому количеству Kernel Schedulable Entities. С принятием модели Scheduler Activation такой подход к многопоточности может быть адаптирован к специфическим требованиям широкого набора приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 19:24 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, ИМХУ это следствие. Закон Амдала никто не отменил. Все остальное - это следствие. Надо причину обходить. lock-free алгоритмы зацепили тем что без явной потребности синхронизации потоков они не потребляют (точнее минимально потребляют) лишние ресурсы. Взять тут же задачу топика: если не требуется одновременно писать и читать с одного буфера, то зачем тратить ресурсы на синхронизацию? Синхронизация она же не бесплатная. Как-то я тут проводил тесты разных мутексов и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 20:14 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
В нашем случае Амдал сдулся до 9 секунд. Будем штурмовать рубеж? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 20:27 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonВ нашем случае Амдал сдулся до 9 секунд. Будем штурмовать рубеж? К 9 бы надо прийти для начала. Потом уже с Амдалом спорить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 20:36 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima TТам нет С++11 C без плюсов достаточно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2015, 21:50 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
парни, не бейти сильно, не читал обсуждение до конца, но делаю вброс :) наверное корутины самое то :) когда выполняется какое-либо условие, можно файл дальше не читать. если например, это произошло в начале файла, то сразу и готово! экономия почти 100% boost.org/libs/coroutine2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 11:54 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Какое еще условие бро? У нас нет ничего подобного. Надо прочитать 100 млрд текстовых строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 12:39 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonКакое еще условие бро? У нас нет ничего подобного. Надо прочитать 100 млрд текстовых строк. а потом что с ними делать? должно же быть хоть что-то нужное :) хотя если просто прочитать, то корутины только затормозят процесс - придется прыгать на контекст... но если строк 100 млрд, а прочитав 99 млрд можно остановиться, то корутины сильно укорят, наверное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 13:01 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Да не ко мне это вопрос. Но в общем случае, если афтор хочет гнать по ним аналитику то я в принципе не понимаю мотивации останавливаться. Или ты что-то другое хотел предложить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 13:33 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Доделал, вроде работает но не быстро :( Тестовый файл был 1 млрд. чисел. Файл 6 Гб. На i7 (4 ядра) RAM 32 Гб ТестВремя сек.Только чтение2.7Однопоточный разбор14.6Многопоточный12.9 На i5 (2 ядра + HT) RAM 4 Гб ТестВремя сек.Только чтение34.3Однопоточный разбор55.6Многопоточный69.8 Исходник (все три теста и генератор файла) Код: 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. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. С синхронизацией устал разбираться. Потоки догоняют друг-друга, один еще не успел в ожидание встать, второй уже все закончил и будит первого. Вчера был вариант с двумя эвентами. По одному на каждый поток. Так он и не заработал. В итоге сделал один эвент на двоих и пробуждение второго если он спит во время усыпления первого. Но и то какой-то изврат получился. Даже Sleep(1) пришлось воткнуть. Функции wait_one() и wake_up() Может кто идею подкинет как синхронизацию организовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 17:51 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima T, большое спасибо за бенчмарки. Сходу могу предположить что синхронизация происходит слишком часто. Возможно имеет смысл увеличить размер чанка (блока) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 17:58 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Размеры тут Код: plaintext 1. 2. BUF_COUNT кол-во буферов, BUF_SIZE размер одного Работает по кольцу: чтение заполняет по кругу пока на заполненный не наткнется, разбор - разбирает пока на пустой не наткнется. Забыл кол-во остановок (усыплений) добавить. Перетестил на i7 - оба потока по 4650 раз засыпали. Второй комп недоступен. Завтра только перемерю. ИМХУ надо эту корявость в синхронизации менять. Вопрос на что? С виду простая задачка, но весь мозг об нее сломал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 18:54 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
mayton, оптимальный размер блока будет когда время чтения блока = времени обработки этого блока (круглый) ЗЫ И это апсолютно не максимальный буффер!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2015, 23:40 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Перемерил на i5: со 128 буферами по 8 Кб чтение засыпало 313 раз разбор 6286 сделал 128 по 64 Кб Вот лог трех запусков Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Все три варианта сравнялись )) Если в кэш не влазит и читается с HDD - время чтения величина переменная. Замерять тут что-то бесполезно. PS Синхронизация один раз сглючила. Остались там какие-то косяки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 07:34 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Понял в чем у меня проблема с синхронизацией. Думал что раз разбудили поток - значит ему есть что делать, а случаи если нечего - считал ошибкой. В общем самый первый вариант был правильный. Просто не хватало проверки после пробуждения. Результаты теста с буфером 64 Кб для МТ 128 буферов На i7 (4 ядра) RAM 32 Гб ТестВремя сек.Только чтение1.24Однопоточный разбор14.7Многопоточный13.6 Уходов в спячку: чтение - 1150, разбор - 5 На i5 (2 ядра + HT) RAM 4 Гб ТестВремя сек.Только чтение55Однопоточный разбор55Многопоточный55 Уходов в спячку: чтение - 0, разбор - 650 Исходник Код: 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. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. PS ИМХУ бесполезно последовательное чтение параллелить: если данные в кэше - быстро прочитается, если с диска - ОС сама фоном упреждающее чтение делает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 11:56 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Dima TPS ИМХУ бесполезно последовательное чтение параллелить: если данные в кэше - быстро прочитается, если с диска - ОС сама фоном упреждающее чтение делает. Есть мысли (только касамемо Windows) 1) Втопку упреждающее. 2) Покурить Джефри Рихтера. На тему Windows I/O 3) Отказаться от FILE*,fopen,fread и перейти к Windows-specific функциям которые описаны в MSDN. 4) Перетестировать заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 12:21 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Дима sorry я по прежнему озабочен чортовой пендосской медициной. Горят сроки. И не успеваю даже модерировать плюсы. Так что читать твои сорцы буду только в СБ-ВС. I think... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 12:28 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
ИМХУ быстрее не станет. Нечего тут больше оптимизировать. Забыл померить для второго случая (файл в кэш не влазит): Фар копирует в nul за 54 сек, тесты работают 55. Т.е. с учетом погрешностей примерно одинаково. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 12:52 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
maytonDima TPS ИМХУ бесполезно последовательное чтение параллелить: если данные в кэше - быстро прочитается, если с диска - ОС сама фоном упреждающее чтение делает. Есть мысли (только касамемо Windows) 1) Втопку упреждающее. 2) Покурить Джефри Рихтера. На тему Windows I/O 3) Отказаться от FILE*,fopen,fread и перейти к Windows-specific функциям которые описаны в MSDN. 4) Перетестировать заново. Там флажки есть на опережающее чтение итп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 13:10 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Фух... заскочил на минутку. Челы качните http://www.hdtune.com/ и посмотрите sequential read/write speed Убежал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2015, 14:37 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
идеи по парсеру Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 08:36 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
m_Slaуменьшаем кол-во умножений в 3 раза, но усложняется сам парсер ИМХУ не взлетит. Умножение целых не такая уж и тяжелая операция. Можно просто убрать умножение. Заменил n*10 на n<<3 + n<<1. Затестил. Вообще ничего не изменилось. Время было 13.51 сек, стало 13.49. Это погрешности измерения. Возможно оптимизатор сам заменил и умножения изначально не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 09:01 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
m_Slaуменьшаем кол-во умножений в 3 раза, ага, индексация многомерного массива без умножений обходится PS на интел архитектуре умножение на 10 обычно без команды умножения делается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 09:04 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Изопропилага, индексация многомерного массива без умножений обходится В данном случае обойдется: *4 легко заменяется на <<2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 09:12 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
Изопропилm_Slaуменьшаем кол-во умножений в 3 раза, ага, индексация многомерного массива без умножений обходится PS на интел архитектуре умножение на 10 обычно без команды умножения делаетсятам два умножения на 16, делается сдвигами а на 10 как умножается, на lea ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 09:14 |
|
||
|
как быстрее всего прочесть большой файл с числами, каждое с новой строки?
|
|||
|---|---|---|---|
|
#18+
затестил, аппаратное умножение быстро работает Intel Pentium CPU G2020 Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2015, 10:01 |
|
||
|
|

start [/forum/topic.php?all=1&fid=57&tid=2018695]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
174ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
99ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 327ms |

| 0 / 0 |
