Почему многопоточный доступ к данным в одной и той же кэш-линии имеет низкую частоту пропадания кеша? - PullRequest
1 голос
/ 06 ноября 2010

Было отмечено, что доступ к элементам данных, попадающим в одну и ту же строку кэша, работает плохо из-за эффекта пинг-понга. Однако код, который я написал, не проверен с помощью valgrind --tool = cachegrind не показывает этого поведения. Буду признателен за любые идеи по этому поводу?

Прилагается ниже функция, которую выполняет каждый pthread:

   void test_cache(void* arg)    
   {    
    long id = (long) arg;  
    uint32_t idx = (uint32_t) id;  
    uint32_t ctr = 0;  
    uint32_t total_sum = 0;  
    for(; ctr < 500000; ++ctr)  
    {  
      total_sum += shared[idx];  
      AO_fetch_and_add(&shared[idx], idx);    
    }
    printf("%d %d,\n",id, total_sum);   
}  

Ответы [ 2 ]

2 голосов
/ 06 ноября 2010

Чтения в порядке (после заполнения кеша), записи нет, так как это, в зависимости от архитектуры, приведет к тому, что все остальные процессоры аннулируют эту строку кеша и извлекутстрока из памяти.(Системы, которые отслеживают строки кэша, могли бы избежать этого штрафа).

Начальная загрузка строки кэша также будет иметь штраф, поскольку требуется загрузка на кэш (совместно используемые кэши лучше), причем ситуация является наихудшей вNUMA (извлечение из удаленного процессора).

0 голосов
/ 06 ноября 2010

Если вы работаете на «двухъядерном» устройстве, вы попадаете в общий кеш.Вам нужны отдельные физические процессоры, чтобы увидеть эффект пинг-понга.Включите ваши спецификации оборудования в вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...