Описание тега false-sharing

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

Игра жизни Конвея: оптимизация openMP

Я пытаюсь оптимизировать свой openMP-код для игры жизни Конвея. Моя главная проблема связана, вероятно, с ложным обменом. Вот мой код: это метод в моем классе "mondo". m моя схема, r количество строк, c количество столбцов, и я использую тороидальну…
1 ответ

Избегая ложного обмена для улучшения производительности

#include <iostream> #include <future> #include <chrono> using namespace std; using namespace std::chrono; int a = 0; int padding[16]; // avoid false sharing int b = 0; promise<void> p; shared_future<void> sf = p.get_fut…
24 июн '18 в 16:44
2 ответа

Каков наиболее эффективный способ получить доступ к выровненным символам T & с символа []?

Вчера вечером я работал над этим классом как надёжная оболочка для объектов, выровненных по памяти. У меня есть байтовый массив и математика для доступа к памяти байтового массива для чтения и записи как T, Мне любопытно, однако, как я могу обеспечи…
07 июн '13 в 16:25
1 ответ

Эффективный способ передачи сигналов и сохранения открытости?

У меня есть некоторый код, который пытается выполнить интенсивную матричную обработку, поэтому я подумал, что будет быстрее, если я буду многопоточным. Тем не менее, я намерен сохранить поток живым, чтобы в будущем его можно было использовать для да…
10 сен '14 в 18:46
2 ответа

Происходит ли ложный обмен при чтении данных в openmp?

Если у меня есть программа на C++ с распараллеливанием OpenMP, где разные потоки постоянно используют какой-то небольшой общий массив только для чтения данных из него, происходит ли ложное совместное использование в этом случае? другими словами, лож…
06 июл '17 в 09:23
1 ответ

Ложный обмен защищенными переменными-членами?

Рассматривать: class Vector { double x, y, z; // … }; class Object { Vector Vec1, Vec2; std::mutex Mtx1, Mtx2; void ModifyVec1() { std::lock_guard Lock(Mtx1); /* … */ } void ModifyVec2() { std::lock_guard Lock(Mtx2); /* … */ } }; Если мьютексы или з…
16 сен '16 в 11:06
0 ответов

Ложный обмен Диагностика / Профилактика

В моем коде у меня есть следующий раздел (упрощенно) #pragma omp parallel for for(i = 0; i < N; i++) { int x = struct_arr[i].x; double y = struct_arr[i].y; double z = struct_arr[i].z; double w = struct_arr[i].w; out[i].x = get_new_x(x,y,z,w); } к…
04 мар '18 в 20:53
2 ответа

Многопоточность не эффективна: отладка ложного обмена?

У меня есть следующий код, который запускает несколько потоков (пул потоков) в самом начале (startWorkers()). Впоследствии, в какой-то момент у меня есть контейнер, полный myWorkObject экземпляры, которые я хочу обрабатывать, используя несколько раб…
0 ответов

Понимание ложного примера обмена

Я изучаю ложное разделение и у меня есть пример того, как этого избежать, заполняя массивы: Просто убедившись, что я правильно понимаю, это будет работать, только если мы используем 8-байтовые целые, верно? Если мы используем 4-байтовые целые числа,…
22 июл '17 в 16:25
1 ответ

Ложный обмен в доступе к массиву петель OpenMP

Я хотел бы воспользоваться OpenMP, чтобы сделать мою задачу параллельной. Мне нужно вычесть одно и то же количество для всех элементов массива и записать результат в другом векторе. Оба массива динамически распределяются с malloc и первый заполнен з…
11 июл '17 в 10:56
1 ответ

Как бы вы избежали ложного обмена в подобном сценарии?

В приведенном ниже коде я распараллелил с использованием стандарта OpenMP parallel for пункт. #pragma omp parallel for private(i, j, k, d_equ) shared(cells, tmp_cells, params) for(i=0; i<some_large_value; i++) { for(j=0; j<some_large_value; j+…
13 окт '13 в 18:08
1 ответ

Увеличенная скорость несмотря на ложное разделение

Я провел несколько тестов на OpenMP и сделал эту программу, которая не должна масштабироваться из-за ложного разделения массива "sum". Проблема в том, что она масштабируется. Еще хуже": с 1 потоком: 4 секунды (icpc), 4 секунды (g ++) с 2 потоками: 2…
08 июн '15 в 09:07
2 ответа

OpenMP False Sharing

Я считаю, что я испытываю ложный обмен с использованием OpenMP. Есть ли способ идентифицировать и исправить это? Мой код: https://github.com/wchan/libNN/blob/master/ResilientBackpropagation.hpp строка 36. Использование 4-ядерного процессора по сравн…
27 янв '12 в 00:50
3 ответа

Ложный общий доступ и переменные стека

У меня есть небольшие, но часто используемые функциональные объекты. Каждый поток получает свою собственную копию. Все размещено статически. Копии не разделяют глобальные или статические данные. Нужно ли защищать эти объекты от ложного обмена? Спаси…
26 июл '10 в 06:57
0 ответов

Параллельное программирование ложная проблема совместного использования

У меня есть вопрос о ложном разделении параллельного программирования. Исходный код находится внизу. Резюмируйте мой вопрос здесь: если определить USE_REGISTER, perf stat -e L1-dcache-load -e L1-dcache-load-misses./falseSharing а также #define PADNU…
1 ответ

False Sharing и выравнивание кэша в многопроцессорной системе

Я пытаюсь понять ложное совместное использование и выравнивание кэша и его влияние на производительность в многоядерных системах. Вот мой случай, и я пытаюсь понять на очень высоком уровне. Threads : 2 CPUS/Cores : 4 Locks : 1 per each Thread T1, T2…
0 ответов

Ложный обмен и выравнивание кэша

У меня есть следующий код в C++ (объяснено позже): #include <stdio.h> #include <string> #include <vector> using namespace std; struct th_private{ double mean_tau; th_private() { mean_tau = 0; } }; class resistor { public: string na…
13 дек '13 в 23:22
2 ответа

Будет ли этот std::vector push_back в параллельной области OpenMP приводить к ложному разделению?

Пример кода ниже - это упрощенная версия моего рабочего кода. В этом коде запись в общую переменную выполняется только в последней строке, где std::vector::push_back называется. std::vector<struct FortyByteStruct> results; #pragma omp parallel…
14 ноя '17 в 08:02
1 ответ

Предотвращение ложного обмена без использования отступов

В настоящее время я узнаю о pthreads в C и столкнулся с проблемой ложного обмена. Я думаю, что понимаю концепцию этого, и я попытался немного поэкспериментировать. Ниже короткая программа, с которой я играл. В конце концов, я собираюсь преобразовать…
17 май '15 в 07:24
2 ответа

Ложный обмен и pthreads

У меня есть следующая задача, чтобы продемонстрировать ложный обмен и написал простую программу: #include <sys/times.h> #include <time.h> #include <stdio.h> #include <pthread.h> long long int tmsBegin1,tmsEnd1,tmsBegin2,tmsEn…
30 ноя '11 в 18:51