CSCE 212 Computer Architecture

Download Report

Transcript CSCE 212 Computer Architecture

CSCE 212H Computer Architecture
Lecture 1
Introduction to Computer
Architecture
Topics






January 10, 2017
Representations of Data
Computer Architecture
C Programming
Unsigned Integers
Signed magnitude
Two’s complement
Course Pragmatics
Syllabus



Instructor: Manton Matthews
Website:
http://www.cse.sc.edu/~matthews/Courses/212/index.html
Text
 "Computer Systems: A Programmer's Perspective" 3rd edition
by Randal E. Bryant and David O'Hallaron, Prentice-Hall 2016.
–2–

Important Dates on website

Academic Integrity

Slides are based on text, some directly supplied by the
authors
CSCE 212H Spring 2017
What is Computer Architecture?
Computer Architecture is the attributes of a
[computing] system as seen by the programmer, i.e.
the conceptual structure and functional behavior, as
distinct from the organization of the data flows and
controls the logic design, and the physical
implementation.
– Amdahl, Blaaw, and Brooks, 1964
The term computer architecture was first used in 1964
the designers of the IBM System/360.
The IBM/360 was a family of computers all with the
same architecture, but with a variety of
organizations(implementations).
–3–
CSCE 212H Spring 2017
What and Why for this course
Architecture from the programmer perspective

Use knowledge of architecture to improve performance
Topics








Representations of Data
Basic Computer Organization
Instruction Set Design
Pipelining
HDL
Memory Hierarchies
Basics of Performance Evaluation
Interconnection Basics
The goal is to provide foundational knowledge in the
structure and organization of machines to enable
you to write better programs
–4–
CSCE 212H Spring 2017
Umax, Tmax, Tmin, Max Float
Unsigned
Two’s complement
Floats
Doubles
–5–
CSCE 212H Spring 2017
Carnegie Mellon
Great Reality #1:
Ints are not Integers, Floats are not Reals
Example 1: Is x2 ≥ 0?

Float’s: Yes!

Int’s:
 40000 * 40000 1,600,000,000
 50000 * 50000 ??
Example 2: Is (x + y) + z = x + (y + z)?


Unsigned & Signed Int’s: Yes!
Float’s:
 (1e20 + -1e20) + 3.14 --> 3.14
 1e20 + (-1e20 + 3.14) --> ??
–6–
CSCESource:
212Hxkcd.com/571
Spring 2017
Carnegie Mellon
Computer Arithmetic
Does not generate random values

Arithmetic operations have important mathematical
properties
Cannot assume all “usual” mathematical properties


Due to finiteness of representations
Integer operations satisfy “ring” properties
 Commutativity, associativity, distributivity

Floating point operations satisfy “ordering” properties
 Monotonicity, values of signs
Observation


–7–
Need to understand which abstractions apply in which
contexts
Important issues for compiler writers and serious application
programmers
CSCE 212H Spring 2017
Carnegie Mellon
Great Reality #2:
You’ve Got to Know Assembly
Chances are, you’ll never write programs in
assembly

Compilers are much better & more patient than you are
But: Understanding assembly is key to machine-level
execution model

Behavior of programs in presence of bugs
 High-level language models break down

Tuning program performance
 Understand optimizations done / not done by the compiler
 Understanding sources of program inefficiency

Implementing system software
 Compiler has machine code as target
 Operating systems must manage process state

–8–
Creating / fighting malware
 x86 assembly is the language of choice!
CSCE 212H Spring 2017
Carnegie Mellon
Great Reality #3: Memory Matters
Random Access Memory Is an Unphysical Abstraction
Memory is not unbounded


It must be allocated and managed
Many applications are memory dominated
Memory referencing bugs especially pernicious

Effects are distant in both time and space
Memory performance is not uniform


–9–
Cache and virtual memory effects can greatly affect program
performance
Adapting program to characteristics of memory system can
lead to major speed improvements
CSCE 212H Spring 2017
Carnegie Mellon
Memory Referencing Bug Example
typedef struct {
int a[2];
double d;
} struct_t;
double fun(int i) {
volatile struct_t s;
s.d = 3.14;
s.a[i] = 1073741824; /* Possibly out of bounds */
return s.d;
}
fun(0)
fun(1)
fun(2)
fun(3)
fun(4)
fun(6)

