- 论坛徽章:
- 0
|
本帖最后由 asdmonster 于 2012-10-10 19:42 编辑
有一个程序,多线程,其中可以多线程并行的部分,是多个线程访问一个全局的大结构体(的不同或者相同部分,只读,不做修改)做分别计算,
理论上,如果并行部分总的计算量是M,线程数是N,那么这一部分的计算量应该是M/N,或者近似.
现在的情况是不是这样,比如2线程和6线程比较, Cost(2)*2 < Cost(6)*6, 后者大约比前者高了25%的样子.
不知道这个出问题的原因在哪里.(这里只考量并行部分时间,串行的因素不存在)
下面是perf stat的结果:- 444.705669 task-clock-msecs # 1.016 CPUs
- 2481 context-switches # 0.006 M/sec
- 10 CPU-migrations # 0.000 M/sec
- 22766 page-faults # 0.051 M/sec
- 1385672874 cycles # 3115.933 M/sec
- 1223208823 instructions # 0.883 IPC
- 240270596 branches # 540.291 M/sec
- 26247124 branch-misses # 10.924 %
- 11659542 cache-references # 26.219 M/sec
- 4131662 cache-misses # 9.291 M/sec
复制代码 branch-misses我看了,是整个程序的其它部分造成,无关.
别的地方还有哪里不对的,我看不出来. |
|