Почему глобальная блокировка работает лучше, чем общая блокировка заказа в этом эталоне параллелизма?C++

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

Сообщение Anonymous »

Я работаю над вопросом о домашнем задании (конец этого PDF): https://pages.cs.wisc.edu/~remzi/ostep/threads-bugs.pdf
Код: https://github.com/remzi-arpacidusseau/ ... reads-bugs
В главе32, домашнее задание 8, он использует глобальный замок для предотвращения тупика. Кодовый вектор-avoid-hold и wait.c ниже:

Код: Выделить всё

void vector_add(vector_t *v_dst, vector_t *v_src) {
// put GLOBAL lock around all lock acquisition...
Pthread_mutex_lock(&global);
Pthread_mutex_lock(&v_dst->lock);
Pthread_mutex_lock(&v_src->lock);
Pthread_mutex_unlock(&global);
int i;
for (i = 0; i < VECTOR_SIZE; i++) {
v_dst->values[i] = v_dst->values[i] + v_src->values[i];
}
Pthread_mutex_unlock(&v_dst->lock);
Pthread_mutex_unlock(&v_src->lock);
}
< /code>
Также предоставляет общий заказ для предотвращения тупика. Кодовый вектор-глобальный order.c 
ниже

Код: Выделить всё

void vector_add(vector_t *v_dst, vector_t *v_src) {
if (v_dst < v_src) {
Pthread_mutex_lock(&v_dst->lock);
Pthread_mutex_lock(&v_src->lock);
} else if (v_dst > v_src) {
Pthread_mutex_lock(&v_src->lock);
Pthread_mutex_lock(&v_dst->lock);
} else {
// special case: src and dst are the same
Pthread_mutex_lock(&v_src->lock);
}
int i;
for (i = 0; i < VECTOR_SIZE; i++) {
v_dst->values[i] = v_dst->values[i] + v_src->values[i];
}
Pthread_mutex_unlock(&v_src->lock);
if (v_dst != v_src)
Pthread_mutex_unlock(&v_dst->lock);
}
Я обнаружил, что по мере увеличения числа потоков, производительность избегания лучше, чем Global Order . Команды приведены ниже: < /p>

Код: Выделить всё

./vector-avoid-hold-and-wait -t -n 16 -l 100000 -d
Time: 0.29 seconds

./vector-avoid-hold-and-wait -t -n 32 -l 100000 -d
Time: 0.36 seconds

./vector-avoid-hold-and-wait -t -n 64 -l 100000 -d
Time: 0.74 seconds

./vector-avoid-hold-and-wait -t -n 99 -l 100000 -d
Time: 1.11 seconds

./vector-global-order -t -n 16 -l 100000 -d
Time: 0.25 seconds

./vector-global-order -t -n 32 -l 100000 -d
Time: 0.54 seconds

./vector-global-order -t -n 64 -l 100000 -d
Time: 1.35 seconds

./vector-global-order -t -n 99 -l 100000 -d
Time: 1.95 seconds
< /code>
Но я не знаю почему. По моему мнению, избегая удержания и ожидания 
есть еще одна блокировка для приобретения. Это должно быть хуже, верно?


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Глобальная настройка параллелизма сборки dotnet
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Глобальная настройка параллелизма сборки dotnet
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Глобальная настройка параллелизма сборки dotnet
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Формальное+дидактическое+схематическое объяснение параллелизма и параллелизма.
    Anonymous » » в форуме C++
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Редактор полей оформления заказа Woocommerce — выберите опцию в зависимости от товаров в корзине оформления заказа
    Anonymous » » в форуме Php
    0 Ответы
    132 Просмотры
    Последнее сообщение Anonymous

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