install.packages("microbenchmark")
library(microbenchmark)
n <- 2000
k <- seq(0,n,by=20)
res <- microbenchmark(a<-dbinom(k, n, pi/10, log = TRUE))
print(res)
Unit: microseconds
expr min lq mean median uq max neval
a <- dbinom(k, n, pi/10, log = TRUE) 20.16720.16820.8872620.46920.7735.819100
何なんだ?数学バイブルの目標は明確だ。
理解できないことがある
MQLで指定された関数を呼び出した結果は何ですか?スカラーかベクトルか?以下はRでの結果である。
n <- 2000
>
> k <- seq(0, n, by = 20)
>
> dbinom(k, n, pi/10, log = TRUE)
[1] -754.219687 -660.247472 -592.126636 -534.532344 -483.881605
[6] -438.460449 -397.256529 -359.600217 -325.015561 -293.146935
[11] -263.718651 -236.510862 -211.344286 -188.070044 -166.562645
[16] -146.714976 -128.434635 -111.641185 -96.264050 -82.240889
[21] -69.516303 -58.040813 -47.770020 -38.663934 -30.686405
[26] -23.804662 -17.988917 -13.212041 -9.449276 -6.678001
[31] -4.877524 -4.028903 -4.114796 -5.119322 -7.027950
> a<-dbinom(k, n, pi/10, log = TRUE)> str(a)
num [1:101] -754 -660 -592 -535 -484 ...
すなわち、Rでこの関数を呼び出すと、ユニバーサルメソッドplotを使って描画できるベクトルが得られる。
> plot(a)
更新したファイルを /Include/Math/Stat に置いてください。
ベクトル用のオーバーロード関数が追加され、log_modeパラメータが追加されています。
ここにあなたの計算のアナログがあり、Rでの結果と完全に一致しています:
結論
私たちは現在、Rにできるだけ近い構文になるようにベクトル演算を追加する作業を行っています。
もちろん、納品時には多くの新しいユニットテストを追加する予定である。
ところで、Rの数学ライブラリの全速最適化というのは、かなり誇張されている。
これは、ダイナミック・オブジェクト/エンティティを扱うことによる、真正面からのコード記述と乱暴なシステム・オーバーヘッドの結果である。 Rとは異なり、MQL5は明確に型付けされた配列を操作し、ネイティブのx64でコードをコンパイルする。これは大きなアドバンテージとなり、Rの関数のDLL実装に対しても勝つことができる。
上記の例に基づいたテストを以下に示す:R 3.3.1 x64
トリプル実行では、最短20マイクロ秒であった。
同じテストをMQL5でも行った:
Rの20マイクロ秒に対してMQL5は10マイクロ秒と、2倍の速さである。
i7-4930k、Windows 10 x64、MetaTrader 5 x64、仮想化なし、外部負荷なしで計算。
ところで、Rの数学ライブラリの全速最適化というのは、かなり誇張されている。
これは、ダイナミック・オブジェクト/エンティティを扱うことによる、真正面からのコード記述と乱暴なシステム・オーバーヘッドの結果である。 Rとは異なり、MQL5は明確に型付けされた配列を操作し、ネイティブのx64でコードをコンパイルする。これは大きなアドバンテージとなり、Rの関数のDLL実装に対しても勝つことができる。
上記の例に基づいたテストを以下に示す:R 3.3.1 x64
トリプル実行では、最短20マイクロ秒であった。
同じテストをMQL5でも行った:
Rの20マイクロ秒に対してMQL5は10マイクロ秒と、2倍の速さである。
i7-4930k、Windows 10 x64、MetaTrader 5 x64、仮想化なし、外部負荷なしで計算。
ところで、Rの数学ライブラリの全速最適化というのは、かなり誇張されている。
これは、ダイナミック・オブジェクト/エンティティを扱うことによる、真正面からのコード記述と乱暴なシステム・オーバーヘッドの結果である。 Rとは異なり、MQL5は明確に型付けされた配列を操作し、ネイティブのx64でコードをコンパイルする。これは大きなアドバンテージとなり、Rの関数のDLL実装に対しても勝つことができる。
上記の例に基づいたテストを以下に示す:R 3.3.1 x64
トリプル実行では、最短20マイクロ秒であった。
同じテストをMQL5でも行った:
MQL5では、Rの20マイクロ秒に対して10マイクロ秒と、2倍の速さである。
i7-4930k、Windows 10 x64、MetaTrader 5 x64、仮想化なし、外部負荷なしで計算。
とエラー((
'vars' - パラメータの変換が許可されていません。
というエラー((
'vars' - パラメータの変換が許可されていません。
https://www.mql5.com/ru/forum/97153/page4#comment_2882502。
ベクトル用のオーバーライド関数が追加されています。
https://www.mql5.com/ru/forum/97153/page4#comment_2882502。
ベクトル用に再定義された関数があります。
はい、ありがとうございます。そのように動作します。私の場合はこのように動作しました。すぐにお伝えしなければならないのは、私はMTを32ビットのVyneの下で動かしているということです。だから答えが64ビットの方が速いということになるのでしょう。
はい、ありがとうございます。そのように動作します。私の場合はこのように動作しました。)
それは深刻ではない。
wyneでも32bitでも。32ビットでは、MT5はMT4と同様の古いコンパイラを使用しています。MT5の64ビット版専用の新しいコンパイラで作成された64ビットコードに比べると、数十倍遅い。32ビットと64ビットのMQL5プログラムの速度を比較したレポートを発表しました。
各MQL5プログラムには、実際にはコンパイルされたコードが2部含まれています:互換性のために古いシステム用の32ビットと新しいシステム用の64ビットです。
私たちは32ビットコンパイラの開発を完全に放棄しました。
そのため、最大限のパフォーマンスを得たいのであれば、MetaTrader 5の64ビット版のみを使用する必要があります。
ちなみに、MT4に座っている方への情報ですが、そこでもMQL4コードの実行速度は 64ビットのMetaTrader 5よりも数十倍遅いです。
おめでとう!両者とも完勝だ。
Rの最初のパスはbyte/or jitコンパイルなので、max>1.5avg, min~=avgとなる。
まあ、達成...:-)
Rの最初のパスはbyte/or jitコンパイルなので、max>1.5 avg、min~=avgとなる)?
まあ、達成...:-)
Rは、最初の実行と最大時間ではなく、何度も実行して最小時間を 取った。
だから、"コールドスタート "では説明できない。そして、すべてのライブラリコードがDLLにあるような環境であってもだ。事実上、ウォームアップするものは何もない。
しかし、説明できることがある:
DLLで最適化されていない実装は、環境を学習してそれに適応する機会がありません。