- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 Linux 上使用 C,并希望针对不同的输入大小计算我的代码的性能。该代码是用于求解 PDE 的数值方法,我有可靠的基础来预测代码的执行时间。
我遇到的问题是记录特定问题的计时结果。对于我遇到的所有问题,除了一个问题,使用 clock() 获取开始和结束时间给出了我期望的时间。也就是说,如果大小为 N 的输入花费时间 T,那么大小为 4N 的输入将花费时间 4T。对于一个问题,情况并非如此(打开和不打开优化标志)。为了弄清楚发生了什么,我使用分析器 (gprof) 运行了代码,在这种情况下,分析器告诉我代码需要一些时间来执行,这与 clock() 时间相去甚远给出。下面显示的结果是gprof中给出的时间,使用clock()的时间是在不带-gp的情况下重新编译相同代码时给出的。作为健全性检查,所有代码都在未设置任何优化标志的情况下编译
Input size | Time (clock()) | Time (gprof)
256x256 | 122.77 | 32.14
512x512 | 538.94 | 128.37
1024x1024 | 2712.67 | 511.22
我使用 gprof 得到的缩放是我想要的,但是当我在没有任何分析的情况下执行代码时,代码本身的执行时间(挂钟时间)与打开分析时(这是非常奇怪)并且缩放比例不再是预期的因子 4。是否有关于为什么会这样的解释?
对于上面给出的结果,我认为唯一不同的是我广泛使用了具有小数幂的 pow() 函数,据一些研究表明它运行速度非常慢。但是,我希望减速是均匀的,这样时间的缩放应该仍然是均匀的。请注意,我没有使用文件 I/O 并且向控制台输出的输出很少,因此在程序可能会挂起很长时间的地方应该没有任何输出
最佳答案
gprof 做的是每秒对程序计数器采样 100 次,每次看它能不能找出程序计数器在哪个函数中。(它还会跟踪任何函数调用任何其他函数的次数。)但它仅对使用 -pg 编译的函数执行此操作。
假设程序计数器在数学库中,因为那是你调用的,但数学库不是用 -pg 编译的。gprof 基本上会丢弃样本。
看,gprof 是一个受人尊敬的工具,但 stackoverflow 充满了试图理解它的问题。除了不调用任何库函数、不执行递归和不执行任何 I/O 的程序(即玩具程序)外,不要指望从中得到任何类似精确测量的东西。
测量执行时间的最佳方法就是您执行它的方式 - 简单的总体计时。如果你想要更多位数的精度,只需重复执行N次并除以N。
另一方面,如果您想查看函数或代码行花费了多少时间部分,包括仅程序计数器(独占或自身时间)和包括被调用者(包括在内)时间)你需要得到堆栈样本。(因为包含分数 = 堆栈上的时间分数,而独占分数 = 堆栈结束的时间分数。)一些分析器会这样做。许多人只是do it manually如果他们满足于低精度。如果执行过程可能包括对诸如 sleep 、互斥等待或 I/O 等阻塞函数的调用,而您不希望将其排除在外,则需要在挂钟时间采集样本。 Very few profilers这样做,但显然手动方法可以做到这一点。
关于c - 配置文件时间与 clock() 时间无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25626065/
这个问题在这里已经有了答案: What specifically are wall-clock-time, user-cpu-time, and system-cpu-time in UNIX? (4
我只是尝试使用 jasmine 在 javascript/coffeescript 中进行单元测试,非常好。 我一直在尝试使用 jasmine.Clock.Mock() 来提前并触发 setTimeo
现在使用 emacs org 模式大约一个月来跟踪我所有的项目和任务。 我全天为所有事件计时,而不仅仅是与工作相关的事件。 我的问题是——我经常忘记打卡参加一项新事件(比如吃午饭)。当我返回并打卡回到
我在看 Clock来自java的类,以便我可以将其作为依赖项注入(inject)以获得更好的可测试性。但是我不明白这两种方法的区别systemUTC和 systemDefaultZone . Inst
当我设置特定日期时,我正在努力测试我的端点。 我不想使用 PowerMock 来模拟静态方法,而是决定更改我的服务的实现并使用 LocalDate.now(Clock clock) 实现来更容易地测试
我有一个员工“上类打卡”表,具有开始时间和结束时间属性。每位员工上下类打卡,表格类似这样: Employee_no Start time End time 16
Linux perf工具(前段时间命名为 perf_events)有几个内置的通用软件事件。其中最基本的两个是:task-clock和 cpu_clock (内部称为 PERF_COUNT_SW_CP
我的方法之一中有以下代码 ZonedDateTime current = Instant.now().atZone(ZoneId.of(AMERICA_NEW_YORK)); 我想在 JUnit 测试
我正在使用 sf::Clock 来控制循环。 我想知道是否允许我使用超过 1 个 sf::Clock,如果允许,是否所有“时钟”都将正常运行并按预期工作在所有操作系统上。 例如: sf::Clock
假设您有一个 (1) Intel/AMD x86-64 位 2 GHz 8 核处理器。 8 个内核中的每一个是否都以完整的 2 GHz 运行,或者每个内核是否以完整的 2 GHz 时钟的一部分运行(例
对于 java 8 下面的代码 1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone())); 2. System.o
我有以下使用Chatterbot第三方库的代码:。当我尝试使用代码时,从Visual Studio收到如下错误:。我安装了以下程序包:。我尝试了使用Python3.9和3.11以及Chatterbot
我有以下使用Chatterbot第三方库的代码:。当我尝试使用代码时,从Visual Studio收到如下错误:。我安装了以下程序包:。我尝试了使用Python3.9和3.11以及Chatterbot
我有以下使用Chatterbot第三方库的代码:。当我尝试使用代码时,从Visual Studio收到如下错误:。我安装了以下程序包:。我尝试了使用Python3.9和3.11以及Chatterbot
我有一个相对简单的要求:我希望我在 KVM 下创建的 CentOS 客户机上的时钟从 VM 的第一次启动就与它们的 CentOS 主机同步。 在它们启动并运行后将它们与 NTP 同步很容易。但是,如果
谁能告诉我如何找到STM32F429的APB1时钟频率?以及如何计算STM32F429的波特率。 P.S...请不要告诉我引用引用手册,因为这些工作已经完成,我想告诉我 APB1 时钟频率的确切值 谢
我在 LAN 上有 5 台服务器,没有 Internet 连接。我需要他们保持时钟同步。 我可以将它们配置为 NTP 对等体,并为其中一个的本地时钟设置较高的层数。这样,其他四个就会与该时钟同步。 我
让我们假设我们有许多系统连接在本地网络中并且没有连接到互联网。确保每个时钟同步的最佳方法是什么?它们不一定要与 UTC 时间同步,但在它们之间保持同步就足够了。 我曾想过通过在其中一个系统中设置 NT
我对 clock() 有疑问在运行 32 位版本的 Debian 6.0.3 的机器上。它似乎总是返回 0。使用 this example program 时,我得到以下输出: Calculating
我正在尝试编写一个程序来比较快速排序和插入排序函数所花费的时间,具体取决于数组中元素的数量。这是我想出的代码: #include #include #include //prototypes o
我是一名优秀的程序员,十分优秀!