C++ 大数组如何快速复制和设值
问题:图片像素数组在fps游戏内绘制出来,需要二次设值,导致每次都要循环大数组;
一下是我的循环感觉比较耗时。不知道有没有优化空间
for (int w=0; x<1024; w++){
for(int h=0; h<768; h++){
int ipos=(h*1024+w)*4;
// image = 100;
// image = 100;
// image = 100;
image = 100;
}
} 如果是较多重复的话,你看看cuda库,使用并行计算的思想弄一下看看可不可以,并行计算里面也有mask针对矩阵中的一部分赋值
memcpy函数很快 孙庚 发表于 2021-5-31 15:28
如果是较多重复的话,你看看cuda库,使用并行计算的思想弄一下看看可不可以,并行计算里面也有mask针对矩阵 ...
代码里边不能直接用memcpy去复制呢,要换算。我就想怎么能快速的赋值。
int iPos=0, bmpPos=0; unsigned char srcB=0;
for (int y=0; y<this->Head.Height; y++)
{
for (int x=0; x<this->Head.Width; x++)
{
iPos = (y * this->Head.Width + x) * 4;
if (this->bmpPixels!=0){
bmpPos = (y * this->Head.Width + x) * 3;
for (int k=0; k<3; k++){
Bits = this->bmpPixels;
}
//置换颜色值
srcB = Bits;
Bits = Bits;
Bits = srcB;
}
}
} 可以考虑在使用的时候,再+/-固定值,很多时候,计算了并不一定会使用 cuda我没有用过,但是你这个在python中图像处理有类似的操作,cuda应该也有的。比如将矩阵中一部分区域的像素点小于0.2的设置为0,具体的你要研究一下了 xuson 发表于 2021-5-31 17:02
代码里边不能直接用memcpy去复制呢,要换算。我就想怎么能快速的赋值。
int iPos ...
源码是BGRA转RGB?如果忽略掉A通道如果为0,RGB都得是0这个条件的话,还可以手写SIMD抢救下。语法层面和编译器优化层面都做不到"快速赋值"
最佳方案就是预处理好输入数据,不要随用随处理
SSE指令集可以一次操作4*4字节,基现在的cpu基本上没有不支持的。movaps xmm0,一次读入16字节(内存要16字节对齐) C++怎么上手吗? 有没有好点的教程分享下
页:
[1]
2