Мощь и беспомощность автоматической оптимизации

         

Авто-параллелизм


Многопроцессорные машины, двуядерные процессоры и процессоры с поддержкой Hyper-Threading эффективны лишь при обработке многопоточных приложений, поскольку всякий поток в каждый момент времени может исполняться только на одном процессоре. Программы, состоящие всего из одного потока на многопроцессорной машине исполняются с той же скоростью, что и на однопроцессорной (или даже чуть-чуть медленнее, за счет дополнительных накладных расходов).

Для оптимизации под многопроцессорные машины, следует разбивать циклы с большим количеством итераций на N циклов меньшего размера, помещая каждый из них в свой поток, где N— количество процессоров, обычно равное двум. Такая техника оптимизации называется авто-параллелизмом (auto-parallelization) и наглядно демонстрируется следующим примером:

for (i=0; i<XXL; i++)

       a[i] = a[i] + b[i] * c[i];



Содержание раздела