– 10 –
➙
➙
➙
➙
➙
➙
3.14
3.14
3.1399998664856
2.00000061035156
3.14
Segmentation fault
Result is system specific
CSCE 212H Spring 2017
Carnegie Mellon
Memory Referencing Bug Example
typedef struct {
int a[2];
double d;
} struct_t;
fun(0)
fun(1)
fun(2)
fun(3)
fun(4)
fun(6)
➙
➙
➙
➙
➙
➙
3.14
3.14
3.1399998664856
2.00000061035156
3.14
Segmentation fault
Explanation:
struct_t
– 11 –
Critical State
6
?
5
?
4
d7 ... d4
3
d3 ... d0
2
a[1]
1
a[0]
0
Location accessed by
fun(i)
CSCE 212H Spring 2017
Carnegie Mellon
Memory Referencing Errors
C and C++ do not provide any memory protection



Out of bounds array references
Invalid pointer values
Abuses of malloc/free
Can lead to nasty bugs


Whether or not bug has any effect depends on system and
compiler
Action at a distance
 Corrupted object logically unrelated to one being accessed
 Effect of bug may be first observed long after it is generated
How can I deal with this?



– 12 –
Program in Java, Ruby, Python, ML, …
Understand what possible interactions may occur
Use or develop tools to detect referencing errors (e.g.
Valgrind)
CSCE 212H Spring 2017
Carnegie Mellon
Great Reality #4: There’s more to
performance than asymptotic complexity
Constant factors matter too!
And even exact op count does not predict
performance


Easily see 10:1 performance range depending on how code
written
Must optimize at multiple levels: algorithm, data
representations, procedures, and loops
Must understand system to optimize performance



– 13 –
How programs compiled and executed
How to measure program performance and identify bottlenecks
How to improve performance without destroying code
modularity and generality
CSCE 212H Spring 2017
Carnegie Mellon
Memory System Performance
Example
void copyij(int
int
{
int i,j;
for (i = 0; i
for (j = 0;
dst[i][j]
}
src[2048][2048],
dst[2048][2048])
< 2048; i++)
j < 2048; j++)
= src[i][j];
void copyji(int
int
{
int i,j;
for (j = 0; j
for (i = 0;
dst[i][j]
}
4.3ms
src[2048][2048],
dst[2048][2048])
< 2048; j++)
i < 2048; i++)
= src[i][j];
81.8ms
2.0 GHz Intel Core i7 Haswell
Hierarchical memory organization
Performance depends on access patterns

– 14 –
Including how step through multi-dimensional array
CSCE 212H Spring 2017
Why The Performance Differs
copyij
Read throughput (MB/s)
16000
14000
12000
10000
8000
6000
4000
2000
copyji
0
32k
s1
128k
s3
512k
s5
2m
s7
Stride (x8 bytes)
– 15 –
8m
s9
s11
128m
32m
Size (bytes)
CSCE 212H Spring 2017
Carnegie Mellon
Great Reality #5:
Computers do more than execute programs
They need to get data in and out

I/O system critical to program reliability and performance
They communicate with each other over networks

Many system-level issues arise in presence of network
 Concurrent operations by autonomous processes
 Coping with unreliable media
 Cross platform compatibility
 Complex performance issues
– 16 –
CSCE 212H Spring 2017
Bits and Bytes


Why bits?
Representing information as bits
 Binary/Hexadecimal
 Byte representations
» numbers
» characters and strings
» Instructions

Bit-level manipulations
 Boolean algebra
 Expressing in C
How much C do we Know?
– 17 –
CSCE 212H Spring 2017
Byte-Oriented Memory Organization
Programs Refer to Virtual Addresses


Conceptually very large array of bytes
Actually implemented with hierarchy of different memory types
 SRAM, DRAM, disk
 Only allocate for regions actually used by program

