我复制从N个字节pSrc来pDest.这可以在一个循环中完成:
for (int i = 0; i < N; i++)
*pDest++ = *pSrc++
Run Code Online (Sandbox Code Playgroud)
为什么这比memcpy或慢memmove?他们用什么技巧加快速度?
我刚刚开始使用SSE优化我的计算机视觉项目代码,旨在检测图像中的肤色.以下是我的功能.该函数采用彩色图像并查看每个像素并返回概率图.注释掉的代码是我最初的C++实现,其余的是SSE版本.我对它们进行了计时,并且发现SSE并不比我原来的C++代码快得多.有关正在发生的事情或如何进一步优化功能的任何建议?
void EvalSkinProb(const Mat& cvmColorImg, Mat& cvmProb)
{
std::clock_t ts = std::clock();
Mat cvmHSV = Mat::zeros(cvmColorImg.rows, cvmColorImg.cols, CV_8UC3);
cvtColor(cvmColorImg, cvmHSV, CV_BGR2HSV);
std::clock_t te1 = std::clock();
float fFG, fBG;
double dp;
__declspec(align(16)) int frgb[4] = {0};
__declspec(align(16)) int fBase[4] = {g_iLowHue, g_iLowSat, g_iLowVal, 0};
__declspec(align(16)) int fIndx[4] = {0};
__m128i* pSrc1 = (__m128i*) frgb;
__m128i* pSrc2 = (__m128i*) fBase;
__m128i* pDest = (__m128i*) fIndx;
__m128i m1;
for (int y = 0; y < cvmColorImg.rows; y++)
{
for (int x = 0; …Run Code Online (Sandbox Code Playgroud) 我的一位资深同事通过编写内联汇编来优化函数(他正在实现图像过滤).这真的有必要吗?现代编译器不会为我们这样做吗?通常,通过将C代码转换为汇编代码,我们获得了多少收益?如果汇编代码确实带来了很多好处,那么我们何时应该将C/C++代码转换为汇编代码,何时应该保留代码,因为汇编代码很难读取和维护.