sev*_*ine 0 c linux floating-point performance arm
我的环境:
我正在使用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;
}
}
Run Code Online (Sandbox Code Playgroud)
对于部门(/):
static void funcToBeTimed_floatDiv(void)
{
int idx;
float fval = 314159000.00;
for(idx=0; idx<100; idx++) {
fval = fval / 1.001;
}
}
Run Code Online (Sandbox Code Playgroud)
对于时间测量,使用以下代码.在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);
}
Run Code Online (Sandbox Code Playgroud)
结果,加法(+)和除法(/)的处理时间均为2500纳秒左右.
一般来说,这种划分比添加成本更高,我想,但在这种情况下差别不大.
我想知道
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |