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

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

Файл coef0.vf

Код:

: 2pi_k/N ( N k --   ; f: -- 2pi_k/N ) 
  s>f s>f f/ pi 2.e f* f*
;
: icos ( N k -- icos ) 
2pi_k/N cos
; IMMEDIATE

Файл math.vf

Код:

: d*-shift ( x y -- pl ) \ учитываем только младшую часть
  * drop drop
  a@ $20000 # xor \ -- ph pl
  2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ ;

: negate not 1 # . +

Файл Hartley_test_.vf

Код:

{
считаем, что обрабатываем данные с ацп
28-0 27-2......21-14
18-1 27-3......21-15
}

v.VF +include" c7Gr01/romconfig.f"


0 VALUE in_
0 VALUE in_1
0 VALUE in_2
0 VALUE out_
0 VALUE out_1
0 VALUE out_2
$b5 VALUE rr

16 VALUE num \ количество отсчетов
0 VALUE v \ текущий отсчет Хартли спектра
include Fpmath.f
include coef0.vf

   num  0  icos VALUE c0
   num  1  icos VALUE c1
   num  2  icos VALUE c2
   num  3  icos VALUE c3
   num  4  icos VALUE c4


38 {node  \ ядро - "генератор" сигнала
0 org  here =p
  '-d-- # b!
  $100 # !b
  $100 # !b
  $0 # !b
  $0 # !b
  
  $0 # !b
  $0 # !b
  $0 # !b
  $0 # !b
  
  $0 # !b
  $0 # !b
  $0 # !b
  $0 # !b
  
  $0 # !b
  $0 # !b
  $100 # !b
  $100 # !b
node}


