1

私が理解しようとしている最近のパフォーマンスベンチマークがあります。Redhat Linuxマシンでは、スペックが同等のWindows 7ラップトップよりもパフォーマンスが50%遅く見える大きなスクリプトがあります。Linuxマシンはkvmを使用して仮想化され、16GBのメモリとともに4つのコアが割り当てられています。スクリプトはioを集中的に使用しませんが、かなりの数のforループがあります。主に、最適化に使用できるRコンパイルオプションや、これをより比較可能にするのに役立つ可能性のあるカーネルコンパイラオプションがあるかどうか疑問に思っています。任意のポインタをいただければ幸いです。比較しやすいように、別のマシンを入手して、生の金属を使用してテストします。

パフォーマンスの比較

これらは、LinuxマシンでRをコンパイルするために使用しているconfigureフラグです。私はかなりの実験をしましたが、これにより、より大きなデータセットの実行時間が緑色で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

私の最初の疑いと私はまもなくテストし、私の発見で更新することは、KVMLinux仮想化が原因であるということです。このスクリプトは非常にメモリを消費し、多数の配列操作とRがコピーで渡されるため(もちろんmallocする必要があります)、これが問題の原因である可能性があります。VMはメモリコントローラーに直接アクセスできず、他のVMと共有する必要があるため、問題が発生する可能性が非常に高くなります。私は今日の後半に生のマシンを入手し、私の発見で更新します。

迅速な更新をありがとうございました。

アップデート2

当初、パフォーマンスの問題の原因はVMを使用したハイパースレッディングが原因であると考えていましたが、これは正しくないことが判明し、ベアメタルマシンでのパフォーマンスは比較的同じでした。

後で、Windowsラップトップが計算に32ビットバージョンのRを使用していることに気付きました。これにより、64ビットバージョンのRを試してみましたが、まったく同じスクリプトで32ビットよりも約140%遅くなりました。これは、64ビットがRの32ビットバージョンよりも約140%遅くなる可能性があるという疑問に私を導きます。

私たちが見ているのは、32

Windows32ビット実行時間48秒Windows64ビット実行時間2.33秒。

Linux64ビット実行時間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

申し訳ありませんが、スクリプトを合法的に投稿することはできません。

4

3 に答える 3

1

でRを構築--enable-R-shlibすると、パフォーマンスが低下する可能性があります。これについては、Rのインストールと管理付録Bのセクション1で説明しています。それだけで変動の10〜20%を説明できます。他の情報源は、「比較可能な仕様」の違いによるものである可能性があります。

于 2012-10-02T14:20:56.283 に答える
1

『 Writing R Extensions 』マニュアルの「プロファイリング」に関するセクションをご覧ください。

30,000フィートからは、他に多くのことを言うことはできません。プロファイリング情報が必要になります。「一般的なコンセンサス」(そして、これらのことを実際に一般化することはできないので、これを引用符で囲んでいます)は、Linuxはメモリ管理とファイルアクセスで優れている傾向があるため、結果に少し驚いています。

于 2012-10-02T14:18:31.183 に答える
1

この問題は解決され、最適化されていない BLAS ライブラリが原因でした。

この記事はとても役に立ちました。ATLAS の使用は大きな助けになりました。

http://www.cybaea.net/Blogs/Data/Faster-R-through-better-BLAS.html

于 2013-01-05T19:47:32.470 に答える