Здравствуйте коллеги, есть такой больше вопрос (может даже больше теоритический), решали следующею задачу есть очень большой растровый файл, десятки гигабайт, и нужно делать различные фильтрации (улучшение, выделения границ, определения объектов и пр), реализовано было в три потока один поток читает в в кольцевой буфер, другой поток занимается получением данных из этого буфера обработкой и складывания результатов в другой буфер, из которого третий поток записывал результаты в файл.
И во всем этот процессе самая медленная часть была это чтение данных с файла, читали порциями размера от 1МБ до 10Мб, используя обычные WinApi функции для работы с файлами, обработка данных была практически на порядок быстрее и обрабатывающий поток больше находился в ожидании новой порции данных. Возможно ли есть какие то способы поднять скорость чтения, может маппинг файла в память или какие то системные функции.
Здравствуйте, SL, Вы писали:
SL>И во всем этот процессе самая медленная часть была это чтение данных с файла, читали порциями размера от 1МБ до 10Мб, используя обычные WinApi функции для работы с файлами, обработка данных была практически на порядок быстрее и обрабатывающий поток больше находился в ожидании новой порции данных. Возможно ли есть какие то способы поднять скорость чтения, может маппинг файла в память или какие то системные функции.
Есть такая проблема.
Чтение упирается в скорость обмена с диском. Скажем, для WD Black скорость передачи данных между диском и системой всего 227МБ/с. Быстрее прочитать невозможно, хоть как читай/мапь.
Но можно поставить SSD.
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Есть такая проблема. SVZ>Чтение упирается в скорость обмена с диском. Скажем, для WD Black скорость передачи данных между диском и системой всего 227МБ/с. Быстрее прочитать невозможно, хоть как читай/мапь. SVZ>Но можно поставить SSD.
RAID спасёт отца русской демократии. А RAID из SSD это вообще песня.
Здравствуйте, SL, Вы писали:
SL>Здравствуйте коллеги, есть такой больше вопрос (может даже больше теоритический), решали следующею задачу есть очень большой растровый файл, десятки гигабайт,..
Вы просто неправильно подошли к задаче. У вас неудачное представление данных. Не надо хранить картинку одним большим куском. Вам нужна многоуровневая картинка которая может храниться на множестве отдельных вычислительных узлов (например google maps) и там же обрабатываться. И выдавать необходимые участки по запросу.
Здравствуйте, SL, Вы писали:
SL>Здравствуйте коллеги, есть такой больше вопрос (может даже больше теоритический), решали следующею задачу есть очень большой растровый файл, десятки гигабайт, и нужно делать различные фильтрации (улучшение, выделения границ, определения объектов и пр), реализовано было в три потока один поток читает в в кольцевой буфер, другой поток занимается получением данных из этого буфера обработкой и складывания результатов в другой буфер, из которого третий поток записывал результаты в файл. SL>И во всем этот процессе самая медленная часть была это чтение данных с файла, читали порциями размера от 1МБ до 10Мб, используя обычные WinApi функции для работы с файлами, обработка данных была практически на порядок быстрее и обрабатывающий поток больше находился в ожидании новой порции данных. Возможно ли есть какие то способы поднять скорость чтения, может маппинг файла в память или какие то системные функции.
Физические ограничения скорости не преодолеешь.
А на уровне попробовать:
— использовать сжатие (tiff, а если допустимо сжатие с потерями — jpeg). Если нужен прямой доступ к фрагментам-тайлам, разбить большой файл на тайлы, сжимать их;
— следить, чтобы файл на диске не был фрагментирован. Если файл создает собственный тул, порыться в win api на эту тему;
— формат. Позволяет ли он читать потоком, не гоняя головку диска лишний раз туда-сюда.