ЗАО «ЗЭО»

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:

Автор Тема: Каково быстодействие Тиона?  (Прочитано 31050 раз)

0 Пользователей и 1 Гость просматривают эту тему.

nibbler

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 12
Каково быстодействие Тиона?
« : 30 Июля, 2009, 11:21:34 »

Ситуация такая:
Есть следующая программка:

int start_C()
{
   int i, count = 1000;
   long *start = (long *) (0x00800000);
   long *stop = (long *) (0x00896000); //stop-start = 640*480*2
   long *ind;
   for(i = 0; i < count; i++){
      ind = start;
      do{
         *(ind++) = 0xABCDEF01;
      }while(ind < stop);
   }
   return count;
}

Компилю её с помощью 3.2.1-elf c флагом -O2.
В итоге получаю бинарник, результат дизассемблирования:

c0008000 <_entry>:
c0008000:   ea000000    b   c0008008 <start_C>
c0008004 <set_pc>:
c0008004:   e1a0f000    mov   pc, r0
c0008008 <start_C>:
c0008008:   e3a02889    mov   r2, #8978432   ; 0x890000
c000800c:   e59f1028    ldr   r1, [pc, #40]   ; c000803c <start_C+0x34>
c0008010:   e2822a06    add   r2, r2, #24576   ; 0x6000
c0008014:   e3a00000    mov   r0, #0   ; 0x0
c0008018:   e3a03502    mov   r3, #8388608   ; 0x800000
;
;следующие три инструкции должны выполниться 640*480/2*1000 = 153 600 000 раз
c000801c:   e4831004    str   r1, [r3], #4
c0008020:   e1530002    cmp   r3, r2
c0008024:   3afffffc    bcc   c000801c <start_C+0x14>
;
c0008028:   e2800001    add   r0, r0, #1   ; 0x1
c000802c:   e3500ffa    cmp   r0, #1000   ; 0x3e8
c0008030:   a3a00ffa    movge   r0, #1000   ; 0x3e8
c0008034:   a1a0f00e    movge   pc, lr
c0008038:   eafffff6    b   c0008018 <start_C+0x10>
c000803c:   abcdef01    blge   bf383c48 <_entry-0xc843b8>


Эту программку запускаю в u-boot:
tftp 0 mem.bin
go 0

И работает она около 20-ти секунд.

В результате нехитрых вычислений получается производительность при работе с памятью ок. 20 MIPS.

Вопросы:
1) это верно?
2) почему так медленно?
3) можно ли быстрее заполнить массив в памяти?
« Последнее редактирование: 30 Июля, 2009, 11:58:44 от nibbler »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Каково быстодействие Тиона?
« Ответ #1 : 30 Июля, 2009, 13:10:08 »

В U-Boot не включен D-кэш и не будет включен.

Записан

nibbler

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 12
Re: Каково быстодействие Тиона?
« Ответ #2 : 30 Июля, 2009, 15:30:36 »

Под линуксом быстрее залить память не получается. Может какую опцию в ядре надо включить?
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Каково быстодействие Тиона?
« Ответ #3 : 30 Июля, 2009, 15:59:10 »

Код для Linux такой же оставили?!
Записан

nibbler

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 12
Re: Каково быстодействие Тиона?
« Ответ #4 : 30 Июля, 2009, 16:40:04 »

вот такой код на С++

   int size = 320*480;
   long buff[size];
   int count  = 1000;
   long color = 0x01234567;
   for(int i = 0; i < count; i++){
      for(int ind = 0; ind < size; ind++){
         buff[ind] = color;
      }
   }

скомпиленный с опциями -mcpu=arm920t -mtune=arm920t -O2
всё равно работает около 20 секунд

Вот такой карявый вариант работает чуть быстрее: 12 сек.
//main.c
...
extern void fillmem(long * start, long * end, long color, long color1);
...

@fillmem.s
...
.L2:
   stmia   r0!, {r2, r3}
   cmp   r0, r1
   bne   .L2
   mov   pc, lr
...

Использование инструкции stm не решает проблему. Память заливается и копируется слишком медленно.

Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Каково быстодействие Тиона?
« Ответ #5 : 30 Июля, 2009, 17:47:11 »

> buff[ind] = color;

1. С указателями было бы быстрее.

2. В U-Boot вы записывали 1000 раз по 0x96000 байт (0x96000/4 слов) за ~20 с.
В Linux это занимает 11 c.

int main (void)
{
        int size = 0x96000/sizeof(long);
        long buff[size];
        int count  = 1000;
        long color = 0x01234567;
        int ind, i;
        long *p;

        for(i = 0; i < count; i++) {
                p = buff;
                for(ind = 0; ind < size; ind++) {
                        *(p++) = color;
                }
        }

        printf ("total %d\n", size*count);
}
Записан

faa

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 72
Re: Каково быстодействие Тиона?
« Ответ #6 : 31 Июля, 2009, 14:18:56 »


2. В U-Boot вы записывали 1000 раз по 0x96000 байт (0x96000/4 слов) за ~20 с.
В Linux это занимает 11 c.


Вот что у меня получилось с этим тестом в Linux-е:

/ # time tstftdi -t
total 153600000
real    0m 6.12s
user    0m 6.11s
sys     0m 0.00s
/ # uname -a
Linux corr 2.6.30-tion #1 PREEMPT Wed Jul 29 15:02:36 MSD 2009 armv4tl unknown
/ # cat /proc/cpuinfo
Processor       : ARM920T rev 0 (v4l)
BogoMIPS        : 99.53
Features        : swp half thumb crunch
CPU implementer : 0x41
CPU architecture: 4T
CPU variant     : 0x1
CPU part        : 0x920
CPU revision    : 0

Hardware        : ZAO ZEO TION9315 SBC module
Revision        : 0000
Serial          : 0000000000000000
/ #
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Каково быстодействие Тиона?
« Ответ #7 : 31 Июля, 2009, 14:30:48 »

Компилятор, флаги?
Записан

nibbler

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 12
Re: Каково быстодействие Тиона?
« Ответ #8 : 31 Июля, 2009, 14:56:03 »

/usr/local/arm/4.1.1-920t/bin/arm-linux-gcc -Wall -mcpu=arm920t -mtune=arm920t -O3 test.c



/ # time ./a.out
total 153600000
real    0m 10.54s
user    0m 10.52s
sys     0m 0.01s

/ # uname -a
Linux tion-pro 2.6.20.4 #1 PREEMPT Fri Jul 31 13:23:36 EEST 2009 armv4tl unknown

/ # cat /proc/cpuinfo
Processor       : ARM920T rev 0 (v4l)
BogoMIPS        : 99.73
Features        : swp half thumb crunch
CPU implementer : 0x41
CPU architecture: 4T
CPU variant     : 0x1
CPU part        : 0x920
CPU revision    : 0
Cache type      : write-back
Cache clean     : cp15 c7 ops
Cache lockdown  : format A
Cache format    : Harvard
I size          : 16384
I assoc         : 64
I line length   : 32
I sets          : 8
D size          : 16384
D assoc         : 64
D line length   : 32
D sets          : 8

Hardware        : Cirrus Logic EDB9312 Evaluation Board
Revision        : 0000
Serial          : 0000000000000000
Записан

nibbler

  • Newbie
  • *
  • Оффлайн Оффлайн
  • Сообщений: 12
Re: Каково быстодействие Тиона?
« Ответ #9 : 31 Июля, 2009, 15:10:26 »

А вот другой результат

/usr/test # time ./a.out
total 153600000
real    0m 19.27s
user    0m 19.24s
sys     0m 0.03s

в то время как включен 640*480 экран
Записан

faa

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 72
Re: Каково быстодействие Тиона?
« Ответ #10 : 31 Июля, 2009, 15:16:15 »

Компилятор, флаги?


./arm-linux-uclibcgnueabi-gcc -v
Используются внутренние спецификации.
Целевая архитектура: arm-linux-uclibcgnueabi
Параметры конфигурации: /home/CRUS/crunch-tools-1.4.3/build/gcc-4.1.2/configure --target=arm-linux-uclibcgnueabi --prefix=/home/CRUS/crunch-tools-1.4.3/eabi/ep93xx-eabi-d1 --enable-languages=c,c++ --disable-multilib --disable-libmudflap --disable-libssp
Модель многопотоковости: posix
gcc версия 4.1.2

это из packages/Makefile.in

TARGET_CROSS_CC='$(TARGET_CROSS)gcc -mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -mfix-crunch-d1'
TARGET_CROSS_CXX='$(TARGET_CROSS)g++ -mcpu=ep9312 -mfpu=maverick -mfloat-abi=softfp -mfix-crunch-d1'

оптимизация -O2

дисплей включен 640х480
« Последнее редактирование: 31 Июля, 2009, 15:19:30 от faa »
Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Каково быстодействие Тиона?
« Ответ #11 : 31 Июля, 2009, 17:05:24 »

Меньше 10 с на 2.6.20 у меня не получается.

faa, не затруднит прислать/выложить собранный статически тест, который
выполняется 6 с?


Записан

faa

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 72
Re: Каково быстодействие Тиона?
« Ответ #12 : 01 Августа, 2009, 10:31:56 »

Меньше 10 с на 2.6.20 у меня не получается.

faa, не затруднит прислать/выложить собранный статически тест, который
выполняется 6 с?

В понедельник постараюсь сделать.

Ну и на старом (2.6.20.4 или 2.6.21.5) ядре попробую (вроде были в закромах).

Записан

asv

  • Hero Member
  • *****
  • Оффлайн Оффлайн
  • Сообщений: 1405
Re: Каково быстодействие Тиона?
« Ответ #13 : 01 Августа, 2009, 12:33:51 »

Я как раз хотел на 2.6.20 посмотреть.
Записан

faa

  • Jr. Member
  • **
  • Оффлайн Оффлайн
  • Сообщений: 72
Re: Каково быстодействие Тиона?
« Ответ #14 : 03 Августа, 2009, 10:12:35 »

Меньше 10 с на 2.6.20 у меня не получается.

faa, не затруднит прислать/выложить собранный статически тест, который
выполняется 6 с?


Выложил ftp.ntcsm.ru/pub/tion9315/tstftdi.
Запускать tstftdi -t.

#file tstftdi
tstftdi: ELF 32-bit LSB executable, ARM, version 1 (SYSV), statically linked, stripped
Записан