gravatar

再談 LiteCoin ASIC 挖礦機

話說前一篇寫了一些關於硬體 ASIC 挖礦機的理論,最近幾天 Gridchip 就推出可以挖 BTC/LTC 的新機器。而且這部分他們會將 datasheet、firmware、PCB layout 都給開源。前一篇有提到 scrypt 的 time-memory trade-off,所以理論上目前的40nm看到,這一個單機看到大約可以有約 59KH/s 的速度,擺上 10 片這板子,就會達到 590KH/s。基本上就是以這種比例往上增加,就好像現在的礦池,利用一堆 CPU/GPU 來算一樣。因為有 time-memory trade-off,因此估計無法很快的在單一晶片上實現非常高的 hashrate,只能用這種 cluster 的平行運算來做。
慢慢的 GPU 也會逐漸出局,主要是因為 GPU 需要 CPU、主機板、基本的 OS、電源供應器(運算量高的GPU基本上500W跑不掉)一起運作,雖然 PCI-e 可以串接一起做或是透過 SLI/CrossFire,但是這些硬體成本也不低,加上單獨的 ASIC 耗電量比較少,因此如果同樣是 590KH/s,10 片 ASIC 或是板子上直接有 10 個核心,那麼同樣的工作能力,ASIC 的耗電量絕對是非常低。就 energy efficiency 來說,花的電費換得到 LTC 的數量,ASIC 當然是比較便宜。但是前題也是,最終這種 ASIC 能夠負擔鉅大運算能力的,也會如同 BTC 挖礦機一樣水漲船高。但是以 time-memory trade-off 來說,運算能力的增加會是製程進步、以及 cluster 數量增加而增加。
接著大家會想 BTC/LTC 上到底有多麼大的交易量,會需要到這麼大的運算能力,讓大家來算? 除了實際上真的是人為的購買,很多交易我猜應該是礦池發薪給每個礦工,還有礦工給礦池抽手續費等等這些交易。因此基本上扣掉真正人為的買賣交易行為,大家為了淘金,就集合去挖礦,挖礦會賺到錢以比例分給每人,所以看到錢的金額很多都是類似一些無理數。而這些發錢的行為,在 P2P 上大家再去確認,然後算 hash 編成新的 block-chain。然後大家就是為了算這些東西挖礦。以此類推,等到最後一天總發行量到達了,如果沒有真的人為交易行為,那我猜就不需要進一步的 P2P 運算,且大家也賺不到錢了。那麼 BTC/LTC 越早進入的人,累積的財富(不等於現實價格)就會比較多。雖然有人說 BTC/LTC 大部份掌握在某些特定人和較早進入的人手中,但是這跟現實世界是一樣的,有人天生就占了比較多土地,有人天生就繼承了比較多錢,有人就是能找到比較多的礦藏、石油等等。
當然 BTC/LTC 的重要理由是,沒有單一政府或某人可以控制、也沒有印鈔票貶值問題。但是不管是鈔票、股票、債券、BTC/LTC,這些都只是計價單位。就算沒有貶值和匯率操控問題,但是還是有通貨膨脹等等經濟問題。BTC/LTC 不能吃,現在 1BTC 可以換到的東西,搞不好以後要 100BTC。BTC/LTC 解決了一些問題,解決了國家與國家間匯率問題,政府操控和印鈔票等等。但是並沒有解決經濟問題,而且,那些買不起電腦的人,難到就不能用錢? 而 P2P 電子錢包的缺點是,你的錢是最終大家網路 P2P 決定的。我並不是要說你的錢會被偷走或是少了 (除非電腦被入侵或是錢包資料被偷走),而是如果你錢包很久沒有開,那麼你開電子錢包,可能要 sync 上一整晚。要嘛你就是電腦幾乎都開著跟大家常常 P2P sync data,不然就是天天開一次 (雖然大家拿出皮夾是每天會做上好幾次)。

gravatar

漫談 Bitcoin (BTC) 和 Litecoin (LTC)

很久沒有寫文章,最近因為媒體開始炒熱 BitCoin,又開始拿來看一下。之前大概有 Survey 過 BitCoin 的制度和原理,不過那時候大概是只有少數或理論上的交易,也沒像現在的天價美金匯率一樣,所以幾乎沒什麼人聞問。

