Опубликован: 12.07.2010 | Уровень: специалист | Доступ: платный | ВУЗ: Алтайский государственный университет
Лекция 4:

Многоядерные процессоры с низким энергопотреблением

Распараллелив вычисления на 4-м этапе скорость преобразования можно еще несколько поднять.

Наиболее загруженное по коду ядро - ядро номер 16:

Код:

RAM Node 16

: d*-shift
000 31JS 134CA call CA  *
001 NNR8 3A28F drop drop a@ @p+
002 QLAK 20000
003 MIIS 387C2 xor 2/ 2/ .
004 IIIS 307C2 2/ 2/ 2/ .
005 III0 307C5 2/ 2/ 2/ ;
006 J8SK 33DB0 not @p+ . +
007 ALAG 00001
008 0000 15555 ;
: negate
009 J8SK 33DB0 not @p+ . +
00A ALAG 00001
00B 0000 15555 ;
: +bat
00C AQFS 00F2A @b over !a .
00D K000 3D555 + ;
: -bat
00E OF3G 25A49 dup !a call 9  negate
00F ASK0 009F5 @b . + ;
010 88US 05DA2 @p+ @p+ b! .
011 AK40 00175
012 AKG0 001D5
013 VAFS 2BF2A a! @b !a .
014 AAFS 01F2A @b @b !a .
015 AFAS 01A02 @b !a @b .
016 FAF8 0BF2F !a @b !a @p+
017 AK20 00145
018 OVUS 24AA2 dup a! b! .
019 31BC 1340E call E  -bat
01A 8OVS 04DAA @p+ dup a! .
01B AK40 00175
01C U3B4 2960C b! call C  +bat
01D O8VS 25DAA dup @p+ a! .
01E AKG0 001D5
01F FAFO 0BF2B !a @b !a dup
020 FAFO 0BF2B !a @b !a dup
021 ARTS 00EBA @b a@ push .
022 K8SS 3DDB2 + @p+ . .
023 ALS0 000B5
024 31AK 13400 call 0  d*-shift
025 31BG 13409 call 9  negate
026 OOMO 24DE3 dup dup xor dup
027 SKNS 2C1EA . + drop .
028 PVBS 26A0A pop a! @a .
029 KQES 3CF22 + over !b .
02A BE88 03B17 @a !b @p+ @p+
02B AKG0 001D5
02C AK40 00175
02D UVAS 28A02 b! a! @b .
02E FAFS 0BF2A !a @b !a .
02F RTAO 22803 a@ push @b dup
030 F8SS 0BDB2 !a @p+ . .
031 ALN0 000ED
032 31AK 13400 call 0  d*-shift
033 PVAO 26A03 pop a! @b dup
034 F8SS 0BDB2 !a @p+ . .
035 AL6S 00062
036 31AK 13400 call 0  d*-shift
037 31BG 13409 call 9  negate
038 KQQS 3CF82 + over over .
039 31BG 13409 call 9  negate
03A KTSK 3C8B0 + push . +
03B PS8S 26912 pop . @p+ .
03C AK80 00115
03D UAAK 29F00 b! @b @b +
03E 31VG
03F 31VG

В среднем, загрузка RAM задействованных ядер порядка 70-80%.

Некоторые интересные программные трюки [20]

Счетчик единичных бит в слове:

: bc0 ( n -- c )
 dup dup xor .
