小编jk4*_*736的帖子

C++中的虚假共享

我有几个类遭受缓存争用,并使用"new"运算符进行分配.我可以以某种方式确保"new"返回一个与缓存行对齐的地址吗?

我正在使用GCC(如果它不可能).

c++ multithreading

9
推荐指数
1
解决办法
840
查看次数

多线程性能和分析

我有一个程序可以很好地扩展到多个线程,虽然 - 从理论上讲 - 它应该线性扩展:它是一个分成较小块的计算,不需要系统调用,库调用,锁定等.运行四个线程只是关于比使用单个线程(在四核系统上)运行速度快两倍,而我希望数字的速度接近四倍.

使用pthreads,C++ 0x线程和OpenMP的实现的运行时间一致.

为了找出原因,我尝试了gprof(无用)和valgrind(我没有看到任何明显的东西).我怎样才能有效地对导致经济放缓的因素进行基准测试?关于其可能原因的任何一般性想法?

- 更新 -

计算涉及蒙特卡洛积分,我注意到花费了不合理的时间来生成随机数.虽然我不知道为什么四线程会发生这种情况,但我注意到随机数生成器不是可重入的.使用互斥锁时,运行时间会爆炸.在检查其他问题之前,我会重新实现这一部分.

我重新实现了抽样类,这确实大大提高了性能.事实上,剩下的问题是CPU缓存的争用(正如evgeny所怀疑的那样,它被cachegrind所揭示.)

performance multithreading

7
推荐指数
1
解决办法
290
查看次数

128位SSE计数器?

我需要一个__m128i变量的函数,其周期为2 ^ 128.它不需要单调增加(如计数器),但访问每个值一次.

我能想到的最简单的例子实际上是一个128位计数器,但我发现在SSE中很难实现.有没有更简单/更快的解决方案?

optimization sse intrinsics avx

7
推荐指数
1
解决办法
759
查看次数

标签 统计

multithreading ×2

avx ×1

c++ ×1

intrinsics ×1

optimization ×1

performance ×1

sse ×1