Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;多重循环瓶颈 我的C++程序遇到了瓶颈。有一个功能可以剪切rgb32图像。看看代码: BOOL Convert2MultiImage(BYTE *p32Img, BYTE** p24Img, int dxSize32, int dySize32, int row, int vertical) { BYTE *pTemp; BYTE** ptr = new BYTE*[row * vertical]; pTemp = p32Img; for (int num = 0; num < row * vertical; num++) { ptr[num] = p24Img[num]; } int displayWidth = dxSize32 * vertical; int width4 = displayWidth * 4; int width4_y = displayWidth * dySize32 * 4; int x_4 = dxSize32 * 4; int p = 0; int seq = 0; int i, j; for (int r = 0; r < row; r++) { for (int v = 0; v < vertical; v++) { for (j = 0; j < dySize32; j++) { for (i = 0; i < dxSize32; i++) { p = (displayWidth * j + i + r * displayWidth * dySize32 + v * dxSize32) * 4; *(ptr[seq]++) = pTemp[p]; *(ptr[seq]++) = pTemp[p + 1]; *(ptr[seq]++) = pTemp[p + 2]; } } seq++; } } delete[] ptr; ptr = NULL; return true; } BOOL Convert2MultiImage(字节*p32Img,字节**p24Img,int-dxSize32,int-dySize32,int-row,int-vertical) { 字节*pTemp; 字节**ptr=新字节*[行*垂直]; pTemp=p32Img; 对于(int num=0;num_C++ - Fatal编程技术网

C++;多重循环瓶颈 我的C++程序遇到了瓶颈。有一个功能可以剪切rgb32图像。看看代码: BOOL Convert2MultiImage(BYTE *p32Img, BYTE** p24Img, int dxSize32, int dySize32, int row, int vertical) { BYTE *pTemp; BYTE** ptr = new BYTE*[row * vertical]; pTemp = p32Img; for (int num = 0; num < row * vertical; num++) { ptr[num] = p24Img[num]; } int displayWidth = dxSize32 * vertical; int width4 = displayWidth * 4; int width4_y = displayWidth * dySize32 * 4; int x_4 = dxSize32 * 4; int p = 0; int seq = 0; int i, j; for (int r = 0; r < row; r++) { for (int v = 0; v < vertical; v++) { for (j = 0; j < dySize32; j++) { for (i = 0; i < dxSize32; i++) { p = (displayWidth * j + i + r * displayWidth * dySize32 + v * dxSize32) * 4; *(ptr[seq]++) = pTemp[p]; *(ptr[seq]++) = pTemp[p + 1]; *(ptr[seq]++) = pTemp[p + 2]; } } seq++; } } delete[] ptr; ptr = NULL; return true; } BOOL Convert2MultiImage(字节*p32Img,字节**p24Img,int-dxSize32,int-dySize32,int-row,int-vertical) { 字节*pTemp; 字节**ptr=新字节*[行*垂直]; pTemp=p32Img; 对于(int num=0;num

C++;多重循环瓶颈 我的C++程序遇到了瓶颈。有一个功能可以剪切rgb32图像。看看代码: BOOL Convert2MultiImage(BYTE *p32Img, BYTE** p24Img, int dxSize32, int dySize32, int row, int vertical) { BYTE *pTemp; BYTE** ptr = new BYTE*[row * vertical]; pTemp = p32Img; for (int num = 0; num < row * vertical; num++) { ptr[num] = p24Img[num]; } int displayWidth = dxSize32 * vertical; int width4 = displayWidth * 4; int width4_y = displayWidth * dySize32 * 4; int x_4 = dxSize32 * 4; int p = 0; int seq = 0; int i, j; for (int r = 0; r < row; r++) { for (int v = 0; v < vertical; v++) { for (j = 0; j < dySize32; j++) { for (i = 0; i < dxSize32; i++) { p = (displayWidth * j + i + r * displayWidth * dySize32 + v * dxSize32) * 4; *(ptr[seq]++) = pTemp[p]; *(ptr[seq]++) = pTemp[p + 1]; *(ptr[seq]++) = pTemp[p + 2]; } } seq++; } } delete[] ptr; ptr = NULL; return true; } BOOL Convert2MultiImage(字节*p32Img,字节**p24Img,int-dxSize32,int-dySize32,int-row,int-vertical) { 字节*pTemp; 字节**ptr=新字节*[行*垂直]; pTemp=p32Img; 对于(int num=0;num,c++,C++,参数dxSize32=1920,dySize32=1080,row=4,vertical=4;该功能意味着将8K图像剪切为16幅1080P图像 这个代码大约需要300毫秒,我需要30毫秒,我的电脑CPU是I5-6400双核。我可以使用一些硬件来处理这些代码以减少花费的时间吗 现在我用的是opencv,非常好,现在大约需要30毫秒 void COpencvCutImg::BGR32_Cut_MultiBGR24(BYTE* source, BYTE** target, int width, i

参数dxSize32=1920,dySize32=1080,row=4,vertical=4;该功能意味着将8K图像剪切为16幅1080P图像

这个代码大约需要300毫秒,我需要30毫秒,我的电脑CPU是I5-6400双核。我可以使用一些硬件来处理这些代码以减少花费的时间吗

现在我用的是opencv,非常好,现在大约需要30毫秒

void COpencvCutImg::BGR32_Cut_MultiBGR24(BYTE* source, BYTE** target, int   width, int height, int row, int vertical)
{
Mat matSource = Mat(width, height, CV_8UC4, source);

int height1 = matSource.rows;
int width1 = matSource.cols;

int ceil_height = height1 / row;
int ceil_width = width1 / vertical;

Mat roi_img;

int seq = 0;
for (int i = 0; i<row; i++)
for (int j = 0; j<vertical; j++){

    Rect rect(j*ceil_width, i*ceil_height, ceil_width, ceil_height);

    roi_img = matSource(rect);

    Mat continuousBGRA(roi_img.size(), CV_8UC3, target[seq]);
    cv::cvtColor(roi_img, continuousBGRA, CV_BGRA2BGR, 3);

    seq++;
}
void COpencvCutImg::BGR32\u Cut\u MultiBGR24(字节*源,字节**目标,整数宽度,整数高度,整数行,整数垂直)
{
Mat matSource=Mat(宽度、高度、CV_8UC4、源);
int height1=matSource.rows;
int width1=matSource.cols;
内部天花板高度=高度1/行;
内部天花板宽度=宽度1/垂直;
Mat roi_img;
int-seq=0;

对于(int i=0;我是否对其进行了优化编译?对于您的CPU体系结构(SSE、AVX)?请注意,SO不是codereview服务器,这就是它的用途:)对每个图像执行16个线程的操作是一个好主意。4-nested for循环非常有用ineffecient@Korni如果您的CPU是双核的,那么线程的增益不会达到10倍……您所能期望的最好结果是通过该途径将100%的增益提高一倍。1.将优化器调到最大值。2.将内部的3。考虑将J循环展开八或16次。如果设置打开,该部分不会被编译器优化吗?