PROFIからSUPER PROFIへの質問-1. - ページ 35

 
MQL4は知りませんが、C++でレースを走らせていたとき、最初に走らせたコードが2番目のコードより遅いことに気がつきました。確かに、最初にメモリを確保 するのに時間がかかる。通常5%遅くなる。
 
double H_global[1000],L_global[1000];
int start(){
   int i,j,start_local,start_global,GetTick_local,GetTick_global;
   double H_local[1000],L_local[1000];
   start_local=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_local[i] = High[i];
         L_local[i] = Low[i];
      }
   GetTick_local = GetTickCount();
//---------------------
   start_global=GetTickCount();
   for(j=0;j<10000;j++)
      for(i=0;i<1000;i++){
         H_global[i] = High[i];
         L_global[i] = Low[i];
      }
   GetTick_global = GetTickCount();
//---------------------   
   Print("локальный массив: " , GetTick_local-start_local , " миллисекунд.");
   Print("глобальный массив: ", GetTick_global-start_global, " миллисекунд.");
return(0);
}

をログに残す。

2012.03.23 13:40:50 test EURUSD,H1: グローバル配列: 1406 milliseconds.

2012.03.23 13:40:50 test EURUSD,H1: ローカル配列: 1344 milliseconds.

グローバル変数には 少し時間がかかり、ローカル変数には早くかかる。違いはないと思っていたが、呼び出された関数で測定してみると、他にも違いがあるのかもしれない

 
IgorM:

をログに残す。

2012.03.23 13:40:50 test EURUSD,H1: グローバル配列: 1406 milliseconds.

2012.03.23 13:40:50 test EURUSD,H1: ローカル配列: 1344 milliseconds.

グローバル変数には少し時間がかかり、ローカル変数にはかかる。

入れ替えても結果は変わらないのでしょうね。
 
Zhunko: 入れ替えても結果は変わらないのでしょうね。

を変更し、start()をfunc()にコピーし、start func() を表示 した後、prints:

2012, 03.23 14:11:15 test EURUSD,H1: local array: 1313 milliseconds.

2012.03.23 14:11:15 test EURUSD,H1: グローバル配列: 1359 milliseconds.

2012.03.23 14:11:15 test EURUSD,H1: 関数を呼び出す......。

2012.03.23 14:11:18 test EURUSD,H1: ph-action, local array: 1312 milliseconds.

2012.03.23 14:11:18 test EURUSD,H1: f-ction, global array: 1328 milliseconds.




 
IgorM:

を変更し、start()をfunc()にコピーし、start func() を表示した後、prints :

2012, 03.23 14:11:15 test EURUSD,H1: local array: 1313 milliseconds.

2012.03.23 14:11:15 test EURUSD,H1: グローバル配列: 1359 milliseconds.

2012.03.23 14:11:15 test EURUSD,H1: 関数を呼び出す......。

2012.03.23 14:11:18 test EURUSD,H1: ph-action, local array: 1312 milliseconds.

2012.03.23 14:11:18 test EURUSD,H1: f-ction, global array: 1328 milliseconds.

グローバルとローカルを入れ替えた?今は、まずローカル、次にグローバルです。逆であるべきなのです。
 
IgorM:

を変更し、start()をfunc()にコピーし、start func() を表示した後、prints :

2012, 03.23 14:11:15 test EURUSD,H1: local array: 1313 milliseconds.

2012.03.23 14:11:15 test EURUSD,H1: グローバル配列: 1359 milliseconds.

2012.03.23 14:11:15 test EURUSD,H1: 関数を呼び出す......。

2012.03.23 14:11:18 test EURUSD,H1: ph-action, local array: 1312 milliseconds.

2012.03.23 14:11:18 test EURUSD,H1: f-ction, global array: 1328 milliseconds.

推測ではあるが、ローカル変数のアドレスは関数呼び出し点から、グローバル変数のアドレスはプログラム呼び出し点からカウントされる、つまり、グローバル 変数にアクセスするためには、もう1アクション(オフセットを追加する)する必要があるのだろう。
 
Zhunko: グローバルとローカルを入れ替える?今は、ローカルが先で、グローバルが後です。逆にしてもらわないと。

してみましたが、結果は変わりませんでした。また、別の関数で配列を宣言し、その関数を呼び出して、グローバル配列の呼び出しと比較したところ

alsu さん、それはかなり論理的な仮定ですが、私の実験から面白い考えが浮かびました。mql4はラマーズ用で、ゲームの中で言われているように、好きなように宣言するのです。))).忘れなければmql5で実験してみようかな、MT5の性能について議論しているだけなので、何か明らかになるかもしれません。

 

ひょっとして、誰もFANNをmqlに移植していないのでは?http://leenissen.dk/fann/wp/download/、 NSでmqlに類似のコード。

ZS: 検索してもググっても既製のNSが見つからないので、FANNで.dllを突っ込んでみたら結構動くのですが、.dllなしでも欲しいですね。

 
IgorM:

ひょっとして、誰もFANNをmqlに移植していないのでは?http://leenissen.dk/fann/wp/download/、 NSでmqlに類似のコード。

ZS: 検索してもググっても既製のNSが見つからないので、FANNで.dllを突っ込んでみたら結構動くのですが、.dllなしでも欲しいですね。


専用のソフトウェアでネットワークを学習させるのがよいでしょう。 より高速になりました。また、コードで使用した方が良い
 
Vinin: 専用のソフトウェアでネットワークを学習させるのがよいでしょう。 かなり高速化されています。また、コードで使用した方が良い
わかってるんだけど、どうしても必要で・・・。Expert Advisorで.dllを使わずに自動最適化機能を作りたいのですが... :)