最近 BitCoin 開始紅起來,最主要大概是有實際交易紀錄和媒體的報導。再來就是,可以靠挖礦賺錢而不是勞力,現實生活上,除了那些有錢人靠資本利得賺錢外,所有的人不管是教師、公務員、科技業,都是靠勞力換取金錢。而 BitCoin 只要靠著適當的硬體,就可以產出金錢。當然現在的 Difficulty 已經是天文數字,也就是靠 CPU/GPU 已經無法在能源效率情況下,賺取相當的回報。而 ASIC 適當的挖礦機,也幾乎是天價的價格,甚至都已經排隊排到不知道多久了,等你拿到機器,可能 Difficulty 已經成長到你的機器無法負擔的情況。

來說說 BitCoin 的真實價格,其實這種虛擬的東西,沒有一個實體讓你估價。但是就像硬幣鈔票一樣,他的金屬或是紙的價格是遠低於面額,而這個貨幣的價格則是由發行單位和銀行所承認。萬一他們不承認,你所擁有的東西不就是金屬跟一張紙而已嗎? 這時跟你心目中虛擬的貨幣其實大概是一樣的感覺,唯一不同的是金屬跟紙你還可以拿去回收換等值物品。

接著來說一下這種網路虛擬硬幣,為什麼要動用一堆網路上的電腦資源來運算? 以BitCoin來說,他需要做兩次SHA的運算。而計算的內容就是把版本、前次交易的hash value、merkle、時間、困難度、以及一個任意限制的 32-bit 數字去做兩次 SHA-256。然後限定要小於某個 target value。請參考 Block hashing algorithm。因此,電腦就必須要列舉 2^32 次方那麼多的數字,組成完整的 block 然後去計算兩次 SHA-256 後的 hash value。然後再跟 target value 比較,小於的話就是找出 nonce,該次 SHA-256 後兩次的 256-bit 就是該 block 的 hash value。電腦本身列舉 2^32 之外,還要計算 SHA-256 兩次,如果在 2^32 找不到小於 target value 的值,那麼該 block 的 merkle 就會被累加,然後 nonce 再次重來。

那麼 CPU 做這樣的計算,到底速度怎樣? 以 Mining hardware comparison 的表來說,i3-i7 的數據大概是個位數到兩位數而已。單位是 MH/s,全名是 Mega Hashrate per Second。也就是每秒可以計算百萬次的 Hash。而 2^32 是 4G,因此如果 CPU 是 4MH/s,也就是 4G/4M = 1024 也就是要花上 1024 秒,或是18分鐘才能列舉完全部的 nonce,但是運氣好的話可能很快就遇到某一小的 nonce 可以符合最後 hash value < target value。而網路上挖礦的礦池,就是把這些 block chain 的每個 block 分給大家去做,然後每個計算執行序只計算某個範圍的 nonce,如果算出一個合法的,告訴礦池之後她會 accept 或 reject (可能是亂算或是計算錯誤)。因此就是 divide & conquer 集合大家來平行運算。

而為什麼用 CPU 算會這麼慢也不推薦,因為 CPU 的速度並不快,核心數也不多,CPU通常要動用一堆指令,才能完成 SHA256 的運算。舉個簡單的例子 SHA-256 有很多移位的動作,如果是用專門電路或是 FPGA/ASIC,那其實根本不用運算,因為硬體線路就是如此連接給下一階的計算,例如本來是 {a,b,c,d,e,f,g,h} 每個代表 1bit,那麼移位只是硬體線路的連接而已,例如給下一個輸入端連線是 {b,c,d,e,f,g,h,a}。但是 CPU 要做一個指令才能完成移位運算,況且又不只有一個要做移位運算,而且又不是只做一次。而 SHA 本身運算除移位外,還有加法、XOR 等等。除了一些前後置的運算,本身核心要做 64 次。因此在電路設計上,FPGA 或是 ASIC 可以透過 pipeline 方式,提高平行運算的 throughput。所以,在速度上,比 generic CPU 還快上幾千幾百萬倍。

