本文对NiosII 处理器的经济型Nios II/e和快速型Nios II/f在不同的优化方式下测试其性能,测试了以下代码的运行时间。
1、Printf//文件打印2、usleep(1000)//睡眠时间
3、IOWR_ALTERA_AVALON_PIO_DATA//端口读写
测试代码如下:
#include <stdio.h>
#include "system.h"#include "unistd.h"#include "altera_avalon_performance_counter.h"#include "altera_avalon_pio_regs.h"int main()
{ PERF_RESET(PERFORMANCE_COUNTER_BASE); PERF_START_MEASURING(PERFORMANCE_COUNTER_BASE); PERF_BEGIN(PERFORMANCE_COUNTER_BASE,1); printf("Hello from Nios II!\n");//test printf PERF_END(PERFORMANCE_COUNTER_BASE,1); PERF_BEGIN(PERFORMANCE_COUNTER_BASE,2); usleep(1000);//test usleep PERF_END(PERFORMANCE_COUNTER_BASE,2); PERF_BEGIN(PERFORMANCE_COUNTER_BASE,3); //IOWR_ALTERA_AVALON_PIO_DATA(PIO_BASE,0x00);//test IOWR IOWR(PIO_BASE,0,0x00); PERF_END(PERFORMANCE_COUNTER_BASE,3); PERF_STOP_MEASURING(PERFORMANCE_COUNTER_BASE); perf_print_formatted_report(PERFORMANCE_COUNTER_BASE,alt_get_cpu_freq(), 3,"printf","usleep","IOWR"); return 0;}测试结果如下:
表一:Nios II/e,没有优化
Section | % | Time (sec) | Time (clocks) | Occurrences |
printf | 20.9 | 0.00113 | 56317 | 1 |
usleep | 79 | 0.00427 | 213400 | 1 |
IOWR | 0.0459 | 0.00000 | 124 | 1 |
表二:Nios II/e,优化:optimize -03
Section | % | Time (sec) | Time (clocks) | Occurrences |
printf | 13.9 | 0.00065 | 32648 | 1 |
usleep | 86 | 0.00404 | 201865 | 1 |
IOWR | 0.0383 | 0.00000 | 90 | 1 |
表三:Nios II/e,优化:optimize -0s
Section | % | Time (sec) | Time (clocks) | Occurrences |
printf | 13.4 | 0.00063 | 31439 | 1 |
usleep | 86.5 | 0.00405 | 202681 | 1 |
IOWR | 0.0358 | 0.00000 | 84 | 1 |
表四:Nios II/f,没有优化
Section | % | Time (sec) | Time (clocks) | Occurrences |
printf | 18.7 | 0.00023 | 11387 | 1 |
usleep | 81.1 | 0.00099 | 49290 | 1 |
IOWR | 0.0428 | 0.00000 | 26 | 1 |
表五:Nios II/f,优化:optimize -03
Section | % | Time (sec) | Time (clocks) | Occurrences |
printf | 11 | 0.00012 | 5969 | 1 |
usleep | 88.9 | 0.00097 | 48281 | 1 |
IOWR | 0.0147 | 0.00000 | 8 | 1 |
表六:Nios II/f,优化:optimize -0s
Section | % | Time (sec) | Time (clocks) | Occurrences |
printf | 12.1 | 0.00013 | 6653 | 1 |
usleep | 87.8 | 0.00097 | 48315 | 1 |
IOWR | 0.0473 | 0.00000 | 26 | 1 |
通过比较上述六个表格数据,NiosII/e和NiosII/f性能还是相差比较大,从表格中数据看性能差4倍以上,同样的处理器优化之后性能比优化之前提升25%左右,而对于-03优化和-0S优化,性能基本差不多。而且usleep(1000),即延时1ms只有在NiosII/f中运行,才具有所设定的延时,在NiosII/e中实际延时时间为程序指定时间(1ms)的4倍左右,即4ms。
根据Altera提供的资料:
In Nios II Performance Benchmarks (Alteras document) are this DMIPS ratio: Nios II /f - 1.105, Nios II /s - 0.518, Nios II /e - 0.107即如果采用50MHz时钟,CPU的DMIPS为Nios II/f:1.105*50=55.25 DMIPSNios II/s:0.518*50=25.9 DMIPSNios II/e:0.107*50=5.35 DMIPS该性能的条件是在onchip-mem中运行,optimize为-03。cycloneII器件。本文中的程序在外接SDRAM中运行。