EnglishУкраїнськаmRussian
Login/New
Topic with many replies

ARM


Author Message
Written on: 06. 12. 2010 [08:18]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
g++ -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}' --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2009q1-203' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203)



Bytes order check
Value l = 12345678h
Value c[0] = 78h
Value c[1] = 56h
Value c[2] = 34h
Value c[3] = 12h
Little-Endian, typical for x86.
Align check
Value val{8}[1] = 11
Direct casting val{16}+1 = 1100
Direct casting val{32}+0 = 33221100
Direct casting val{32}+1 = 332211
Direct casting val{32}+2 = 11003322
Direct casting val{32}+3 = 22110033
Direct casting time for 32bit 10000 integers: 0.007 ms
Unaligned read by copy val{32}+0 = 33221100
Unaligned read by copy val{32}+1 = 44332211
Unaligned read by copy val{32}+2 = 55443322
Unaligned read by copy val{32}+3 = 66554433
Unaligned read by copy time for 32bit 10000 integers: 0.005 ms
Unaligned read by attribute casting val{32}+0 = 33221100
Unaligned read by attribute casting val{32}+1 = 44332211
Unaligned read by attribute casting val{32}+2 = 55443322
Unaligned read by attribute casting val{32}+3 = 66554433
Unaligned read by attribute casting time for 32bit 10000 integers: 0.004 ms
Written on: 06. 12. 2010 [09:05]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"fido_max" wrote:

Direct casting time for 32bit 10000 integers: 0.007 ms
Unaligned read by copy time for 32bit 10000 integers: 0.005 ms
Unaligned read by attribute casting time for 32bit 10000 integers: 0.004 ms

Вы собрали с ключом оптимизации -O. Соберите без него и прогоните ещё раз, пожалуйста.

Learn, learn and learn better than work, work and work.
Written on: 06. 12. 2010 [10:02]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
Bytes order check
Value l = 12345678h
Value c[0] = 78h
Value c[1] = 56h
Value c[2] = 34h
Value c[3] = 12h
Little-Endian, typical for x86.
Align check
Value val{8}[1] = 11
Direct casting val{16}+1 = 1100
Direct casting val{32}+0 = 33221100
Direct casting val{32}+1 = 332211
Direct casting val{32}+2 = 11003322
Direct casting val{32}+3 = 22110033
Direct casting time for 32bit 10000 integers: 6.673 ms
Unaligned read by copy val{32}+0 = 33221100
Unaligned read by copy val{32}+1 = 44332211
Unaligned read by copy val{32}+2 = 55443322
Unaligned read by copy val{32}+3 = 66554433
Unaligned read by copy time for 32bit 10000 integers: 4.181 ms
Unaligned read by attribute casting val{32}+0 = 33221100
Unaligned read by attribute casting val{32}+1 = 44332211
Unaligned read by attribute casting val{32}+2 = 55443322
Unaligned read by attribute casting val{32}+3 = 66554433
Unaligned read by attribute casting time for 32bit 10000 integers: 6.348 ms

это -O0 т.к. компиляция выполняется при помощи LTIB, а опции компиляции по умолчанию уже с оптимизацией.


[This article was edited 1 times, at last 06.12.2010 at 10:23.]
Written on: 06. 12. 2010 [10:37]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"fido_max" wrote:

Direct casting time for 32bit 10000 integers: 6.673 ms
Unaligned read by copy time for 32bit 10000 integers: 4.181 ms
Unaligned read by attribute casting time for 32bit 10000 integers: 6.348 ms

А теперь данные не репрезентативны и Вы выбрали то, что Вас устроило. :)
Не может копирование быть быстрее прямого приведения. Нужно было сделать несколько запусков и выбрать наиболее частые значения из них.

Но это уже не имеет значения. Буду добавлять функции с использованием структур с атрибутом __attribute__((packed)).

Learn, learn and learn better than work, work and work.
Written on: 06. 12. 2010 [10:47]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
Bytes order check
Value l = 12345678h
Value c[0] = 78h
Value c[1] = 56h
Value c[2] = 34h
Value c[3] = 12h
Little-Endian, typical for x86.
Align check
Value val{8}[1] = 11
Direct casting val{16}+1 = 1100
Direct casting val{32}+0 = 33221100
Direct casting val{32}+1 = 332211
Direct casting val{32}+2 = 11003322
Direct casting val{32}+3 = 22110033
Direct casting time for 32bit 10000 integers: 2.216 ms
Unaligned read by copy val{32}+0 = 33221100
Unaligned read by copy val{32}+1 = 44332211
Unaligned read by copy val{32}+2 = 55443322
Unaligned read by copy val{32}+3 = 66554433
Unaligned read by copy time for 32bit 10000 integers: 8.531 ms
Unaligned read by attribute casting val{32}+0 = 33221100
Unaligned read by attribute casting val{32}+1 = 44332211
Unaligned read by attribute casting val{32}+2 = 55443322
Unaligned read by attribute casting val{32}+3 = 66554433
Unaligned read by attribute casting time for 32bit 10000 integers: 2.252 ms

вот так еще могу.
З.Ы. В фоне запущена OpenScada.
Written on: 07. 12. 2010 [11:14]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
Добавил исправления выравнивания в DAQ.JavaLikeCalc и сгрузил их в репозиторий.
Проверяйте!

Ещё я там добавил экспериментальный код в команды Mvi* с полным доступом к элементам команды посредством упакованной структуры. По идеи должно быть несколько быстрее да и прозрачней, мне кажется. Если будет работать на ARM, то сделаю так-же для остальных команд.

В любом случае у меня, на x86, это работает и регрессии производительности не обнаружено.

P.S. Вот думаю сейчас как включить сообщения о проблемах выравнивания, чтобы выловить проблемы в других местах OpenSCADA.

Learn, learn and learn better than work, work and work.
Written on: 07. 12. 2010 [11:39]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
Кстати, а что в системном файле /proc/cpu/alignment на ваших платах?
У меня:
User: 1184
System: 1
Skipped: 0
Half: 1
Word: 0
DWord: 0
Multi: 0
User faults: 0


Learn, learn and learn better than work, work and work.
Written on: 07. 12. 2010 [22:43]
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
User: 0
System: 0
Skipped: 0
Half: 0
Word: 0
DWord: 0
Multi: 0
User faults: 0 (ignored)

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 08. 12. 2010 [01:24]
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
Собрал svn1210. Теперь ява программы работают без вылета.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 09. 12. 2010 [09:44]
fido_max
Maxim Kochetkov
Contributor
registered since: 28.10.2010
Posts: 129
root@freescale ~$ cat /proc/cpu/alignment
User: 27
System: 3564
Skipped: 0
Half: 0
Word: 3564
DWord: 0
Multi: 0
User faults: 0 (ignored)


собрал 1212: полет нормальный.

один момент только еще нужно исправить. у меня после ./configure в config.h попадают две нехорошие строчки:
/* Define to rpl_malloc if the replacement function should be used. */
#define malloc rpl_malloc

/* Define to rpl_realloc if the replacement function should be used. */
#define realloc rpl_realloc

пока я их не закомментировал - сборка завершалась с ошибкой.



3054