1
我試圖計算出預期爲大同時使用遞歸和異步向量的2範數。這是我迄今爲止所擁有的。我得到了正確的答案,但我的程序似乎沒有改善性能。事實上,按順序計算規範似乎更快。有人可以看一下,看看我做錯了嗎?計算向量的並行規範並同時使用異步/期貨
double rtn_worker(const Vector& x, unsigned long begin2, unsigned long end2, unsigned long level2){
int begin = (int) begin2;
int end = (int) end2;
int level = (int) level2;
if(level == 0){
double temp_partial = 0.0;
for(unsigned long i = begin; i <= end; ++i){
temp_partial += x(i)*x(i);
}
return temp_partial;
}
else{
return rtn_worker(x, begin, begin+(end-begin)/2, level-1)+rtn_worker(x, begin+(end-begin)/2+1, end, level-1);
}
}
double recursiveTwoNorm(const Vector& x, unsigned long levels){
double sum = 0.0;
unsigned long end = x.numRows();
std::future<double> partial = std::async(std::launch::deferred, rtn_worker, std::ref(x), 0, end-1, levels);
sum += partial.get();
double norm = sqrt(sum);
return norm;
}
注意:我已經定義了Vector的類。在這裏,.numRows()是一個私有成員函數,它返回向量的長度。
雖然我已經用數學疊交流頻繁,這是我在堆棧溢出的第一篇文章。任何和所有的評論和批評都表示讚賞!
*我已經實現這個使用thread.h,但我想比較與異步的性能。
順序總是更快,穿線時的開銷,上下文切換和鎖定ARË都考慮到平行執行是不是性能的妙法,往往是相反的。 – gbjbaanb
@gbjbaanb:你在哪裏看到平行化? – MSalters
@MSalters在哪裏他使用了thread.h,但是異步是關於正在運行的線程,它使用與並行化相關的所有開銷,即使你一次只運行1個線程。這就是我的意思,不是他一次執行許多任務。 – gbjbaanb