OpenMP本身支持減少表示數組的變量嗎?是否有可能使用openmp來減少數組?
這會工作像下面這樣...
float* a = (float*) calloc(4*sizeof(float));
omp_set_num_threads(13);
#pragma omp parallel reduction(+:a)
for(i=0;i<4;i++){
a[i] += 1; // Thread-local copy of a incremented by something interesting
}
// a now contains [13 13 13 13]
理想的情況下,就對OMP並行一個類似的東西,如果你有一個大的線程數量足以爲它是有道理的,積累將通過二叉樹發生。
只有在fortran – Anycorn 2010-09-23 03:41:10
可能你可以解釋更多你想要做的事。提供串行代碼可能有幫助。 – FFox 2010-09-27 05:49:48
挖掘更多,聽起來像「只有在fortran」是答案。我最終只是在循環之外分配一個大的本地副本數組,讓線程在for循環中累積到自己的副本,然後在for循環之後積累到全局數組中,仍然在並行區域內部,在關鍵部分。 – 2010-09-27 19:52:35