In Unix and Windows NT, address space private to particular
“process”
 Program being executed
 Program can clobber its own data, but not that of others
Compiler + Run-Time System Control Allocation



– 18 –
Where different program objects should be stored
Multiple mechanisms: static, stack, and heap
In any case, all allocation within single virtual address space
CSCE 212H Spring 2017
Words
Machine Has “Word Size”

Nominal size of integer-valued data
 Including addresses

Most current machines are 32 bits (4 bytes)
 Limits addresses to 4GB
 Becoming too small for memory-intensive applications

High-end systems are 64 bits (8 bytes)
 Potentially address  1.8 X 1019 bytes

Machines support multiple data formats
 Fractions or multiples of word size
 Always integral number of bytes
Word-Oriented Memory Organization
– 19 –
CSCE 212H Spring 2017
Byte Order
Big Endian

Least significant byte has highest address
Little Endian

Least significant byte has lowest address
Example


– 20 –
Variable x has 4-byte representation 0x01234567
Address given by &x is 0x100
CSCE 212H Spring 2017
Reading Byte-Reversed Listings
Disassembly


Text representation of binary machine code
Generated by program that reads machine code
Example Fragment
Address
8048365:
8048366:
804836c:
Instruction Code
5b
81 c3 ab 12 00 00
83 bb 28 00 00 00 00
Assembly Rendition
pop
%ebx
add
$0x12ab,%ebx
cmpl
$0x0,0x28(%ebx)
Deciphering Numbers
Value:
Pad
to 4 bytes:
Split
– 21 –
0x12ab
0x000012ab
into bytes: 00 00 12 ab
Reverse:
ab 12 00 00
CSCE 212H Spring 2017
Code to Print Byte Representation of
Data
typedef unsigned char *pointer;
void show_bytes(pointer start, int len)
{
int i;
for (i = 0; i < len; i++)
printf("0x%p\t0x%.2x\n",
start+i, start[i]);
printf("\n");
}
– 22 –
Printf directives:
%p: Print pointer
%x: Print Hexadecimal
CSCE 212H Spring 2017
show_bytes Execution Example
int a = 15213;
printf("int a = 15213;\n");
show_bytes((pointer) &a, sizeof(int));
Result (Linux):
int a = 15213;
0x11ffffcb8 0x6d
0x11ffffcb9 0x3b
0x11ffffcba 0x00
0x11ffffcbb 0x00
– 23 –
CSCE 212H Spring 2017
Strings
Strings in C
 Represented by array of characters
 Each character encoded in ASCII format
 Standard 7-bit encoding of character set
 Other encodings exist, but uncommon
 Character “0” has code 0x30

» Digit i has code 0x30+i
String should be null-terminated
 Final character = 0
Compatibility
 Byte ordering not an issue
 Data are single byte quantities

Text files generally platform independent
 Except for different conventions of line termination
character(s)!
– 24 –
CSCE 212H Spring 2017
Machine-Level Code Representation
Encode Program as Sequence of Instructions
 Each simple operation
 Arithmetic operation
 Read or write memory
 Conditional branch

Instructions encoded as bytes
 Alpha’s, Sun’s, Mac’s use 4 byte instructions
» Reduced Instruction Set Computer (RISC)
 PC’s use variable length instructions

» Complex Instruction Set Computer (CISC)
Different instruction types and encodings for
different machines
 Most code not binary compatible
Programs are Byte Sequences Too!
– 25 –
CSCE 212H Spring 2017
Relations Between Operations
DeMorgan’s Laws

Express & in terms of |, and vice-versa
 A & B = ~(~A | ~B)
» A and B are true if and only if neither A nor B is false
 A | B = ~(~A & ~B)
» A or B are true if and only if A and B are not both false
Exclusive-Or using Inclusive Or
 A ^ B = (~A & B) | (A & ~B)
» Exactly one of A and B is true
 A ^ B = (A | B) & ~(A & B)
» Either A is true, or B is true, but not both
– 26 –
CSCE 212H Spring 2017
General Boolean Algebras
Operate on Bit Vectors