另外一種新的虛擬貨幣稱為 Litecoin。基本上本身也是參考 BitCoin,幾乎也是類似的機制,差別主要在於演算法改為 scrypt,貨幣發行量是 BitCoin 四倍。選用 scrypt 的目的,是想要避免使用不同硬體產生速度上的巨大 hashrate 差異,例如現在 BitCoin 就幾乎是 ASIC 天下,用 CPU/GPU/FPGA 基本上已經無利可圖,且 ASIC 的價格也很可觀。scrypt 基本上存在 Time-Memory trade-off,也就是計算 hash 值會需要 bitstream 所產生的 pseudo random number 來做 random memory access。因此基本上需要較大的記憶體空間,就不像 SHA-256 只要做些移位、加法、XOR 等運算,再餵給下一級迴圈即可。因此,scrypt 運算需要有 control logic 和 memory element。所以 Hashrate 上來說,LiteCoin 會比 BitCoin 慢上千倍以上。
這演算法在 FPGA 或是 ASIC 上並不太可行,因為 on-chip SRAM 非常貴,也沒有 FPGA 配備有這麼大量記憶體,若是 SDRAM,那就得透過 memory controller 去存取外部速度較慢的記憶體。這樣使得 FPGA 或是 ASIC 的成本不是要增加,就是要靠類似 MCU/CPU 和記憶體來做運算。要是 FPGA/ASIC 上有太多平行運算核心,相對應記憶體量也要等比增加,這使得要生產這樣的 ASIC 成本不低。要是做成 controller + SDRAM,這就不是現在的 CPU + SDRAM? 因此產生特定硬體來達到超快的 hash rate 幾乎是不可能。但是這個假設還有個錯誤的地方,也就是如果我用大量平行的架構,類似 GPU,那還是可以達到非常高的 hash rate。現在 GPU 上基本上就有大量的運算單元,再加上非常高速幾乎是核心頻率 1/2 或相等的記憶體時脈。所以,透過 CUDA 或是 OpenCL,即便每個核心速度並不高,也許只有 5KH/s,但是假設上面有上百個運算單元,那平行去計算就相當於 500KH/s,再加上 GPU 可以透過 PCI-e 串接,因此就好像有一大堆小電腦在做平行運算,而 CPU 功能就是下載,分工,驗證和回覆計算資料。

gravatar

Apple A7 & M7

Apple 新的 A7 處理器,把 64-bit computation 帶入手機。我想蘋果做的幾乎都是突破的作法,而不是像外面一般硬體商就是一直競爭相機畫素、記憶體大小、面板大小、核心數的增加。以前,在找工作時,台灣或是硬體製造的廠商觀念,嵌入式系統就是軟體要被硬體侷限,老闆一直開出 cost-down 的硬體,而軟體就只能被侷限。因此,要找的韌體/軟體工程師的工作,不外乎就是要會 embedded system,要會省記憶體,要會用些怪招讓程式跑快一點,要讓 binary code 能放進 ROM。但是蘋果一推出的 iPhone 就讓我看到不一樣的世界,雖然是跟 Desktop 或 Server 上跑的 Application 不同,還是偏向 Embedded OS 的觀念,但是它的概念、編譯方式、執行、和作業系統已經趨近 Desktop OS。再來新的 64-bit computation 也許不是那麼急需的應用,但是越來越多可以做的事情,以後各種需求就會增加。跟外面一般公司不一樣,公司都是先要有需求和市場,我們才來增加這樣的 hardware,不然為什麼要 cost-down?
Cost-down 對公司營收也很重要,不是說 Cost-down 不好,但是 Apple 用的 Cost-down 跟外面不太一樣方式,他先用需求量,跟 venders 預定特別大量,然後比較好的價格,綁死了這些硬體零組件廠,而且是蘋果主動去簽約,而不是請組裝廠鴻海去簽約協調。
再來就是 M7,雖然新的 smartphone OS 像是 iOS, Android 的硬體都有一些 sensor 可以達到像是 GPS tracking,定位等等。但是這些功能都很雞肋,不外乎你就是要 sensor 速度夠快、不然就是軟體要一直開著。以GPS logging 來說,基本上 App 要取得現有座標並且儲存記錄,這樣不外乎你的手機就是不能進入 Idle 狀態,省電就大打折扣。不然就是要定時像是 10sec 或 30ssec 叫醒 App 然後做定位和儲存。這時定位可能會比持續定位的需要時間久,而且準確率可能比較低,比較容易造成位置飄移。而且定時叫醒 App 對於手機耗電也是有一定的損耗。這時 Apple M7 的觀念就很好,有額外的 sensor chip 來統籌這些功能,也許也是要叫醒 App 定期做一些事情,但是因為有專門的 chip 負責持續定位或是其他功能,資料會比較準確,而資料也可以存在特定記憶體,等足夠的條件或時間才觸發 App 去處理。
Anyway,一些想法,也許對有些人來說,iPhone 的硬體落後,又了無新意。

