如何設計一種演算法或程序,使得它難以設計專用硬體加速(或者作用有限)?
當然,一定程度的加速是無法避免的,比如CPU主頻提升了。
PS: 我想首先,它應當是難以被並行化的,不僅整個演算法不能並行化,其中的一部分也難以抽取並行化。
某些密碼散列演算法專註於此。
Is bcrypt better than scrypt
Do any security experts recommend bcrypt for password storage?
任何 Java程序
解釋器或者虛擬機呀,因為這種程序有通用計算能力,所以當你試圖設計一種專用硬體加速的時候,必然會設計出通用計算硬體,也就不是專用的了……
很簡單,使該演算法對於巨量內存有隨機無規律的訪問即可。
難以設計專用硬體加速?你是說 ASIC 嗎?高度定製的 ASIC 總是能提升性能的,但是如果產品並不大規模量產的話,做 ASIC 成本太高,得不償失。
如果說難以並行化的演算法的話,最常見的就是各種有數據依賴的演算法。只要有依賴,後一步就要等前一步先算完,這樣的地方基本都不能並行。比如經常被用來測 memory latency 的pointer-chasing。
除了數據依賴,並行演算法的效率也受別的因素影響,常見的如memory bandwidth。對於很多data-parallel的演算法來說,就算並行度再高,如果bandwidth 飽和了,再多的 core 和 thread 用處也不大。這種一般就是因為memory bound導致scalability比較差的,比如在眾核上跑 hash join。
譬如說一門帶有lazy evaluation的語言,然後加上這兩個條件
1、絕對不允許提前做evaluation
2、絕對不允許重複做evaluation
3、重複evaluation包含不僅包含對表達式的重複求值,也包含對同一個函數的相同的參數的調用
做出這個語言,然後做個machine(看向天國的lisp machine),做成硬體難於登天(逃
估計您是想做比特幣類似東西,又怕礦機之類的干擾。
聽哥一句勸,別做了。
要麼,真的要做的話,就不要做的太好,讓做礦機的無利可圖。
搜索和排序,這兩個是硬體優化永遠的痛
流水燈控制,
目測沒有
win10/8.1/8啊,只有ssd才能長期不卡。而ssd容量小或者https://www.zhihu.com/question/48588233就………
推薦閱讀:
※基礎都掌握了卻還是敲不出代碼?編程新手如何快速提升coding能力?
※無我編程十誡
※【遊戲框架系列】五彩繽紛
※談點編程之外的事情
※看不見的設計
TAG:演算法 | 編程 | 現場可編輯邏輯門陣列FPGA |