Если я запустил команду
time perl -e 'use threads; $T=12 ; foreach (1..$T) { $thr[$i++] = threads->create(sub { printf "I am thread %s\n", threads->tid(); foreach (1..9e6) { push(@a, sqrt(1234)/sin(1234)*cos(1234)) } ; printf "thread %s finished.\n", threads->tid(); }); } foreach (0..$T-1) { $thr[$_]->join(); }'
Я вижу, что 2.6.37 На 80% медленнее чем 2.6.34. Команда просто запускает 12 потоков, вычисляющих sqrt (1234) / sin (1234) * cos (1234) 9.000.000 раз, и ожидает завершения всех потоков.
Я провел эти тесты на двойном Xeon X5650 @ 2,67 ГГц (6 ядер с HT) с памятью 24 ГБ, openSUSE 11.3, ядрами 2.6.34.7-0.5-default и kernel-default-2.6.37-6.1 от http://download.opensuse.org/repositories/Kernel:/stable/openSUSE_11.3/x86_64/ .
Ожидается ли это замедление? Может ли кто-нибудь подтвердить эти результаты и протестировать предыдущую команду на 2.6.34 и 2.6.37 на своем собственном оборудовании? Если вы запустите указанную выше команду, отрегулируйте $ T в соответствии с вашим количеством ядер. Если вам не хватает памяти, уменьшите внутренний цикл (1..9e6) до (1..9e5) или аналогичный.
Спасибо, Ричард
Вы уверены, что у вас одинаковая конфигурация в обоих ядрах?