或使用SIMD说明?
#include <iostream>
#include <string>
#define sz 10000;
typedef struct pixel{
int b,g,r;
};
int main()
{
pixel * src = new pixel[sz]; // arrays filled
pixel * ker = new pixel[sz]; // by random values
pixel px;
px.r=px.g=px.b=0;
for (int i=0; i<sz; i++){
px.r+=src[i].r*ker[i].r;
px.g+=src[i].r*ker[i].g;
px.b+=src[i].r*ker[i].b;
}
return 0;
}
src - 一个包含一些随机值的数组。
ker - 类似src,也包含随机值。
应该优化for循环
答案 0 :(得分:0)
您可以执行以下操作:
#include <valarray>
#define sz 1000
struct pixel { int r, g, b; };
int main()
{
std::valarray<int> src(3 * sz);
std::valarray<int> ker(3 * sz);
std::valarray<int> t = src * ker;
pixel px;
px.r = t[t % 3 == 0].sum();
px.g = t[t % 3 == 1].sum();
px.b = t[t % 3 == 2].sum();
return 0;
}
我假设您在src
和ker
中的颜色值为rgb rgb rgb rgb
。