# E07: bits ###### tags: `sysprog2018` :::info 主講人: [jserv](http://wiki.csie.ncku.edu.tw/User/jserv) / 課程討論區: [2018 年系統軟體課程](https://www.facebook.com/groups/system.software2018/) :mega: 返回「[進階電腦系統理論與實作](http://wiki.csie.ncku.edu.tw/sysprog/schedule)」課程進度表 ::: ## 預期目標 * 深度學習 [CS:APP](https://hackmd.io/c/S1vGugaDQ) 第 2 章和對應的補充教材 * 跨越理論與實務的鴻溝 ## 在 Ubuntu Linux x86 64-bit 安裝 32-bit 開發套件 ```shell $ sudo apt update $ sudo apt install libc6-dev:i386 gcc:i386 ``` ## 詳細閱讀 CMU CS:APP Data Lab 要求 * [Data Lab: Manipulating Bits](http://csapp.cs.cmu.edu/3e/datalab.pdf) - 忽略 `2 Logistics`, `datalab-handout.tar`, `dlc`, `driver.pl`, 和 `8 The "Beat the Prof" Contest` 相關內容 - 專注於修改 `bits.c` 即可 * 取得成功大學修改過的版本 [datalab](https://github.com/sysprog21/datalab) ```shell $ git clone https://github.com/sysprog21/datalab $ cd datalab $ make check ``` * 參考輸出: (一開始什麼事都沒做,當然零分) ``` ERROR: Test twosComp2SignMag(-2147483647[0x80000001]) failed... ...Gives 42[0x2a]. Should be -1[0xffffffff] ERROR: Test upperBits(0[0x0]) failed... ...Gives 42[0x2a]. Should be 0[0x0] Total points: 0/228 ``` ## 作業要求 * 自 GitHub 上 fork [datalab](https://github.com/sysprog21/datalab),依據 [Data Lab: Manipulating Bits](http://csapp.cs.cmu.edu/3e/datalab.pdf),補完欠缺的程式碼,並且通過自動測試 * 確保儘可能少的指令,可用 `$ gcc -S bits.c` 輸出組合語言並觀察 `bits.s` 的程式碼裡頭的 x86 (IA32) 指令 * 避免用分支 (branch),設計時間複雜度為 $O(1)$ 的實作 * 選出其中 7 個位元操作的函式,詳細解釋其原理,需要比照 [clz 應用](https://hackmd.io/s/Bk-uxCYxz) 和 [bit-reverse](https://hackmd.io/s/ByzoiggIb) 的分析方式,==舉出真實世界中的應用案例== (最好在 GitHub 找出程式碼),解說應搭配有效的測試程式碼 * 探討讓 [datalab](https://github.com/sysprog21/datalab) 得以 64-bit friendly 的提案,並舉出實際程式碼修改 ## 繳交方式 * 編輯 [Homework 5 作業區共筆](https://hackmd.io/s/S1CRTc8jX),將你的觀察、上述要求的解說、應用場合探討,以及各式效能改善過程,善用 gnuplot 製圖,紀錄於新建立的共筆 ## 截止日期 * Oct 31, 2018 (含) 之前進行,不該截止日前一天才動手 * 越早在 GitHub 上有動態、越早接受 code review,評分越高 ## 參考資訊 * [深入理解計算機系統(CS:APP) - Data Lab 詳解](https://www.viseator.com/2017/06/18/CS_APP_DataLab/) * [CSAPP:datalab](https://www.jianshu.com/p/caf552ea3322)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.