首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阵列AVX对准

阵列AVX对准
EN

Stack Overflow用户
提问于 2014-07-29 13:52:01
回答 1查看 1.2K关注 0票数 3

我使用的是MSVC12 (VisualStudio2013Express),我试图实现8*8浮点数的快速乘法。问题是对齐:向量实际上有9*n值,但我总是需要前8,因此对于n=0来说,保证32个字节的对齐(当我使用_mm_malloc时),对于n=1,“第一个”值以4*9 = 36字节对齐。

代码语言:javascript
复制
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个浮点数,然后加载它,但是性能损失太高了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-29 14:03:05

你有两个选择:

  1. 将每组系数设置为16个值,以保持对齐。
  2. 在未对齐的访问中使用_mm256_loadu_ps内建

第一种选择速度更快,而第二种选择更节省空间.

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25017052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档