28 {node  0 org  
\ входной порт в регистре -b ; выходной -a;

: 8transit @b !a : 7transit @b !a @b !a 
@b !a 
@b !a  @b !a 
@b !a  @b !a ;

: a!b! ( a# b# -- ; a= b= ) b! a! ;

: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: negate not 1 # . + ;

  here =p

\ ----перестановка----------------
    '--l- # '-d-- # a!b!
    @b \ -- f0
    7transit
    '---u # a! 
    8transit

\ ----перый этап------------------
  '---u # b! +bat

\ ----второй этап-----------------
  '--l- # dup a!b! +bat

\ ----третий этап-----------------
  +bat \ --f0

\ ----четвертый этап--------------
\ работаем с числами одинарной точности
\ т.е. просто отбрасываем старшую часть
\ --f0 a=l; b=l;
  @b \ -- f0 f8

  include bat.vf
  . '-d-- # b! @b \ останов ядра - только для режима симуляции

node}

27 {node 

: 3transit @b !a 
: 2transit @b !a : transit> @b !a ;
: transit< @a !b ;
: a!b! ( a# b# -- ; a= b= ) b! a! ;
  include math.vf

: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;
\ входной порт в регистре -b ; выходной -a;


  here =p
\ ----перестановка----------------
  'r--- # '--l- # a!b!
  3transit
  @b \ -- f2
  3transit
\ ----перый этап------------------
  '---u # dup a!b! +bat
\ ----второй этап-----------------
  '--l- # dup a!b! -bat
\ ----третий этап-----------------
'r--- # b! \ a=l ; b=r
  transit>
  transit<
  'r--- # a! +bat \ a=r b=r
\ ----четвертый этап--------------
\ -- f2 ; a=r b=r
  '--l- # a! \ -- f2 ; a=l b=r
  transit>      \ -- f2 ; a=l b=r
  @b @b \ -- f2 f10 f14
  . + \ -- f2 f10+f14
  c2 # d*-shift \ -- f2 [f10+f14]*c2
  include bat.vf
\ -- H2 H10

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции

node}

26 {node 
: 4transit @b !a @b !a 
: 2transit @b !a : transit> @b !a ;
: transit< @a !b ;
: a!b! ( a# b# -- ; a= b= ) b! a! ;

  include math.vf
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;

\ входной порт в регистре -b ; выходной -a;

  here =p
\ ----перестановка----------------
  '--l- # 'r--- # a!b!
  transit>
  @b \ -- f4
  4transit

\ ----перый этап------------------
  '---u # dup a!b! +bat

\ ----второй этап-----------------
  '--l- # dup a!b! +bat

\ ----третий этап-----------------
  'r--- # dup a!b! -bat \ a=r b=r
  '--l- # b! transit> \ a=r b=l ; transit @b>>!a ;
  transit<

\ ----четвертый этап--------------
\ -- f4 ; a=r b=l ;
  transit>
  @b  \ -- f4 f12 ; a=r b=l ;
  2transit \ -- f4 f12 ; a=r b=l ;
  include bat.vf
\ -- H4 H12

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции

node}

25 {node 

: 3transit @b !a 
: 2transit @b !a : transit> @b !a ;
: transit< @a !b ;
: a!b! ( a# b# -- ; a= b= ) b! a! ;
  include math.vf
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;
\ входной порт в регистре -b ; выходной -a;

  here =p

\ ----перестановка----------------
  'r--- # '--l- # a!b!
  3transit
  @b \ -- f6
  transit>

\ ----перый этап------------------
  '---u # dup a!b! +bat

\ ----второй этап-----------------
  '--l- # dup a!b! -bat

\ ----третий этап-----------------
  -bat

\ ----четвертый этап--------------
\ -- f6 ; a=l ; b=l
  'r--- # b! \ -- f6 ; a=l ; b=r
  2transit
  @b dup !a @b dup !a \ -- f6 f10 f14; a=l ; b=r
  negate + c2 # d*-shift     \ -- f6 [f10-f14]*c2; a=l ; b=r
  include bat.vf  \ -- H6 H14

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции

node}
           
24 {node 

: 3transit @b !a @b !a @b !a ;
: a!b! ( a# b# -- ; a= b= ) b! a! ;

  include math.vf
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
\ входной порт в регистре -b ; выходной -a;

  here =p

\ ----перестановка----------------
  '--l- # 'r--- # a!b!
  @b \ -- f8
  3transit

\ ----перый этап------------------
  '---u # dup a!b! +bat

\ ----второй этап-----------------
  '--l- # dup a!b! +bat

\ ----третий этап-----------------
  +bat

\ ----четвертый этап--------------
\ -- f8; a=l; b=l
  'r--- # a! \ -- f8; a=r; b=l;
  dup !a \ -- f8; a=r; b=l;
  3transit

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции

node}

23 {node 

: 2transit @b !a : transit> @b !a ;
: transit< @a !b ;
\ : a!b! ( a# b# -- ; a= b= ) b! a! ;
: negate not 1 # . + ;

  include math.vf
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;

\ входной порт в регистре -b ; выходной -a;

  here *cy =p
\ ----перестановка----------------
  'r--- # '--l- # b! a!
  transit>
  @b \ -- f10
  transit>
\ ----перый этап------------------
  '---u # dup a! b! +bat
\ ----второй этап-----------------
  '--l- # dup a! b! -bat
\ ----третий этап-----------------
'r--- # b! \ a=l ; b=r
  transit>
  transit<
  'r--- # a! +bat \ a=r b=r
\ ----четвертый этап--------------
\ -- f10 ; a=r; b=r;
  '--l- # a! \ -- f10 ; a=l; b=r;
  transit>
  dup !a \  -- f10 ; a=l; b=r;
  transit>

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции

node}

22 {node 
: transit> @b !a ;
: transit< @a !b ;
: a!b! ( a# b# -- ; a= b= ) b! a! ;

  include math.vf
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;

\ входной порт врегистре -b ; выходной -a;

  here *cy =p
\ ----перестановка----------------
  '--l- # 'r--- # a!b!
  @b \ -- f10
  transit>
\ ----перый этап------------------
  '---u # dup a!b! +bat
\ ----второй этап-----------------
  '--l- # dup a!b! +bat
\ ----третий этап-----------------
  'r--- # dup a!b! -bat \ a=r b=r
  '--l- # b! transit> \ a=r b=l ; transit @b>>!a ;
  transit<
\ ----четвертый этап--------------
\ -- f12 ; a=r ; b=l
  dup !a
  transit>

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции

node}

21 {node 
: a!b! ( a# b# -- ; a= b= ) b! a! ;
  include math.vf
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;

\ входной порт врегистре -b ; выходной -a;

  here *cy =p
\ ----перестановка----------------
  'r--- # '--l- # a!b!
  @b \ -- f10
\ ----перый этап------------------
  '---u # dup a!b! +bat
\ ----второй этап-----------------
  '--l- # dup a!b! -bat
\ ----третий этап-----------------
  -bat
\ ----четвертый этап--------------
\ -- f14; a=l; b=l;
  dup !a
  . '-d-- # b! @b       \ останов ядра - только для режима симуляции

node}
\ --------------------------------------------------------------------------
\ ---- нечетные номера------------------------------------------------------

18 {node  0 org  
: 7transit 
@b !a @b !a 
@b !a  @b !a @b !a 
@b !a  @b !a ;

: a!b! ( a# b# -- ; a= b= ) b! a! ;

include math.vf
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;

\ входной порт в регистре -b ; выходной -a;

  here *cy =p
\ ----перестановка----------------
    '--l- # '---u # a!b!
    @b \ -- f1
    7transit
\ ----первый этап------------------
  '---u # dup a!b! -bat
\ ----второй этап-----------------
  '--l- # dup a!b! +bat \ -- f(2,1)
\ ----третий этап-----------------
\ -- f; a=l;b=l;
  dup push \ -- f ; r: -- f
  @b @b . + rr # d*-shift \ -- f [5+7]*r ; r: -- f
  dup dup xor dup . +  drop .
  + \ f3
  pop  \ f3 f
  dup !b !b
\  . '-d-- # b! @b
\ ----червертый этап------------
\ -- f1 ; a=** ; b=l
  @b c1 # d*-shift \ -- f1 f9*c1  ; a=** ; b=l\
  @b c3 # d*-shift      \ -- f1 f9*c1 f15*c3 ; a=** ; b=l
  +                     \ -- f1 f9*c1+f15*c3 ; a=** ; b=l
  include bat.vf

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции
node}

17 {node 

: 3transit @b !a : 2transit @b !a : transit> @b !a ;

include math.vf
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;
\ входной порт в регистре -b ; выходной -a;

  here *cy =p
\ ----перестановка----------------
  'r--- # '--l- # b! a!
  3transit
  @b \ -- f2
  3transit
\ ----первый этап------------------
  '---u # dup a! b! -bat

\ ----второй этап-----------------
  '--l- # dup a! b! -bat

\ ----третий этап-----------------
  'r--- # b! 2transit          \ -- f(2,3)
  @b @b . + rr # d*-shift \ -- f [5+7]d*r ; r: -- f
  dup dup xor dup . +  drop .  \ очищаем бит переноса
  + \ f3
  'r--- # '--l- # b! a! 2transit \ a=r; b=l;
\  . '-d-- # b! @b

\ ---четвертый этап--------------
  '--l- #  'r--- # b! a!
\ -- f3 ; a=l ; b=r
  2transit
  @b c3 # d*-shift \ -- f1 f11*c1  ; a=** ; b=l\
  @b c1 # d*-shift      \ -- f1 f11*c1 f13*c3 ; a=** ; b=l
  +                     \ -- f1 f11*c1+f13*c3 ; a=** ; b=l
  include bat.vf
\ -- H3 H11

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции
node}

16 {node 

  include math.vf
: negate not 1 # . + ;
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;
\ входной порт в регистре -b ; выходной -a;


  here *cy =p
\ ----перестановка----------------
  '--l- # 'r--- # b! a!
  @b !a \ transit>
  @b \ -- f4
  @b !a @b !a @b !a @b !a \ 4transit

\ ----первый этап------------------
  '---u # dup a! b! -bat

\ ----второй этап-----------------
  '--l- # dup a! b! +bat \ --f(2,5)

\ ----третий этап-----------------
  dup \ -- f f ; a=l ; b=l
  'r--- # a! !a   \ -- f a=r; b=l
  @b !a \ transit> 
  dup !a 
  @b !a \ transit> \ -- f a=r; b=l
  dup @b \ -- f5 f5 f7
  a@ push
  . + rr # d*-shift  negate  \ -- f5 -r*[f5+f7]
  dup dup xor dup . +  drop . \ очищаем бит переноса
  pop a!
  @a . + \ -- f5 -r*[f5+f7]+f3 ; a=r;b=l
  over !b
  @a !b \ transit<
\  . '-d-- # b! @b

\ ---четвертый этап--------------
  'r--- # '--l- # b! a!
\ -- f5 ; a=r; b=l
  @b !a @b !a \ 2transit 
  a@ push
  @b dup !a c1 # d*-shift
  pop a!
  @b dup !a c3 # d*-shift
  negate + \ -- f5 c1*f11-c3*f13 ; a=**; b=l
  include bat.vf
\ -- H5 H13

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции
node}

15 {node 
: 3transit @b !a @b !a @b !a ;

  include math.vf
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;
\ входной порт врегистре -b ; выходной -a;

  here *cy =p

\ ----перестановка----------------
  'r--- # '--l- # b! a!
  3transit
  @b \ -- f6
  @b !a \ transit>

\ ----первый этап------------------
  '---u # dup a! b! -bat

\ ----второй этап-----------------
  '--l- # dup a! b! -bat

\ ----третий этап-----------------
  dup negate over \  -- f -f f a=l; b=l
  !b !b  \ -- f
  dup !b
  @b negate + rr # d*-shift
  @b . + \ 
\  . '-d-- # b! @b

\ ---четвертый этап--------------
  '--l- # 'r--- # b! a!
\ -- f7; a=l; b=r
  a@ dup push push
  @b dup !a c3 # d*-shift \ -- f7 f9*c3; a=**; b=r
  pop a!
  @b dup !a c1 # d*-shift \ -- f7 f9*c3 f15*c1; a=**; b=r
  negate + \ -- f7 f9*c3-f15*c1; a=**; b=r
  pop a!
  @b !a @b !a \ 2transit
  include bat.vf
\ -- H7 H15
  . '-d-- # b! @b       \ останов ядра - только для режима симуляции
node}

14 {node 

: 3transit @b !a 
@b !a  @b !a ;
: a!b! ( a# b# -- ; a= b= ) b! a! ;

  include math.vf
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;

\ входной порт врегистре -b ; выходной -a;

  here *cy =p
\ ----перестановка----------------
  '--l- # 'r--- # a!b!
  @b \ -- f8
  3transit

\ ----первый этап------------------
  '---u # dup a!b! -bat

\ ----второй этап-----------------
  '--l- # dup a!b! +bat

\ ----третий этап-----------------
\ -- f; a=l;b=l;
  dup push \ -- f ; r: -- f
  @b @b . + rr # d*-shift \ -- f [5+7]*r ; r: -- f
  dup dup xor dup . + drop .
  + \ f3
  pop  \ f3 f
  dup !b !b
\  . '-d-- # b! @b

\ ---четвертый этап--------------
  'r--- # '--l- # a!b!
\ -- f9 ; a=r; b=l;
  dup !a
  3transit

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции
node}

13 {node 

: 2transit @b !a : transit> @b !a ;
: a!b! ( a# b# -- ; a= b= ) b! a! ;

  include math.vf
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;

\ входной порт врегистре -b ; выходной -a;

  here *cy =p
\ ----перестановка----------------
  'r--- # '--l- # a!b!
  transit>
  @b \ -- f10
  transit>

\ ----первый этап------------------
  '---u # dup a!b! -bat

\ ----второй этап-----------------
  '--l- # dup a!b! -bat

\ ----третий этап-----------------
  'r--- # b! 2transit              \ -- f(2,3)
  @b @b . + rr # d*-shift \ -- f [5+7]d*r ; r: -- f
  dup dup xor dup . +  drop . \ очищаем бит переноса
  + \ f3
  'r--- # '--l- # a!b! 2transit
\  . '-d-- # b! @b

\ ---четвертый этап--------------
  '--l- # 'r--- # a!b!
\ -- f11 ; a=l; b=r
  transit>
  dup !a
  transit>
  
  . '-d-- # b! @b       \ останов ядра - только для режима симуляции
node}

12 {node 

: transit> @b !a ;
: transit< @a !b ;
: a!b! ( a# b# -- ; a= b= ) b! a! ;

  include math.vf
: +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1  ) @b over !a . + ;
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;
\ входной порт врегистре -b ; выходной -a;

  here *cy =p

\ ----перестановка----------------
  '--l- # 'r--- # a!b!
  @b \ -- f10
  transit>

\ ----первый этап------------------
  '---u # dup a!b! -bat

\ ----второй этап-----------------
  '--l- # dup a!b! +bat

\ ----третий этап-----------------
  dup \ -- f f ; a=l ; b=l
  'r--- # a! !a   \ -- f13 a=r; b=l
  transit> dup !a transit> \ -- f13 a=r; b=l
  dup negate @b \ -- f13 -f13 f15
  a@ push
  . + rr # d*-shift  \ -- f13 r*[-f13+f15]
  dup dup xor dup . +  drop . \ очищаем бит переноса
  pop a!
  @a . + \ -- f13 r*[-f13+f15]+f9 ; a=r;b=l
  over !b
  transit<
\  . '-d-- # b! @b

\ ---четвертый этап--------------
\ -- f12 ; a=r; b=l;
  transit>
  dup !a
  
  . '-d-- # b! @b       \ останов ядра - только для режима симуляции
node}

11 {node 
: a!b! ( a# b# -- ; a= b= ) b! a! ;
  include math.vf
: -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1  ) dup !a negate @b . + ;
\ входной порт врегистре -b ; выходной -a;

  here *cy =p
\ ----перестановка----------------
  'r--- # '--l- # a!b!
  @b \ -- f10
\ ----первый этап------------------
  '---u # dup a!b! -bat
\ ----второй этап-----------------
  '--l- # dup a!b! -bat
\ ----третий этап-----------------
  dup negate over \  -- f -f f a=l; b=l
  !b !b  \ -- f
  dup !b
  @b negate + rr # d*-shift
  @b . + \ 
\  . '-d-- # b! @b
\ ---четвертый этап--------------
  '--l- # dup a!b!
  dup !a
\ -- f15

  . '-d-- # b! @b       \ останов ядра - только для режима симуляции
node}

   reset     \ reset prepares the system to run the code in the Simulator
             \ enter  simulate  or  sim   to start the simulator
   cr
\   14 13 12 11 watch4    1 setstep
   28 27 26 25 watch4    1 setstep
   sim

Результаты

Временные параметры вычислений следующие:

- вычисление коэффициента Хартли спектра ~ 1150 тактов или около 620000 преобразований в секунду.

Сергей Горбунов
Сергей Горбунов

 

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

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

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