contributed by <williamchangTW
>
Class_Project
, Jserv
現代處理器設計
,心得及疑惑原理關鍵和特徵
, Cache 原理和多核心議題
,虛擬機器設計與實作
原理關鍵和特徵
心得及疑惑:Ascii Text Value : The cake is a lie.
Binary Value : 01010100 01101000 01100101 00100000 01100011 01100001 01101011 01100101 00100000 01101001 01110011 00100000 01100001 00100000 01101100 01101001 01100101 00101110
參考資料:Micro architecture
Computer organization
這是較大眾所知的名詞Intel core 2 microarchiteture
參考資料:什麼是AES-GCM加密算法
參考資料:Advanced Encryption Standard(AES)
Performance
:
AES 選擇 process 的條件標準是是高速但對 RAM 需求少是
當在選擇演算法時,AES 可以執行非常好在很多的硬體上,從 8-bit smart cards 到高效能的電腦上都可以
在 Pentium Pro, AES 每個 byte 編碼需要 18 clock cycles ,等價於在 200 MHz 的產量在 11 MB/s 若在 1.7 GHz Pentium M 產量在 60 MB/s
在 Intel Core i3/i5/i7 和 AMD APU 還有 FX CPUs 支持 AES-NI 指令集的延伸, throughput 可達到 700 MB/s
Rijndael 是一個密碼家族擁有不一樣的 key 和 block sizes.
演算法和變體 | 輸出雜湊值長度(bits) | 中繼雜湊值長度(bits) | 資料區塊長度(bits) | 最大輸入訊息長度(bits) | 迴圈次數 | 使用到的運算子 | 碰撞攻擊(bits) | 效能範例 |
---|---|---|---|---|---|---|---|---|
SHA-2(SHA-256) | 256 | 256(8 x 32) | 512 | 264-1 | 64 | And, Xor, Rot, Add(mod 232), Or, Shr | 128 | 139 |
多核說
Performance
的定義,在一個 clock cycle 中可以執行多少指令比較兩個部分,
圖一
一個clock cycle
才做三個指令,而圖二
一個clock cycle
做七個指令,相較而知後者效率較好,而且 CPU idle time 也較少,在每個 stage 中都可以有事情做(4 - stages)
但 pipeline 不是一直很好的,也有不好的地方,如: data hazard , stall ,etc
instruction pointer(IP) = programing counter(PC),依據不同的CPU,指令不一定只+1,也有+2
for example 5 stage :
Branch 有可能對 pipeline 傷害,進而萌生用猜的去猜下一個指令做什麼去減少對 pipeline 的傷害
pipeline hazard:
為何不用 GPU 而繼續用 CPU?
Superpipeline (追求深度) :
Superscaler (追求廣度) :
Superscaler + Superpipeline = Superpipeline-superscaler :
{MUL R1, R2, R3;ADD R3, R4, R5}{SUB R8, R9, R10}
適合用在影像及聲音訊號處理,因為陣列先乘後加整理一下,在這裡有提到技術使得硬體設計變得複雜的技術有: Out-of-order execution, Superscaler, Superpipeline
很顯然的 a 這個變數造成了相依,而後面的指令需要等待前面的指令,稱之 Instruction latency
condition excution :
硬體執行單元:Thread:SMT,Hyper-thread&Multi-core
SIMD:視覺影響,電子書
Computer programming mechanism
,指 Compiler 不再編譯程式的時候就把功能和物件連在一起,而是把物件的位址創立一個 virtual table(v-table)Cache 原理與多核心議題
心得及疑惑:虛擬機器設計與實作
心得及疑惑full-stack-hello
學習其中的 ISA 和模擬器實作full-stack-hello
實作費氏數列tests/fib-recursive.s
和 tests/fib-iterative.s
vm.c
(和對應的原始程式碼),允許執行時期由使用者 (和 Makefile
) 帶入參數,如 --input
,這數值應該透過暫存器作為上述 Fibonacci 數列程式的 Fib(N)
Fabonacci
數列的實作方式,善用 GNU plot 製圖和解讀Tail recursion
,Q-Matrix
,Fast doubling
- 過程中可修改 full-stack-hello 模擬器的程式碼,加入追蹤 / 除錯用途的指令 (instruction),也應該探討模擬器的運作機制並說明自己修改的方式
- 注意 Fib(63) 之後的數值會超過 232 可表達的範圍,需要設計有效的數值表示機制來處理 (如用兩個 32-bit 暫存器保存 264 數值)
- 觀察 Add label support 的實作方式,試著在full-stack-hello 給定的組譯器中新增 label 的支援