Hackpads are smart collaborative documents. .

coldnew

794 days ago
Unfiled. Edited by coldnew , stu9458@gmail.com , Jie-Han Chen 794 days ago
(2) 設計一個演算法,計算 N! 有幾個尾隨的 0
coldnew
  • 補一個偏數學的問題,這是我以前寫 Project Euler 寫到的: 請找出1000000000000!末5位不為0的值
(3) 給定一個介於 0 和 1 之間的實數,如 0.32,其型態為 double,印出其二進位表示法。倘若無法精確用 32位以內的二進位表示,則顯示 ERROR
Jie-Han C
  • 想要請問題目的意思,印出二進位表示法。我印象中像是: 0.5 的二進位表示是 0.1
  • 後面不能以 32 位以內的二進位,如果我理解的沒錯的話,是指小數點後有超過 31 個 0 or 1
  • 也就是十進位不能以2進位整除的方式。今天在台上答題的時候感到疑惑的是這題目後面的 
  • 32位 應該和 32 位元(bit) 是沒關係的吧 !?  如果ˋ是沒關係似乎就不用管 IEEE 754 單純是數學計算。如果是 32位"元" 的話,感覺上就是在問電腦中儲存的方式。
  
 
  1. 無欲則剛 (There is no career goal. - 沒有職業目標)
stu9458@gmail.com
  • 不懂這句話的意思,不設立程序員的工作宗旨和憧憬,不覺得有點盲目?
  1. 謹言慎行 (Shut up. - 住口)
  1. 明心見性 (Mindfulness. Care. Awareness. - 正念、留心、覺察)
  1. 明哲保身 (There is no Boss. - 沒有老闆)
  1. 玩物明志 (Do something else)
  1. 恬淡寡欲 (There is nothing special.)
 
779 days ago
Unfiled. Edited by Jie-Han Chen , Tse-jen Chen , Kevin C Lin , coldnew , Jim Huang 779 days ago
Jie-Han C
  • 關於Aug 3, 2015的課程內容,有些疑問可以先從 Jul 17, 2015 中尋找解答
  •  
 
[Homework] 找出發生 integer overflow 的案例,可閱讀《Code Reading: The Open Source Perspective》,紀錄於自己的 Hackpad,並且在下方標注摘要 (直接新增即可; 當然不能重複)
Kevin L
 
Jim H
  • 為什麼你該理解編譯器的原理
 
 
  • peephole (門眼); peephole的peep是"窺視、偷看"的意思,peeping Tom則是"偷窺狂"的意思,但peephole可不是偷窺洞
 
陳婉雅
  • SSA: (Static Single Assignment)
陳婉雅
  • " The SSA form is based on the premise that program variables are assigned in exactly one location in the program. Multiple assignments to the same variable create new versions of that variable. "
Jim H
  • SSA 最佳化實例:
陳婉雅
  • constant propagation
  • 用法: (1) 先拆成basic blocks (單行的指令, 沒有jump or label)
  •          (2) 合併basic blocks
  •          (3) 最佳化CFG (減少goto)
  •          (4) 轉成SSA form (變數runtime decided時, 用函數表示, 並給新的版本號) 
  • 例: i1 =Φ(i0, i2)
  •          (5) constant propagation (變數換成常數)
  •          (6) dead code elimination (remove不需要的變數)
  •          (7) value range propagation (變數用一個範圍的常數來代替)
  •          (8) dead code elimination (結果: 直接return 0)
 
  • GCC 前端:
  • AST
  • 3.17.2    Abstract syntax
  •      "The syntax trees described in section 3.3.1 are not always optimally suitable for compilation. They contain a lot of redundant information: Parentheses, keywords used for grouping purposes only, and so on.
  •      Abstract syntax keeps the essence of the structure of the text but omits the irrelevant details. An abstract syntax tree is a tree structure where each node corresponds to one or more nodes in the (concrete) syntax tree"
  • GCC中端:
  • Gimple + Tree SSA Optimizer
  • Gimple: 只能有兩個運算元
  • GCC後端:
  • RTL
  • 使用vitrual register (可有無限多個registers)
  • register allocation (virtual register => hard register)
  • instruction scheduling (pipeline scheduling)
Jim H
  • register allocation
陳婉雅
  • pipeline scheduling
  • peephole optimization
 
Jim H LTO 帶來的提昇,可參考 gcc-5 的釋出說明 :(和 Firefox 有關)
  • During link-time optimization of Firefox, this pass unifies about 31000 functions, that is 14% overall.
  • About 50% of virtual calls in Firefox are now speculatively devirtualized during link-time optimization.
 
 
Jie-Han C 內容疑問
 
  • C 語言裡面有沒有例外處理?
  • setjmp
  • longjmp
 
  • gcc 編譯參數的 -Os 為何?
Chien-Rong C
  • gcc -Os -c -fdump-tree-optimized=out test.c
