Some characteristics of SHARC Number Representation

Download Report

Transcript Some characteristics of SHARC Number Representation

SHARC Processor Characteristics
Number Representations
When 1 + 1 = 2
BUT 2 *2 != 4
M. R. Smith,
Electrical and Computer Engineering
University of Calgary, Alberta, Canada
smithmr @ ucalgary.ca
To tackled
Number Representations are varied
Make sure you understand them
Can solve many coding errors by recognizing
improper use of number representations
SHARC default number representation for
integers is not what is expected.
Understanding Number Representations allows
for extra speed in that 1 in 1000 situation
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
2 / 28
Number Representations
Number representations are important.
This is a talk about the number representations
on the Analog Devices ADSP-21061 SHARC
Processor has “C-like” syntax for assembly code
Both single cycle integer and float operations
32-bit registers (integer and float)
For more information see the article
Smith, M. R., "Quirks and SHARCs -- Issues in
programming the Analog Devices SHARC processor.
When 1 + 1 = 2 but 2 + 2 != 4", Circuit Cellar, March
2001.
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
3 / 28
Recap -- Bit patterns in memory
Bit values stored in memory
Can represent what you like
hash table, ascii characters, signed and
unsigned integer numbers (various
precisions), floating point numbers etc.
Certain number representations more
easily supported by the processor for
various operations than others.
On SHARC -- 32 bit integers and FP, also
40-bit FP (extended FP).
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
4 / 28
Example -- Eight Bit Values
Unsigned 8-bit integers
Range 0 -- 255, resolution 1
e.g. 0x00 = 0, 0x10 = 16, 0x7F = 127
0x80 = 128, 0x81 = 129, 0x90 = ????, 0xC0 = ????
0xF0 = ????, 0xFE = 254, 0xFF = 255
Signed 8-bit integers -- 2’s complement
Range -128 to + 127, resolution 1
e.g. 0x00 = 0, 0x10 = +16, 0x7F = +127
0x80 = -128, 0x81 = -128 + 1 = -127, 0x90 = ???
0xF0 = ????, 0xFE = -2, 0xFF = -1
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
5 / 28
Floating Point in Binary Representation
20 (decimal) = 0x14 hex = %0001 0100 (binary)
= %0001 0100. 0000 0000 0000
Normalize binary -- express as %1.frac * 2N
%0001 0100. 0000 0000 0000 = %1.0100 0000 0000 * 24
6 = %0110. 0000 0000 = %1.1000 0000 0000 * 22
Sign = 0 Fraction part = 0.1000 0000 0000
Biased Exponent 2 + 127 = 129 = %1000 0001
Stored as FP Number
0 1000 0001 1000 0000 0000 etc
0x40C0 0000 = 0100 0000 1100 0000 0000 000
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
6 / 28
Display Program Code -- Float
32-bit registers
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
7 / 28
No such instruction
Code displayed in Mixed
Modeas F4 =
Only R4 =
WARNING --- F4 = 2
is the same as R4 = 2
and is DIFFERENT F4 = 2.0
Note how FP looks like
VERY LARGE integer
32 bit registers
40 bit display
Ultra High precision
FP
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
8 / 28
Need to learn to recognize
What do “integers” look like when they are
displayed as “floats”
What do “floats” look like when displayed as
“integers”
Happens when you pass a pointer to the start of an
array and then treat the array incorrectly
 I consider the following a BUG IN ASSEMBLER
