Я собирался написать это как комментарий, но это стало слишком длинным.Но по сути ...
Я согласен с TED и Джонатаном Вудом:
В общем, я нашел самый быстрый способ справиться с файлами - попытаться прочитать весь текст целиком.что-то в память одним большим вводом-выводом, и с этого момента справляется с нехваткой памяти. Это часто делает код более простым.
-TED
Это зависит.Вы должны попытаться оценить объем памяти на большинстве компьютеров, на которых будет работать ваше программное обеспечение.Это также зависит от того, насколько критичен для вашего кода скорость.
Очевидно, что один подход быстрее, а другой использует гораздо больше памяти.В целом, вы, вероятно, можете загружать его в память на большинстве современных компьютеров, и это проще.Но вы должны взвесить все за и против в вашем конкретном случае
- Джонатан Вуд
Имейте в виду, что 5000 * 5000 пикселей с 32-битными цветами занимают примерно 100 мегабайт памяти (+ возможно, некоторые накладные расходы, и все, что нужно вашему программному обеспечению)Я бы сказал (по-видимому, значение Стетсона-Харрисона), что большинство современных настольных компьютеров имеют по крайней мере 1 или 2 гигабайта памяти (мой был куплен в 2008 году и имеет 4), так что на самом деле это не так уж много, даже если все это загруженосразу у ноутбуков может быть меньше памяти.
Аспект CUDA также интересен (я почти ничего не знаю о CUDA), данные загружаются в память GPU?Сколько памяти обычно имеют графические процессоры с поддержкой CUDA?Может ли шина PCI-e стать узким местом (вероятно, не ..?)?Узнайте, сколько общей памяти имеют CUDA настольные и портативные графические процессоры с поддержкой CUDA.
Неким компромиссом может быть попытка буферизовать чтение, создать другой поток "«упреждающее чтение» данных из файла, в то время как другие обрабатывают (и освобождают память) данные.