2013-05-08 76 views
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; 
} 
... 

为了公平起见,我需要知道填充随机数的数组的正确的“闪电战++”的方式。 我认为上面的代码片段不是做这件事的方法,因为这是非常低效的。

总之

是对上面的片段使用闪电++初始化时利用随机数的阵列的正确方式或是有更好/更高效的方法?

+0

请记住,通过这些类型的比较,您最终可以将苹果与橘子进行比较。例如,在Armadillo中有[访问元素](http://arma.sf.net/docs.html#element_access)的几种方法:operator(),operator [],iterators或memptr()。默认情况下,operator()具有启用边界检查功能,而其他方式则不启用。这有助于开发。因此,为了进行更平衡的比较,您还需要考虑使用特定库(包括调试!)开发软件需要多长时间,以及最终代码的可读性/可维护性。 – mtall 2013-05-09 03:31:40

+0

@mtall,我同意比较这些类型的库时需要考虑多个方面。但不是所有的苹果和梨......你只需要比较它们。因此,我并没有比较一个库的元素访问和另一个库的全阵列操作。但分离比较:全阵列操作,模板/视图,基于元素的操作,初始化/生成器。 – safl 2013-05-13 09:39:00

+0

即使有更多的考虑。例如,许多C++库可以使用各种BLAS后端进行全阵列操作。是否比较标准的BLAS或高度优化的版本,如OpenBLAS或Intel MKL?整阵列操作也受到矩阵是动态分配还是固定大小(即大小指定为模板参数)的影响。在后一种情况下,C++编译器可能会生成更好的代码。这反过来带来了关于给定编译器的能力的问题,例如。对于给定的代码片段,一个编译器可能优于另一个编译器。 – mtall 2013-05-15 01:28:46

回答

1

当我在写我的问题时,我意识到我的方式错误。

的问题的答案是:

你做错了,做它像这样:

... 
Array<T, 1> s(samples); 
Uniform<T> rand; 
rand.seed((unsigned int)time(0)); 
s = rand.random() *4.0 +58.0; 
... 

所以,现在的问题是,是我自己的答案是否正确?