2013-05-08 2 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

+0

@mtall, 나는 이러한 유형의 라이브러리를 비교할 때 고려해야 할 여러 측면에 동의합니다. 그러나 모든 사과와 배가 아닙니다 ... 단지 공정하게 비교할 필요가 있습니다. 따라서 한 라이브러리의 요소 별 액세스와 다른 라이브러리의 전체 배열 작업을 비교하지 않습니다. 그러나 전체 배열 작업, 스텐실/뷰, 요소 별 작업, 초기화/생성기에 대한 비교를 구분합니다. – safl

+0

그렇다면 고려해야 할 것이 많습니다. 예를 들어, 많은 C++ 라이브러리는 전체 배열 작업에 다양한 BLAS 백엔드를 사용할 수 있습니다. 표준 BLAS 또는 OpenBLAS 또는 Intel MKL과 같이 고도로 최적화 된 버전을 비교합니까? 전체 배열 연산은 행렬이 동적으로 할당되는지 또는 고정 크기 (즉, 템플릿 매개 변수로 지정된 크기)인지에 따라 영향을받습니다. 후자의 경우, C++ 컴파일러가 더 나은 코드를 생성 할 수 있습니다. 이것은 차례로 주어진 컴파일러의 능력에 대한 질문을 제기합니다. 한 컴파일러는 주어진 코드 조각에 대해 다른 것보다 더 많거나 적은 것을 최적화 할 수 있습니다. – mtall

답변

1

내가 내 질문을 쓰면서, 나는 내 방식의 오류를 깨달았다.

질문에 대한 대답은 : 당신은 잘못하고있다

, 그래서처럼 수행

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

을 이제 질문은, 내 자신의 대답은 정확합니까?