Параллельная сумма для векторов

Не могли бы вы дать несколько советов о том, как я могу уменьшить время выполнения цикла for с помощью многопоточности? Предположим, у меня также есть два вектора, называемые 'a' и 'b'.

for (int j = 0; j < 8000; j++){
    // Perform an operation and store in the vector 'a'
    // Add 'a' to 'b' coefficient wise
}

Этот цикл for выполняется в моей программе много раз. Две операции в приведенном выше цикле for уже оптимизированы, но они выполняются только на одном ядре. Однако у меня есть 16 доступных ядер, и я хотел бы их использовать.

Я попытался изменить цикл следующим образом: вместо вектора 'a' у меня есть 16 векторов, и предположим, что i-й называется a [i]. Мой цикл for теперь выглядит как

for (int j = 0; j < 500; j++){
    for (int i = 0; i < 16; i++){
        // Perform an operation and store in the vector 'a[i]'
    }
    for (int i = 0; i < 16; i++){
        // Add 'a[i]' to 'b' coefficient wise
    }

}

Я использую OpenMp в каждом из циклов for внутри, добавляя "#pragma omp parallel for" перед каждым из внутренних циклов. Все мои процессоры используются, но время выполнения только значительно увеличивается. Есть ли у кого-нибудь предложения о том, как я могу сократить время выполнения этого цикла? Заранее спасибо.

6
задан A-A 5 June 2011 в 05:58
поделиться