То, что вы пытаетесь сделать, не имеет смысла, TensorFlow не поддерживает графические процессоры Intel, только графические процессоры NVIDIA CUDA, ваш графический процессор Intel нельзя использовать в TensorFlow, поэтому он всегда будет видеть только один графический процессор.
Для использования нескольких графических процессоров вам необходимо как минимум 2 графических процессора NVIDIA CUDA.
Действительно ли это необходимо для fsync()
после каждого файла? У Вас может быть лучшая удача, позволяя ОС решить, когда хорошее время должно выписать все ставившие в очередь изображения к SD-карте (амортизирующий стоимость запуска управления файловой системой SD-карты по многим изображениям, вместо того, чтобы подвергнуться ей для каждого изображения).
Можно ли предоставить еще некоторую подробную информацию о платформе? Замедлитесь времена ввода-вывода могут иметь отношение к другим процессам в системе, медленном контроллере ввода-вывода, и т.д.
Вы могли бы также рассмотреть использование файловой системы больше подходящее, как флэш-память работает. FAT32 более распространен, чем extN
, но файловая система, конкретно созданная для SD, может быть в порядке также. JFFS является хорошим примером этого. Вы, вероятно, получите лучшую производительность с файловой системой, разработанной для флэш-памяти (в противоположность вращению магнитных носителей), и Вы получаете лучшее выравнивание износа (и таким образом время жизни/надежность устройства) свойства также.
AFAIK некоторые диски флэш-памяти имеют действительно плохую производительность записи (особенно дешевые бренды). Таким образом, если Вы измеряете скорость записи своего приложения (включая время, требуемое для fsync), что Вы получаете? Это могло бы легко быть в порядке очень немногих мегабайт в секунду - просто, потому что аппаратные средства не добиваются большего успеха.
Кроме того, по-видимому, запись может быть намного медленнее, если Вы пишете много маленьких блоков вместо одного большого блока (диск флэш-памяти мог бы только получить приблизительно 10 записей, в секунду сделанных в тяжелых случаях). Это - вероятно, что-то, что может быть смягчено буфером ядра, таким образом использование fsync часто могло бы замедлять запись...
Btw. Вы измеряли производительность записи на FAT32? Я предположил бы, что это о том же, но в противном случае возможно, существует некоторая оптимизация, все еще доступная?
Мог бы также рассмотреть SD-карту, это NOR или NAND? Эта страница показывает порядок величины между SD-картами (2M/s по сравнению с 20M/s).
http://www.robgalbraith.com/bins/camera_multi_page.asp?cid=6007-9597
Я думаю, что ZFS оптимизирован для флэш-памяти.
Может быть это поможет - Сравнивающий Файловых систем:
... Я был вполне удивлен, как медленный ext3 был в целом, столько же дистрибутивов использует эту файловую систему сколько их файловая система по умолчанию...
И "пакетная обработка ext3 fsync":
... Этот патч измеряет время, которое требуется для передачи транзакции диску и снов на основе скорости базового диска.
Я не очень хорошо осведомлен в этой области, но признаки, которые Вы описываете, очень много походят на заполнение буфера. Можно заполнять буфер в устройстве записи файла или в устройстве ввода-вывода, связывающемся с самой SD-картой. Затем необходимо ожидать, пока это на самом деле не пишет данные в карту (таким образом освобождающий буфер), прежде чем можно будет записать больше. SD-карты не являются особенно быстрыми устройствами записи. Если можно найти способ проверить, пишутся ли данные на самом деле в карту во время этих пауз, которые проверили бы мою теорию. Некоторые картридеры имеют светодиод, который мигает, когда к данным получают доступ - который, вероятно, был бы хорошим индикатором.
Просто догадка... берет его с небольшим количеством соли :)
Попробуйте открыть файл с помощью o_Direct
и выполните кэширование на уровне приложений.
Мы выполнили аналогичную проблему, когда мы реализовали функцию PVR (персональную запись видео) в Box STB. Трюк o_direct
o_direct
трюк удовлетворен нашим потребностям Finaly. (*)
без o_direct
. Данные write ()
сначала будут кэшироваться в буфере ядра, а затем промыты в носитель при вызове fsync
или когда буфер кэша ядра заполнен. (**) Отказ
С o_direct
. Oy ядро будет делать DMA непосредственно к физической памяти, указанной в буфере пользователей, прошедший в качестве параметра на Написать
SESCalls. Таким образом, не будет пропускной способности CPU и MEM и MEM, потраченную в копии между памятью пользователей и кэшем ядра, и не будет времени процессора, проведенного в ядре в управлении кэшем (например, поиск кэша, замки для Page etc ..). (скопировано из здесь )
Не уверены, что он также может решить вашу проблему, но вы можете попробовать.
* Несмотря на критизу Линуса o_direct
, он решил наши проблемы.
** Предположим, вы не открываете файл с O_DSYNC
или O_Sync