2つのことを参照してください。
10000
は、現代のコンピュータ上の多くではありません。したがってループはおそらくミリ秒未満で実行され、精度はclock()
よりも小さくなります。したがって、ゼロを返します。
non_parallel
の結果を使用していない場合は、ループ全体がコンパイラによって最適化される可能性があります。
おそらく、より高価なループが必要です。 ARRAY_SIZE
をもっと大きなものに増やしてみてください。
ここで大きな配列サイズと私のマシンでのテストです:
#define ARRAY_SIZE 100000000
int main(){
clock_t start, end;
double *non_parallel = (double*)malloc(ARRAY_SIZE * sizeof(double));
double *vec = (double*)malloc(ARRAY_SIZE * sizeof(double));
start = clock();
for(int i = 0; i < ARRAY_SIZE; i++)
{
non_parallel[i] = vec[i] * vec[i];
}
end = clock();
printf("Number of seconds: %f\n", (end-start)/(double)CLOCKS_PER_SEC);
free(non_parallel);
free(vec);
return 0;
}
出力:
Number of seconds: 0.446000
なしあの、OPはすでにオペランドの一方を落としています「倍増」する。 – Mysticial
@ミスティカル私の部分で失敗し、私の答えを固定しました。 – jli
次に、高性能カウンタに言及するために+1することができます。 – Mysticial