函数在特定时间内消耗墙时间
Function consuming wall time for specific amount of time
我有一个函数,它有一个因子需要根据机器上的负载进行调整,以准确消耗传递给该函数的挂钟时间。该系数会根据机器的负载而变化。
void execute_for_wallTime(int factor, int wallTime)
{
double d = 0;
for (int n = 0; n<factor; ++n)
for (int m = 0; wall_time; ++m)
d += d * n*m;
}
有没有办法动态检查机器上的负载并相应地调整因子以消耗传递给函数的确切时间?
墙上时间从文件中读取并传递给此函数。这些值以微秒为单位,例如:
73
21
44
根据 OP 评论:
#include <sys/time.h>
int deltaTime(struct timeval *tv1, struct timeval *tv2){
return ((tv2->tv_sec - tv1->tv_sec)*1000000)+ tv2->tv_usec - tv1->tv_usec;
}
//might require longs anyway. this is time in microseconds between the 2 timevals
void execute_for_wallTime(int wallTime)
{
struct timeval tvStart, tvNow;
gettimeofday(&tvStart, NULL);
double d = 0;
for (int m = 0; wall_time; ++m){
gettimeofday(&tvNow, NULL);
if(deltaTime(tvStart,tvNow) >=wall_time) { // if timeWall is 1000 microseconds,
// this function returns after
// 1000 microseconds (and a
// little more due to overhead)
return;
}
d += d*m;
}
}
现在根据您的性能计算,通过在此函数之外的逻辑中增加或减少它来处理 timeWall。此函数仅运行 timeWall 微秒。
对于 C++ 风格,您可以使用 std::chrono。
我必须评论我会以不同的方式处理事情,例如通过调用 nanosleep()。这些操作没有任何意义,除非在实际代码中您计划用实际操作替换这些 "fillers"。在那种情况下,您可能会考虑线程和调度程序。除了时钟调用会增加开销。
我有一个函数,它有一个因子需要根据机器上的负载进行调整,以准确消耗传递给该函数的挂钟时间。该系数会根据机器的负载而变化。
void execute_for_wallTime(int factor, int wallTime)
{
double d = 0;
for (int n = 0; n<factor; ++n)
for (int m = 0; wall_time; ++m)
d += d * n*m;
}
有没有办法动态检查机器上的负载并相应地调整因子以消耗传递给函数的确切时间?
墙上时间从文件中读取并传递给此函数。这些值以微秒为单位,例如:
73
21
44
根据 OP 评论:
#include <sys/time.h>
int deltaTime(struct timeval *tv1, struct timeval *tv2){
return ((tv2->tv_sec - tv1->tv_sec)*1000000)+ tv2->tv_usec - tv1->tv_usec;
}
//might require longs anyway. this is time in microseconds between the 2 timevals
void execute_for_wallTime(int wallTime)
{
struct timeval tvStart, tvNow;
gettimeofday(&tvStart, NULL);
double d = 0;
for (int m = 0; wall_time; ++m){
gettimeofday(&tvNow, NULL);
if(deltaTime(tvStart,tvNow) >=wall_time) { // if timeWall is 1000 microseconds,
// this function returns after
// 1000 microseconds (and a
// little more due to overhead)
return;
}
d += d*m;
}
}
现在根据您的性能计算,通过在此函数之外的逻辑中增加或减少它来处理 timeWall。此函数仅运行 timeWall 微秒。
对于 C++ 风格,您可以使用 std::chrono。
我必须评论我会以不同的方式处理事情,例如通过调用 nanosleep()。这些操作没有任何意义,除非在实际代码中您计划用实际操作替换这些 "fillers"。在那种情况下,您可能会考虑线程和调度程序。除了时钟调用会增加开销。