Chien-Rong C
  • 記得 -O 是做Optimize, 沒看過後面加s的, 查了Optimize-Options後, 得知相當於2.5
  • -Os enables all -O2 optimizations that do not typically increase code size.
 
Jie-Han C
  • 粗體字為問題
 
內容疑問
 
德華 艾
  • 加不加 void 代表的意思?
  • 印象中在執行函數時,在 f( ) 當中放入的矩陣或參數,是跟作業系統執行的過程有關,待查證。
 
德華 艾
  • 1. 什麼沒有 compiler 最佳化的話,三次會印出連續的數字?
  • 2. 什麼是 execution stack?
Jie-Han C
  • p.137 的問題中有解釋
 
  • 1. debug mode 是什麼?
  • 2. 最下面的對話框內容,有同學表示沒有找到對應的解釋
  • 下面圖片可移除,課堂方便觀看
 
  • 為什麼初始化很花時間?
 
  • 什麼是 linker visibility?
  • 小提醒:老師在第一階段課程曾提過 symbol visibility
  • symbol visibility:
 
德華 艾
  • 1. 什麼是 optimizer kicks in?
...
449 days ago
Unfiled. Edited by Jim Huang , coldnew 449 days ago
coldnew 2015年嵌入式系統暑期課程 <coldnew>
  • About Me
姓名: 李彥瑾(coldnew)
 
學習目標1: 實作 ClojureLLVM
coldnew
  • Clojure 已經有 .NET, JVM, Javascript 這三個方面的實作,我想要一個可以實作成native application的方式,這樣就可以徹底的把C語言丟掉 (想想 Rust 也可以寫 OS, 用 Lisp 寫baremetal 不是更爽嗎?)
  • 也許可以參考 Lithium 來開始, GitHub: nathell/lithium 還有clojure-c, clojure-py, clojure-objc ... etc
學習目標2: 好好玩手上的板子
  • 手上有 STM32F407-Discovery, STM32 Nucleo, Altera DE2-115, RPI, 應該要好好挪出時間玩的....
Jim H
  • 你的玩具好多阿 :-)
coldnew
  • 一不小心又冒出了STM32F7-Discovery......... (;≧д≦)
學習目標3: 製作自己的CPU -> 組譯器 -> 編譯器 -> 硬體 -> OS
  • 其實這一直都是我的最終目標,也不是因為看了nand2tetris 才萌生的念頭,不過畢竟因為吃飯重要+還是容易渾渾噩噩的(下班後)...還沒開始動手....不過CPU倒是已經選好用MyHDL實現就是了,剩下的就是學習怎樣把這些都搞定。
  • 最近一直在看 RISC-V,  看起來使用 Chisel  自幹自己的 CPU 比較爽,可以同時產生出 verilog 與C++ code 讓你建制模擬器
 
  • 系統程式概念
Dong L
Jim H
  • 我一直想大改這份投影片,畢竟忽略太多關鍵議題,像是動態連結函式庫、GDB 原理 (ptrace)、buffer overflow 等等。
  • 之後希望有機會和你一起改良這些教材
