Я пытаюсь распараллелить трассировщик лучей в C, но время выполнения не уменьшается по мере увеличения числа потоков. Код, который у меня пока есть:
main2(thread function):
float **result=malloc(width * sizeof(float*));
int count=0;
for (int px=0;, px<width; ++px)
{
...
for (int py=0; py<height; ++py)
{
...
float *scaled_color=malloc(3*sizeof(float));
scaled_color[0]=...
scaled_color[1]=...
scaled_color[2]=...
result[count]=scaled_color;
count++;
...
}
}
...
return (void *) result;
main:
pthread_t threads[nthreads];
for (i=0;i<nthreads;i++)
{
pthread_create(&threads[i], NULL, main2, &i);
}
float** result_handler;
for (i=0; i<nthreads; i++)
{
pthread_join(threads[i], (void *) &result_handler);
int count=0;
for(j=0; j<width;j++)
{
for(k=0;k<height;k++)
{
float* scaled_color=result_handler[count];
count ++;
printf...
}
printf("\n");
}
}
main2 возвращает число с плавающей точкой **, так что картинка может быть распечатана по порядку в основной функции. Кто-нибудь знает, почему время выполнения не уменьшается (например, оно работает дольше с 8-ю потоками, чем с 4-мя потоками, когда это должно быть наоборот)?