26

Re: ARM

В NEON есть встроенная команда для архивирования VZIP. А где архивирование, там и шифрование.

Вы можете находить в одно действие в 128 битах нужное значение на четырехядерном Exynos 4412 (Odroid-x2). Толлько для этого надо задействовать все 4 сопроцессора.

Там два хеша L1 и L2 (внешняя память, но устройство управление PL310 внутри SoC с ядром ARMv7). Я выше приводил картинку, там обозначено это устройство. Для Кеша второго уровня L2 можно сделать да же 16 путей (way - временных меток или как хотите в зависимости от политик выделения памяти, записи, перезаписи).

Это мы только о старом ядре поговорили Кортекс-A9 (ARMv7). А в новой Райсбери например стоит ARMv8 и УСБ чуть ли не 4.0.

27

Re: ARM

Я говорил о четырехядерном Exynos 4412 (Odroid-X2) c ядрами Кортекс-А9 (ARMv7).
Там есть команды VZIP и VUZP для архивации. Где архивация, там и шифрование.

Можно на 4 ядрах и их сопроцессорах VFPU за один такт до 128 битовый вектор обработать.
Или 4 или 8 машинных слов по 4 байта. А это как раз 16 или да же 32 байтовый массив.

Сейчас вышел новый Райсбери (из не дорогих платформ с ARMv8) мы про него не говорили, там наверное можно без оговорок с 32 байтовыми массивами работать. Он имеет слова в 64 бита.

Автор: *

Вот ещё операция, вообще не знаю как делать. Допустим есть миллион чисел, можно легко найти минимум, максимум и среднее. А если нужно разбить не на 2, а на 256 диапазонов? Чтобы в каждом было одинаковое количество элементов. Конечно полезнее поискать там максимумы или другие значимые точки, но иногда нужно просто упростить, как бы оцифровать в 8 бит. Просто деревом не получится, если на одну ветвь добавилось много, то очень легко часть суммы перекинуть на другую ветвь, а вот раскидать эту сумму там по подветвям уже не получится.

Так это делается через хеш функцию (которую вы сами должны сделать), еще можно посмотреть возможности MMU (Мемори Менеджмент Юнит).

28

Re: ARM

http://forum.ksri.info/viewtopic.php?pid=10059#p10059

С оптимизацией -Os количество команд почти в 2 раза меньше.
Анологично для АРМ. Попробую показать на днях (нет сейчас под рукой системы с АРМ).

heap_sutras_real_2.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <FixTree>:
   0:    48 63 c7                 movslq %edi,%rax
   3:    44 8b 04 85 00 00 00     mov    0x0(,%rax,4),%r8d
   a:    00 
   b:    8d 04 3f                 lea    (%rdi,%rdi,1),%eax
   e:    39 f0                    cmp    %esi,%eax
  10:    7f 48                    jg     5a <FixTree+0x5a>
  12:    48 63 d0                 movslq %eax,%rdx
  15:    8b 14 95 00 00 00 00     mov    0x0(,%rdx,4),%edx
  1c:    75 04                    jne    22 <FixTree+0x22>
  1e:    89 d1                    mov    %edx,%ecx
  20:    eb 0d                    jmp    2f <FixTree+0x2f>
  22:    8d 48 01                 lea    0x1(%rax),%ecx
  25:    48 63 c9                 movslq %ecx,%rcx
  28:    8b 0c 8d 00 00 00 00     mov    0x0(,%rcx,4),%ecx
  2f:    39 d1                    cmp    %edx,%ecx
  31:    7e 14                    jle    47 <FixTree+0x47>
  33:    44 39 c1                 cmp    %r8d,%ecx
  36:    7e 0f                    jle    47 <FixTree+0x47>
  38:    48 63 ff                 movslq %edi,%rdi
  3b:    89 0c bd 00 00 00 00     mov    %ecx,0x0(,%rdi,4)
  42:    8d 78 01                 lea    0x1(%rax),%edi
  45:    eb c4                    jmp    b <FixTree+0xb>
  47:    44 39 c2                 cmp    %r8d,%edx
  4a:    7e 0e                    jle    5a <FixTree+0x5a>
  4c:    48 63 ff                 movslq %edi,%rdi
  4f:    89 14 bd 00 00 00 00     mov    %edx,0x0(,%rdi,4)
  56:    89 c7                    mov    %eax,%edi
  58:    eb b1                    jmp    b <FixTree+0xb>
  5a:    48 63 ff                 movslq %edi,%rdi
  5d:    44 89 04 bd 00 00 00     mov    %r8d,0x0(,%rdi,4)
  64:    00 
  65:    c3                       retq   

