C++并行化:快速"reinitialize"阵列

C++ Parallelization: Fast way to "reinitialize" array

本文关键字:reinitialize 阵列 快速 并行化 C++      更新时间:2023-10-16

我正在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",并且有空间创建另一个"归零"数组进行复制,但这是最佳的方法吗?

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

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

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