如果我运行命令
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.67GHz(6 核带 HT)上进行了这些测试,该处理器有 24 GB 内存,openSUSE 11.3,内核 2.6.34.7-0.5-default 和 kernel-default-2.6.37-6.1,http://download.opensuse.org/repositories/内核:/stable/openSUSE_11.3/x86_64/。
这种减速是预料之中的吗?有人可以确认这些结果并在您自己的硬件上在 2.6.34 和 2.6.37 上测试前面的命令吗?如果您运行上述命令,请根据您的核心数量调整 $T。如果内存不足,请将内循环 (1..9e6) 减少到 (1..9e5) 或类似值。
谢谢,理查德
答案1
您确定两个内核的配置相同吗?