- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在用 C 编写应用程序,我打算在其中模拟 ubuntu 中的 CPU 负载低于 100%。我使用阶乘算法对我的 CPU 施加压力,并使用 nanosleep
函数来调节 CPU 使用率。目标是稳定的 CPU 使用率和合理的容差,可以逐步变化,即 20%、30% 等。问题是当我启动我的应用程序时,我得到 45-53% 的弹跳负载,这是我想要加载的50% 的 CPU 使用率。由于我的研究,我需要获得稳定的 CPU 使用率,我通过跟踪两次执行之间的时间戳来计算响应时间。
编辑 我正在使用带有 Ubuntu 14.04 VM 的 VmWare Workstation 进行研究。这是代码
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <unistd.h>
int main(void)
{
struct timeval t1;
int milisec = 5; // length of time to sleep, in miliseconds
struct timespec req = {0};
req.tv_sec = 0;
req.tv_nsec = milisec * 1000000L;
FILE *file;
file = fopen("trace.txt", "w");
//int j = 0;
while(1)
{
gettimeofday(&t1, NULL);
int i;
int res = 1;
for(i = 0; i < 580000; i++)
{
res = res*i;
}
nanosleep(&req, (struct timespec *)NULL);
fprintf(file, "%llu%llu\n", (unsigned long long)t1.tv_sec, (unsigned long long)t1.tv_usec);
fflush(file);
//j++;
}
}
最佳答案
这是我的看法 - 在我的光照测试中看起来相当不错。基本思想是使用 getrusage
来跟踪程序有多少 CPU 时间,将其除以挂钟运行时间,如果超过目标比率则产生 yield 。您可以查看它是否提供比您自己的代码更稳定的结果。
(注意:问题最初被标记为 C++ 而不是 C...代码可以很容易地移植到 C)
#include <iostream>
#include <sstream>
#include <sys/time.h>
#include <sys/resource.h>
void usage_exit(const char* argv0)
{
std::cerr << "usage " << argv0 << " <target>\n"
" spin burning <target> proportion of one CPU (e.g. 0.5 = 50%)\n";
exit(1);
}
int main(int argc, const char* argv[])
{
if (argc != 2)
usage_exit(argv[0]);
std::istringstream iss(argv[1]);
double target;
if (!(iss >> target))
usage_exit(argv[0]);
struct timeval start, now;
gettimeofday(&start, 0);
struct rusage usage;
while (getrusage(RUSAGE_SELF, &usage) == 0)
{
gettimeofday(&now, 0);
double running = usage.ru_utime.tv_sec + usage.ru_utime.tv_usec * 1E-6 +
usage.ru_stime.tv_sec + usage.ru_stime.tv_usec * 1E-6;
double elapsed = now.tv_sec - start.tv_sec +
now.tv_usec * 1E-6 - start.tv_usec * 1E-6;
if (running / elapsed > target)
pthread_yield();
}
}
关于c - 不稳定的 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30705010/
首先让我说,我知道这是一个相当普遍的话题,但在搜索它时,我找不到另一个可以澄清以下情况的问题。如果这可能是重复的,我很抱歉,但是你去: 我是并发新手,为了回答问题,我得到了以下代码: a)为什么除了“
我有这个简单的 MigLayout: 最后两个组件 (JScrollPanes) 应具有相同的宽度。但事实上,如果我调整窗口大小,它们会随机跳跃。是否可以使它们的宽度相等?我还能如何排列组件使其看起来
我的 jQuery 导航存在问题。它没有通常的导航设置(ul > li > ul 等)。我这里有一个 jsfiddle:http://jsfiddle.net/RMRGH/2/ 如果将代码放在本主题中
我只使用 HTML/CSS 制作了一个饼图计时器动画。你可以在这里看到它: https://jsfiddle.net/yisusans/why2wy5q/ .timer-container { b
我有一个菱形网格(因此是一个正常的正方形网格,旋转了 45 度),我希望能够在该网格内部拖动一个点。我使用 canvas 元素制作了我的网格并应用了一个转换:rotate(45deg)。但是,这会导致
我目前正在用 C 编写应用程序,我打算在其中模拟 ubuntu 中的 CPU 负载低于 100%。我使用阶乘算法对我的 CPU 施加压力,并使用 nanosleep 函数来调节 CPU 使用率。目标是
我想使用subprocess.Popen来运行一个进程,具有以下要求。 我想在进程运行时将 stdout 和 stderr 通过管道传回 Popen 的调用者。 如果进程仍在运行,我想在 timeou
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在编写一个客户端,使用套接字从记录 PC (RP) 接收 EEG 数据,以产生一些在线反馈。 RP 有一个通过 TCP 发送数据的服务器。数据与 block 一起发送,每个 block 都有一个标
我在 Win 10 64 位上运行 PG 9.5。我正在 VS 2016 下编译 C。 我正在形成一个函数,它将演变成一个有点复杂的野兽。为了测试我最初的努力,该函数接受一个 int4 数组(这工作正
我正在尝试更新 使用 jquery 标记,但是,当我单击“提交”按钮时,我使用 innerHTML 插入的文本很快就会消失。除非我使用 Firefox,在这种情况下它似乎可以工作 - 如果 - 我插入
使用 st_distance_sphere 时从 MySQL 给出的结果看起来真的很不稳定。 在用户表上运行此查询:(距离点9.45公里以内的用户列表) select *, st_distance_s
所以我昨天发布了一个关于在容器中放置一些 div 的问题,以便它们与容器的边缘对齐,但在中间它们之间的间距相等。由于它们是可排序的(使用 jQuery UI Sortable),所以这很复杂。 Gre
我正在尝试将一个 int 字符串转换为一个 int 数组。 这是我的代码: int premaster1 = 3255859; char hashString[100]; int hashString
我用 Codeigniter 的 Active Record 做了一个简单的选择查询,但不知何故它与我真正的 MySQL 记录有不同的结果。 MyModel.php class MyModel ext
我正面临关于 StampedLock 的奇怪行为.以下是主要有问题的代码行: StampedLock lock = new StampedLock(); long stamp1 = lock.read
我使用 Cython 做了一个相当复杂的 python 扩展。在我得到一些奇怪的内存行为之前,它工作正常,形式如下: *** glibc detected *** /usr/bin/python2.7
请引用这个 fiddle :http://jsfiddle.net/eQegA/3/ .spinner { width: 100px; height: 100px; bord
我有一个不稳定的 Java JMS 问题。片刻工作正常,但不规律地抛出以下异常并中断执行。 请务必注意,这不会停止代理。 javax.jms.JMSException: Peer (vm://test
我编写了一个使用 永久运行的程序C 库。 它基本上解密参数中给出的密码。问题是有时它可以完美地工作,有时它会失败(使用相同的公钥/私钥/密码,返回此错误: message: error:040650
我是一名优秀的程序员,十分优秀!