2011/3/24 Michael Hope <michael.h...@linaro.org>:
> On Fri, Mar 25, 2011 at 2:59 AM, Barry Song <21cn...@gmail.com> wrote:
>> 2011/3/24 Andrew Stubbs <andrew.stu...@linaro.org>
>>>
>>> On 24/03/11 11:05, Imre Kaloz wrote:
>>>>
>>>> On Thu, 24 Mar 2011 11:36:17 +0100, Andrew Stubbs
>>>> <andrew.stu...@linaro.org> wrote:
>>>>>
>>>>> However, you can build your own compiler from the Linaro sources, and
>>>>> then build the libraries you need to match, and you can have v5 support.
>>>>> This is not a straightforward process. :(
>>>>
>>>> You can always use the OpenWrt buildroot to easily build a custom
>>>> Linaro-based crosscompiler, just make sure you select the right libc for
>>>> your needs (we use uClibc by default) and a target similar to yours.
>>>
>>> Or OpenEmbedded or CrossTool / CrossTool-NG.
>>
>> Thank all of you! you really help me much!  You toolchain team is really 
>> great!
>>
>> In fact, i knew how to compile a toolchain.  As i said, i have
>> compiled a toolchain by simple options:
>> Configured with: ../gcc-linaro-4.4-2011.02-0/
>> configure
>> --target=arm-none-linux-gnueabi
>> --prefix=/home/vmuser/development/toolchain/build-toolchain/tools
>> --enable-languages=c,c++ --disable-libgomp
>> Thread model: posix
>> gcc version 4.4.5 (Linaro GCC 4.4-2011.02-0)
>>
>> it can make uboot work with arch=armv5.
>>
>> i want to know whether any performance is lost by my simple configure
>> options if the toolchain is used to armv7 with vfpv3? GCC documents
>> show that those options we use to compile gcc will become the default
>> options of gcc runtime. But what is the real benefit toolchains can
>> get by configuring gcc with default arch and fpu since we can switch
>> arch options at runtime?
>>
>> Is the key glibc? If compiling glibc by gcc with options for a special
>> ARM arch and float point unit, it will improve the performance of
>> glibc to the arch? And then the glibc will not support other arch or
>> SoCs without the specified float point unit?
>
> Hi Barry.  The short answer is 'it depends' :)
>
> GCC is more than a compiler and includes other things such as a
> runtime library (libgcc) and hooks into the libc for features like
> thread local storage.  These are built for the architecture and
> floating point unit options you pass to GCC's configure, so if you
> want one toolchain that runs everywhere then you need to configure it
> for the lowest common denominator (normally a ARMv5T in ARM mode with
> no FPU).  A similar argument applies to GLIBC.
>
> The next question is, does this matter for your application?  What
> workload will your product run and will it be meaningfully affected by
> this lowest common denominator build?
>  * If your application uses a lot of floating point, then the lack of
> FPU support in GLIBC matters

Completely right. I got a linaro 4.5 by:

sudo add-apt-repository ppa:linaro-maintainers/toolchain
sudo apt-get update
sudo apt-get install gcc-4.5-arm-linux-gnueabi

Then I did WHETSTONE benchmark on a low-frequency cortex A9 FPGA with vfpv3.

Result showed linaro by apt-get is using generic glibc in fact. its
gave only 3.3 WHETSTONE MIPS. Then i compiled a glibc with vfpv3
support  to replace the glibc by apt-get, the new toolchain gave 16.7
WHETSTONE MIPS, 400% improvement in WHETSTONE.

>  * If your product has limited memory, then the smaller code size of
> Thumb-2 is worthwhile
>  * If you need to squeeze out another 5 % in performance, then using
> ARMv7 instead of ARMv5 will help

Completely right. I did a edn benchmark from
http://www.mrtc.mdh.se/projects/wcet/wcet_bench/edn/edn.c.  EDN can
show memory and fixed-point performance. My testing result shows edn
has a 5-10% performance improvement by linaro 4.5 with armv7_a option.

>
> There are other technical solutions such as:
>  * Building libgcc and glibc for the different variants and picking
> the best at link time
>  * Building them and picking at dynamic link time using hwcaps or similar
>
> These make sense for a generic binary toolchain such as the
> CodeSourcery one Andrew mentioned, and for generic distributions such
> as Ubuntu but not for a focused end user product.

Then my conclusion is that the best choice  for cortex A9 with vfpv3 is
1. using linaro gcc 4.4/4.5 with ARMV7 optimization
2. using glibc compiled with vfpv3 supporting

A strange phenomenon i found was nbench would enter dead loop in
ASSIGNMENT case. It could finish ASSIGNMENT case forever. nbench can
be downloaded from
http://www.tux.org/~mayer/linux/nbench-byte-2.2.3.tar.gz. I haven't
time to figure out whether it is a linaro gcc bug. Then i just ignore
this case by writing NBENCH.CONF like the following:
CUSTOMRUN=T
DONUMSORT=T
DOLU=T
DOSTRINGSORT=T
DOBITFIELD=T
DOEMF=T
DOFOUR=T
DOASSIGN=F
ASSIGNMINSECONDS=1
DOHUFF=T
DOIDEA=T

If you have time, may you help to check the reason?
>
> -- Michael

Thanks
Barry

_______________________________________________
linaro-toolchain mailing list
linaro-toolchain@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-toolchain

Reply via email to