我的代碼使用了很多適合MATLAB/FORTRAN風格矢量操作的重複性和大部分代數運算。如何分析指針別名的性能影響?
我一直在考慮切換到std :: valarray甚至Blitz ++來利用這個優勢。但是在開關之前,我怎樣才能描述C++和FORTRAN之間性能差異的主要貢獻者之一 - 指針別名 - 對我的代碼的性能產生影響的程度,而不是用限制和測試區別。
Visual Studio 2012/2013提供了一些實現此目的的方法嗎?也許是一個不同的IDE?
我的代碼使用了很多適合MATLAB/FORTRAN風格矢量操作的重複性和大部分代數運算。如何分析指針別名的性能影響?
我一直在考慮切換到std :: valarray甚至Blitz ++來利用這個優勢。但是在開關之前,我怎樣才能描述C++和FORTRAN之間性能差異的主要貢獻者之一 - 指針別名 - 對我的代碼的性能產生影響的程度,而不是用限制和測試區別。
Visual Studio 2012/2013提供了一些實現此目的的方法嗎?也許是一個不同的IDE?
C/C++語言沒有經過優化,不會很好地處理數學問題。對於那些操作,我只是建議嘗試改變語言,或者,如果你真的想繼續使用c/C++,請謹慎寫作。不同的語言被指定爲以儘可能最好的方式做他們所做的事情,但它幾乎從來沒有這樣做過。
對於我所知道的,沒有辦法更好地優化大多數已經存在的C/C++函數,尤其是非標準包(boost),因爲它們被假設爲儘可能簡單。調試軟件包也被調試功能重載,所以它們比較慢,但是我也看到了一些具有安全檢查功能的版本函數,比如「對象屬於我」或「附加範圍檢查」。如果這是關於像別名,autopoiters,其他指針類型或類似的東西的原子函數,他們只是不能做得更好,而且它們會盡可能地工作。
你也可以試着告訴編譯器你想要更多的壓縮級別,如果可能的話,這可能會加快速度,但正如我之前所說的那樣,使用數學做的數學語言。最終,如果您可以使用fortran或其他語言創建asm對象,則可以使用c/C++將此文件鏈接到您的代碼。
您的代碼是否使用智能指針?也許他們可以增強來檢測這個? – Leeor
@Leeor我的大多數性能關鍵代碼是c-arrays – arman
[*此帖*](http://scicomp.stackexchange.com/a/2719/1262)可能會有用。通常假設代碼已經非常仔細地編寫,只有編譯器優化才能使其更快,而事實上,如果您只知道這些代碼是什麼,那麼實際上它有很大的改進空間。固定這些之後,指針別名可以有所作爲。 –