一直想弄乙個從各種角度優化軟體的總結,先寫乙個從cpu架構角度的。
cpu還有個特性就是有l1 l2分段快取,對於分段快取我們盡量讓他們都利用好,不要因為部分資料的需求刷裡面的內容,比如二維陣列的縱向變例會比橫向遍歷糟糕很多,因為橫向遍歷會保證cache中資料的連續性,縱向遍歷就要頻繁的重新整理cache。
另外根據不同的cpu的指令集的不同,也有很大的優化空間,比如glibc的一些內容的相比與同型別的庫比如intel之間開發的一些計算庫可能可能慢四五倍,依據指令集優化會很有效果,但是這個維護起來很麻煩,因為太依賴硬體了,幾乎是乙個cpu型別就要弄一套**,尤其使amd與intel之間的鬥爭,把指令集弄得比較亂。
現在有些cpu具有超執行緒的能力,如i7,所謂的超執行緒就是單個cpu單元同時放兩個執行緒,因為是共享的同樣的硬體,只是利用乙個執行緒的可能的空閒時間塞進取另外乙個執行緒,所以超執行緒的效率提公升具有不可**性,最好的清況可能會有25%的提高,但是也可能會使效率降低,比如當兩個執行緒都執行得很流暢的時候,雖然一般的benchmark軟體都會顯示出超執行緒的優勢,但是它並不能代表一般的演算法,另外超執行緒還有個不足是,對執行緒的優先順序無效,低優先順序的也會擠壓高優先順序的空間,如果自己的軟體想要用超執行緒,最好要自己實際的測試一下,再做決定,總之超執行緒從cpu的結構上來講是一種更高層次的優化選擇。
有人說設定執行緒的affinity可以避免cpu單元之間的切換,從而提高效率,但是我覺得這個想法比較值得商榷,因為cpu對執行緒的排程其實就是它內部的一種優化,當然,如果自己有乙個很重要的執行緒,需要很高的優先順序,那也無妨。
總結一下根據cpu的結構的優化主要有五點:
1. 提高分支**的成功率
2. 有效利用 l2 避免頻繁清空cache
3. 基於不同的cpu指令集優化底層**
4. 超執行緒(根據實際需求)
5. 設定執行緒affinity和優先順序(根據實際需求)
如何利用基於雲的沙箱來分析惡意軟體?
對於企業來說,傳統防病毒和端點安全工具是分層網路防禦戰略的關鍵組成部分,但在檢測惡意軟體方面,它們並非100 有效。有些更高階的惡意軟體 例如利用零日漏洞的多級惡意軟體 可攻擊這些安全工具並感染受害機器。這種高階惡意軟體通常由民族國家或有組織犯罪團夥用來入侵具有良好傳統防禦的企業,並且,他們通常通過...
如何檢視Android SO庫的cpu架構
mac環境下如何檢視android so庫的cpu架構?readelf a lib x.so objdump x lib x.so greadelf a lib so gobjdump x lib so 終端輸入命令可能不支援,需要安裝binutils brew update brew instal...
基於架構的軟體設計(ABSD)
基於架構的軟體設計 architecture based software design,absd 方法強調由商業 質量和功能需求的組合驅動軟體架構設計。absd是乙個自頂向下,遞迴細化的軟體開發方法,它以軟體系統功能的分解為基礎,通過選擇架構風格實現質量和商業需求,並強調在架構設計過程中使用軟體架...