gravatar

7" Galaxy Tab 和 10" iPad 3

因為有 iPad 3 wifi 和最近拿到的 Galaxy Tab 2 7.0 Wifi,拿來比較一下。

gravatar

Apple A6 SoC outperfoms Samsung S3?

在一篇國外評測中,Apple A6 SoC outperforms Intel Atom in JavaScript test,雖然標題講的是 Intel Atom CPU,但是裡面包含有 Samsung Galaxy S3 國際版。以 Apple A6 Dual-Core 1.02Ghz 跑贏 1.4Ghz Quad-Core,雖然 Samsung 的廣告酸了 Apple iPhone 5 了無新意,但是這邊未免讓 Samsung 強調的效能有點尷尬。
其實這也沒什麼好說的,因為他測的是 SunSpider,影響的變數太多了。Apple WebKit 的 JavaScript JIT 和 Chrome 的 V8 JIT 本身就不一樣,因此並不能直接代表 CPU 的差異。而 SunSpider 並不能測 CPU multithread,因此幾個 CPU core 似乎就更沒影響。而 SunSpider 更是 WebKit 的 benchmark suite。而 Apple 在後來推出的機子,一定會 tune 過比先前的對手強。
不過 CPU 速度本來就不是重點,Intel/AMD 的速度之爭大家是有目共睹的。除了 CPU 速度,cache、memory bandwidth、IO performance 都是影響整體效能的關鍵。但是 Apple 應該是對自己的軟體有自信,不需要用太快又耗電的頻率來跑。就像一開始的 iPhone 明明速度可以到 600Mhz,但是就鎖在 418Mhz。而大家都開始用 1.xGhz,而 iPhone 4S 只有 800Mhz。現在很多機子都強調性能最低都會有 1.4Ghz 以上,iPhone 5 才出個 1.02Ghz。蘋果對軟體的品質和使用者的經驗,多於比較硬體的效能。蘋果頂多會強調比前一代或其他手機效能多出多少,而不會只是無意義的數字: 1.4Ghz,這個東西在 PC 時代已經玩爛了。蘋果在效能和硬體的成本間,求個平衡,既能榨出該要的效率,又能在比較低的成本上賺到比較高的利潤(此外,蘋果會跟零件供應商一開始就大量簽訂供應契約,以確保穩定又便宜的貨源)。而其他手機商,作 OS 或 App 比不過 Google 本身或 Apple,只好往硬體的路走,一直保持最新的硬體 CPU、相機鏡頭、大螢幕 LCD...等等,一方面又要比 Apple 或 Nexus 低價,所以利潤只會被壓縮更低。(註:你還在用x產內建九二共識的手機嗎?雖然製造商 cost down 天經地義沒錯,但裡面用的零件你確定是正常貨源的嗎?例如要被淘汰邊緣的元件、IC)

gravatar

比較哲學

