- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
void testing_dot(int N)
{
Vector_type<float> X(N), Y(N);
for (int i = 0; i < N; ++i)
{
X[i] = sin(i);
Y[i] = cos(i);
}
int Ntest = 20;
float taxpyseq = 0.0, t;
const float axpyflop = Ntest*Ntest*N * 3 * 1E-9;
printf("testing sequential ops:\n");
omp_set_num_threads(1);
for (int i = 0; i < Ntest; i++) {
t = omp_get_wtime();
for (int j = 0; j < Ntest; j++) dot(X, Y);
taxpyseq += omp_get_wtime() - t;
}
printf("Sequential ops timing: \n");
printf("dot time=%6.3fs GFLOPS=%6.2f\n", taxpyseq, axpyflop / taxpyseq);
//parallel mode
const int NTR = omp_get_num_procs();
for (int ntr = 2; ntr <= NTR; ntr += 2) {
for (int i = 0; i < N; ++i)
{
X[i] = sin(i);
Y[i] = cos(i);
}
printf("testing parallel ops for ntr=%d:\n", ntr);
omp_set_num_threads(ntr);
float taxpypar = 0.0;
for (int i = 0; i < Ntest; i++) {
t = omp_get_wtime();
for (int j = 0; j < Ntest; j++); dot(X, Y);//действительно небывалое ускорение!!!
taxpypar += omp_get_wtime() - t;
}
printf("dot time=%6.3fs GFLOPS=%6.2f Speedup=%6.2fX \n",
taxpypar, axpyflop / taxpypar, taxpyseq / taxpypar);
}
}
когда ты доказываешь закащику, что твой алгоритм реально лучше...