2012-10-02 6 views
1

우리는 최근 성능 벤치 마크를 이해하려고합니다. Redhat Linux 컴퓨터의 성능이 Windows 7 노트북보다 50 % 느려지는 큰 스크립트가 있습니다. 리눅스 머신은 kvm을 사용하여 가상화되며 16GB의 메모리와 함께 4 개의 코어가 할당됩니다. 스크립트는 집중적 인 것이 아니고 for 루프를 꽤 많이 가지고 있습니다. 주로 최적화를 위해 사용할 수있는 R 컴파일 옵션이 있는지, 또는이를 비교할 수있는 커널 컴파일러 옵션이 있는지 궁금합니다. 모든 포인터는 감사하겠습니다. 나는 다른 기계를 얻고 더 나은 비교를 위해 원료 금속을 사용하여 시험하려고 노력할 것이다.R 성능을 최적화하는 방법

Peformance comparisons

이 내가 리눅스 시스템에 R을 컴파일하기 위해 사용하고있는 구성 플래그입니다. 실험을 많이 해본 결과 큰 데이터 세트의 경우 녹색으로 실행 시간을 12 초 줄였습니다. 본질적으로 나는 2.087에서 1.48 초로 이러한 옵션을 사용했다.

./configure CFLAGS="-O3 -g -std=gnu99" CXXFLAGS="-O3 -g" FFLAGS="-O2 -g" LDFLAGS="-Bdirect,--hash-stype=both,-Wl,-O1" --enable-R-shlib --without-x --with-cairo --with-libpng --with-jpeglib 

업데이트 1

스크립트는 아직 최적화되지 않았습니다. 다른 그룹은 실제로 스크립트를 작업하고 있으며 우리는 apply 함수를 사용하라는 요청을했지만 시간의 불일치를 어떻게 설명하는지 확신 할 수 없습니다.

프로필 상단은 다음과 같습니다. 이 기능의 대부분은 나중에 적용 기능을 사용하여 최적화되지만 현재는 두 시스템의 사과에 벤치 마크 된 사과입니다.

"eval.with.vis"     8.66 100.00  0.12  1.39 
"source"       8.66 100.00  0.00  0.00 
"["        5.38  62.12  0.16  1.85 
"GenerateQCC"      5.30  61.20  0.00  0.00 
"[.data.frame"      5.20  60.05  2.40 27.71 
"ZoneCalculation"     5.12  59.12  0.02  0.23 
"cbind"       3.22  37.18  0.34  3.93 
"[["        2.26  26.10  0.38  4.39 
"[[.data.frame"     1.88  21.71  0.82  9.47 

내 첫 번째 의심과 곧 테스트 할 예정이며 내 결과로 업데이트됩니다 KVM 리눅스 가상화가 비난하는 것입니다. 이 스크립트는 매우 메모리 집약적이며 많은 수의 배열 연산과 R이 (물론 malloc에) 복사에 의해 전달되기 때문에 이것은 문제를 일으킬 수 있습니다. VM은 메모리 컨트롤러에 직접 액세스 할 수 없으므로 다른 VM과 공유해야하므로 문제가 발생할 가능성이 높습니다. 나는 나중에 오늘 기계를 얻게 될 것이고, 나의 발견으로 업데이트 할 것이다.

빠른 업데이트를 해주셔서 감사합니다.

업데이트 2

우리는 원래 성능 문제의 원인은 VM과 하이퍼 스레딩에 의한 생각했다, 그러나 이것은 잘못된 것으로 판명과 성능이 비교적 베어 메탈 시스템에서 동일했다.

나중에 우리는 Windows 랩탑이 계산을 위해 R의 32 비트 버전을 사용하고 있다는 것을 깨달았습니다. 이로 인해 우리는 R의 64 비트 버전을 시험해 보았습니다. 결과는 동일한 똑같은 스크립트에서 32 비트보다 약 140 % 느립니다. 이것은 64 비트가 R의 32 비트 버전보다 ~ 140 % 느려질 수있는 가능성에 대한 질문으로 이어집니다.

은 우리가보고있는 것은 32

윈도우 32 비트 실행 시간이 48초 윈도우 64 비트 실행 시간 2.33 초.

