【发布时间】:2012-01-07 07:44:13
【问题描述】:
我最初的尝试是这样的(假设我们想乘)
__m128 mat[n]; /* rows */
__m128 vec[n] = {1,1,1,1};
float outvector[n];
for (int row=0;row<n;row++) {
for(int k =3; k < 8; k = k+ 4)
{
__m128 mrow = mat[k];
__m128 v = vec[row];
__m128 sum = _mm_mul_ps(mrow,v);
sum= _mm_hadd_ps(sum,sum); /* adds adjacent-two floats */
}
_mm_store_ss(&outvector[row],_mm_hadd_ps(sum,sum));
}
但这显然行不通。我该如何处理?
我应该一次加载 4 个....
另一个问题是:如果我的数组非常大(比如 n = 1000),我怎样才能使它 16 字节对齐?这可能吗?
【问题讨论】:
-
你期待什么结果?我没有看到任何矩阵,只有向量乘法。还有,3、8、4是哪来的?
-
@user963889,尺寸没有任何意义。你想做什么?将 8x1 向量或向量数组乘以 8x8 矩阵?
-
@BrettHale 假设我们有 8x8 倍的向量 8x1。结果我想得到8x1。我被困住了。你们能引导我走向正确的方向吗?谢谢。
-
@user963889,好的 - 提供了 [8x8] x [8x1] 的答案 ...
标签: c++ sse intrinsics