我使用的是MSVC12 (VisualStudio2013Express),我试图实现8*8浮点数的快速乘法。问题是对齐:向量实际上有9*n值,但我总是需要前8,因此对于n=0来说,保证32个字节的对齐(当我使用_mm_malloc时),对于n=1,“第一个”值以4*9 = 36字节对齐。
for(unsigned i = 0; i < n; i++) {
float *coeff_set = (float *)_mm_malloc(909 * 100 *sizeof(float), 32);
// this works for n=0, not n=1, n=2, ...
__m256 coefficients = _mm256_load_ps(&coeff_set[9 * i]);
__m256 result = _mm256_mul_ps(coefficients, coefficients);
...
}有可能解决这个问题吗?我想保持我的数据结构,但如果不可能,我会改变它。我发现的一个解决方案是首先在对齐数组中复制8个浮点数,然后加载它,但是性能损失太高了。
发布于 2014-07-29 14:03:05
你有两个选择:
_mm256_loadu_ps内建第一种选择速度更快,而第二种选择更节省空间.
https://stackoverflow.com/questions/25017052
复制相似问题