0000000000000066 <main>:
  66:    55                       push   %rbp
  67:    bf 0a 00 00 00           mov    $0xa,%edi
  6c:    53                       push   %rbx
  6d:    48 83 ec 18              sub    $0x18,%rsp
  71:    e8 00 00 00 00           callq  76 <main+0x10>
  76:    bf 00 00 00 00           mov    $0x0,%edi
  7b:    e8 00 00 00 00           callq  80 <main+0x1a>
  80:    eb 35                    jmp    b7 <main+0x51>
  82:    31 c0                    xor    %eax,%eax
  84:    48 89 e6                 mov    %rsp,%rsi
  87:    bf 00 00 00 00           mov    $0x0,%edi
  8c:    e8 00 00 00 00           callq  91 <main+0x2b>
  91:    85 c0                    test   %eax,%eax
  93:    7e 2b                    jle    c0 <main+0x5a>
  95:    8b 2d 00 00 00 00        mov    0x0(%rip),%ebp        # 9b <main+0x35>
  9b:    48 89 e7                 mov    %rsp,%rdi
  9e:    31 c0                    xor    %eax,%eax
  a0:    ff c5                    inc    %ebp
  a2:    89 2d 00 00 00 00        mov    %ebp,0x0(%rip)        # a8 <main+0x42>
  a8:    48 63 ed                 movslq %ebp,%rbp
  ab:    e8 00 00 00 00           callq  b0 <main+0x4a>
  b0:    89 04 ad 00 00 00 00     mov    %eax,0x0(,%rbp,4)
  b7:    83 3d 00 00 00 00 08     cmpl   $0x8,0x0(%rip)        # be <main+0x58>
  be:    7e c2                    jle    82 <main+0x1c>
  c0:    8b 05 00 00 00 00        mov    0x0(%rip),%eax        # c6 <main+0x60>
  c6:    d1 f8                    sar    %eax
  c8:    89 05 00 00 00 00        mov    %eax,0x0(%rip)        # ce <main+0x68>
  ce:    eb 76                    jmp    146 <main+0xe0>
  d0:    8b 35 00 00 00 00        mov    0x0(%rip),%esi        # d6 <main+0x70>
  d6:    e8 00 00 00 00           callq  db <main+0x75>
  db:    8b 15 00 00 00 00        mov    0x0(%rip),%edx        # e1 <main+0x7b>
  e1:    8b 35 00 00 00 00        mov    0x0(%rip),%esi        # e7 <main+0x81>
  e7:    bf 00 00 00 00           mov    $0x0,%edi
  ec:    31 c0                    xor    %eax,%eax
  ee:    e8 00 00 00 00           callq  f3 <main+0x8d>
  f3:    c7 05 00 00 00 00 01     movl   $0x1,0x0(%rip)        # fd <main+0x97>
  fa:    00 00 00 
  fd:    eb 1c                    jmp    11b <main+0xb5>
  ff:    48 63 d2                 movslq %edx,%rdx
 102:    bf 00 00 00 00           mov    $0x0,%edi
 107:    31 c0                    xor    %eax,%eax
 109:    8b 34 95 00 00 00 00     mov    0x0(,%rdx,4),%esi
 110:    e8 00 00 00 00           callq  115 <main+0xaf>
 115:    ff 05 00 00 00 00        incl   0x0(%rip)        # 11b <main+0xb5>
 11b:    8b 15 00 00 00 00        mov    0x0(%rip),%edx        # 121 <main+0xbb>
 121:    8b 05 00 00 00 00        mov    0x0(%rip),%eax        # 127 <main+0xc1>
 127:    39 c2                    cmp    %eax,%edx
 129:    7c d4                    jl     ff <main+0x99>
 12b:    48 98                    cltq   
 12d:    bf 00 00 00 00           mov    $0x0,%edi
 132:    8b 34 85 00 00 00 00     mov    0x0(,%rax,4),%esi
 139:    31 c0                    xor    %eax,%eax
 13b:    e8 00 00 00 00           callq  140 <main+0xda>
 140:    ff 0d 00 00 00 00        decl   0x0(%rip)        # 146 <main+0xe0>
 146:    8b 3d 00 00 00 00        mov    0x0(%rip),%edi        # 14c <main+0xe6>
 14c:    85 ff                    test   %edi,%edi
 14e:    7f 80                    jg     d0 <main+0x6a>
 150:    bf 00 00 00 00           mov    $0x0,%edi
 155:    31 c0                    xor    %eax,%eax
 157:    e8 00 00 00 00           callq  15c <main+0xf6>
 15c:    c7 05 00 00 00 00 01     movl   $0x1,0x0(%rip)        # 166 <main+0x100>
 163:    00 00 00 
 166:    eb 1c                    jmp    184 <main+0x11e>
 168:    48 63 d2                 movslq %edx,%rdx
 16b:    bf 00 00 00 00           mov    $0x0,%edi
 170:    31 c0                    xor    %eax,%eax
 172:    8b 34 95 00 00 00 00     mov    0x0(,%rdx,4),%esi
 179:    e8 00 00 00 00           callq  17e <main+0x118>
 17e:    ff 05 00 00 00 00        incl   0x0(%rip)        # 184 <main+0x11e>
 184:    8b 15 00 00 00 00        mov    0x0(%rip),%edx        # 18a <main+0x124>
 18a:    8b 05 00 00 00 00        mov    0x0(%rip),%eax        # 190 <main+0x12a>
 190:    39 c2                    cmp    %eax,%edx
 192:    7c d4                    jl     168 <main+0x102>
 194:    48 98                    cltq   
 196:    bf 00 00 00 00           mov    $0x0,%edi
 19b:    8b 34 85 00 00 00 00     mov    0x0(,%rax,4),%esi
 1a2:    31 c0                    xor    %eax,%eax
 1a4:    e8 00 00 00 00           callq  1a9 <main+0x143>
 1a9:    8b 05 00 00 00 00        mov    0x0(%rip),%eax        # 1af <main+0x149>
 1af:    89 05 00 00 00 00        mov    %eax,0x0(%rip)        # 1b5 <main+0x14f>
 1b5:    e9 8e 00 00 00           jmpq   248 <main+0x1e2>
 1ba:    48 63 c6                 movslq %esi,%rax
 1bd:    8b 15 00 00 00 00        mov    0x0(%rip),%edx        # 1c3 <main+0x15d>
 1c3:    ff ce                    dec    %esi
 1c5:    8b 0c 85 00 00 00 00     mov    0x0(,%rax,4),%ecx
 1cc:    bf 01 00 00 00           mov    $0x1,%edi
 1d1:    89 15 00 00 00 00        mov    %edx,0x0(%rip)        # 1d7 <main+0x171>
 1d7:    89 0d 00 00 00 00        mov    %ecx,0x0(%rip)        # 1dd <main+0x177>
 1dd:    89 14 85 00 00 00 00     mov    %edx,0x0(,%rax,4)
 1e4:    e8 00 00 00 00           callq  1e9 <main+0x183>
 1e9:    bf 00 00 00 00           mov    $0x0,%edi
 1ee:    31 c0                    xor    %eax,%eax
 1f0:    e8 00 00 00 00           callq  1f5 <main+0x18f>
 1f5:    c7 05 00 00 00 00 01     movl   $0x1,0x0(%rip)        # 1ff <main+0x199>
 1fc:    00 00 00 
 1ff:    eb 1c                    jmp    21d <main+0x1b7>
 201:    48 63 d2                 movslq %edx,%rdx
 204:    bf 00 00 00 00           mov    $0x0,%edi
 209:    31 c0                    xor    %eax,%eax
 20b:    8b 34 95 00 00 00 00     mov    0x0(,%rdx,4),%esi
 212:    e8 00 00 00 00           callq  217 <main+0x1b1>
 217:    ff 05 00 00 00 00        incl   0x0(%rip)        # 21d <main+0x1b7>
 21d:    8b 15 00 00 00 00        mov    0x0(%rip),%edx        # 223 <main+0x1bd>
 223:    8b 05 00 00 00 00        mov    0x0(%rip),%eax        # 229 <main+0x1c3>
 229:    39 c2                    cmp    %eax,%edx
 22b:    7c d4                    jl     201 <main+0x19b>
 22d:    48 98                    cltq   
 22f:    bf 00 00 00 00           mov    $0x0,%edi
 234:    8b 34 85 00 00 00 00     mov    0x0(,%rax,4),%esi
 23b:    31 c0                    xor    %eax,%eax
 23d:    e8 00 00 00 00           callq  242 <main+0x1dc>
 242:    ff 0d 00 00 00 00        decl   0x0(%rip)        # 248 <main+0x1e2>
 248:    8b 35 00 00 00 00        mov    0x0(%rip),%esi        # 24e <main+0x1e8>
 24e:    83 fe 01                 cmp    $0x1,%esi
 251:    0f 8f 63 ff ff ff        jg     1ba <main+0x154>
 257:    bf 00 00 00 00           mov    $0x0,%edi
 25c:    31 c0                    xor    %eax,%eax
 25e:    e8 00 00 00 00           callq  263 <main+0x1fd>
 263:    c7 05 00 00 00 00 01     movl   $0x1,0x0(%rip)        # 26d <main+0x207>
 26a:    00 00 00 
 26d:    eb 1c                    jmp    28b <main+0x225>
 26f:    48 63 d2                 movslq %edx,%rdx
 272:    bf 00 00 00 00           mov    $0x0,%edi
 277:    31 c0                    xor    %eax,%eax
 279:    8b 34 95 00 00 00 00     mov    0x0(,%rdx,4),%esi
 280:    e8 00 00 00 00           callq  285 <main+0x21f>
 285:    ff 05 00 00 00 00        incl   0x0(%rip)        # 28b <main+0x225>
 28b:    8b 15 00 00 00 00        mov    0x0(%rip),%edx        # 291 <main+0x22b>
 291:    8b 05 00 00 00 00        mov    0x0(%rip),%eax        # 297 <main+0x231>
 297:    39 c2                    cmp    %eax,%edx
 299:    7c d4                    jl     26f <main+0x209>
 29b:    48 98                    cltq   
 29d:    bf 00 00 00 00           mov    $0x0,%edi
 2a2:    8b 34 85 00 00 00 00     mov    0x0(,%rax,4),%esi
 2a9:    31 c0                    xor    %eax,%eax
 2ab:    e8 00 00 00 00           callq  2b0 <main+0x24a>
 2b0:    bf 00 00 00 00           mov    $0x0,%edi
 2b5:    e8 00 00 00 00           callq  2ba <main+0x254>
 2ba:    48 83 c4 18              add    $0x18,%rsp
 2be:    5b                       pop    %rbx
 2bf:    5d                       pop    %rbp
 2c0:    c3                       retq   

