Я не эксперт в вопросах jpeg и сжатия, но поскольку ваша проблема в значительной степени ограничена вводом-выводом (при условии, что вы можете вращать без тяжелых вычислений, связанных с де / кодированием), вы, возможно, не сможете сильно ускорьте его на имеющемся у вас графическом процессоре. (Не) К счастью, ваша ссылка - довольно медленный процессор Atom.
Я предполагаю, что у Radeon есть отдельная основная память. Это означает, что данные должны передаваться через PCI-E, что является дополнительной задержкой по сравнению с выполнением ЦП, и, не скрываясь, вы можете быть уверены, что это узкое место. Это наиболее вероятная причина того, почему ваш код, использующий OpenCV на графическом процессоре, работает медленно (помимо того факта, что вы выполняете две операции с привязкой к памяти, транспонирование и переворачивание вместо одной).
Главное - максимально скрыть время передачи PCI-E с помощью вычислений, используя множественную буферизацию < / а>. Перекрытие передач как к графическому процессору, так и от него с вычислением с использованием полнодуплексной возможности PCI-E будет работать только в том случае, если рассматриваемая карта имеет механизмы двойного DMA, такие как high-end Radeon или Карты NVIDIA Quadro / Tesla, в чем я очень сомневаюсь.
Если время вычисления вашего графического процессора (время, необходимое графическому процессору для выполнения вращения) меньше, чем время, необходимое для передачи, вы не сможете полностью перекрыть друг друга. HD 4530 имеет довольно медленный интерфейс памяти с пиковым значением только 12,8 Гбит / с, а ядро вращения должно быть достаточно ограниченным по памяти. Тем не менее, я могу только предполагать, но я бы сказал, что если вы достигнете пиковой скорости передачи PCI-E ~ 1,5 Гбит / с (4x PCI-E AFAIK), вычислительное ядро будет в несколько раз быстрее, чем передача, и вы ' будет очень мало перекрываться. Вы можете просто синхронизировать части по отдельности, не требуя сложного асинхронного кода, и вы можете оценить, насколько быстро вы можете получить вещи с оптимальным перекрытием.
Одна вещь, которую вы, возможно, захотите рассмотреть, - это получить оборудование, которое не демонстрирует PCI-E как узкое место, например:
- Система на базе AMD APU. На этих платформах вы сможете блокировать страницы памяти и использовать ее непосредственно с графического процессора;
- встроенные графические процессоры, которые разделяют основную память с хостом;
- быстрый процессор с низким энергопотреблением, такой как мобильный Intel Ivy Bridge, например i5-3427U, который потребляет почти так же мало, как Atom D525, но имеет поддержку AVX и должно быть в несколько раз быстрее.
person
pszilard
schedule
10.07.2012