Operations are applied bitwise
01101001
& 01010101
01000001
01101001
| 01010101
01111101
01101001
^ 01010101
00111100
~ 01010101
10101010
All of the Properties of Boolean Algebra Apply
– 27 –
CSCE 212H Spring 2017
Representing & Manipulating Sets
Representation


Width w bit vector represents subsets of {0, …, w–1}
aj = 1 if j  A
01101001
{ 0, 3, 5, 6 }
76543210
01010101
76543210
{ 0, 2, 4, 6 }
Operations




– 28 –
&
Intersection
|
Union
^ Symmetric difference
~
Complement
01000001
01111101
00111100
10101010
{ 0, 6 }
{ 0, 2, 3, 4, 5, 6 }
{ 2, 3, 4, 5 }
{ 1, 3, 5, 7 }
CSCE 212H Spring 2017
Bit-Level Operations in C
Operations &, |, ~, ^ Available in C

Apply to any “integral” data type
 long, int, short, char


View arguments as bit vectors
Arguments applied bit-wise
Examples (Char data type)

~0x41 -->
0xBE
~0x00 -->
0xFF
~010000012

~000000002

-->
-->
101111102
111111112
0x69 & 0x55
-->
0x41
0x69 | 0x55
-->
0x7D
011010012 & 010101012 --> 010000012

011010012 | 010101012 --> 011111012
– 29 –
CSCE 212H Spring 2017
Contrast: Logic Operations in C
Contrast to Logical Operators

&&, ||, !




View 0 as “False”
Anything nonzero as “True”
Always return 0 or 1
Early termination
Examples (char data type)






– 30 –
!0x41 -->
!0x00 -->
!!0x41 -->
0x00
0x01
0x01
0x69 && 0x55
0x69 || 0x55
p && *p
--> 0x01
--> 0x01
(avoids null pointer access)
CSCE 212H Spring 2017
Shift Operations
Left Shift:

x << y
Shift bit-vector x left y positions
 Throw away extra bits on left
 Fill with 0’s on right
Right Shift:

x >> y
Shift bit-vector x right y positions
 Throw away extra bits on right

Logical shift
 Fill with 0’s on left

Arithmetic shift
 Replicate most significant bit on right
 Useful with two’s complement integer representation
– 31 –
CSCE 212H Spring 2017
XOR


Bitwise Xor is form of addition
With extra property that every value is its own additive
inverse
A^A=0
void funny(int *x, int *y)
{
*x = *x ^ *y;
/* #1 */
*y = *x ^ *y;
/* #2 */
*x = *x ^ *y;
/* #3 */
}
– 32 –
CSCE 212H Spring 2017
Encoding Integers
Unsigned
B2U(X) 
w1
 xi 2
Two’s Complement
i
B2T(X)   xw1 2
i0
w1

w2
 xi 2 i
i0
short int x = 15213;
short int y = -15213;

Sign
Bit
C short 2 bytes long
x
y
Decimal
15213
-15213
Hex
3B 6D
C4 93
Binary
00111011 01101101
11000100 10010011
Sign Bit

For 2’s complement, most significant bit indicates sign
 0 for nonnegative
 1 for negative
– 33 –
CSCE 212H Spring 2017
Encoding Example (Cont.)
x =
y =
– 34 –
Weight
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
-32768
Sum
15213: 00111011 01101101
-15213: 11000100 10010011
15213
1
1
0
0
1
4
1
8
0
0
1
32
1
64
0
0
1
256
1
512
0
0
1
2048
1
4096
1
8192
0
0
0
0
15213
-15213
1
1
1
2
0
0
0
0
1
16
0
0
0
0
1
128
0
0
0
0
1
1024
0
0
0
0
0
0
1
16384
1 -32768
-15213
CSCE 212H Spring 2017
Numeric Ranges
Unsigned Values
 UMin
= 0
Two’s Complement Values
 TMin
=
–2w–1
000…0

UMax
100…0
=
2w – 1

111…1
TMax
=
2w–1 – 1
011…1
Other Values
 Minus 1
