Автор |
Повідомлення |
Повідомлення створено: 06. 12. 2010 [08:18]
|
fido_max
Maxim Kochetkov
Contributor
Зареєстрован(а) с: 28.10.2010
Повідомлення: 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
|
Повідомлення створено: 06. 12. 2010 [09:05]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 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.
|
Повідомлення створено: 06. 12. 2010 [10:02]
|
fido_max
Maxim Kochetkov
Contributor
Зареєстрован(а) с: 28.10.2010
Повідомлення: 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, а опции компиляции по умолчанию уже с оптимизацией.
[Повідомлення редагувалось 1 раз(ів), останній раз 06.12.2010 в 10:23.]
|
Повідомлення створено: 06. 12. 2010 [10:37]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 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.
|
Повідомлення створено: 06. 12. 2010 [10:47]
|
fido_max
Maxim Kochetkov
Contributor
Зареєстрован(а) с: 28.10.2010
Повідомлення: 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.
|
Повідомлення створено: 07. 12. 2010 [11:14]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
|
Добавил исправления выравнивания в DAQ.JavaLikeCalc и сгрузил их в репозиторий.
Проверяйте!
Ещё я там добавил экспериментальный код в команды Mvi* с полным доступом к элементам команды посредством упакованной структуры. По идеи должно быть несколько быстрее да и прозрачней, мне кажется. Если будет работать на ARM, то сделаю так-же для остальных команд.
В любом случае у меня, на x86, это работает и регрессии производительности не обнаружено.
P.S. Вот думаю сейчас как включить сообщения о проблемах выравнивания, чтобы выловить проблемы в других местах OpenSCADA.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 07. 12. 2010 [11:39]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 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.
|
Повідомлення створено: 07. 12. 2010 [22:43]
|
almaz
Almaz Karimov
Contributor
Автор теми
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
|
User: 0
System: 0
Skipped: 0
Half: 0
Word: 0
DWord: 0
Multi: 0
User faults: 0 (ignored)
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Повідомлення створено: 08. 12. 2010 [01:24]
|
almaz
Almaz Karimov
Contributor
Автор теми
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
|
Собрал svn1210. Теперь ява программы работают без вылета.
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|
Повідомлення створено: 09. 12. 2010 [09:44]
|
fido_max
Maxim Kochetkov
Contributor
Зареєстрован(а) с: 28.10.2010
Повідомлення: 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
пока я их не закомментировал - сборка завершалась с ошибкой.
|