問題があります.... while ループで配列にデータを書き込んでいます。そしてポイントは、私がそれを本当に頻繁にやっているということです。この書き込みがコードのボトルネックになっているようです。したがって、メモリへの書き込みが原因であると推測されます。この配列はそれほど大きくありません (300 要素程度)。問題は、キャッシュに保存し、while ループが終了した後にのみメモリに更新するという方法で実行できるかどうかです。
[編集 - アレックスが追加した回答からコピー]
double* array1 = new double[1000000]; // this array has elements
unsigned long* array2 = unsigned long[300];
double varX,t,sum=0;
int iter=0,i=0;
while(i<=max_steps)
{
varX+=difX;
nm0 = int(varX);
if(nm1!=nm0)
{
array2[iter] = nm0; // if you comment this string application works more then 2 times faster :)
nm1=nm0;
t = array1[nm0]; // if you comment this string , there is almost no change in time
++iter;
}
sum+=t;
++i;
}
まず、回答をくださった皆様に感謝いたします。確かに、コードを配置しないのは少しばかげていました。だから私は今それをすることにしました。
double* array1 = new double[1000000]; // this array has elements
unsigned long* array2 = unsigned long[300];
double varX,t,sum=0;
int iter=0,i=0;
while(i<=max_steps)
{
varX+=difX;
nm0 = int(varX);
if(nm1!=nm0)
{
array2[iter] = nm0; // if you comment this string application works more then 2 times faster :)
nm1=nm0;
t = array1[nm0]; // if you comment this string , there is almost no change in time
++iter;
}
sum+=t;
++i;
}
それだけでした。どなたかアイデアいただけると助かります。重ねてお礼申し上げます。
敬具 アレックス