I am doing a parallel for loop in OpenMP.
Here is my problem: I have a 4D array, where the 4th dimension's depth is a maximum value--I might not use all of the elements of the 4th dimension. In this array, I store indices of another array (I calculate the indices in a parallel loop).
So,
int my_index_array[dim_x][dim_y][dim_z][max_count];
At the same time, in the parallel loop, I am recording the number of elements stored in each 4th dimension vector (ie, my_index_array[0][0][0][:]
) in another integer array:
int my_index_counts[dim_x][dim_y][dim_z] = {(int) 0}
Such that I can create parallel for loops later using the values from my_index_counts.
So here is my problem:
I need an optimal, super fast way to "re-initialize" the index counts when I come back around to the top of the outer loop. Ideally, I would not loop through the index counts array and reset the values. But, in C++, I can't reinitialize the array. I found "memcpy," and have the space to create another "zeroed" array to copy from, but is that the optimal way to do this?
For array initialization you may use memset
, it is suitable for continuous memory blocks. Your code should be something like this:
memset(&my_index_counts[x][y][z], 0, max_count*sizeof(int));
where x,y,z
are indices to all but the last dimension
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.