我正在解決3個不同的線性方程組,其中每個系統都取決於前一個的結果。它們都有一些係數,然後和前面的結果一起定義新的系統(當然除了第一個系統由它自己定義)。優化重複係數評估
的代碼是有點像這樣:
vector<double>point(n);//initialized to values
vector<double>A(n*n,0);
vector<double>b(n,0);
double coefficient;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
coefficient=myCoeff(point[i],point[j]);
//A[i+j*n] and b[j] initialized using coefficient
}
}
vector<double>x(n) //initialized as solution of A\b
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
coefficient=myCoeff(point[i],point[j]);
//A[i+j*n] and b[j] initialized using coefficient and x
}
}
//x=A\b
//and so on for the third system
仿形代碼顯示的80%的時間被用於調用myCoeff。優化myCoeff超出了我的興趣。
我在腦海中有兩個選項: - 將係數寫入文件一次並將其讀取兩次 -use parallel_for而不是outer for循環。
是否可以結合這兩個選項? 歡迎任何其他建議,如果您需要更多關於我可以提供的代碼的詳細信息。
我實際上正在考慮這種方法。這些係數實際上是4,所以這會使得5 * n * n,而最大的n將是現在的0.4-0.5左右,但可能已經足夠了。關於A的索引你是對的,我一開始就這樣做,在隨後的糾正中事情變得混亂。 – MarcoS 2012-02-22 13:55:15
@MarcoS如果您有多個係數並將它們存儲在內存中,請確保將與相同(i,j)對相關的所有4個係數(例如,將它們分組在結構中並存儲矢量),而不是每個係數有一個n * n矩陣。 –
Francesco
2012-02-22 14:56:30
很好的建議,謝謝 – MarcoS 2012-02-22 20:48:52