From de3c0f07be8887785185ad3a894c4680dd4966f0 Mon Sep 17 00:00:00 2001 From: bchyes Date: Sun, 20 Nov 2022 21:06:03 +0800 Subject: [PATCH 1/3] W10D1_Bao_chenhao --- W10D1/W10D1_Bao_chenhao.md | 36 ++++++++++++++++++ W10D1/menu.md | 1 + .../multistage-interconnection-network-l.jpg | Bin 0 -> 60524 bytes 3 files changed, 37 insertions(+) create mode 100644 W10D1/W10D1_Bao_chenhao.md create mode 100644 W10D1/multistage-interconnection-network-l.jpg diff --git a/W10D1/W10D1_Bao_chenhao.md b/W10D1/W10D1_Bao_chenhao.md new file mode 100644 index 0000000..cbff350 --- /dev/null +++ b/W10D1/W10D1_Bao_chenhao.md @@ -0,0 +1,36 @@ +#### RAID + +The full name of RAID is 'redundant array of inexpensive disk'. + +#### RAID 1 +The disk are fully duplicated onto its 'mirror'. +Its effect is to recovery the data which misses in an unexpected way. + +#### RAID 3 +We have a new disk called 'parity disk' which is used of recovering the data. +When the data in the former disk is missing, we can recover the data by add the other data in the disk to calculate the missing data. +But this method can't recover the data when two disk is failed. +And it can't read or write two disk in the same time. + +#### RAID 4 +Every sector in the disk has a parity which is called 'self parity'. +It supports small read, but it still only supports large write. + +#### RAID 5 +It supports small write by the following method. +It has interleaved parity which means two parity are in different disks and we modify the parity by $P'=P+D'-D$, so we needn't to read all the disk. + +#### A little queuing theory +$Length_{server} = rate \times Time_{server}$ + +#### Interconnection +We define a (n,k) cube is a hybercube with n dimensions and k nodes in every dimension. + +The diameter is defined as the maximum of two node's distance(the number of link between them). + +It is easy to know that if the same node has the least diameter, then its dimension is the most. + +#### multi-stage interconnection network +![](multistage-interconnection-network-l.jpg) + +It solves the problem that the node has too many degree in n cube. \ No newline at end of file diff --git a/W10D1/menu.md b/W10D1/menu.md index e69de29..b61acda 100644 --- a/W10D1/menu.md +++ b/W10D1/menu.md @@ -0,0 +1 @@ +- [notes of Bao_chenhao](./W10D1_Bao_chenhao.md) \ No newline at end of file diff --git a/W10D1/multistage-interconnection-network-l.jpg b/W10D1/multistage-interconnection-network-l.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c2a4fe84c68838122bdc38f0bfb2835e60126581 GIT binary patch literal 60524 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

0`3|XMwBq% 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 PQO)`P{viwf+W&t5;oDQJ literal 0 HcmV?d00001 From a8a5f5eb52a66c2603a2440d014dbba7821dba81 Mon Sep 17 00:00:00 2001 From: bchyes Date: Fri, 13 Jan 2023 19:22:12 +0800 Subject: [PATCH 2/3] update --- W13D2/W13D2_Bao_chenhao.md | 49 ++++++++++++++++++++++++++++++++++++++ W13D2/menu.md | 1 + 2 files changed, 50 insertions(+) create mode 100644 W13D2/W13D2_Bao_chenhao.md diff --git a/W13D2/W13D2_Bao_chenhao.md b/W13D2/W13D2_Bao_chenhao.md new file mode 100644 index 0000000..6618992 --- /dev/null +++ b/W13D2/W13D2_Bao_chenhao.md @@ -0,0 +1,49 @@ +### Hardware support for exposing more parallelism at compiler-time + +We can use predicate version load word(LWC). +Load occurs unless the third operand is 0. + +### Hardware support for memory reference speculation + +When we met +- Store Mx +- Load My + +We can put load earlier before Store. + +But we have one problem, if Mx=My we can just do a check load at the first load space. + +### Spinlock +A locking mechanism called nonblocking locker. +It can't sleep while waiting the task. + +### Load Link && Store conditional + +It can detect that whether `load/store` instruction is **atomic**. +(transaction memory) +``` +; swap operation +; suppose R4 = y, mem[0(R1)] = x +mov R3, R4 ; R3 = y +ll R2, 0(R1) ; R2 = x +sc R3, 0(R1) ; mem[0(R1)] = y; +beqz R3, try +mov R4, R2 ; R4 = x +``` + +``` +ll R2, 0(R1) +addi R2, R2 #1 ; increment +sc R2, 0(R1) +beqz R2, try +``` + +We explain the latter example. + +First, if we use the origin load and store, we just increase the value in the memory whose address is R1. But this time if other people modify the value during the load and store, then we will get wrong value. + +So we introduce a new register(linker register) to record the address R1, then when we do the store, then we check the register, if the address isn't equal to zero, then we store the value and change the register to zero. Else it fail, we try another time. + +We have just one LR register, so we can do ll/sc in ll/sc which called nested ll/sc. + +Compare and swap is different from ll/sc because it just compare the value but not pay attention to whether it has been modified.(ABA problem). \ No newline at end of file diff --git a/W13D2/menu.md b/W13D2/menu.md index e69de29..1f45899 100644 --- a/W13D2/menu.md +++ b/W13D2/menu.md @@ -0,0 +1 @@ +- [notes of Bao_chenhao](./W13D2_Bao_chenhao.md) \ No newline at end of file From 5acc3c40460da0e15b058a4d53a547e8b6825164 Mon Sep 17 00:00:00 2001 From: bchyes Date: Fri, 13 Jan 2023 19:25:47 +0800 Subject: [PATCH 3/3] W13D2_Bao_chenhao --- W13D2/W13D2_Bao_chenhao.md | 2 +- W13D2/menu.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/W13D2/W13D2_Bao_chenhao.md b/W13D2/W13D2_Bao_chenhao.md index 6618992..f807508 100644 --- a/W13D2/W13D2_Bao_chenhao.md +++ b/W13D2/W13D2_Bao_chenhao.md @@ -46,4 +46,4 @@ So we introduce a new register(linker register) to record the address R1, then w We have just one LR register, so we can do ll/sc in ll/sc which called nested ll/sc. -Compare and swap is different from ll/sc because it just compare the value but not pay attention to whether it has been modified.(ABA problem). \ No newline at end of file +Compare and swap is different from ll/sc because it just compare the value but not pay attention to whether it has been modified.(ABA problem). diff --git a/W13D2/menu.md b/W13D2/menu.md index 1f45899..93c96e9 100644 --- a/W13D2/menu.md +++ b/W13D2/menu.md @@ -1 +1 @@ -- [notes of Bao_chenhao](./W13D2_Bao_chenhao.md) \ No newline at end of file +- [notes of Bao_chenhao](./W13D2_Bao_chenhao.md) \ No newline at end of file