Почесав репу некоторое время, т.е. подумав: что же это за фигня такая и как интерпретировать полученный результат?
И думаю ответ тут вот какой:
1. Потоки выстраивались в очередь, по понятной причине (нет полезной работы кроме захвата мьютекса)
2. Синхронизация кэшей между ядрами одного процессора (два соседних ядра внутри QuadCore), где-то 50-100 тактов
3. Синхронизация кэшей между ядрами разных процессоров (2 проца внутри QuadCore), где-то 600 тактов
теперь производим простые вычисления:
Tsync - пенальти за синхронизацию в тактах
N - количество потоков
Hz - частота
M - количество циклов (количество захватов мьютекса на один поток)
T - суммарное пинальти
T = Tsync*N*M/Hz
И получаем около 7 секунд для пукта 2 и около 80 секунд для пункта 3 при частоте 3GHz
Что более менее коррелирует с результатами теста.
За истекшее время я еще немного поупражнялся на том же самом тесте (чуть позже я его выложу)
И выявил примерно следующее соотношение: время под мьютексом + пенальти должно составлять не более 2-5 % от времени выполнения цикла для достижения линейного масштабирования, в противном случае коэффициент масштабирования будет стремительно снижаться вплоть до линейной деградации.
среда, 26 мая 2010 г.
вторник, 13 апреля 2010 г.
Эксперимент: Mutex vs MultiCore
Стало мне тут на днях любопытно: а что будет, если я буду синхронизировать очень короткие задачи (мьютекс на входе в контейнер)
Сделал тест: контейнер с примитивом синхронизации и несколько потоков с возможностью привязки к ядру процессора, в качестве примитива был выбран мой любимый tbb::spin_mutex (пробовал boost::mutex результаты удручающиее).
Сделал тест: контейнер с примитивом синхронизации и несколько потоков с возможностью привязки к ядру процессора, в качестве примитива был выбран мой любимый tbb::spin_mutex (пробовал boost::mutex результаты удручающиее).
пятница, 9 апреля 2010 г.
Пополнение в полезных ссылках: книга The Boost C++ Libraries
Тут коллеги подсказали одну интересную ссылку: книга The Boost C++ Libraries
Всё подробно расписано для таких как я чайников :)
Всё подробно расписано для таких как я чайников :)
Подписаться на:
Сообщения (Atom)