111…1
Values for W = 16
UMax
TMax
TMin
-1
0
– 35 –
Decimal
65535
32767
-32768
-1
0
Hex
FF FF
7F FF
80 00
FF FF
00 00
Binary
11111111 11111111
01111111 11111111
10000000 00000000
11111111 11111111
00000000 00000000
CSCE 212H Spring 2017
Values for Different Word Sizes
W
UMax
TMax
TMin
8
255
127
-128
16
65,535
32,767
-32,768
32
4,294,967,295
2,147,483,647
-2,147,483,648
C Programming
Observations

|TMin | =
TMax + 1

UMax
=
2 * TMax + 1
#include <limits.h>
 K&R App. B11
 Asymmetric range

64
18,446,744,073,709,551,615
9,223,372,036,854,775,807
-9,223,372,036,854,775,808

Declares constants, e.g.,
 ULONG_MAX
 LONG_MAX
 LONG_MIN

– 36 –
Values platform-specific
CSCE 212H Spring 2017
Casting Signed to Unsigned
C Allows Conversions from Signed to Unsigned
short int
x = 15213;
unsigned short int ux = (unsigned short) x;
short int
y = -15213;
unsigned short int uy = (unsigned short) y;
Resulting Value


No change in bit representation
Nonnegative values unchanged
 ux = 15213

Negative values change into (large) positive values
 uy = 50323
– 37 –
CSCE 212H Spring 2017
Relation Between Signed & Unsigned
Weight
1
2
4
8
16
32
64
128
256
512
1024
2048
4096
8192
16384
32768
Sum

– 38 –
uy
=
-15213
1
1
1
2
0
0
0
0
1
16
0
0
0
0
1
128
0
0
0
0
1
1024
0
0
0
0
0
0
1 16384
1 -32768
-15213
y + 2 * 32768
=
50323
1
1
1
2
0
0
0
0
1
16
0
0
0
0
1
128
0
0
0
0
1
1024
0
0
0
0
0
0
1
16384
1
32768
50323
y + 65536
CSCE 212H Spring 2017
Signed vs. Unsigned in C
Constants


By default are considered to be signed integers
Unsigned if have “U” as suffix
0U, 4294967259U
Casting

Explicit casting between signed & unsigned same as U2T and
T2U
int tx, ty;
unsigned ux, uy;
tx = (int) ux;
uy = (unsigned) ty;

Implicit casting also occurs via assignments and procedure calls
tx = ux;
uy = ty;
– 39 –
CSCE 212H Spring 2017
Casting Surprises
Expression Evaluation
 If
mix unsigned and signed in single expression, signed values
implicitly cast to unsigned
 Including comparison operations <, >, ==, <=, >=
 Examples
for W = 32
Constant1
– 40 –
0
-1
-1
2147483647
2147483647U
-1
(unsigned) -1
2147483647
2147483647
Constant2
Relation Evaluation
0U
0
0U
-2147483648
-2147483648
-2
-2
2147483648U
(int) 2147483648U
==
<
>
>
<
>
>
<
>
unsigned
signed
unsigned
signed
unsigned
signed
unsigned
unsigned
signed
CSCE 212H Spring 2017
Explanation of Casting Surprises
2’s Comp.  Unsigned


Ordering Inversion
Negative  Big Positive
TMax
2’s Comp.
Range
– 41 –
0
–1
–2
UMax
UMax – 1
TMax + 1
TMax
Unsigned
Range
0
TMin
CSCE 212H Spring 2017
Sign Extension
Task:


Given w-bit signed integer x
Convert it to w+k-bit integer with same value
Rule:


Make k copies of sign bit:
X  = xw–1 ,…, xw–1 , xw–1 , xw–2 ,…, x0
w
k copies of MSB
X
• • •
• • •
X
– 42 –
• • •
k
• • •
w
CSCE 212H Spring 2017
Sign Extension Example
short int x = 15213;
int
ix = (int) x;
short int y = -15213;
int
iy = (int) y;
Decimal
Hex
15213
3B
15213 00 00 3B
-15213
C4
-15213 FF FF C4
x
ix
y
iy


