1
我想比較Blitz ++/Armadillo/Eigen和我自己的庫的性能。閃電戰++:用隨機數填充數組
我目前在做以下使用Blitz ++:
...
Array<T, 1> s(samples);
Uniform<T> rand;
rand.seed((unsigned int)time(0));
for(size_t i=0; i<samples; i++) {
s = rand.random() *4.0 +58.0;
}
...
爲了公平起見,我需要知道填充隨機數的數組的正確的「閃電戰++」的方式。 我認爲上面的代碼片段不是做這件事的方法,因爲這是非常低效的。
總之
是對上面的片段使用閃電++初始化時利用隨機數的陣列的正確方式或是有更好/更高效的方法?
請記住,通過這些類型的比較,您最終可以將蘋果與橘子進行比較。例如,在Armadillo中有[訪問元素](http://arma.sf.net/docs.html#element_access)的幾種方法:operator(),operator [],iterators或memptr()。默認情況下,operator()具有啓用邊界檢查功能,而其他方式則不啓用。這有助於開發。因此,爲了進行更平衡的比較,您還需要考慮使用特定庫(包括調試!)開發軟件需要多長時間,以及最終代碼的可讀性/可維護性。 – mtall 2013-05-09 03:31:40
@mtall,我同意比較這些類型的庫時需要考慮多個方面。但不是所有的蘋果和梨......你只需要比較它們。因此,我並沒有比較一個庫的元素訪問和另一個庫的全陣列操作。但分離比較:全陣列操作,模板/視圖,基於元素的操作,初始化/生成器。 – safl 2013-05-13 09:39:00
即使有更多的考慮。例如,許多C++庫可以使用各種BLAS後端進行全陣列操作。是否比較標準的BLAS或高度優化的版本,如OpenBLAS或Intel MKL?整陣列操作也受到矩陣是動態分配還是固定大小(即大小指定爲模板參數)的影響。在後一種情況下,C++編譯器可能會生成更好的代碼。這反過來帶來了關於給定編譯器的能力的問題,例如。對於給定的代碼片段,一個編譯器可能優於另一個編譯器。 – mtall 2013-05-15 01:28:46