coldnew
  • 我只是個小角色,我的座右銘是 I know nothing (笑),不過我也希望能有這機會可以充實自己。
  • P.36 C語言中阻擋編譯器最佳化的一大原因
  • 使用 restrict 關鍵字 (需啟用 C99) 告知編譯器指定的pointer不會有 Pointer Aliasing 疑慮
  • 使用SSA可以加強/加快以下的最佳化
  • Constant Propagation (P.42)
  • Sparse conditional constant propagation
  • Dead code elimination
  • Global value numbering
  • Partial redundancy elimination
  • Strength reduction
  • Register allocation
  • P.43 GCC 可輸出包含 Basic Block 的CFG
  • gcc -c -fdump-tree-cfg=out test.c
  • P.62 GCC 後端: Register Transfer Language (RTL)
  • LISP-Style Representation  (令人喜愛的 S-Expression :) )
  • 生成 RTL 的方式
  • gcc -fdump-rtl-expand xxx.c
  • RTL Uses Virtual Register
  • GCC Built-in Operation and Arch-defined Operation
  • Instruction scheduling (Pipeline scheduling)
  • Peephole optimizations
  • 不太重要的小心得
  • P.9其實說到的一個重點,我大學時(2006年)上課是用 dev-c++, 但是當時也剛好初次使用Linux,於是就開始理解到 IDE是個多麼可怕的東西,不過Makefile也是很可怕的東西... CMake真的是好物啊。 P.9 的概念在 我研究所當助教時(2011)就跟大學部的學生講過了,不過看他們懵懂的樣子,就知道......唉...
  • nm 顯示的資料中
  • U 代表 undefined symbol
  • T 表示 symbol 在 text section 中
  • 這點沒特別留意到... strace 我倒是用很兇,某前輩的 rootfs以 binary形式留存,連個 gdb 也沒有,這時候直接編譯 static link 的 strace 來找 bug 倒是很好用...... (甘苦談!?)
 
  • 標記這個只是想說.....我還蠻好奇MMIO是怎樣實作的.....等哪天我用Verilog寫個CPU就知道了!!(應該不會真的障著CPU跑得很快慢慢的檢查記憶體內容吧.......)
  • 話說以前修的計算機結構是真的忘光光了 T_T
  • File divide by sections
  • Code Section (.code, .text)
  • Data Section (.data)
  • objdump -s
  • Display the full contents of all sections
  • objdump -d
  • Display assembler contents of executable sections
  • 說個不相干的事情,跨平台編譯時,因為Host端的ldd對於target端是無用的(ldd只是個腳本),假設在x86下編譯出來的ARM程式叫做 hello, 則你可以用 objdump -x hello | grep NEED 去取得他依賴的lib資訊。
  • Process own independent Virtual Address Space
  • Process access not allowed address -> "Segment fault"
  • Executable file has not been loaded into physical memory yet
  • 1. Check file format(magic number, segment, ....)
  • 2. Search dynamic linking section ".interp"
  • 3. According to program header, map ELF file (code, data, rodata)
  • 4. Initialize ELF context environment
  • 5. Modify return address to program entry
  • 囧...我用Linux這麼多年了,真的沒想過要去鑽研這個....
 
  • 同場加映~~
 
  • 延伸閱讀
 
  • C 語言程式設計
  1. The static variable will be set to 0 as default value. 
  1. The cost of setting auto variable to 0 would increase the cost of function calls.
  1. P.129 is really cool !!
  • 這邊要重新弄,這是什麼不三不四的筆記...... = =|||
許友綸
  • 從組語一探究竟就能一目了然了~Activation frame的狀態...
coldnew
  1. P.157, P.172, you can only update a variable once between sequence points.
coldnew
  • 關於sequence points, 這一篇文章 講解得很不錯,所以啊,用Functional Programming Language 就比較不用擔心 side effect 了啊 (逃 ~)
  1. How to understand C more better ? You should take following condition into account.
  • Declaration and Definition
...
759 days ago
Unfiled. Edited by Tse-jen Chen , coldnew 759 days ago
Tse-jen C
  • cache miss 持續卡關@@。。prefetcher太欠打強大了。
  •  
  • Quiz2: 筆記:link
  • Homework: mini-arm-os setup: 筆記:link
  •  複習數位邏輯設計, HDL,
  •  從天龍買這本來參考,從logic gate開始打造arm CPU的教科書 (竟然比kindle還便宜!!)
coldnew
  • 這本看起來不錯,收下了感恩  不過就是沒有時間啊啊啊 (不要睡覺就好了啊 XD)
Tse-jen C
  • 我買了XD,感覺不會像CSAPP、白算盤這麼硬斗,但是也是沒有時間阿啊阿啊啊XD
 
  • 每份文件個別寫一個人筆記、一個大家的問題集,方便查閱
  • Question
  • Cache miss 實驗上時常沒辦法準確估計miss的數量似乎跟hardware prefetcher有關.
用很簡單的例子也是沒法看到“理論上”的miss數量。用line size 64 byte估算,stride-1存取至少要miss `array size*int size/ line size``(8*8*8*4/64) = 32`次吧?(cachegrind產生的資料,圖中Dr-Data Reference, D1mr-L1 data cache miss, DL-L3 '...' miss)
  • 如果memory存取行為是“可預測的”,像下圖這樣,prefetcher機制會幫你先把資料抓好。
  • 這樣變成我們要隨機存取,然後用統計的方式來看cache miss 對效能的影響?“《囧》”
  • ref:
  • 1. about prefetch of intel processor linklink
  • 2. someone disable prefetch on core2 but failed on i5: link,
  • 3.(舊的i5筆電bios打開來找不到這個選項,mac似乎連bios都沒得用@@a)
  • Summary&Thoughts
  1. 如何寫作跟發表也是自己要學習的項目。時常自己寫出不知所云、只有當下的自己看得懂的文章、程式碼。必須要多練習寫作發表跟寫程式,技能的學習沒有萬靈丹,就是不斷練習跟努力。
coldnew
  • 寫 blog, 寫書, 翻譯文章都是不錯的練習方式,當然去丟講者也是 ~
Tse-jen C
  • 謝謝~這樣我一定先要努力變成可以準時下班的人XD,然後多練習~
  1.  
 
754 days ago
Unfiled. Edited by coldnew 754 days ago
  • 程式碼和實驗過程/心得更新於下方: (像 Week #1 一樣)
 

Contact Support



Please check out our How-to Guide and FAQ first to see if your question is already answered! :)

If you have a feature request, please add it to this pad. Thanks!


Log in