Обмен ложными кешами в векторе потоков C ++C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Обмен ложными кешами в векторе потоков C ++

Сообщение Anonymous »

Я пытаюсь добавить содержимое вектора ( v ), используя потоки на другом векторе ( localsum ), как показывают следующие коды: < Br />void threadsum(int threadID, int numThreads, const vector& v, vector& localSum)
{
size_t start = threadID * v.size() / numThreads;
size_t stop = (threadID + 1) * v.size() / numThreads;
localSum[threadID] = 0.0;
for (size_t i = start; i < stop; i++) {
localSum[threadID] += v;
}
}
< /code>
Прямо сейчас у меня возникают проблемы с производительностью, касающиеся проблемы обмена ложными кешами, потому что каждый поток пытается писать в разных местах в одной и той же линии кэша. Вектор v и вектор потоков локалсум объявляются следующим образом:
// create the input vector v and put some values in v
vector v(N);
for (int i = 0; i < N; i++)
v = i;

// this vector will contain the partial sum for each thread

vector localSum(numThreads, 0);
< /code>
Теперь, как я могу избежать этой проблемы?. Одна идея, которую я получил, состоит в том, чтобы использовать Mutex, чтобы ограничить время доступа к localsum . Другая идея, которая у меня есть, заключалась в том, чтобы сместить элементы вектора, чтобы они не были на той же линии кэша?>

Подробнее здесь: https://stackoverflow.com/questions/474 ... -threads-c
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»