[英]Fastest way to copy several 2-dimensional arrays into one 1-dimensional array (in C)
我想复制3维数组的几个2维子数组(例如array1 [n] [rows] [cols],...,array4 [n] [rows] [cols]),这些子数组是动态分配的(但带有固定长度),放入C中静态分配的一维数组(例如array [4 * rows * cols])。由于会有很多行和列(例如10000行和500列),我想知道以下三种可能性中哪一种最快?
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
array[i*cols+j]=array1[2][i][j];
}
}
...
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
array[3*rows*cols+i*cols+j]=array4[2][i][j];
}
}
要么
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
array[i*cols+j]=array1[2][i][j];
}
...
for(j=0;j<cols;j++){
array[3*rows*cols+i*cols+j]=array4[2][i][j];
}
}
要么
for(i=0;i<rows;i++){
for(j=0;j<cols;j++){
array[i*cols+j]=array1[2][i][j];
...
array[3*rows*cols+i*cols+j]=array4[2][i][j];
}
}
还是有更快的方法在C中执行此任务(不是C ++)?
非常感谢! (我认为已经应该有一个类似的问题,但是不幸的是找不到我想要的东西。所以,如果我错过了这个问题,我感到抱歉。)
编辑:这样做的原因如下:存储在这些二维(子)数组中的信息必须通过MPI进行通信。 因此,客户将以相反的方式(即1维-> 2维)进行上述操作,并完成主操作。 因此,是否有更好的方法可以整体上做到这一点?
假设线性数组和尺寸相同(这会使我的答案无效):
这个
for(i=0;i<rows;i++) {
for(j=0;j<cols;j++) {
array[i*cols+j]=array1[2][i][j];
}
}
可以替换为:
memcpy(array, array1[2], sizeof(array1[2]));
因此,这一个:
for(i=0;i<rows;i++) {
for(j=0;j<cols;j++) {
array[3*rows*cols+i*cols+j]=array4[2][i][j];
}
}
将是:
memcpy(array + 3*cols*rows, array4[2], sizeof(array4[2]));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.