私は最近、R の Windows ボックスでファジー文字列マッチング ルーチンを開発しました。その速度には本当に満足しています。今、仮想 Redhat サーバーで同じ手順を実行しようとしましたが、かなり遅くなりました。100. Windows マシン (6 コア、Intel、3.4Ghz) では、手順全体で 1 時間かかります。
私が基本的にやっていることはこれです:
location <- (if (RB$ORT[x] == "n/a"){rep(NA, length(TAC$ORT))} else {stringdist(RB$ORT[x], TAC$ORT, useBytes = TRUE)})
Redhat マシン (14 コア、AMD、2.6 GHz) で、openblas を有効にして R を実行しています。バージョン 0.9.4.1 の r パッケージ stringdist は両方のマシンにあります。上記のコマンドは数百万回実行されます。奇妙なことに、速度が低下しているようにさえ見えます。プロセスを開始すると、ログに次のように表示されます。
get location right: 0.04 secs
engine used: tclget location right: 0.05 secs
engine used: tclget location right: 0.02 secs
engine used: tclget location right: 0.01 secs
engine used: tclget location right: 0.02 secs
engine used: tclget location right: 0.03 secs
engine used: tclget location right: 0.02 secs
数時間後、次のように表示されます。
get location right: 0.27 secs
get location right: 0.27 secs
get location right: 0.26 secs
engine used: tclget location right: 0.14 secs
get location right: 0.27 secs
engine used: tclget location right: 0.26 secs
engine used: tclget location right: 0.23 secs
engine used: tclget location right: 0.14 secs
get location right: 0.28 secs
get location right: 0.29 secs
Windows マシンでは、これは次のようになります (6 つのプロセスがログに書き込みます)。
get location right: 0 secs
get location right: 0 secs
engine used: tclget location right: 0 secs
get location right: 0 secs
engine used: tclget location right: 0 secs
engine used: tclengine used: tclget location right: 0 secs
get location right: 0 secs
get location right: 0 secs
Windows マシンでは、RevolutionR (またはその R-open-MS バリアント) は使用しません。mkl を使用しているかどうかはわかりませんが、実際には、R で文字クラスを操作する場合は問題になりません。何らかのエンコーディングの問題が原因でしょうか? Rprof でプロファイリングする場合、かかる絶対時間は、Windows と Linux で同じように報告されません。相対時間に関しては、enc2utf8 のみが Linux でより顕著に見えるようです。
他のアイデアはありますか?thnxマーティン