Disassembly of section .bss:

0000000000000000 <iNum>:
   0:    00 00                    add    %al,(%rax)
    ...

Disassembly of section .rodata.str1.1:

0000000000000000 <.rodata.str1.1>:
   0:    48                       rex.W
   1:    65                       gs
   2:    61                       (bad)  
   3:    70 2e                    jo     33 <.rodata.str1.1+0x33>
   5:    20 20                    and    %ah,(%rax)
   7:    41 72 72                 rex.B jb     7c <.rodata.str1.1+0x7c>
   a:    61                       (bad)  
   b:    79 20                    jns    2d <.rodata.str1.1+0x2d>
   d:    73 6f                    jae    7e <.rodata.str1.1+0x7e>
   f:    72 74                    jb     85 <.rodata.str1.1+0x85>
  11:    69 6e 67 20 62 79 20     imul   $0x20796220,0x67(%rsi),%ebp
  18:    74 72                    je     8c <.rodata.str1.1+0x8c>
  1a:    65 65 20 62 75           and    %ah,%gs:0x75(%rdx)
  1f:    69 6c 64 69 6e 67 2e     imul   $0x2e676e,0x69(%rsp,%riz,2),%ebp
  26:    00 
  27:    25 73 00 2a 20           and    $0x202a0073,%eax
  2c:    25 64 20 25 64           and    $0x64252064,%eax
  31:    3a 20                    cmp    (%rax),%ah
  33:    00 25 64 20 00 25        add    %ah,0x25002064(%rip)        # 2500209d <main+0x25002037>
  39:    64 20 0a                 and    %cl,%fs:(%rdx)
  3c:    00 2a                    add    %ch,(%rdx)
  3e:    20 55 6e                 and    %dl,0x6e(%rbp)
  41:    53                       push   %rbx
  42:    6f                       outsl  %ds:(%rsi),(%dx)
  43:    72 74                    jb     b9 <main+0x53>
  45:    65 64 20 61 72           and    %ah,%fs:%gs:0x72(%rcx)
  4a:    72 61                    jb     ad <main+0x47>
  4c:    79 20                    jns    6e <.rodata.str1.1+0x6e>
  4e:    2a 0a                    sub    (%rdx),%cl
  50:    20 20                    and    %ah,(%rax)
  52:    00 2a                    add    %ch,(%rdx)
  54:    20 00                    and    %al,(%rax)
  56:    2a 20                    sub    (%rax),%ah
  58:    53                       push   %rbx
  59:    6f                       outsl  %ds:(%rsi),(%dx)
  5a:    72 74                    jb     d0 <main+0x6a>
  5c:    65 64 20 61 72           and    %ah,%fs:%gs:0x72(%rcx)
  61:    72 61                    jb     c4 <main+0x5e>
  63:    79 20                    jns    85 <.rodata.str1.1+0x85>
  65:    2a 0a                    sub    (%rdx),%cl
  67:    20 20                    and    %ah,(%rax)
  69:    00 50 2e                 add    %dl,0x2e(%rax)
  6c:    53                       push   %rbx
  6d:    2e 20 54 68 61           and    %dl,%cs:0x61(%rax,%rbp,2)
  72:    6e                       outsb  %ds:(%rsi),(%dx)
  73:    6b 20 79                 imul   $0x79,(%rax),%esp
  76:    6f                       outsl  %ds:(%rsi),(%dx)
  77:    75 20                    jne    99 <main+0x33>
  79:    66 6f                    outsw  %ds:(%rsi),(%dx)
  7b:    72 20                    jb     9d <main+0x37>
  7d:    75 73                    jne    f2 <main+0x8c>
  7f:    69 6e 67 20 6f 75 72     imul   $0x72756f20,0x67(%rsi),%ebp
  86:    20 73 6f                 and    %dh,0x6f(%rbx)
  89:    66                       data16
  8a:    74 77                    je     103 <main+0x9d>
  8c:    61                       (bad)  
  8d:    72 65                    jb     f4 <main+0x8e>
  8f:    2e                       cs
    ...

Disassembly of section .comment:

0000000000000000 <.comment>:
   0:    00 47 43                 add    %al,0x43(%rdi)
   3:    43 3a 20                 rex.XB cmp    (%r8),%spl
   6:    28 44 65 62              sub    %al,0x62(%rbp,%riz,2)
   a:    69 61 6e 20 34 2e 34     imul   $0x342e3420,0x6e(%rcx),%esp
  11:    2e                       cs
  12:    35 2d 38 29 20           xor    $0x2029382d,%eax
  17:    34 2e                    xor    $0x2e,%al
  19:    34 2e                    xor    $0x2e,%al
  1b:    35                       .byte 0x35
    ...

Disassembly of section .eh_frame:

