Автоматическое распараллеливание дружественных методов программирования - PullRequest
1 голос
/ 05 марта 2011

Из этой статьи : Избегайте излишней сериализации алгоритмов: алгоритмов, таких как случайные генераторы чисел, которые должны передать начальное значение для следующего сериализованного вызова генератора алгоритм излишне, если количество раз генератор будет вызов внутри потока не может быть точно предсказан. Эти алгоритмы вместо этого следует заменить более распространенными версиями.

В: Может ли кто-нибудь объяснить, пожалуйста "сериализовать алгоритм без необходимости, если число раз, которое генератор будет вызываться в потоке, не может быть точно предсказано." поколение мы должны передать семя. Таким образом, как можно избежать сериализации.

1 Ответ

1 голос
/ 05 марта 2011

Если у вас есть ГСЧ, которая зависит от его предыдущего значения (больше всего), и вы пишете его так:

r = Random.new();
for(int i=0; i<100*usersInput; i++) 
    r.rand();
}

Он не может автоматически распараллеливаться даже умным компилятором.Однако, если вы напишите это так:

for(int i=0; i<usersInput; i++) {
    r = Random.new();
    [for(int j=0; j<100; j++) {
        r.rand();
    }] fork
}

Очень умный компилятор может заставить программу работать в usersInput-number-of-thread, каждый из которых должен будет выполнить только 100 итераций вместо usersInput * 100.

...