opencv - 如何在 Visual C++ 中启用 SSE4.2 指令集?

标签 opencv visual-c++ hammingweight sse4

我在 Visual C++ 2010 中使用 OpenCV 中的 BRIEF 描述符来匹配两个图像中的点。

the paper关于 BRIEF-descriptor 的内容是可以加快速度:

"The BRIEF descriptor uses hamming distance, which can be done extremely fast on modern CPUs that often provide a specific instruction to perform a XOR or bit count operation, as is the case in the latest SSE instruction set."

启用 SSE4.2 后应该会加速。我的问题只是如何在 Visual C++ 中执行此操作?

另一种方法是选择另一个支持 SSE4 的编译器。比如英特尔的ICC。这真的有必要吗?

最佳答案

不幸的是,它不是那样工作的。

C/C++ 编译器可能会被告知在项目-> C/C++ -> 代码生成-> 启用增强指令集中使用特定的指令集。但它几乎什么都不做,在你的情况下,绝对没有。这是因为某些 CPU 指令无法从 C 语句轻松访问。一些编译器(如 Intel 的)在这方面比其他编译器做得更好,但是对于您想要实现的目标,没有一个编译器足够聪明。

你要做的就是找到具体的算法,学习SSE指令并用这些指令手动重写算法。你可以用纯汇编写,或者使用 intrinsic函数,可以从 C/C++ 调用,并在编译时发出 SSE 指令。

关于opencv - 如何在 Visual C++ 中启用 SSE4.2 指令集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10188252/

相关文章:

iphone - 如何将黑色变为白色

c++ - 我的机器上 OpenCV 算法的 GPU 版本比 CPU 版本慢?

python - OpenCV 视频捕获在 Anaconda 中失败

c - __builtin_popcountll 和_mm_popcnt_u64 之间有什么区别?

python - cv2.imshow() 函数如何在 BGR 模型中工作?

c++ - InterlockedCompareExchange128 用法

c++ - vc++运行时错误

c++ - 关于c++类中typedef函数的疑问

assembly - 计算设置的位数

sqlite - 在 sqlite 中计算汉明距离和权重