C ++并行化:快速“重新初始化”数组

时间:2016-09-14 15:33:09

标签: c++ arrays parallel-processing

我在OpenMP中进行并行for循环。

这是我的问题:我有一个4D数组,其中第4维的深度是最大值 - 我可能不会使用第4维的所有元素。在这个数组中,我存储另一个数组的索引(我在并行循环中计算索引)。

所以,

int my_index_array[dim_x][dim_y][dim_z][max_count];

同时,在并行循环中,我在另一个整数数组中记录存储在每个第四维向量中的元素数(即my_index_array[0][0][0][:]):

int my_index_counts[dim_x][dim_y][dim_z] = {(int) 0}

这样我以后可以使用my_index_counts中的值创建并行for循环。

所以这是我的问题:

当我回到外部循环的顶部时,我需要一种最佳的,超快速的方法来“重新初始化”索引计数。理想情况下,我不会遍历索引计数数组并重置值。但是,在C ++中,我无法重新初始化数组。我找到了“memcpy”,并且有空间来创建另一个“归零”数组来复制,但这是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

对于数组初始化,您可以使用memset,它适用于连续内存块。你的代码应该是这样的:

memset(&my_index_counts[x][y][z], 0, max_count*sizeof(int));

其中x,y,z是除最后一个维度之外的所有索引