1.2k views
in System Integration by

Hi 

We use following software components.

- Embedded Wizard Studio Pro v8.30
- Embedded Wizard Platform Package for Generic RGBA8888
- Embedded Wizard Build Environment for Generic RGBA8888
- Generic RGBA8888 NEON AddOn

Our target system specification.

- NXP i.mx6 quad and Yocto embedded linux.

 

After integrating with the target system,  we execute the GraphicsOperation example provided with the package on the target system

As a result, the example works fine. However, there are questions about performance.

The frame rate is displayed in the upper right corner of the example.

We have confirmed a frame rate of about 33 ~ 37 on our target system.

We are using Generic RGBA8888 NEON AddOn. 

When compiling a UI application on a Linux system, can decide whether to use NEON using "-mfpu=neon" option.

However, regardless of whether neon is active or not, performance(framerate) is the same. (33 ~ 37)

When activate neon, why does not perfomance perform better? 

 

2 Answers

0 votes
by
Hello,

please doublecheck the makefile / your project: Is there really the file with NEON support used (ewextpxl_RGBA8888_NEON.c instead of ewextpxl_RGBA8888.c)?

Please compare the binary size of the file ewextpxl_RGBA8888_NEON.obj in case you have enabled and disabled NEON support. Is there a difference? What is the result?

What are your complete compiler options?

Thank you and best regards,

Manfred.
by

1. Depending on described in the download center, file replace is done. 

(rename ewextpxl_RGBA8888_NEON.c -> ewextpxl_RGBA8888.c and file replace ok)

 

2. obj file size

neon disable : -rw-r--r-- 1 root root 29460 Feb  7 08:52 obj/ewextpxl_RGBA8888.o

neon enable : -rw-r--r-- 1 root root 165732 Feb  7 08:54 obj/ewextpxl_RGBA8888.o

 

3. compiler option 

arm-poky-linux-gnueabi-gcc -c -O2 -Wall -pipe -DEW_USE_DOUBLE_BUFFER -mfpu=neon 

-I. -I./GeneratedCode -I../PlatformPackage/RTE -I../PlatformPackage/RGBA8888 -I../TargetSpecific -I/opt/vc/include -o projectecho

 

 

by

Hello,

we just verified the application on a NXP i.MX6 ULL which is not as powerful as your hardware and the result is full 54 fps.

The difference is that your application is configured to draw directly into the framebuffer. Unfortunately, the read access to the framebuffer is extremly slow under Linux. Therefore, the graphics composition has to be done within a separate offscreen buffer.

Please add the compiler option -DEW_USE_OFFSCREEN_BUFFER and rebuild the project.

These are the settings:

arm-poky-linux-gnueabi-gcc
-march=armv7ve 
-marm 
-mfpu=neon 
-mfloat-abi=hard 
-mcpu=cortex-a7 
--sysroot=<your sysroot path> 
-c -O2 -pipe -g
-feliminate-unused-debug-types -Wall -pipe
-DEW_USE_OFFSCREEN_BUFFER
-DEW_USE_DOUBLE_BUFFER
-I. -I./GeneratedCode -I../PlatformPackage/RTE -I../PlatformPackage/RGBA8888 -I../TargetSpecific

Does it work now?

by

Thank you for answer.

I added the compile option as above.

but, result is the same (framerate 33 ~ 37)

Is there another reason?

 

These are the settings:

arm-poky-linux-gnueabi-gcc -c -O2 -Wall -pipe 

-DEW_USE_DOUBLE_BUFFER 
-mfpu=neon 
-mfloat-abi=hard 
-DEW_USE_OFFSCREEN_BUFFER 

-I. -I./GeneratedCode -I../PlatformPackage/RTE -I../PlatformPackage/RGBA8888 -I../TargetSpecific -I/opt/vc/include -o projectecho

by

following is the our compile log.

Enabling neon causes a lot of warnings.

Is it related to this issue?

 



