AVX对齐数组
AVX alignment in array
我使用MSVC12 (Visual Studio 2013 Express),我试图实现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个浮点数,然后加载它,但是性能损失太高了。
你有两个选择:
- 将每组系数垫为16个值以保持对齐
- 使用
_mm256_loadu_ps
内禀对未对齐的访问
相关文章:
- 使用对象数组对 SFML 进行动画处理
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 在 64 位边界上对齐C++结构数组?
- 如何在VS2019中获取数组的任意对齐?
- 在 c++ 中将数据从未对齐结构数组移动到对齐结构数组
- 如何创建对齐的数组 c++ 数组?
- 使用字节数组具有单字节对齐方式的结构是否安全
- 使用动态数组对算法编译器错误进行排序
- 用另一个 constexpr 数组对成员数组进行大括号初始化
- 使用数组对对象的编译时多态性是否可行?
- UINT8数组对INT64的质量化失败,但应该起作用
- 使用值初始化的数组对零初始化数据
- 努力使用指针数组对结构数组进行排序.C++
- 对象数组对齐与 __attribute__aligned() 或 alignas()
- 不使用数组对结构进行排序
- 3 位的数组对齐
- 如何使用数组对类对象进行编号
- 在c++中使用数组对链表进行排序
- 在c++中,全局动态分配的数组对不同的输入给出不同的结果
- 2bit位域数组对性能和缓存效率的影响