У меня есть устройство, которое отправляет данные изображения и видеокадр с использованием двух разных объемных каналов на USB.Ошибка кэширования буфера процессора драйвера устройства
Кэш процессора рабочей станции немного велик, чтобы вмещать около 100 видеокадров без каких-либо проблем, но не данных изображения.
Я использую тот же буфер для изображений и видеоданных, и этот буфер имеет около 50 блоков, а один блок - 1 МБ. Видеокадры поступают быстро, а затем кадр изображения.
Мой вопрос: есть ли проблема с повреждением памяти в следующем secnario? Кто-нибудь, у кого есть знания в кеше процессора, может мне помочь.
- Из-за небольших видеокадров страницы в буфере памяти, которые записывают видеокадры, находятся почти в кеше. Поскольку видеоданные поступают как поток, они никогда не смываются.
- , но при поступлении данных изображения будет использоваться большая область буфера памяти, затем страницы с видеопамятью будут сброшены. Но планируется очистить, но все еще не записать в физическую память.
- Теперь данные изображения были записаны в память, я использовал
volatile
. - И эти данные будут повреждены кэшем, если они были сброшены после записи данных изображения.
Возможно ли это? Итак, я применил volatile
к записи видеоданных, и эта проблема выглядит так, как будто она исчезла. Но мне нужно сделать отчет, возможно ли, чтобы этот вышеупомянутый сценарий произошел?
Не уверен, что я полностью понимаю ваш вопрос, но предположим, что вы смешиваете две совершенно несвязанные концепции: модификатор 'volatile' не имеет возможности манипулировать кэшами процессора. 'volatile' просто говорит, что данные могут быть изменены вне контроля ЦП.Если добавление 'volatile' исправляет что-то, это просто означает, что ваш компилятор достаточно умен, чтобы оптимизировать код, который казался ненужным/избыточным, если только данные обрабатывались только процессором. – mfro
Да, он приходит и заполняется извне, из другого потока, однако libusb, поток пользовательского режима. –
Позвольте мне сказать немного более явным, если ошибка потока продолжается, добавив 'volatile', это просто совпадение. Вы не можете полагаться на него, и он может снова сломаться, написав следующую строку кода. – MSalters