1
A
回答
1
Nag C數值庫有自適應正交(鏈路here)的並行版本。其關鍵是要請求用戶下面的函數
void (*f)(const double x[], Integer nx, double fv[], Integer *iflag, Nag_Comm *comm)
在這裏,函數「f」的計算結果在由矢量x[]
給出nx
abscise點積。這是並行化出現的地方,因爲您可以使用parallel_for
(例如在openmp中實現)在這些點上同時評估f
。集成商本身是單線程的。
Nag是一個非常昂貴的庫,但如果您使用自己的代碼集成器,例如numerical recipes,修改串行實現以創建使用NAG想法的並行自適應集成器並不困難。
我無法複製數字食譜書籍以顯示由於許可證限制需要修改的地方。那麼我們來看一下trapezoidal rule的最簡單的例子,其中的實現非常簡單而且衆所周知。使用梯形法則創建自適應方法的最簡單方法是計算網格點處的積分,然後加倍離散點數並比較結果。如果結果變化小於要求的精度,則會收斂。
在每一步,梯形規則可以使用以下通用實施
double trapezoidal(void (*f)(double x), double a, double b, int n)
{
double h = (b - a)/n;
double s = 0.5 * h * (f(a) + f(b));
for(int i = 1; i < n; ++i) s += h * f(a + i*h);
return s;
}
現在你可以進行以下修改來實現NAG想法
double trapezoidal(void (*f)(double x[], int nx, double fv[]), double a, double b, int n)
{
double h = (b - a)/n;
double x[n+1];
double fv[n+1];
for(int i = 0; i < n; ++i) x[i+1] = (a + i * h);
x[n] = b;
f(x, n, fv); // inside f, use parallel_for to evaluate the integrand at x[i], i=0..n
double s = 0.5 * h * (fv[0] + fv[n]);
for(int i = 1; i < n; ++i) s += h * fv[i];
return s;
}
這個程序來計算,但是,將只有在被積函數計算非常昂貴的情況下才能加速代碼。否則,您應該在較高的循環中並行處理代碼,而不要在集成器中進行並行處理。
0
爲什麼不簡單地實現一個包裝單個線程算法的包裝器,該算法將邊界的細分積分分配給不同的線程,然後在最後將它們相加?例如
thread 0: i0 = integral(x0, (x0+x1)/2)
thread 1: i1 = integral((x0+x1)/2, x1)
i = i0 + i1
相關問題
- 1. iOS - 與其他已有FB的圖書館進行Facebook.framework集成
- 2. 用C#與Twitter進行交互的最成熟的圖書館?
- 3. .NET維恩圖圖書館
- 4. 特殊算法,圖書館和書籍
- 5. 使用MAML進行圖書館的概念性文檔編制
- 6. 圖書館或算法,以爆炸字母數字範圍
- 7. 圖書館對圖書館的引用
- 8. 如何使用Hopscotch圖書館進行自動導覽?
- 9. 使用圖書館
- 10. JavaScript大數字圖書館?
- 11. 頻繁項集最好的算法和圖書館
- 12. .Net圖書館用於通過哈希進行圖像搜索?
- 13. 一個項目中的圖書館,我想使用另一個圖書館
- 14. 使用lxml的圖書館
- 15. popt圖書館的使用
- 16. Android的Facebook的圖書館發行
- 17. JumpList?進入圖書館
- 18. 使用GPU同時進行數字運算和並行渲染
- 19. 解釋`core.reducers`圖書館的外行人
- 20. Android無法使用谷歌圖書館
- 21. 如何使用圖書館
- 22. 使用Matlab進行並行計算
- 23. 免費的數字圖書館,C++,Windows
- 24. 建立在圖書館的100GB文件進行有效搜索
- 25. 錯誤,同時運行ORB_SLAM2圖書館
- 26. 圖書館不爲「執行」處理「DSL」
- 27. 圖書館編譯,但不會運行
- 28. @OnClick不執行ButterKnife圖書館
- 29. OpenPose圖書館 - 構建發行問題
- 30. C++中使用SQLite:「圖書館例行的呼叫順序
感謝您的解決方案!是的,這正是我需要的。向矢量化被積函數的參數也是一個好主意,我相信,修改數字配方或GSL的版本應該不是一件難事。 – xuhdev