– 43 –
6D
6D
93
93
Binary
00111011
00000000 00000000 00111011
11000100
11111111 11111111 11000100
01101101
01101101
10010011
10010011
Converting from smaller to larger integer data type
C automatically performs sign extension
CSCE 212H Spring 2017
Justification For Sign Extension
Prove Correctness by Induction on k

Induction Step: extending by single bit maintains value
w
X
X
-
• • •
- +
• • •
w+1


Key observation:
–2w–1 = –2w +2w–1
Look at weight of upper bits:
X
X
– 44 –
–2w–1 xw–1
–2w xw–1 + 2w–1 xw–1
=
–2w–1 xw–1
CSCE 212H Spring 2017
Why Should I Use Unsigned?
Don’t Use Just Because Number Nonzero

C compilers on some machines generate less efficient code
unsigned i;
for (i = 1; i < cnt; i++)
a[i] += a[i-1];

Easy to make mistakes
for (i = cnt-2; i >= 0; i--)
a[i] += a[i+1];
Do Use When Performing Modular Arithmetic


Multiprecision arithmetic
Other esoteric stuff
Do Use When Need Extra Bit’s Worth of Range

– 45 –
Working right up to limit of word size
CSCE 212H Spring 2017
Negating with Complement &
Increment
Claim: Following Holds for 2’s Complement
~x + 1 == -x
Complement

Observation: ~x + x == 1111…112 == -1
x
1001 1101
+ ~x
0110 0010
-1
1111 1111
Increment


~x + x + (-x + 1)
~x + 1
==
== -1 + (-x + 1)
-x
Warning: Be cautious treating int’s as integers
– 46 – 
OK here
CSCE 212H Spring 2017
Comp. & Incr. Examples
x = 15213
Decimal
x
15213
~x
-15214
~x+1 -15213
y
-15213
Hex
3B 6D
C4 92
C4 93
C4 93
Binary
00111011 01101101
11000100 10010010
11000100 10010011
11000100 10010011
0
0
~0
~0+1
– 47 –
Decimal
0
-1
0
Hex
00 00
FF FF
00 00
Binary
00000000 00000000
11111111 11111111
00000000 00000000
CSCE 212H Spring 2017
Unsigned Addition
u
• • •
v
• • •
u+v
• • •
UAddw(u , v)
• • •
Operands: w bits
+
True Sum: w+1 bits
Discard Carry: w bits
Standard Addition Function

Ignores carry output
Implements Modular Arithmetic
s =
UAddw(u , v)
= u + v mod 2w
 u  v
UAdd w (u,v)  
w
u  v  2
– 48 –
u  v  2w
u  v  2w
CSCE 212H Spring 2017
Mathematical Properties
Modular Addition Forms an Abelian Group

Closed under addition
0  UAddw(u , v)  2w –1

Commutative
UAddw(u , v) = UAddw(v , u)

Associative
UAddw(t, UAddw(u , v)) = UAddw(UAddw(t, u ), v)

0 is additive identity
UAddw(u , 0) = u

Every element has additive inverse
UCompw (u ) = 2w – u
UAddw(u , UCompw (u )) = 0
 Let
– 49 –
CSCE 212H Spring 2017
Two’s Complement Addition
u
• • •
v
• • •
u+v
• • •
TAddw(u , v)
• • •
Operands: w bits
+
True Sum: w+1 bits
Discard Carry: w bits
TAdd and UAdd have Identical Bit-Level Behavior
– 50 –

Signed vs. unsigned addition in C:
int s, t, u, v;
s = (int) ((unsigned) u + (unsigned) v);
t = u + v

Will give s == t
CSCE 212H Spring 2017
Characterizing TAdd
Functionality



True sum requires
w+1 bits
Drop off MSB
Treat remaining
bits as 2’s comp.
integer
PosOver
True Sum
0 111…1
PosOver
TAdd Result
0 100…0
2w –1
011…1
0 000…0
0
000…0
1 100…0
–2w –1
1 000…0
–2w
TAdd(u , v)
>0
v
<0
<0
u
>0
2w–1
100…0
NegOver
u  v  2 w 1 u  v  TMin w (NegOver)

