Чтение большого файла
От: SL  
Дата: 28.03.18 05:07
Оценка:
Здравствуйте коллеги, есть такой больше вопрос (может даже больше теоритический), решали следующею задачу есть очень большой растровый файл, десятки гигабайт, и нужно делать различные фильтрации (улучшение, выделения границ, определения объектов и пр), реализовано было в три потока один поток читает в в кольцевой буфер, другой поток занимается получением данных из этого буфера обработкой и складывания результатов в другой буфер, из которого третий поток записывал результаты в файл.
И во всем этот процессе самая медленная часть была это чтение данных с файла, читали порциями размера от 1МБ до 10Мб, используя обычные WinApi функции для работы с файлами, обработка данных была практически на порядок быстрее и обрабатывающий поток больше находился в ожидании новой порции данных. Возможно ли есть какие то способы поднять скорость чтения, может маппинг файла в память или какие то системные функции.
Re: Чтение большого файла
От: Stanislav V. Zudin Россия  
Дата: 28.03.18 06:43
Оценка:
Здравствуйте, SL, Вы писали:

SL>И во всем этот процессе самая медленная часть была это чтение данных с файла, читали порциями размера от 1МБ до 10Мб, используя обычные WinApi функции для работы с файлами, обработка данных была практически на порядок быстрее и обрабатывающий поток больше находился в ожидании новой порции данных. Возможно ли есть какие то способы поднять скорость чтения, может маппинг файла в память или какие то системные функции.


Есть такая проблема.
Чтение упирается в скорость обмена с диском. Скажем, для WD Black скорость передачи данных между диском и системой всего 227МБ/с. Быстрее прочитать невозможно, хоть как читай/мапь.
Но можно поставить SSD.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: Чтение большого файла
От: Maniacal Россия  
Дата: 02.04.18 08:16
Оценка:
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Есть такая проблема.

SVZ>Чтение упирается в скорость обмена с диском. Скажем, для WD Black скорость передачи данных между диском и системой всего 227МБ/с. Быстрее прочитать невозможно, хоть как читай/мапь.
SVZ>Но можно поставить SSD.

RAID спасёт отца русской демократии. А RAID из SSD это вообще песня.
Re: Чтение большого файла
От: kov_serg Россия  
Дата: 02.04.18 18:19
Оценка:
Здравствуйте, SL, Вы писали:

SL>Здравствуйте коллеги, есть такой больше вопрос (может даже больше теоритический), решали следующею задачу есть очень большой растровый файл, десятки гигабайт,..

Вы просто неправильно подошли к задаче. У вас неудачное представление данных. Не надо хранить картинку одним большим куском. Вам нужна многоуровневая картинка которая может храниться на множестве отдельных вычислительных узлов (например google maps) и там же обрабатываться. И выдавать необходимые участки по запросу.
Отредактировано 02.04.2018 18:25 kov_serg . Предыдущая версия . Еще …
Отредактировано 02.04.2018 18:24 kov_serg . Предыдущая версия .
Re: Чтение большого файла
От: goto Россия  
Дата: 04.04.18 14:39
Оценка:
Здравствуйте, SL, Вы писали:

SL>Здравствуйте коллеги, есть такой больше вопрос (может даже больше теоритический), решали следующею задачу есть очень большой растровый файл, десятки гигабайт, и нужно делать различные фильтрации (улучшение, выделения границ, определения объектов и пр), реализовано было в три потока один поток читает в в кольцевой буфер, другой поток занимается получением данных из этого буфера обработкой и складывания результатов в другой буфер, из которого третий поток записывал результаты в файл.

SL>И во всем этот процессе самая медленная часть была это чтение данных с файла, читали порциями размера от 1МБ до 10Мб, используя обычные WinApi функции для работы с файлами, обработка данных была практически на порядок быстрее и обрабатывающий поток больше находился в ожидании новой порции данных. Возможно ли есть какие то способы поднять скорость чтения, может маппинг файла в память или какие то системные функции.

Физические ограничения скорости не преодолеешь.

А на уровне попробовать:
— использовать сжатие (tiff, а если допустимо сжатие с потерями — jpeg). Если нужен прямой доступ к фрагментам-тайлам, разбить большой файл на тайлы, сжимать их;
— следить, чтобы файл на диске не был фрагментирован. Если файл создает собственный тул, порыться в win api на эту тему;
— формат. Позволяет ли он читать потоком, не гоняя головку диска лишний раз туда-сюда.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.