【发布时间】:2011-11-26 07:45:55
【问题描述】:
gprof 说我的高计算应用程序将 53% 的时间花在 std::vector <...> operator [] (unsigned long) 内,其中 32% 用于一个使用频繁的向量。更糟糕的是,我怀疑我的并行代码无法扩展到超过 3-6 个内核是由于相关的内存瓶颈。虽然我的应用程序确实花费了大量时间访问和写入内存,但似乎我应该能够(或至少尝试)做得好于 52%。我应该尝试使用动态数组(在大多数情况下大小保持不变)吗?这可能有助于解决可能的瓶颈吗?
实际上,我首选的解决方案是解决瓶颈问题,并为方便起见保留向量。基于以上,是否有任何可能的罪魁祸首或解决方案(tcmalloc 已出)?
【问题讨论】:
-
嗯,它需要百万分之一纳秒的 53% 吗?如果是这样,它确实做得很好。我不认为占用 53% 的时间本身就是一件坏事,除非那个时间非常长。该计划总体需要多长时间,与什么相关?
-
嗯,
std::vector基本上 是 一个动态数组,所以改变它不会有任何好处。您是否真的在启用优化/发布模式的情况下进行编译? -
AFAIK,gprof 无法分析内联代码。
[]应该被内联,如果它出现,我的猜测是它不是。 -
@Matt:使用
-O标志启用优化。默认为-O0(无优化)。试试-O2(或更高版本)。 -
两件事:第一:用最大优化编译;否则询问性能完全没有意义。第二:确保你的并发确实有意义。是否有很多锁定?
标签: c++ multithreading vector stl