相关疑难解决方法(0)

如何分析在Linux上运行的C++代码?

我有一个在Linux上运行的C++应用程序,我正在优化它.如何确定代码的哪些区域运行缓慢?

c++ unix profiling

1732
推荐指数
12
解决办法
49万
查看次数

最后的性能优化策略

这个网站上已经存在很多性能问题,但是我发现几乎所有这些都是特定于问题且相当狭窄的问题.几乎所有人都重复这些建议,以避免过早优化.

我们假设:

  • 代码已经正常工作
  • 所选择的算法对于问题的情况已经是最佳的
  • 已经测量了代码,并且已经隔离了违规的例程
  • 所有优化尝试也将被测量,以确保它们不会使事情变得更糟

我在这里寻找的是在一个关键算法中挤出最后几个百分点的策略和技巧,除此之外别无他法.

理想情况下,尝试使答案语言不可知,并在适用的情况下指出建议策略的任何缺点.

我将使用我自己的初步建议添加回复,并期待Stack Overflow社区可以想到的任何其他内容.

language-agnostic optimization performance

600
推荐指数
28
解决办法
8万
查看次数

跨CPU核心的rdtsc精度

我正在从一个线程发送网络数据包,并在另一个运行在不同CPU核心上的线程上接收回复.我的进程测量每个数据包的发送和接收之间的时间(类似于ping).我正在使用rdtsc来获得高分辨率,低开销的时序,这是我的实现所需要的.

所有测量看起来都很可靠.尽管如此,我仍然担心核心的rdtsc准确性,因为我一直在阅读一些暗示tsc未在核心之间同步的文本.

在维基百科上找到了关于TSC的以下信息

恒定的TSC行为可确保每个时钟周期的持续时间均匀,并支持将TSC用作挂钟定时器,即使处理器内核更改频率也是如此.这是所有英特尔处理器的架构行为.

我仍然担心核心的累积性,这是我的问题

更多信息

  • 我在Intel nehalem机器上运行我的进程.
  • 操作系统是Linux.
  • 为所有核设置" constant_tsc "cpu标志.

linux multicore rdtsc

31
推荐指数
1
解决办法
2万
查看次数

如何计算函数的经过时间?

我想知道如何计算Delphi中函数的消耗时间.

然后我想显示使用的时间并将其与另一个函数或组件进行比较,以便了解更快的函数.

delphi time function delphi-xe3

16
推荐指数
2
解决办法
2万
查看次数

为什么QueryperformanceCounter的时间与挂钟不同?

您好我使用QueryperformanceCounter来计算Delphi中的代码块.出于某种原因,使用QueryPerformanceCounter获得的毫秒数与使用秒表的挂钟时间完全不同.例如,秒表给了我大约33秒,这似乎是正确的,如果不准确,但使用QueryPerofomanceCounter将给我一个像500毫秒的数字.

通过我的代码,我可以看到QueryPerformanceFrequency给我正确的CPU CPU频率,CoreG E6600的2.4G.因此,如果刻度号是正确的,(tick number / Freq) * 1000应该给我正确的代码执行时间,但为什么不呢?

我知道,对于我想要计时的代码,QeuryPerformanceCounter可能过度杀死,因为花了几秒而不是百万秒,但我更感兴趣的是了解挂钟和QueryPerormanceCounter之间时差的原因.

我的硬件是E6600 Core2,操作系统是Windows 7 X64,如果它是相关的.

unit PerformanceTimer;

interface

uses Windows, SysUtils, DateUtils;

type TPerformanceTimer = class
  private
    fFrequency : TLargeInteger;
    fIsRunning: boolean;
    fIsHighResolution: boolean;
    fStartCount, FstopCount : TLargeInteger;
    procedure SetTickStamp(var lInt : TLargeInteger) ;
    function GetElapsedTicks: TLargeInteger;
    function GetElapsedMiliseconds: TLargeInteger;
  public
    constructor Create(const startOnCreate : boolean = false) ;
    procedure Start;
    procedure Stop;
    property IsHighResolution : boolean read fIsHighResolution;
    property ElapsedTicks : TLargeInteger read GetElapsedTicks;
    property ElapsedMiliseconds : TLargeInteger …
Run Code Online (Sandbox Code Playgroud)

delphi performancecounter

5
推荐指数
2
解决办法
4990
查看次数