#!/usr/bin/env python3
from numba import njit, prange
import time
@njit(parallel=True, fastmath=True, cache=False)
def calc_pi(num_steps):
x, sum1 = 0.0, 0.0
step1 = 1.0 / num_steps
for i in prange(num_steps):
x = (i + 0.5) * step1
sum1 = sum1 + 4.0 / (1.0 + x * x)
return sum1 * step1
calc_pi(1) # minus jit compilation time
start_time = time.time()
pi = calc_pi(1000000000)
msvcr = time.time() - start_time
print(f"--- {msvcr} seconds --- The value of PI is {pi}")
Cでの比較のため。
#include <stdio.h>
#include <time.h>
int main()
{
int num_steps = 1000000000;
double step;
clock_t start;
clock_t stop;
start = clock();
double x, pi, sum=0.0;
step = 1.0/(double)num_steps;
for (int i = 0; i<num_steps; i++)
{
x = (i + .5) * step;
sum = sum + 4.0 / (1.0 + x * x);
}
pi = sum*step;
stop = clock();
printf("The value of PI is %1.12f \n", pi);
printf("The time to calculate PI was %5.3f seconds \n", ((double)(stop - start)/CLOCKS_PER_SEC));
return0;
}
このスレッドに移動しました。
Pythonも勉強していますが、あくまでニューラルネットワークや機械学習など、派手なものやパッケージを使いこなすための一環としてです。 こんな超弩級のもので仕事ができるとは思えない、MQL5の200倍は遅い、簡単なテストの結果を引用してみたが。
まだ理解していないのですが、MQL5からPythonモジュールを接続して関数を呼び出すことは可能なのでしょうか?それともPython->MQL5だけ?
失礼ながら、あなたは調理法をご存じないだけです。例を作り直しました。
Pythonで。
これはすべて古代のAMD Athlon(tm) 64 X2 Dual Core Processor 4200+の計算機で、MQL5では12秒前後の値になると思います。
(LinuxでMQLのコードを実行する方法は知りません)。
つまり、jitコンパイラを使ったPythonはC(mql)に2倍の差をつけました!最新の8コアCPUで実行すると、マルチスレッドなので8倍の差をつけることができます。
しかし、1スレッドのPythonの結果でも9.6秒ですから、まだ速い方です。また、CUDAを搭載したビデオカードでも動作させることができます。
例えば私はCやMQLでマルチスレッドのアナログを書くことができません。loky、レース、クラッシュを書くことができなくなり、さらにコードはずっと大きくなってしまいます。
MetaTraderの開発者に質問:Pythonから取引関数の 呼び出しを追加する予定はありますか?
また、Pythonでターミナルからのティックイベントを購読する関数が必要で、ティックが来るとPythonにメッセージが送信されます。
これらの機能はサードパーティーで開発されたものがあるのは知っていますが、箱から出して欲しいです。
また、GoLangでマルチスレッドのコードを書いてみるのもいいでしょう。興味本位ですが、1スレッドではC言語と同等の速度になります。mql5
i7を仮想マシンに 搭載、2コア4スレッドを割り当て
どのようなプロセッサをお持ちですか? 私のコードをCで実行して比較してみてください。
i7なら、私のAMDの25倍は速いでしょう。レポートポイントのために、同じ言語でのテストが必要です。
どのようなプロセッサをお持ちですか? 私のコードをCで実行して比較してみてください。
C
i7を仮想マシンに 搭載、2コア4スレッドを割り当て
パイ
Linuxのi7、4コア、8スレッド
素晴らしい結果ですと素早く書きました。pythonが遅いと言っている人は、ここでテスト結果を見るために送られることができます。
プロセッサ上の1つのスレッドでより多くのPythonコードを実行する (parallel = False)
フルテストに
悲しいかな、数字計算機はこの15年で12倍くらいしか上がってないんですよ、最近のCPUは速くなってると思ってました。(並列 = False)
素晴らしい結果ですと素早く書きました。pythonが遅いと言っている人は、ここでテスト結果を見るために送られることができます。
プロセッサ上の1つのスレッドでより多くのPythonコードを実行する (parallel = False)
完全なテストのために。
それらはずっと前に投稿されたものですが、彼らは純粋なパイソンと比較することを好みますが、それは意味がありません。