benderspb
@benderspb

Отсутствует выигрыш в производительности при автораспаралелливании кода gcc (floop-parallelize-all ftree-parallelize-loops=4)?

Изучаю возможность автораспараллеливания кода C. Программа занимается заполнением массива. Когда использую расчетное значение элемента массива, выигрыш в производительности наблюдаю. Когда использую заполнение массива случайными числами rand_r() выигрыша нет, но программа тем не менее выполняется в несколько потоков. Как получить выигрыш в производительности с использованием рандомного заполнения массива?


Обычная компиляция:

gcc -O2 -o seq code.c


Параллельная:

gcc -O2 -floop-parallelize-all -ftree-parallelize-loops=4 -o auto code.c


Код
#include &lt;stdio.h&gt;<br/>
#include &lt;stdlib.h&gt;<br/>
#include &lt;time.h&gt;<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 &lt; 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(&quot;%.3f;&quot;, elapsed); <br/>
<br/>
free(M1);<br/>
<br/>
return 0;<br/>
}<br/>
  • Вопрос задан
  • 2998 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы