Два файла cpp, которые вы предоставили, предназначены для операций с графическим процессором (CUDA и OpenCL). С вашего вопроса, я думаю, вы ищете не-графические операции, и это correct file..
OpenCV славится своей скоростью, и он исходит из множества оптимизаций, которые они выполняют в своих кодах. Я просто дам некоторые подсказки некоторым из них.
1. SIMD Оптимизация
Это один из основных источников оптимизации в OpenCV. Почти все арифметические операции оптимизированы SIMD. В вашем случае также оптимизация SIMD - лучший вариант (который OpenCV уже сделал). Это повышает производительность в несколько раз в зависимости от уровня вашей реализации. Все современные процессоры имеют встроенную поддержку SIMD (SSE, AVX и т. Д.).
Это немного сложнее по сравнению с нашим обычным C++. Вместо того, чтобы одновременно добавлять только два пикселя из обеих матриц, вы добавляете примерно 16 пикселей (зависит от типа данных) одновременно. Теоретически он обеспечивает 16-кратное ускорение. Here is a simple example, который я написал во время обучения SIMD-сборке (вы можете использовать Intrinsics, которые намного проще). Он не очень оптимизирован (написан только для его изучения), по-прежнему обеспечивает ускорение в 20 раз.
Аналогичным образом, для использования на платформе ARM коды оптимизируются NEON (в основном, это команда Nvidia для своих процессоров Tegra). Example
2. Многопоточность с помощью TBB
Другим важным является использование ТВВ, некоторые из уже упоминали в своем ответе, и вы должны собрать источник OpenCV с TBB для ее достижения. Как он упоминал, это может быть непростой задачей. Многие функции, такие как распознавание лиц и т. Д., Оптимизированы TBB в OpenCV.
OpenCV также выполняет некоторые другие методы, такие как цикл разворачивания. (Example) Это дает небольшое улучшение. Современные компиляторы уже очень хороши в этом.
Вы можете прочитать Agner Fog's optimization techniques manuals для получения более подробной информации об оптимизации кодов C++. Все эти детали актуальны.
Спасибо, есть способ, которым я могу использовать многопоточность, введя что-то вроде 'MULTI_THREAD_ENABLED' где-то в моем коде. Я много не знаю о многопоточности. Если нет такого простого использования, можете ли вы направить меня о том, с чего мне начать? – smttsp
многопоточность - задача непростая, для создания многопоточного приложения достаточно создать, вы можете посмотреть [там] (http://softpixel.com/~cwright/programming/threads/threads.c.php). – jambono