: bc1 ( n c' -- c )
 not push . .
: bc2 ( n r:c' -- c )
 begin
 dup push zif \ 'zif' is just forwar next' to 'then' below
 drop pop not ;
 then
 pop and next

Вычисление среднего вектора

C = (A + B) / 2, A,B,C вектора

2 base ! 011111011111011111 constant mask \ 6:6:6 mask,
                                          \ use 011111110111101111 for 8:5:5, etc
hex

: average ( a b -- c )
  over over and  .
  push xor  2/   mask #
  and  pop  . +    ;                        \ <6 ripple

Табличная интерполяция

B = F(A) : A = Ah.Al -> B = Fh[Ah] + Al*Fl[Ah]


: interpolate ( a - a' b )
 dup 2/ 2/ .
 2/ 2/ a! $0F
 and 2* 2* .
 2* 2* @a +*
 +* +* +* ;

Ротация бит в слове:

: bit-rotate ( a n -- b ) \ b is a's n left cycle rotation
 push . . .
: Loop
 not -if
 not 2* [ ' Loop ] next ; then
 2* not [ ' Loop ] next ;

Генератор псевдослучайных чисел

: rnd ( r -- r' )
 -if
 2* $2cd81 xor ;
 then
 2* ;

: poll ( _ )
@b $200 # and if \ Is write request set?
'___u # b! \ "Up" neighbor port to B
@b push ;: \ call in B to R; execute it.
'iocs # b! then \ Restore IOCS address to B
drop ; \ Discard 'if's' argument & return

КИХ фильтр на одном ядре:

: fir-kernel 4 # taps: a0 , 0 , a1 , 0 , a2 , 0 , a3 , 0 , a4 , 0 ,
: fir ( B:in __ out ) dup dup xor @b fir-kernel drop ;

КИХ фильтр, задействующий несколько ядер:

: long_fir_start dup dup xor @b fir_kernel !b !b ;
: long_fir_mid @b push @b pop fir_kernel !b !b ;
: long_fir_end @b push @b pop fir_kernel drop ;

БИХ фильтр

: lp.15.2p 4 # taps: $4038 , 0 , $8070 , 0 , $4038 , here 0 ,
$19D39 , 0 , $361E7 , 0 , ( here ) ,
: iir ( n _ n') push dup dup xor pop lp.15.2p drop dup !a ;

Вычисляемый переход:

: switch ( case -- ) pop + push ;

Пример: @b switch handle0 -; handle1 -; handle2 -; handle3 -; \ table of jump opcodes

: switch2 ( case -- ) pop + a! @a push ;

Пример: @b switch2 handle0 handle1 handle2 handle3 \ table of addresses (call opcode ignored)

Краткие итоги

AsAP-II и SEAforth40 отличаются от остальных многоядерных процессоров отсутствием кэш-памяти, весьма скромными аппаратными ресурсами и небольшим количеством команд. При этом эти процессоры демонстрируют весьма эффективные системы управления энергопотреблением, обмена данными между ядрами процессора и синхронизации задач, выполняющихся на различных ядрах.

AsAP-II представляет собой систему из 164 однотипных RISC-ядер гарвардской архитектуры с тремя специализированными сопроцессорами, соединенных статически конфигурируемыми коммутаторами. При этом каждое ядро имеет независимый локальный тактовый генератор и контроллер напряжения питания.

Процессор SEAforth40 состоит из 40 фон-неймановских стековых процессорных ядер, объединенных в решетку 4х10. Ядра имеют возможность передачи данных только между своми ближайшими соседями. Ядро, ожидающее приема или завершения передачи данных соседнему ядру, автоматически переходит в спящий режим.

Более всего процессор подходит для потоковой обработки данных в реальном времени. Если вести речь об обработке сигналов - наиболее подходят сигналы звукового диапазона, хотя возможна обработка в реальном времени и сигналов с частотами до нескольких мегагерц. Ключевым фактором для данного процессора является то, что ассемблер процессора является одновременно и языком среднего уровня – представляет собой вариацию языка Форт. Это позволяет разрабатывать приложения для него, максимально оптимизируя их по размеру и быстродействию.

Контрольные вопросы

  1. Архитектура процессора AsAP — основные принципы построения, общие черты.
  2. Каким образом организованы связи между ядрами в AsAP-II?
  3. Как реализовано управления энергопотреблением в 167-ядерном вычислительном массиве AsAP-II?
  4. В чем состоят основные архитектурные особенности процессорных ядер С18, составляющих SEAforth40?
  5. Какие регистры входят в состав процессорного ядра С18?
  6. Как реализуется процедура умножения в процессоре SEAforth40?
  7. Как реализован обмен с внешними устройствами в процессорах SEAforth40?

Упражнения

  1. Оцените эффективность схем управления энергопотреблением процессоров AsAP и SEAforth40.
  2. Оцените эффективность передачи данных между ядрами в процессорах AsAP и SEAforth40.
  3. На основе примера преобразования Хартли реализуйте шестнадцатиточечное преобразование Уолша с одинарной точностью.
  4. Модифицируйте пример с фильтром Чебышева таким образом, чтобы его расчет проходил на двух ядрах процессора.
  5. Оцените время расчета фильтров Чебышева на одном и двух ядрах.
Сергей Горбунов
Сергей Горбунов

 

прошел курс и сдал экзамен   Многоядерные процессоры   

система сертификат не выдала. почему?

Зарина Каримова
Зарина Каримова
Казахстан, Алматы, Гимназия им. Ахмета Байтурсынова №139, 2008
Филипп Шишкин
Филипп Шишкин
Россия, Пенза, Пензенский Государственный Университет, 2015