大概是因為 PC 的關係,台灣或世界上都喜歡比硬體 spec。誰的 CPU 快、memory 大,如果是拿 PC 來說,這是沒錯,因為相對於一台泛用型電腦 (generic computer),可以作文書、上網、打電動等等,各式各樣的硬體標準 CPU socket、memory slot、PCI-E、SATA 等等,自從用最後一代 iBook 到現在,大概沒自己組電腦已經不知道那些介面標準。有各種幾近無限的組合,可以創造出滿足不同需求的人們。但是不管怎樣搭配,遊戲還是一樣不夠快,Windows 還是一樣慢。Anyway 這是 PC 的世界。說是 PC 但是這是很怪的講法,因為現代的科技,PC 的 CPU、memory、周邊裝置,都可以被拿去組成 super-computer、clusters,所以說 PC 只是對一般人的講法。
但是比較移動或是家用裝置,拿電視來舉例好了,絕對不會有人問 SONY 電視跟 BenQ 電視的 CPU 誰快,memory 誰比較大。比較的大概是畫質、音質、使用介面等等。雖然我沒有各式各樣的手機,但是從周遭朋友中和自己的裝置,我用過 the new iPad、iPhone 4、Galaxy S3。各有優缺點,但是我還是承認 iOS 比較順,比較好用 (但是 S3 是 Android 手機用起來很好的,即便你痛恨韓國不想傷心買韓貨,但是你也不要因為買 hTC 來傷錢包),而且 App 有被 review 過有差。即便相較於 iPhone 4,是最新的硬體 S3,我還是看得出來從 App 回 home screen 時,Luncher 被重新啟動。新的硬體可以做出很多特效,但是我不是特效控,Apple 很多的特效是要符合人體工學使用,像是縮小放大、畫面進出、彈性回彈等等。S3 手指滑過螢幕背景會有水波紋,這是剛用很有驚驗,但是用久了覺得沒必要,也就視而不見,但是這的確是可以當作賣點說嘴。
Android 是 preemptive GC,也就是說可能玩遊戲玩到一半,或是拍照拍到一半,記憶體不足,然後 OS 強迫 App 停住,背景執行 GC 歸還出記憶體再繼續執行。即便是小到 100ms, 50ms 的時間,一旦被卡住你還是感覺的出來。而各式各樣的 Task manager App 充斥在 Google Play,不外乎就是可以讓你自己隨時把 App 請出記憶體,或是定時清記憶體等等。還要用 App2SD 還程式搬出 internal storage,也不是大部分程式都可以搬移。而且搬到 SD card  之後,就不能再隨時抽換不然那些 App 就無法使用。所以 SD card 只是給你升級用,把舊的整個 copy 過去,但是還是只能長時間插在手機,不時像電腦 SD card 隨時用來讀其他記憶卡資料。所以手機 vendor 只是省下成本,讓手機感覺比較便宜(相對於其他 Android 手機競爭者),但是你要擴充足夠容量,那就自行買來升級,但是 SD card 效能不保證。還有不少 SD card 的 benchmark 或是 tuning App,可以設定一些 buffer 或是系統參數,來加快 SD card R/W 效能,但是這都不如直接給他個內建又快的 Flash RAM 來得重要,花 $0.99 買的再怎麼調,一定是買個效能比較好的 SD card 勝出。或許是因為 Android 允許背景多工,很多節能工具,什麼時候該關閉 3G/Wi-Fi 免得其他一堆 App 都在偷偷 sync。不過說實在的消費者花這些錢買冗物 App,不如就是內建一個更好的電池或是 OS 的機制。當然 vendor 都是要省錢競爭,消費者自己買是他家的事。
接著提到最近很熱的話題,宏碁幫阿里巴巴代工的手機發表會被 Google 警告而作罷(聽說警告是要取消對 Acer 的 Android 授權,Android 不是 OSS 嗎?Acer 可以自己搞呀,就像台北捷運,馬特拉不拉,我來自己拉)。聽說 A800 是 Linux 手機不是 Android 手機,但是又可以跑 Android App(這很廢話,PC 都可以跑 JVM,這又不是天大的技術)。上面又會有阿里巴巴的阿里雲服務,等於是宣告手機 backend 可能是阿里巴巴不是 Google services。(Google 大概允許你可以自己愛怎麼搞就怎麼搞,反正不是用他的 services 或是金流系統,你要變成一個孤島裝置沒問題)。不管Google承不承認,這鐵定會是一個大的爆炸發展。你以為 Android 像 Google 講的 Open Source 多開放多自由?其實 Google 講開放也許只是要討好真正 Open Source 和 GNU 那群人,以及對於那些 License 的授權不得不開放。(至少 Google 把 OSS 架構帶進手機)。Google 免費開放原始碼給你?當然不是,他要靠上面的廣告、以及 Google services 來賺錢。一堆廠商都挺 Android,真是廢話,Apple 怎可能開放他的 iOS,一堆硬體 vendor 當然是巴著 Google 不放。如果台灣或是一堆硬體 vendor 那麼挺開放的 OSS,Linux 各套 distribution 也十幾年的光陰,不見他們做出個什麼來。Google 一開始就想像 MS 那樣,只提供 OS 給各家手機硬體,可是事實證明,手機並不是 PC,如今 Google 依靠 Samsung,未來有 Motorola Mobility(畢竟都是美國文化和美國公司,比較好整合),連 MS 都開始自己作 Surface,證明 Google 一開始想的模式是有問題的(想想韓國舉國支持三星的記憶體,跟台灣把錢灑給一拖拉庫記憶體公司,最後誰比較強一目了然,這不是要作從鄉村包圍城市的作戰方法)。即便是其他 3rd party 或是社群的 Android build,還是需要 Google services 或是 Android market-like 的東西,如果要用 In-App Purchase,Google 也強烈警告要用他的金流不然可能下架的方式來回應。如今阿里巴巴要做的東西,被 Google 視為是可能脫韁的野馬,如果此一風氣盛行,Google 就不像管控各家 Android 版本和裝置分歧的那麼簡單。事情會繼續怎樣發展,還是要繼續看下去。Acer 一方面批評 Surface 得罪 MS,這現在又得罪 Google,這.....

