如何创建数组C++的对齐数组?
我想创建一个由其他数组组成的对齐数组。我知道如何使用std::vector实现,但是使用vector的方法不适合我 非常感谢那些能够帮助我的人 下面是我想做的一个例子:如何创建数组C++的对齐数组?,c++,arrays,C++,Arrays,我想创建一个由其他数组组成的对齐数组。我知道如何使用std::vector实现,但是使用vector的方法不适合我 非常感谢那些能够帮助我的人 下面是我想做的一个例子: for (int i = 0; i < 16; ++i) std::cout << arr[i] << " "; // Prints 0 1 2 3 4 5 6 7 8 9 10...15 int m = 5; for (int i = 0; i < m ; ++i) {
for (int i = 0; i < 16; ++i)
std::cout << arr[i] << " ";
// Prints 0 1 2 3 4 5 6 7 8 9 10...15
int m = 5;
for (int i = 0; i < m ; ++i) {
float* varr[i] = (float*) aligned_alloc(32, sizeof(float)*8);
int k = i*8;
varr[i] = {arr[k+0], arr[k+1], arr[k+2], arr[k+3], arr[k+4], arr[k+5], arr[k+6], arr[k+7]};
}
varr[0] = {arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7]};
// Prints: 0 1 2 3 4 5 6 7
varr[1] = {arr[8], arr[9], arr[10], arr[11], arr[13], arr[14], arr[15], arr[16]};
// Prints: 8 9 10 11 12 13 14 15
varr[2] = .....;
varr[3] = .....;
varr[4] = .....;
我不确定avx指令,但我修改的方法如下:
int main (){
int dim1{5}, dim2{8};
float* varr = static_cast<float*> (aligned_alloc(sizeof(float)*dim1*dim2, sizeof(float)*dim1*dim2));
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
varr[i*dim2+j] =i*dim2 + j;
}
}
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
std::cout << &varr[i*dim2+j] << ",";
}
std :: cout << "\n";
}
return 0;
}
它基本上使用在纯1D数组的一大块中分配/访问数组的逻辑
另一种方法是使用指向如下指针的指针:
#include <iostream>
int main (){
int dim1{5}, dim2{8};
float** varr = static_cast<float**> (aligned_alloc(sizeof(float*)*dim1, sizeof(float*)*dim1));
for(int i=0; i<dim1; ++i){
varr[i] = static_cast<float*> (aligned_alloc(sizeof(float)*dim2, sizeof(float)*dim2));
}
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
varr[i][j] = 0.1 + static_cast<float>(i*dim2 + j);
}
}
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
std::cout << &varr[i][j] << ",";
}
std :: cout << "\n";
}
return 0;
}
但问题是内存没有在第一维度dim1上对齐 std::vector变量有什么问题?最初我有一个数组,它必须拆分成包含8个成员的数组才能加载到avx寄存器\u mm256\u load\u psvarr中。所有阵列数据必须对齐。当我使用vector时,我丢失了一个对齐,并将数据存储回了\u mm256\u store\u psarr,varr[I]。向量编译给了我一个错误。甚至当我使用对齐的分配器来对齐向量时。你们不能使用向量吗?你们的解决方案不起作用吗?到底是什么问题?显示向量的代码工作。也许我们可以帮你解决这个问题。问题是关于对齐阵列的,所以这不能回答它。你为什么这么说?内存在1D阵列中完全对齐。就我从问题中了解到的情况而言,作者希望所有数据都在一维数组中,但使用二维模式访问它们。问题的摘要指定了对齐的数据,代码使用对齐的alloc清楚地表明,它指的是非标准对齐。评论进一步明确了OP需要在数组内容上使用SIMD AVX指令。我已经解决了这个问题。我在使用向量实现时犯了一些愚蠢的错误。现在它工作了。加延德拉解决方案的建议非常有趣。我想我会尽量采纳你的建议。谢谢大家。如果你认为我的解决方案很有用,那么你能接受我的答案并/或投票表决吗?也许可以发布对你有用的内容,以便社区中的其他人也能受益