Linux 64 비트 실행 시간 2.15 초. Linux 32 비트 실행 시간 < 진행 중> (RHEL 6.3 x86_64에서 32 비트 버전을 만들었지 만 성능 향상이 나타나지 않아 32 비트 버전의 RHEL 6으로 다시로드됩니다.3)

이 링크를 발견했지만 일부 64 비트 시스템에서는 15-20 %의 공격 만이 발생합니다.

http://www.hep.by/gnu/r-patched/r-admin/R-admin_51.html

미안 법적으로 스크립트를 게시 할 수 없습니다.

+1

4 개의 코어를 언급했습니다. 오버 헤드가 너무 클 수 있습니까? –

+0

두 컴퓨터에서 스크립트가 동일합니다. 최적화가 필요합니다. 적용 함수를 사용하는 대신 데이터 프레임에서 [] 오프셋을 사용하는 부분이 꽤 많이 있습니다. 필자는 병렬 라이브러리를 사용하여 코드의 이러한 부분을 빠르게 처리했지만 Windows에 기본적으로 병렬 최적화가 가능한 몇 가지 기능이 없으면 스크립트에 병렬 부분이 없습니다. 노트북에는 8 대 4 코어가 있지만 스크립트는 모든 코어를 사용하지 않습니다. 관찰 해줘서 고맙지 만이 차이는이 경우 프로세스 배포로 인한 것이라고 생각하지 않습니다. –

+0

게시물의 제목을 R에서 플랫폼 간 최적화 **를 시도 할 때 (그리고 아래에서 답을 찾음으로써) 시도하는 것을 반영하는 게시물로 변경하는 것이 좋습니다 **. 그것이 의미하는 바로는, 질문을 "다른 방법으로 빠르게 전달할 수 있습니다 (예 : 벡터화, 반복 할당 방지,'data.table' 등 사용)?" 문제. –

답변

1

문제가 해결되었으며 최적화되지 않은 BLAS 라이브러리 때문에 발생했습니다.

이 기사는 큰 도움이되었습니다. ATLAS를 사용하면 큰 도움이되었습니다.

1

Writing R Extensions 설명서의 "프로파일 링"섹션을 살펴보십시오.

30,000 피트에서부터 많은 것을 말할 수는 없으며 프로파일 링 정보가 필요합니다. "일반적인 합의"(그리고 나는 이것들을 일반화 할 수 없기 때문에 따옴표로 붙인다)는 것은 리눅스가 메모리 관리와 파일 접근에 더 잘하는 경향이 있다는 것인데, 나는 당신의 결과에 조금 놀랐다.

+0

잘 알고 있기 때문에 프로필 업데이트를위한 출력을 추가했습니다. 스크립트가 적용 기능을 사용하도록 최적화되지 않았 음을 알게되고 큰 데이터 세트에 적용을 사용하도록 조직에 변경을 요청했습니다. –

1

빌딩 R을 --enable-R-shlib으로 설정하면 성능이 저하 될 수 있습니다. 자세한 내용은 R Installation and Administration, Appendix B, Section 1에 설명되어 있습니다. 이것만으로도 변동의 10-20 %를 설명 할 수 있습니다. 다른 출처는 "비교 가능한 사양"의 차이 일 수 있습니다.

+1

나는 벌금의 1 % ~ 5 %를 보지 못했다. 이제 역동적 인 연결 금지를 요구하는 BDR 대리인입니까? ;-) –

+0

@DirkEddelbuettel : 아니요. OP는 추측 이상의 작업을 수행 할 수있는 충분한 정보를 제공하지 않기 때문에 낚시 만하고 있습니다. –

+1

실제로 - 왜 --enable-R-shlib를 추가 할 때 상당한 성능 향상을 보았는지 확실하지 않습니다. 나는 그것을 무력화 시켰고 시간은 원래의 것보다 높은 1.48에서 2.14로 갔다. 이것은 완전히 경비원을 붙 잡았다. 그러나 나는 그것을 두 번 돌렸다. 그리고 시간은 같은 것이었다. 나는 모두 빠른 정적 아카이브를 가능하게하려고 시도했다. 그것은 shlib 옵션과 동등하다. 아주 이상한 –

관련 문제