TAdd w (u,v)  u  v
TMinw  u  v  TMax w
u  v  2 w 1 TMax w  u  v (PosOver)

NegOver
– 51 –
CSCE 212H Spring 2017
Detecting 2’s Comp. Overflow
Task



2w–1
Given s = TAddw(u , v)
Determine if s = Addw(u , v)
Example
int s, u, v;
s = u + v;
PosOver
2w –1
0
Claim

Overflow iff either:
NegOver
u, v < 0, s  0 (NegOver)
u, v  0, s < 0 (PosOver)
ovf = (u<0 == v<0) && (u<0 != s<0);
– 52 –
CSCE 212H Spring 2017
Mathematical Properties of TAdd
Isomorphic Algebra to UAdd

TAddw(u , v) = U2T(UAddw(T2U(u ), T2U(v)))
 Since both have identical bit patterns
Two’s Complement Under TAdd Forms a Group


Closed, Commutative, Associative, 0 is additive identity
Every element has additive inverse
Let
TCompw (u ) = U2T(UCompw(T2U(u ))
TAddw(u , TCompw (u )) = 0
TCompw (u) 
– 53 –
u

TMinw
u  TMinw
u  TMinw
CSCE 212H Spring 2017
Unsigned vs. Signed Multiplication
Unsigned Multiplication
unsigned ux = (unsigned) x;
unsigned uy = (unsigned) y;
unsigned up = ux * uy


Truncates product to w-bit number up = UMultw(ux, uy)
Modular arithmetic: up = ux  uy mod 2w
Two’s Complement Multiplication
int x, y;
int p = x * y;


– 54 –
Compute exact product of two w-bit numbers x, y
Truncate result to w-bit number p = TMultw(x, y)
CSCE 212H Spring 2017
Unsigned vs. Signed Multiplication
Unsigned Multiplication
unsigned ux = (unsigned) x;
unsigned uy = (unsigned) y;
unsigned up = ux * uy
Two’s Complement Multiplication
int x, y;
int p = x * y;
Relation


– 55 –
Signed multiplication gives same bit-level result as unsigned
up == (unsigned) p
CSCE 212H Spring 2017
Properties of Two’s Comp. Arithmetic
Isomorphic Algebras

Unsigned multiplication and addition
 Truncating to w bits

Two’s complement multiplication and addition
 Truncating to w bits
Both Form Rings

Isomorphic to ring of integers mod 2w
Comparison to Integer Arithmetic


Both are rings
Integers obey ordering properties, e.g.,
u>0
u > 0, v > 0

– 56 –


u+v>v
u·v>0
These properties are not obeyed by two’s comp. arithmetic
TMax + 1
==
15213 * 30426
TMin
== -10030 (16-bit words)
CSCE 212H Spring 2017
C Puzzles



Taken from old exams
Assume machine with 32 bit word size, two’s complement
integers
For each of the following C expressions, either:
 Argue that is true for all argument values
 Give example where not true
• x < 0
 ((x*2) < 0)
• ux >= 0
Initialization
• x & 7 == 7
 (x<<30) < 0
int x = foo();
• ux > -1
int y = bar();
• x > y
unsigned ux = x;
• x * x >= 0
unsigned uy = y;
• x > 0 && y > 0  x + y > 0
– 57 –
 -x < -y
• x >= 0
 -x <= 0
• x <= 0
 -x >=CSCE
0 212H Spring 2017
C Puzzle Answers


Assume machine with 32 bit word size, two’s comp. integers
TMin makes a good counterexample in many cases


x < 0

ux >= 0

x & 7 == 7

ux > -1

x > y

x * x >= 0

x > 0 && y > 0


x >= 0

x <= 0
– 58 –
((x*2) < 0)
False:
TMin
True:
0 = UMin
True:
x1 = 1
False:
0
False:
-1, TMin
False:
30426
x + y > 0
False:
TMax, TMax

-x <= 0
True:
–TMax < 0

-x >= 0
False:
TMin


(x<<30) < 0
-x < -y
CSCE 212H Spring 2017