0000000000000000 <.eh_frame>:
   0:    14 00                    adc    $0x0,%al
   2:    00 00                    add    %al,(%rax)
   4:    00 00                    add    %al,(%rax)
   6:    00 00                    add    %al,(%rax)
   8:    01 7a 52                 add    %edi,0x52(%rdx)
   b:    00 01                    add    %al,(%rcx)
   d:    78 10                    js     1f <.eh_frame+0x1f>
   f:    01 1b                    add    %ebx,(%rbx)
  11:    0c 07                    or     $0x7,%al
  13:    08 90 01 00 00 10        or     %dl,0x10000001(%rax)
  19:    00 00                    add    %al,(%rax)
  1b:    00 1c 00                 add    %bl,(%rax,%rax,1)
  1e:    00 00                    add    %al,(%rax)
  20:    00 00                    add    %al,(%rax)
  22:    00 00                    add    %al,(%rax)
  24:    66                       data16
  25:    00 00                    add    %al,(%rax)
  27:    00 00                    add    %al,(%rax)
  29:    00 00                    add    %al,(%rax)
  2b:    00 20                    add    %ah,(%rax)
  2d:    00 00                    add    %al,(%rax)
  2f:    00 30                    add    %dh,(%rax)
  31:    00 00                    add    %al,(%rax)
  33:    00 00                    add    %al,(%rax)
  35:    00 00                    add    %al,(%rax)
  37:    00 5b 02                 add    %bl,0x2(%rbx)
  3a:    00 00                    add    %al,(%rax)
  3c:    00 41 0e                 add    %al,0xe(%rcx)
  3f:    10 46 0e                 adc    %al,0xe(%rsi)
  42:    18 44 0e 30              sbb    %al,0x30(%rsi,%rcx,1)
  46:    83 03 86                 addl   $0xffffffffffffff86,(%rbx)
  49:    02 00                    add    (%rax),%al
  4b:    00 00                    add    %al,(%rax)
  4d:    00 00                    add    %al,(%rax)
    ...

29

Re: ARM

Получается что для оптимизации хипом нужно порядка 20 команд и 7 условных переходов, которые не нужны в АРМ (там каждая команда идет с условием).

Сортировка делается за один проход буфера с бинарным деревом. Эти 20 инструкций вызываются по сути для каждого узла дерева. Из них 4 сравнения. Которые можно разнести на 3 процессора, либо использовать векторные операции.

Суть в том что у нас 3 элемента. Вектор. Над которым надо сделать максимум 3 атомарных операции.

В простейшем случае это будет ротация вектора. Либо это может быть перестановка слов. То есть можно свести все к 2 сравнениям (или одному векторному сравнению с 2 флагами) и одной операции по результату сравнения.

В АРМ есть подсистема управления Тегами для адресации памяти в кеше второго уровня.
Вероятно с использованием тегов памяти можно ускорить алгоритм (сделать его на 50% в железе или сопроцессоре).

IMHO

30

Re: ARM

Линукс смотрится ужасно:

arch/arm/kernel/head.S делает как раз инициализацию устройства управления страницами памяти (можно сказать кеш третьего уровня L3).

Более того с самого начала не включается L1, L2 и TLB (Транслейшен Лоокасайд Буффре).

Потом все таки самые маленькие таблицы памяти инициализируются (кто бы сказал почему выбран этот размер 1 М и еще кеш L1 16 К ?). L2 так и не включается.

Более того подгрузка данных в кеши не делается, их состояние оказывается неопределенным (в старых версиях процессоров не было команд для управления этим).

Вот такая плата за универсальность Линукса ....

Не каких попыток сделать хотя бы макросы для определения важных кусков кода (я уж не говорю об централизованном именовании - все это на откупе корпораций - каждая и АППЛ и Интел и Самсунг изобретают свою собственную инструментализацию ядра ....)

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

Похоже Линукс умер, а все адекватные люди переходят либо на Микроядра от Микрософт, либо вообще на аппаратные Операционные системы (типа софта под Ардвино).


Вот что будет, если добавить в Линукс L2, вместо таблиц страниц в памяти Линукс системы (которые уже устарели на 12 лет)?

1. Перестанут работать почти все (70%) эксплоиты Линукс, которые обращаются напрямую к модулям ядра.

2. Нельзя будет найти Физические страницы через /dev/mem (какой кошмар, виртуальные адреса в /dev/kmem и системные таблицы то же останутся).

3. Не будет задержек в подгрузке контекста.

Так же приведет к серьезной головной боли для всяких компьютер сикрет-агенств из Израиля (все их системы заражения придется переделывать).

Как такое можно вообще допустить? Нет пусть уж лучше ядро Линукс будет рассчитано на ARM11 по умолчанию.

31

Re: ARM

Как и обещал, программа сортировки дерева хипом под АРМ с максимальной оптимизацией -
Хорошо можно видеть что до оптимизации связанной с самим микропроцессоро дело совершенно не доходит. Не использованы команды упраления кешем и так далее...

heap_sutras_real_2.o:     file format elf32-littlearm


Disassembly of section .text:

00000000 <FixTree>:
   0:    4a13          ldr    r2, [pc, #76]    ; (50 <FixTree+0x50>)
   2:    b5f0          push    {r4, r5, r6, r7, lr}
   4:    f852 6020     ldr.w    r6, [r2, r0, lsl #2]
   8:    0043          lsls    r3, r0, #1
   a:    428b          cmp    r3, r1
   c:    dc1b          bgt.n    46 <FixTree+0x46>
   e:    f852 4023     ldr.w    r4, [r2, r3, lsl #2]
  12:    bf08          it    eq
  14:    4625          moveq    r5, r4
  16:    d002          beq.n    1e <FixTree+0x1e>
  18:    1c5d          adds    r5, r3, #1
  1a:    f852 5025     ldr.w    r5, [r2, r5, lsl #2]
  1e:    42b5          cmp    r5, r6
  20:    bfd4          ite    le
  22:    2700          movle    r7, #0
  24:    2701          movgt    r7, #1
  26:    42a5          cmp    r5, r4
  28:    bfd4          ite    le
  2a:    2700          movle    r7, #0
  2c:    f007 0701     andgt.w    r7, r7, #1
  30:    b11f          cbz    r7, 3a <FixTree+0x3a>
  32:    f842 5020     str.w    r5, [r2, r0, lsl #2]
  36:    1c58          adds    r0, r3, #1
  38:    e7e6          b.n    8 <FixTree+0x8>
  3a:    42b4          cmp    r4, r6
  3c:    dd03          ble.n    46 <FixTree+0x46>
  3e:    f842 4020     str.w    r4, [r2, r0, lsl #2]
  42:    4618          mov    r0, r3
  44:    e7e0          b.n    8 <FixTree+0x8>
  46:    4b02          ldr    r3, [pc, #8]    ; (50 <FixTree+0x50>)
  48:    f843 6020     str.w    r6, [r3, r0, lsl #2]
  4c:    bdf0          pop    {r4, r5, r6, r7, pc}
  4e:    bf00          nop
  50:    00000000     andeq    r0, r0, r0

Disassembly of section .bss:

00000000 <iNum>:
   0:    00000000     andeq    r0, r0, r0

Disassembly of section .text.startup:

00000000 <main>:
   0:    b5f7          push    {r0, r1, r2, r4, r5, r6, r7, lr}
   2:    200a          movs    r0, #10
   4:    f7ff fffe     bl    0 <putchar>
   8:    4857          ldr    r0, [pc, #348]    ; (160 <puts+0x160>)
   a:    f7ff fffe     bl    0 <puts>
   e:    4c57          ldr    r4, [pc, #348]    ; (16c <main+0x16c>)
  10:    4d57          ldr    r5, [pc, #348]    ; (170 <main+0x170>)
  12:    e00d          b.n    30 <main+0x30>
  14:    4857          ldr    r0, [pc, #348]    ; (174 <main+0x174>)
  16:    a901          add    r1, sp, #4
  18:    f7ff fffe     bl    0 <__isoc99_scanf>
  1c:    2800          cmp    r0, #0
  1e:    dd0a          ble.n    36 <main+0x36>
  20:    6826          ldr    r6, [r4, #0]
  22:    a801          add    r0, sp, #4
  24:    3601          adds    r6, #1
  26:    6026          str    r6, [r4, #0]
  28:    f7ff fffe     bl    0 <atoi>
  2c:    f845 0026     str.w    r0, [r5, r6, lsl #2]
  30:    6823          ldr    r3, [r4, #0]
  32:    2b08          cmp    r3, #8
  34:    ddee          ble.n    14 <main+0x14>
  36:    4b4d          ldr    r3, [pc, #308]    ; (16c <main+0x16c>)
  38:    4d4f          ldr    r5, [pc, #316]    ; (178 <main+0x178>)
  3a:    4c50          ldr    r4, [pc, #320]    ; (17c <main+0x17c>)
  3c:    681b          ldr    r3, [r3, #0]
  3e:    105b          asrs    r3, r3, #1
  40:    602b          str    r3, [r5, #0]
  42:    e021          b.n    88 <main+0x88>
  44:    4e49          ldr    r6, [pc, #292]    ; (16c <main+0x16c>)
  46:    4f4a          ldr    r7, [pc, #296]    ; (170 <main+0x170>)
  48:    6831          ldr    r1, [r6, #0]
  4a:    f7ff fffe     bl    0 <main>
  4e:    484c          ldr    r0, [pc, #304]    ; (180 <main+0x180>)
  50:    6829          ldr    r1, [r5, #0]
  52:    6832          ldr    r2, [r6, #0]
  54:    f7ff fffe     bl    0 <printf>
  58:    2301          movs    r3, #1
  5a:    6023          str    r3, [r4, #0]
  5c:    e007          b.n    6e <main+0x6e>
  5e:    4849          ldr    r0, [pc, #292]    ; (184 <main+0x184>)
  60:    f857 1022     ldr.w    r1, [r7, r2, lsl #2]
  64:    f7ff fffe     bl    0 <printf>
  68:    6823          ldr    r3, [r4, #0]
  6a:    3301          adds    r3, #1
  6c:    6023          str    r3, [r4, #0]
  6e:    6822          ldr    r2, [r4, #0]
  70:    6833          ldr    r3, [r6, #0]
  72:    429a          cmp    r2, r3
  74:    dbf3          blt.n    5e <main+0x5e>
  76:    4a3e          ldr    r2, [pc, #248]    ; (170 <main+0x170>)
  78:    4843          ldr    r0, [pc, #268]    ; (188 <main+0x188>)
  7a:    f852 1023     ldr.w    r1, [r2, r3, lsl #2]
  7e:    f7ff fffe     bl    0 <printf>
  82:    682b          ldr    r3, [r5, #0]
  84:    3b01          subs    r3, #1
  86:    602b          str    r3, [r5, #0]
  88:    6828          ldr    r0, [r5, #0]
  8a:    4e3b          ldr    r6, [pc, #236]    ; (178 <main+0x178>)
  8c:    2800          cmp    r0, #0
  8e:    dcd9          bgt.n    44 <main+0x44>
  90:    483e          ldr    r0, [pc, #248]    ; (18c <main+0x18c>)
  92:    4634          mov    r4, r6
  94:    f7ff fffe     bl    0 <printf>
  98:    4f34          ldr    r7, [pc, #208]    ; (16c <main+0x16c>)
  9a:    2301          movs    r3, #1
  9c:    4d34          ldr    r5, [pc, #208]    ; (170 <main+0x170>)
  9e:    6033          str    r3, [r6, #0]
  a0:    e007          b.n    b2 <main+0xb2>
  a2:    4838          ldr    r0, [pc, #224]    ; (184 <main+0x184>)
  a4:    f855 1022     ldr.w    r1, [r5, r2, lsl #2]
  a8:    f7ff fffe     bl    0 <printf>
  ac:    6823          ldr    r3, [r4, #0]
  ae:    3301          adds    r3, #1
  b0:    6023          str    r3, [r4, #0]
  b2:    6822          ldr    r2, [r4, #0]
  b4:    683b          ldr    r3, [r7, #0]
  b6:    4e30          ldr    r6, [pc, #192]    ; (178 <main+0x178>)
  b8:    429a          cmp    r2, r3
  ba:    dbf2          blt.n    a2 <main+0xa2>
  bc:    4a2c          ldr    r2, [pc, #176]    ; (170 <main+0x170>)
  be:    4832          ldr    r0, [pc, #200]    ; (188 <main+0x188>)
  c0:    4d2e          ldr    r5, [pc, #184]    ; (17c <main+0x17c>)
  c2:    f852 1023     ldr.w    r1, [r2, r3, lsl #2]
  c6:    f7ff fffe     bl    0 <printf>
  ca:    4b28          ldr    r3, [pc, #160]    ; (16c <main+0x16c>)
  cc:    681b          ldr    r3, [r3, #0]
  ce:    6033          str    r3, [r6, #0]
  d0:    e028          b.n    124 <main+0x124>
  d2:    4c27          ldr    r4, [pc, #156]    ; (170 <main+0x170>)
  d4:    2001          movs    r0, #1
  d6:    4a2e          ldr    r2, [pc, #184]    ; (190 <main+0x190>)
  d8:    4f24          ldr    r7, [pc, #144]    ; (16c <main+0x16c>)
  da:    6863          ldr    r3, [r4, #4]
  dc:    6013          str    r3, [r2, #0]
  de:    f854 2021     ldr.w    r2, [r4, r1, lsl #2]
  e2:    6062          str    r2, [r4, #4]
  e4:    f844 3021     str.w    r3, [r4, r1, lsl #2]
  e8:    3901          subs    r1, #1
  ea:    f7ff fffe     bl    0 <main>
  ee:    4829          ldr    r0, [pc, #164]    ; (a8 <printf+0xa8>)
  f0:    f7ff fffe     bl    0 <printf>
  f4:    2301          movs    r3, #1
  f6:    602b          str    r3, [r5, #0]
  f8:    e007          b.n    10a <main+0x10a>
  fa:    4822          ldr    r0, [pc, #136]    ; (184 <main+0x184>)
  fc:    f854 1022     ldr.w    r1, [r4, r2, lsl #2]
 100:    f7ff fffe     bl    0 <printf>
 104:    682b          ldr    r3, [r5, #0]
 106:    3301          adds    r3, #1
 108:    602b          str    r3, [r5, #0]
 10a:    682a          ldr    r2, [r5, #0]
 10c:    683b          ldr    r3, [r7, #0]
 10e:    429a          cmp    r2, r3
 110:    dbf3          blt.n    fa <main+0xfa>
 112:    4a17          ldr    r2, [pc, #92]    ; (170 <main+0x170>)
 114:    481c          ldr    r0, [pc, #112]    ; (188 <main+0x188>)
 116:    f852 1023     ldr.w    r1, [r2, r3, lsl #2]
 11a:    f7ff fffe     bl    0 <printf>
 11e:    6833          ldr    r3, [r6, #0]
 120:    3b01          subs    r3, #1
 122:    6033          str    r3, [r6, #0]
 124:    6831          ldr    r1, [r6, #0]
 126:    4c14          ldr    r4, [pc, #80]    ; (178 <main+0x178>)
 128:    2901          cmp    r1, #1
 12a:    dcd2          bgt.n    d2 <main+0xd2>
 12c:    481a          ldr    r0, [pc, #104]    ; (198 <main+0x198>)
 12e:    f7ff fffe     bl    0 <printf>
 132:    4e0e          ldr    r6, [pc, #56]    ; (16c <main+0x16c>)
 134:    2301          movs    r3, #1
 136:    4d0e          ldr    r5, [pc, #56]    ; (170 <main+0x170>)
 138:    6023          str    r3, [r4, #0]
 13a:    e007          b.n    14c <main+0x14c>
 13c:    4811          ldr    r0, [pc, #68]    ; (184 <main+0x184>)
 13e:    f855 1022     ldr.w    r1, [r5, r2, lsl #2]
 142:    f7ff fffe     bl    0 <printf>
 146:    6823          ldr    r3, [r4, #0]
 148:    3301          adds    r3, #1
 14a:    6023          str    r3, [r4, #0]
 14c:    6822          ldr    r2, [r4, #0]
 14e:    6833          ldr    r3, [r6, #0]
 150:    429a          cmp    r2, r3
 152:    dbf3          blt.n    13c <main+0x13c>
 154:    4a06          ldr    r2, [pc, #24]    ; (170 <main+0x170>)
 156:    480c          ldr    r0, [pc, #48]    ; (188 <main+0x188>)
 158:    f852 1023     ldr.w    r1, [r2, r3, lsl #2]
 15c:    f7ff fffe     bl    0 <printf>
 160:    480e          ldr    r0, [pc, #56]    ; (3c <puts+0x3c>)
 162:    f7ff fffe     bl    0 <puts>
 166:    bdfe          pop    {r1, r2, r3, r4, r5, r6, r7, pc}
    ...
 174:    00000027     andeq    r0, r0, r7, lsr #32
    ...
 180:    0000002a     andeq    r0, r0, sl, lsr #32
 184:    00000034     andeq    r0, r0, r4, lsr r0
 188:    00000038     andeq    r0, r0, r8, lsr r0
 18c:    0000003d     andeq    r0, r0, sp, lsr r0
 190:    00000000     andeq    r0, r0, r0
 194:    00000053     andeq    r0, r0, r3, asr r0
 198:    00000056     andeq    r0, r0, r6, asr r0
 19c:    0000006a     andeq    r0, r0, sl, rrx

Disassembly of section .rodata.str1.1:

00000000 <.rodata.str1.1>:
   0:    70616548     rsbvc    r6, r1, r8, asr #10
   4:    4120202e     teqmi    r0, lr, lsr #32
   8:    79617272     stmdbvc    r1!, {r1, r4, r5, r6, r9, ip, sp, lr}^
   c:    726f7320     rsbvc    r7, pc, #-2147483648    ; 0x80000000
  10:    676e6974             ; <UNDEFINED> instruction: 0x676e6974
  14:    20796220     rsbscs    r6, r9, r0, lsr #4
  18:    65657274     strbvs    r7, [r5, #-628]!    ; 0x274
  1c:    69756220     ldmdbvs    r5!, {r5, r9, sp, lr}^
  20:    6e69646c     cdpvs    4, 6, cr6, cr9, cr12, {3}
  24:    25002e67     strcs    r2, [r0, #-3687]    ; 0xe67
  28:    202a0073     eorcs    r0, sl, r3, ror r0
  2c:    25206425     strcs    r6, [r0, #-1061]!    ; 0x425
  30:    00203a64     eoreq    r3, r0, r4, ror #20
  34:    00206425     eoreq    r6, r0, r5, lsr #8
  38:    0a206425     beq    8190d4 <FixTree+0x8190d4>
  3c:    55202a00     strpl    r2, [r0, #-2560]!    ; 0xa00
  40:    726f536e     rsbvc    r5, pc, #-1207959551    ; 0xb8000001
  44:    20646574     rsbcs    r6, r4, r4, ror r5
  48:    61727261     cmnvs    r2, r1, ror #4
  4c:    0a2a2079     beq    a88238 <FixTree+0xa88238>
  50:    2a002020     bcs    80d8 <FixTree+0x80d8>
  54:    202a0020     eorcs    r0, sl, r0, lsr #32
  58:    74726f53     ldrbtvc    r6, [r2], #-3923    ; 0xf53
  5c:    61206465     teqvs    r0, r5, ror #8
  60:    79617272     stmdbvc    r1!, {r1, r4, r5, r6, r9, ip, sp, lr}^
  64:    200a2a20     andcs    r2, sl, r0, lsr #20
  68:    2e500020     cdpcs    0, 5, cr0, cr0, cr0, {1}
  6c:    54202e53     strtpl    r2, [r0], #-3667    ; 0xe53
  70:    6b6e6168     blvs    1b98618 <FixTree+0x1b98618>
  74:    756f7920     strbvc    r7, [pc, #-2336]!    ; fffff75c <FixTree+0xfffff75c>
  78:    726f6620     rsbvc    r6, pc, #33554432    ; 0x2000000
  7c:    69737520     ldmdbvs    r3!, {r5, r8, sl, ip, sp, lr}^
  80:    6f20676e     svcvs    0x0020676e
  84:    73207275     teqvc    r0, #1342177287    ; 0x50000007
  88:    7774666f     ldrbvc    r6, [r4, -pc, ror #12]!
  8c:    2e657261     cdpcs    2, 6, cr7, cr5, cr1, {3}
    ...

Disassembly of section .comment:

00000000 <.comment>:
   0:    43434700     movtmi    r4, #14080    ; 0x3700
   4:    4428203a     strtmi    r2, [r8], #-58    ; 0x3a
   8:    61696265     cmnvs    r9, r5, ror #4
   c:    2e34206e     cdpcs    0, 3, cr2, cr4, cr14, {3}
  10:    2d332e36     ldccs    14, cr2, [r3, #-216]!    ; 0xffffff28
  14:    20293431     eorcs    r3, r9, r1, lsr r4
  18:    2e362e34     mrccs    14, 1, r2, cr6, cr4, {1}
  1c:    Address 0x0000001c is out of bounds.


Disassembly of section .ARM.attributes:

00000000 <.ARM.attributes>:
   0:    00003441     andeq    r3, r0, r1, asr #8
   4:    61656100     cmnvs    r5, r0, lsl #2
   8:    01006962     tsteq    r0, r2, ror #18
   c:    0000002a     andeq    r0, r0, sl, lsr #32
  10:    412d3705     teqmi    sp, r5, lsl #14
  14:    070a0600     streq    r0, [sl, -r0, lsl #12]
  18:    09010841     stmdbeq    r1, {r0, r6, fp}
  1c:    12040a02     andne    r0, r4, #8192    ; 0x2000
  20:    15011404     strne    r1, [r1, #-1028]    ; 0x404
  24:    18031701     stmdane    r3, {r0, r8, r9, sl, ip}
  28:    1a011901     bne    46434 <FixTree+0x46434>
  2c:    1c031b02     stcne    11, cr1, [r3], {2}
  30:    2c041e01     stccs    14, cr1, [r4], {1}
  34:    Address 0x00000034 is out of bounds.

32

Re: ARM

При попытке управления сопроцессором у меня возникла проблема. Как из режима USR отдать команду в Привелигированном режиме (SVC).
Есть два варианта решения, да же 3.

1. Старовать по голому железу без библиотек и операционной системы.
2. Сделать драйвер в ядре для доступа к соответствующим функциями (либо воспользоватся готовым, например для VFP)
3. Сделать прерывание из Привелигированного режима.

defcode "HELLO",5,,HELLO
    mov r0, #1            @ STDOUT
    adr r1, msgtxt            @ Address
    mov r2, #12            @ Length
    mov r7, #4            @ sys_write
    svc #0
    NEXT
    .balign 4
msgtxt: .ascii "Hello World\n"

Команда "svc #0" заставляет АРМ процессор сделать SVC прерывание.
Режим Супервизора (SVC) включается когда происходит ресет системы или выполняется команда прерывания. Регистр r7 определяет какой системный вызов мы хотим дернуть.
В регистрах r0, r1, r2 располагаются необходимые для вызова аргументы

Запускается это новое слово в Форте следующим образом

JONESFORTH VERSION 47 
14619 CELLS REMAINING
OK 
HELLO
Hello World
BYE

Можно еще подменить системные прерывания в ядре.

http://phrack.org/issues/68/6.html#article

33

Re: ARM

https://ru.wikipedia.org/wiki/%D0%94%D0 … 0%BA%D0%B0

Еще там ноу хау в Диакоптике, у нас тензор составной (как собственно и квантернионов). Но считается опять же один раз, зато можно на автомате сложные модели разделять на части взаимно зависимые.
Перекладывать будем через Кеш 1 уровня многомерный. Просто сделаем его не 3-х мерный как у АРМ, а например 7-ми мерный.

http://forum.ksri.info/viewtopic.php?pid=10808#p10808
Можем на встроенном АРМ просимулировать. Многомерный тензор это вектор или матрица тензоров меньшей размерности.

При использовании политики замещения Round-robin в ассоциативном кеше, можно считать номер пути (way) индексом по времени. Пример для 32 К кеша L1, 4 way (4 временные метки), линия данных будет в 32 байта (8 слов по 4 байта). Всего 256 линий.

http://forum.ksri.info/viewtopic.php?pid=10836#p10836

Вроде на  FPGA есть встроенный АРМ если он многоядерный то мы можем их задействовать для тестов. Скажем сделать для эксперимента трехмерный тензоры на двух ядрах. И еще один кеш ядра использовать как адресную матрицу.

В итоге 2*3=6 шестимерный получается тензор. А это (вроде все что нужно для реализации в железе квантернионов).

http://forum.ksri.info/viewtopic.php?pid=10895#p10895
https://ru.wikipedia.org/wiki/%CA%E2%E0 … D%E8%EE%ED
https://ru.wikipedia.org/wiki/%D0%A0%D0 … 0.BD.D0.B0

Вот математика для спирально подобного поля в зазоре электродвигателя, когда 1-форма в 2 форму переходит. В атмосфере то же самое но там сразу же несколько заходов и они немного друг на друга влияют (коэффиценты влияния как раз внутри нашего многомерного тензора). Отражение на границе так же можно будет сделать путем умножения вектора на тензор ...

Как лучше сделать слайд чтоб продемонстрировать наше Ноу-Хау с многомерным массивом для рассчета векторов, спиноров, квантернионов, гиперболических функций и , возможно, октонионов (для разчета энергии или силы ансамбля - просто произведение тензора скорости и тензора коэффицента сопротивления)?

https://ru.wikipedia.org/wiki/%D0%90%D0 … 0%BB%D0%B8

https://www.youtube.com/watch?v=UcYoC7uQzNA

Как связаны формулы с железом. Если мы получаем телеметрию от дрона, то требуется взаимная коррекция от различных типов датчиков.

https://www.youtube.com/watch?v=SGdcHWYzNO8

Так как берутся отсчеты ускорения через определенное время и ищется дельта А от вектора направленного вниз, то эту операцию можно считать аналогичной диференцированию по направлению к . И мы получаем угловое ускорение, которое надо проинтегрировать по времени чтоб привести к угловой скорости.

http://plotnikovna.narod.ru/01.jpg

В нашей системе, любые корректирующие закономерности находятся автоматически.

https://upload.wikimedia.org/wikipedia/commons/thumb/a/ad/Quaternion2.png/300px-Quaternion2.png


Вот похожи картинки

http://github.com/Ignat99/Trim/blob/master/doc/TOPOL/TOPOL2.GIF
http://en.wikipedia.org/wiki/Quaternion#/media/File:Cayley_graph_Q8.svg

34

Re: ARM

В АРМ можно переопределить операционные коды. Минимум 2 способами. Вообще то это не RISC а эклектический процессор. Внутри у него вообще Гарвардская архитектура. Там да же шины кода и данных различные и встроенная проверка ошибок в кеше L1.

Вообще дело там в низком потреблении, которое достигается постоянным отключением переферии, включая сопроцессоры и устройства которые под сопроцессоры косят типа PL310 - контроллер кеша второго уровня L2.

35

Re: ARM

Автор: *

Как известно, язык С был создан, как альтернатива ассемблеру. Собственно, из синтаксиса языка видны "уши" ассемблера. Так вот, благодаря С стало возможным достаточно быстро писать системные программы и драйвера. Язык С++, как наследник и преемник языка С, обогатился включением концепции ООП. Да, согласен, что на С++ довольно тоскливо писать приложения для юзеров (но можно), и он и не для этого был создан. Его "низкоуровневость" по-прежнему отсылает нас к системному программированию, а не пользовательскому.

В новых чипах АРМv8 архитектуры ассемблер сильно поменяли.

https://marsohod.org/index.php/prodmars … -arm-instr

http://www.arm.com/products/processors/ … ecture.php


Он стал не то что как на сигнальных процессорах типа Си, а практически скриптовый. Множество суфиксов и префиксов - 64 бита позволяют.

Сейчас промежуточный этап, когда еще не закрыто все содержание системы загрузки АРМ внутренними(прошитыми в железе ключами и кодировщиками), пока еще есть возможность увидеть детали.

Хотя чипы от китайских поставщиков уже идут с закрытым слоем виртуализации, который вообще себя не как не проявляет, да же в задержках при инициализации.

В этой связи какие языки будут популярны?
Не скатится ли все к HDL и собственным проектам, которые за какие-то 30 000 можно выпустить за 1 шатл и десяток корпусов. И это будет дешевле, чем кормить весь стек Тихоокеанской ПроАмерикано-Израильско-Японской нази.

Тихоокеанское торговое соглашение->Япония->Квалком->Арм->*->Фрискаил

И анологично по Атмелу и Пикам, все уже скуплено и поставлено в туже иерархию.

Может сотрудничество с Ангстремом-Т это в какой то мере выход из этого Мата?
Хотя вероятно перед тем как дать им заказы, их заставят подписать необходимые соглашения, что и будет сделано - "ушей" там не надо искать - там все явно.

И еще на каждый язык есть своя ОС, для Си это Юникс.
Ждем ОС на встроенном ARM ассеблере или на ООП ассемблере - Форте?

https://github.com/organix/pijFORTHos

36

Re: ARM

Автор: гость

С* и ООП популярны в бизнесе не из за близости к системе, на них удобней писать масштабный код



А зачем писать масштабный код?

https://github.com/organix/pijFORTHos/b … orth.s.txt

Вся ОС занимает 2000 строчек кода (2 недели работы программиста). Скоро добавят в чипы ядра видиокарт с 3D (можно уже сейчас на ПЛИС тренироваться или взять готовую откомпилированную версию OpenCV под Одроид-Икс2, все равно на и на ПЛИС и на Одроид одно и то же ядро ARM Кортекс-А9). Хотя даже сейчас на Одроиде есть сопроцессор Мали.


Можно взять старый Самсунг Галакси S4 за 200 евро там Кортекс-А15. Ну рендиринг 3D еще пару недель кодирования займет. Опять же можно на каждый пиксел матрици проекции завести свое ядрышко (в Микросовт ХолоЛинз так ис сделано, еще и Нейросетка примитивная организована для предсказания движений но уже не виртуальных юнитов а проекций вполне реальных людей).

Базы данных любые можно через JSON-RPC привязать.

Остается Юзер Интерфейс, так для этого давно месенджеры готовые используют.

Получается в реальной жизни, нет места для масштабных проектов. Пустая трата человеческих ресурсов, времени и денег.

Автор: гость



Раньше памяти было мало- её расходовали экономно- писали экономны программы на экономном языке.  А сейчас памяти не меряно- удобнее писать на языке высокого уровня.

Сейчас не то что памяти не мерено, сейчас смартфоны с экранами и батарейками и блютуз и вай-фай интерфейсами выкидывают на помойку. Есть кстати в них и виртуальные клавиатуры.

Остаются конечные автоматы для регулярных выражений - так их логично сделать на логическом синтезаторе (типа ABC) прямо по железу.

Вот и получается что масштабные системы можно свести к незаметным (по занимаемой на кристалле площади) двухстековым наборам регистров и немного более заметным устройствам оптической памяти (если уж мы решили и базы данных заодно в кристалле хранить).

37

Re: ARM

Про чипы с большим количеством ядер.

Вот одно из решений поставленной задачи, запилить форт процессор (в железе) на Верилог или ВиАшДиЕл. И то я просто привел пример, в каких условиях чемпионы олимпиад могут начать плавать. Зависит от человека, но в данном случае придется реализовать токены (if, for, итд) самому.

https://github.com/organix/pijFORTHos/b … orth.s.txt

И это именно тот уровень где можно сделать анализ на уровне ИИ

IMHO

Да же в первых сигнальных ADSPXX были теневые регистры.

Плюс что я знаю про инструментализацию ядра Линукс в Арм. Вход при вызове идет в одном регистре указателя, а выход в другом.

38

Re: ARM

git clone https://github.com/M2IHP13-admin/JonesForth-arm
cd JonesForth-arm
make
make test
==========================
test_comparison.f ... ok
test_exception.f ... ok
test_nqueens.f ... ok
test_number.f ... ok
test_read_file.f ... ok
test_stack.f ... ok
test_stack_trace.f ... ok
==========================
odroid@odroid-wheezy:~/JonesForth-arm$ cat jonesforth.f - | ./jonesforth
JONESFORTH VERSION 47
14619 CELLS REMAINING
OK


Далее берем информацию по новым командам АРМ процессора и правим исходный код,

https://github.com/M2IHP13-admin/JonesF … nesforth.S

так чтобы тесты продолжали работать

https://marsohod.org/index.php/prodmars … -arm-instr

вместо тире можно подставить свою программу для теста

Вот и все окружение для создания СИИ, и замены (например меня) роботом с ИИ.

Можно ли составить такое регулярное выражение (конечный автомат - Кибернетику 2) который справится с прочтением статьи (или спецификации HDL) и сгенерирует замены команд ARM со старого формата ASM на новый?

39

Re: ARM

http://nozdr.ru/biblio/kolxo3/cs/cscg

ftp://nozdr.ru/biblio/kolxo3/Cs/CsCg/Iv … )CsCg.djvu

173 c
50 c
82 c

http://zeelanna.blogspot.com.es/2014/05 … th-js.html

71 страница устройство тензора модели они (матрицы в тензоре) разряженные будут поэтому те алгоритмы мы в железе реализуем.

40

Re: ARM

https://geektimes.ru/post/287146/

Кластеры АРМ для ИИ

41

Re: ARM

Статья была про будущую архитектуру ARM. В Комментариях говорится что на MTK уже есть поддержка кластеров. Кластеров в смысле два ядра микропроцессора работающие совместно.
Это не стойки в дата-центрах, это дополнительные квадратные микро-миллиметры внутри корпуса микропроцессора.

Кроме того в будущих ARM (которые уже на столе в Самсунге) предусмотрен акселератор для доступа всех ядер к одной области памяти. Кроме того, он по моему мнению, просто будет обеспечивать аппаратное матричное умножение, либо векторное (для векторов в 10 раз длиннее) с ограничениями на длину мантиссы.