root@osboxes:/mnt/imx6q/ew/Template#
root@osboxes:/mnt/imx6q/ew/Template# make
-------------------------------------------------
Creating EmWiApplication
-------------------------------------------------
Compiler Options: arm-poky-linux-gnueabi-gcc -c -O2 -Wall -pipe -DEW_USE_DOUBLE_BUFFER -mfpu=neon -mfloat-abi=hard -DEW_USE_OFFSCREEN_BUFFER -I. -I./GeneratedCode -I../PlatformPackage/RTE -I../PlatformPackage/RGBA8888 -I../TargetSpecific -I/opt/vc/include -o projectecho
-------------------------------------------------
Creating object and library directories
-------------------------------------------------
Compiling main.c
Compiling ./GeneratedCode/Core.c
Compiling ./GeneratedCode/Effects.c
Compiling ./GeneratedCode/Graphics.c
Compiling ./GeneratedCode/Resources.c
Compiling ./GeneratedCode/Views.c
Compiling ./GeneratedCode/Flat.c
Compiling ./GeneratedCode/Application.c
Compiling ./GeneratedCode/Operations.c
Compiling ../PlatformPackage/RTE/ewextrte.c
Compiling ../PlatformPackage/RTE/ewcolor.c
Compiling ../PlatformPackage/RTE/ewdebug.c
Compiling ../PlatformPackage/RTE/ewobject.c
Compiling ../PlatformPackage/RTE/ewpoint.c
Compiling ../PlatformPackage/RTE/ewrect.c
Compiling ../PlatformPackage/RTE/ewref.c
Compiling ../PlatformPackage/RTE/ewresource.c
Compiling ../PlatformPackage/RTE/ewscalars.c
Compiling ../PlatformPackage/RTE/ewslot.c
Compiling ../PlatformPackage/RTE/ewstring.c
Compiling ../PlatformPackage/RTE/ewtimer.c
Compiling ../PlatformPackage/RGBA8888/ewextgfx.c
Compiling ../PlatformPackage/RGBA8888/ewextbmp_RGBA8888.c
Compiling ../PlatformPackage/RGBA8888/ewextfnt.c
Compiling ../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c: In function 'EwCopyIndex8RowBlend':
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:876:43: warning: 'vs.val[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
     aDst.val[1] = (uint8x8_t)vset_lane_u32( aClut[ *aSrcPtr++ ],               \
                                           ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:3644:17: note: 'vs.val[1]' was declared here
     uint8x8x4_t vs;
                 ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:872:43: warning: 'vs.val[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
     aDst.val[0] = (uint8x8_t)vset_lane_u32( aClut[ *aSrcPtr++ ],               \
                                           ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:3644:17: note: 'vs.val[0]' was declared here
     uint8x8x4_t vs;
                 ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:880:43: warning: 'vs.val[2]' may be used uninitialized in this function [-Wmaybe-uninitialized]
     aDst.val[2] = (uint8x8_t)vset_lane_u32( aClut[ *aSrcPtr++ ],               \
                                           ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:3644:17: note: 'vs.val[2]' was declared here
     uint8x8x4_t vs;
                 ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:884:43: warning: 'vs.val[3]' may be used uninitialized in this function [-Wmaybe-uninitialized]
     aDst.val[3] = (uint8x8_t)vset_lane_u32( aClut[ *aSrcPtr++ ],               \
                                           ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:3644:17: note: 'vs.val[3]' was declared here
     uint8x8x4_t vs;
                 ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c: In function 'EwCopyIndex8RowSolidBlend':
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:876:43: warning: 'vs.val[1]' may be used uninitialized in this function [-Wmaybe-uninitialized]
     aDst.val[1] = (uint8x8_t)vset_lane_u32( aClut[ *aSrcPtr++ ],               \
                                           ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:3747:19: note: 'vs.val[1]' was declared here
       uint8x8x4_t vs;
                   ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:872:43: warning: 'vs.val[0]' may be used uninitialized in this function [-Wmaybe-uninitialized]
     aDst.val[0] = (uint8x8_t)vset_lane_u32( aClut[ *aSrcPtr++ ],               \
                                           ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:3747:19: note: 'vs.val[0]' was declared here
       uint8x8x4_t vs;
                   ^
../PlatformPackage/RGBA8888/ewextpxl_RGBA8888.c:880:43: warning: 'vs.val[2]' may be used uninitialized in this function [-Wmaybe-uninitialized]
     aDst.val[2] = (uint8x8_t)vset_lane_u32( aClut[ *aSrcPtr++ ],               \
 

......(ommit) ....                                           ^

Compiling ../PlatformPackage/RGBA8888/ewgfx.c
Compiling ../PlatformPackage/RGBA8888/ewgfxattrtext.c
Compiling ../PlatformPackage/RGBA8888/ewgfxcore.c
Compiling ../PlatformPackage/RGBA8888/ewgfxdriver.c
Compiling ../PlatformPackage/RGBA8888/ewgfxtasks.c
Compiling ../TargetSpecific/ew_bsp_display.c
Compiling ../TargetSpecific/ew_bsp_touch.c
Compiling ../TargetSpecific/ew_bsp_serial.c
Linking EmWiApplication
arm-poky-linux-gnueabi-gcc -L/opt/vc/lib ./obj/main.o ./obj/Core.o ./obj/Effects.o ./obj/Graphics.o ./obj/Resources.o ./obj/Views.o ./obj/Flat.o ./obj/Application.o ./obj/Operations.o ./obj/ewextrte.o ./obj/ewcolor.o ./obj/ewdebug.o ./obj/ewobject.o ./obj/ewpoint.o ./obj/ewrect.o ./obj/ewref.o ./obj/ewresource.o ./obj/ewscalars.o ./obj/ewslot.o ./obj/ewstring.o ./obj/ewtimer.o ./obj/ewextgfx.o ./obj/ewextbmp_RGBA8888.o ./obj/ewextfnt.o ./obj/ewextpxl_RGBA8888.o ./obj/ewgfx.o ./obj/ewgfxattrtext.o ./obj/ewgfxcore.o ./obj/ewgfxdriver.o ./obj/ewgfxtasks.o ./obj/ew_bsp_display.o ./obj/ew_bsp_touch.o ./obj/ew_bsp_serial.o -L../PlatformPackage/RTE -L../PlatformPackage/RGBA8888 -lm -lpthread -o ./EmWiApplication
EmWiApplication successfully built !!
root@osboxes:/mnt/imx6q/ew/Template#
 

by

Can you please let us know your output of 'fbset -i'? Please use the full-featured fbset application that I shared here. The busybox alternative is too stripped down.

Thanks and best regards,
Manuel

by

"fbset -i" result following :


mode "1280x800-37"
    # D: 50.000 MHz, H: 31.250 kHz, V: 37.425 Hz
    geometry 1280 800 1280 800 32
    timings 20000 60 60 5 5 200 25
    rgba 8/16,8/8,8/0,8/24
endmode

Frame buffer device information:
    Name        : DISP3 BG
    Address     : 0x6e100000
    Size        : 4096000
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 1
    YPanStep    : 1
    YWrapStep   : 1
    LineLength  : 5120
    Accelerator : No    

0 votes
by
When using 'fbset -i' you'll see that your current VSYNC is set to be 37 Hz. Due to an activated double buffer set-up, the display update is synchronized with the VSYNC. Hence you cannot achieve higher framerates as your current set up VSYNC frequency. If you want to increase the VSYNC frequency, a solution can be to modify the pixelclock by using the fbset command. Please have a look at the adequate man pages and your display specification to find the proper parameters.

Br,
Manuel
by
Thank you for anwser.

I'm checking on your advice.....

Additionally, when executed graphic operation example on your target system(i.MX6ULL), how cpu utilization?

Ask Embedded Wizard

Welcome to the question and answer site for Embedded Wizard users and UI developers.

Ask your question and receive answers from the Embedded Wizard support team or from other members of the community!

Embedded Wizard Website | Privacy Policy | Imprint

...