F4 = 6 is actually the same as F4 = 3 * 10-45
FN = value does not exist -- only RN = value
Make sure that you add the decimal point!!!!
.byte4 array_of_FLOATS[] = { 2.8, 3, 3.2, 3.4};
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
NOT
INTENDED
AS A
VERY
SMALL
VALUE
9 / 28
Display Program Code -- Integer
32 BIT registers
Top 32 bits means something
Note how integers look like
VERY SMALL floats -- note integer
has wrong values – 2 * 3 = 0
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
10 / 28
Unexpected default integer representation
68k processor
Default operations
Signed and unsigned integer representation
21k processor / Blackfin / TigerSHARC
Default operations
Signed and unsigned integer representation
of “fractional” values
Signed and unsigned integer “need to be
switched on”
See difference in multiplication
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
11 / 28
Code displayed in Mixed Mode
Q9 – What happens with Blackfin
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
12 / 28
Proper Integer Coding sequence
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
13 / 28
Bit meaning in 8-bit signed fractional number
^ ACTS AS IF “BINARY POINT”
Binary Pattern
HERE
%1001 0011 =
-1 * 2-0 + 0*2-1 + 0*2-2 + 1* 2-3 + 0* 2-4 + 0* 2-5 + 1* 2-6 + 1* 2-7
Decimal Calculation = ( 0x93 / 128) = ( 0x80 + 0x13 ) / 128
= ( -128 + 19 ) / 128
= -1 + 19 / 128
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
14 / 28
Signed fractional
Integer interpreted with a binary point
just after the sign bit
Using 32-bit values
Smallest value -1.0
Largest almost = + 1.0 = 1.0 - 2^-31
Steps (accuracy) 2^-31
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
15 / 28
68k equivalence -- 8-bit example
Standard number format
Range -128 to + 127, resolution 1
0x0A+ 0x01 = 0x0B
%00001010 + %00000001 = %00001011
In any given DSP algorithm it could be useful to scale
input values so that we have an alternative number
format where binary point is effectively placed
between bit #3 and #4
Range -8 to 7 7/8, resolution 1/8
0xA0 + 0x10 = 0xB0 (Means 0xA.0, 0x1.0, 0xB.0)
%1010.0000 + %0001.0000 = %1011.0000
Addition supported in both number formats
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
16 / 28
68k equivalence -- 8-bit example
Standard number format
Range -128 to + 127, resolution 1
0x0A * 0x01 = 0x0A
%00001010 * %00000001 = %00001010
Alternative number format where binary point is
placed between bit #3 and #4
Range -8 to 7 7/8, resolution 1/8
0xA.0 * 0x1.0 = 0x??
%10100000 * %00010000 = %101000000000
Must now adjust by >> 8 to get correct answer.
When SHARC in SSF format, the scaling occurs
automatically
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
17 / 28
Equivalent decimal calculation
As done in grade 6
-0.75 * 0.125
Perform 75 * 125 then adjust for 5 decimal
places.
-9375 then adjust to give -0.09375
68k multiplication was
0xA.0 * 0x1.0
Perform 0xA0 * 0x10 then adjust for hex places
0xA00 then adjust to give 0xA.00
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
18 / 28
Displayed as “signed fractional”
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
19 / 28
SHARC DIVISION APPEARS WEIRD TOO
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
20 / 28
Actual SHARC division operations
Note the parallel instructions
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
21 / 28
Division is slow
Integer division on 68K -- 70 cycles
60000 / 3 takes 70 cycles
60000 / 2 takes 70 cycles
Integer shift takes much less
60000 / 2 = 60000 >> 1
ASR #1, D0 (with D0 = 60000) takes 4
cycles
21061 -- ASHIFT D0 BY -1 takes 1 cycle
Can we find an equivalent operation for
floating point scaling (by 2, 4, 8, 16 etc.)?
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
22 / 28
Signed Fractional -- ASHIFT of integer
Works here
but that’s cheating since SF format is an
floating point interpretation
of an integer format
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
23 / 28
Binary Pattern of TRUE floats
SIGN
BIT
EXPONENT
BITS
FRACTIONAL
BITS
Floating point division is often SLOW
DIVIDE BY 2, 4, 8, 16 fast with integers
CAN ALSO MAKE FAST WITH FLOATS
If you understand number representations
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
24 / 28
Fast scaling -- Floats as Integers
Differ
in
value
by 4.0
Differ
in
BEXP
by 2
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
25 / 28
Complete Fast Scaling
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
26 / 28
Nothing but a party trick!
F8 = 0.0625;
R8 = -4;
F0 = 4.0;
F1 = F0 * F8;
F0 = 4.0;
F1 = SCALEB F0 BY R8;
F2 = 2.0;
F3 = F3 * F8;
F4 = 0.0;
F5 = F4 * F8;
Since this processor
has single cycle multiply
operation
3/27/2016
F2
F3
F4
F5
=
=
=
=
2.0;
SCALEB F2 BY R8;
0.0;
SCALEB F4 BY R8;
Works just like our code
Advantage – this is a COMPUTE
operation and NOT a MAC
operation
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
27 / 28
Learnt today
Number Representations are varied
Make sure you understand them
Can solve many coding errors by recognizing
improper use of number representations -Limitation in SHARC assembler for F4 =
Signed Fractional is default SHARC integer
representation
Understanding Number Representations allows
for that 1 in 1000 situation when somebody at a
party likes to play with DSP processors.
3/27/2016
Number Representations -- SHARC ADSP21061
Copyright M. Smith -- smithmr@ucalgary,ca
28 / 28