我的环境:
我正在使用PetaLinux在Zynq上开发Linux应用程序。
我目前的问题是四次算术运算的处理时间(+ / - / * / div)。
我使用以下代码用clock_gettime()
计算处理时间。
添加(+):
static void funcToBeTimed_floatAdd(void)
{
int idx;
float fval = 0.0;
for(idx=0; idx<100; idx++) {
fval = fval + 3.14;
}
}
对于师(/):
static void funcToBeTimed_floatDiv(void)
{
int idx;
float fval = 314159000.00;
for(idx=0; idx<100; idx++) {
fval = fval / 1.001;
}
}
对于时间测量,使用以下代码。
使用procNo
main(int argc, char *argv[])
static void disp_elapsed(int procNo)
{
struct timespec tp1, tp2;
long dsec, dnsec;
/***/
switch(procNo) {
case 0:
printf("add\n");
clock_gettime(CLOCK_REALTIME, &tp1);
funcToBeTimed_floatAdd();
clock_gettime(CLOCK_REALTIME, &tp2);
break;
case 1:
printf("multi\n");
clock_gettime(CLOCK_REALTIME, &tp1);
funcToBeTimed_floatMulti();
clock_gettime(CLOCK_REALTIME, &tp2);
break;
default:
printf("div\n");
clock_gettime(CLOCK_REALTIME, &tp1);
funcToBeTimed_floatDiv();
clock_gettime(CLOCK_REALTIME, &tp2);
break;
}
dsec = tp2.tv_sec - tp1.tv_sec;
dnsec = tp2.tv_nsec - tp1.tv_nsec;
if (dnsec < 0) {
dsec--;
dnsec += 1000000000L;
}
printf("Epalsed (nsec) = %ld\n", dnsec);
}
结果,加法(+)和除法(/)的处理时间都在2500纳秒左右。
一般来说,我认为这种划分比添加更贵,但在这种情况下差别不大。
我想知道
答案 0 :(得分:6)
您的代码可能存在一些问题:
3.14
是双倍的,3.14f
是浮动的。