Я пытаюсь добавить содержимое вектора ( 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
Обмен ложными кешами в векторе потоков C ++ ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Если данные, возвращаемые Curl_exec, не являются ложными, может ли это быть пустая строка?
Anonymous » » в форуме Php - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как я могу генерировать исключения CHECKED из лямбда-потоков/потоков Java 8?
Гость » » в форуме JAVA - 0 Ответы
- 47 Просмотры
-
Последнее сообщение Гость
-