1

我刚刚为这个超级问题/答案做了一些基准测试为什么我的程序在准确地循环 8192 个元素时很慢?

我想在一个核心上做基准测试,所以程序是单线程的。但是它并没有达到一个核心的100%使用率,最多使用60%。所以我的测试并不准确。

我正在使用 Qt Creator,使用 MinGW 发布模式进行编译。

是否有任何参数可以设置以获得更好的性能?我无法利用 CPU 能力是否正常?它与Qt有关吗?是否有一些中断或某些东西阻止代码以 100% 运行...

这是主循环

//  horizontal sums for first two lines
for(i=1;i<SIZE*2;i++){ 
    hsumPointer[i]=imgPointer[i-1]+imgPointer[i]+imgPointer[i+1];
}
// rest of the computation
for(;i<totalSize;i++){ 
    // compute horizontal sum for next line
    hsumPointer[i]=imgPointer[i-1]+imgPointer[i]+imgPointer[i+1];
    // final result
    resPointer[i-SIZE]=(hsumPointer[i-SIZE-SIZE]+hsumPointer[i-SIZE]+hsumPointer[i])/9; 
}

这在 SIZE=8193 的 SIZE*SIZE 浮点数组上运行 10 次,该数组在堆上。

4

1 回答 1

1

任务管理器未在 1 个核心上显示 100% 的 CPU 使用率可能有多种原因:

  1. 您有一个多处理器系统,并且负载分散在多个 CPU 上(大多数操作系统都会这样做,除非您指定更严格的 CPU 亲和性);
  2. 运行时间不足以跨越整个任务管理器采样周期;
  3. 您的 RAM 已经用完并且正在大量交换,这意味着在读取/写入内存时需要花费大量时间等待磁盘 I/O。

或者它可能是这三者的组合。

Let_Me_Be 对您的问题的评论也是正确的——这不是 QT 的错,因为没有调用 QT 函数(假设正在读取和写入的对象只是简单的数字数据类型,而不是带有重载operator=()或其他东西的花哨的 C++ 对象)。在该代码区域中发生的唯一活动是纯粹基于 CPU 的(嗯,CPU 将花费一些时间等待数据发送到 RAM 或从 RAM 发送,但这被计为 CPU 使用时间),所以除了上述条件外,您会期望看到 100% 的 CPU 利用率。

于 2012-09-06T12:01:04.673 回答