2016-09-14 45 views
3

我正在做一個OpenMP中的並行for循環。C++並行化:快速「重新初始化」數組的方法

這是我的問題:我有一個4維數組,其中第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中的值創建並行循環。


因此,這裏是我的問題:

我需要一個最佳的,超快速的方式,當我回到我的身邊到外循環的頂部「重新初始化」的指標數。理想情況下,我不會遍歷索引計數數組並重置值。但是,在C++中,我無法重新初始化數組。我發現「memcpy」,並有空間創建另一個「歸零」數組來複制,但這是做到這一點的最佳方式?

+2

的快速和骯髒的方法就是做'memset的(my_index_counts,0,的sizeof(my_index_counts)); '。它並不漂亮,它可能不是平臺獨立的(在某些平臺上執行浮點數的memset肯定存在問題,不確定int的tbh),但它很快且被廣泛使用(所以其他查看代碼的人應該知道你在做什麼)。 – RyanP

回答

0

對於數組初始化,您可以使用memset,它適用於連續內存塊。你的代碼應該是這樣的:

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

其中x,y,z是指數所有,但最後一維

+0

這段代碼錯了,RyanP說得對。 – Ped7g