Изучаю возможность автораспараллеливания кода C. Программа занимается заполнением массива. Когда использую расчетное значение элемента массива, выигрыш в производительности наблюдаю. Когда использую заполнение массива случайными числами rand_r() выигрыша нет, но программа тем не менее выполняется в несколько потоков. Как получить выигрыш в производительности с использованием рандомного заполнения массива?
Обычная компиляция:
gcc -O2 -o seq code.c
Параллельная:
gcc -O2 -floop-parallelize-all -ftree-parallelize-loops=4 -o auto code.c
Код
#include <stdio.h><br/>
#include <stdlib.h><br/>
#include <time.h><br/>
<br/>
int main(int argc, char* argv[])<br/>
{<br/>
<br/>
int N = atoi(argv[1]);<br/>
<br/>
struct timeval t0, t1;<br/>
<br/>
int e,i,j,k,l; <br/>
<br/>
double* M1;<br/>
<br/>
M1 = calloc(N * N, sizeof(double));<br/>
<br/>
unsigned int seed = 1;<br/>
<br/>
gettimeofday(&t0, NULL);<br/>
<br/>
for(i = 0; i < N*N; i++)<br/>
M1[i] = rand_r(&seed);<br/>
//M1[i] = i*i*i / 3.12514565;<br/>
<br/>
gettimeofday(&t1, NULL);<br/>
double elapsed = ( (t1.tv_sec-t0.tv_sec)*1000000 + t1.tv_usec-t0.tv_usec )/1000000.0;<br/>
printf("%.3f;", elapsed); <br/>
<br/>
free(M1);<br/>
<br/>
return 0;<br/>
}<br/>