gravatar

台廠的 PC 與蘋果裝置類比

台灣廠商最常使用的類比方式,就是拿開放與封閉系統來類比。例如以前的 PC 和蘋果電腦。然後結論就是 PC 因為開放贏了,蘋果封閉而輸了。但是追根究柢,這樣的比較平等嗎?
PC 開始大量興盛,是因為 IBM AT/XT 的 PC 開始流行,並且因為硬體科技的限制,所以 DOS 那種作業系統長久以來佔據個人電腦的使用方法和軟體演進。而 IBM 也因為 PC 的開放,導致各式各樣的低成本 PC 製造商興起,最後 IBM 的 laptop 部門都賣給中國聯想。並且養了一隻大虎 Microsoft,不僅吃掉 IBM-DOS,還把 OS/2 都吃掉了。平心而論,若要拿 PC 來類比蘋果,應該搬出 IBM 跟 Apple 來比。一個連個人電腦事業都賣掉的公司,系統是很開放,但是開放到最後是平價相容的裝置興起,扳倒的最後是自己。就像 Android OS 那麼開放,可是競爭者除了 iOS 和 WP8 外,一堆競爭者不外乎就是其他公司的 Android OS。
開放的系統,可以有很多製造商沒錯,但是隨著市場飽和,科技進步,這些製造商能夠作的 spec 或規格就是那樣,最後不外乎倒閉就是整併。當最後科技進步到大家都能作,大家在乎的就不是能夠 open source,能不能灌自己的 ROM,能不能 customize,而是最後上面跑的內容。大家在意的並不是電視裡面的 OS 是不是 open source,能不能自己裝韌體,而是電視畫面的好壞,電影內容,播出節目有哪些。

gravatar

Sea of Android devices

I don't mean releasing lots of Android devices is a bad idea for one company. It's a business strategy, but it could hurt the company itself.
Taking Sony mobile as an example, I don't know what's the difference between Xperia S and Xperia Ion. They do have different spec and specials. But for customers, the releasing of those two devices are too close and Xperia Ion does overlap with the market segment of Xperia S. They are both high end devices, no many customers would like to buy both. Even they bought Xperia S, they might be unhappy that better one Xperia Ion is coming soon.
It is not bad to release devices for different market segments, for example, high end, middle, and low end. Those market doesn't overlap and can make the company focus on each one segment. For example, put efforts to make one high end device and make the best one. It does not require to develop many devices in one time and also make them hard to maintain and upgradde to latest Android versions.
Even so, I am also happy with that Sony mobile is willing to upgrade 2011 Xperia devices to 4.0.4. No matter that is under Google preasure or not, at least they did the best to maintain and upgrade many Xperia devices with different spec and hardware. However, it the sin of Android. It is open, but the company should pay for it to maintain the open range of devices.