Time of Update: 2018-12-04
接上回:http://blog.csdn.net/pennyliang/archive/2010/10/21/5956302.aspx
Time of Update: 2018-12-04
記憶體的使用可以說對程式員來說極其重要,特別在大規模資料處理中,如何達到記憶體頻寬的極限是程式員追求的目標。 從本節開始,通過一系列的例子,來進行探討。本系列全部採用組合語言,使用的例子只有一個就是記憶體拷貝,這個最容易理解,最容易舉例的例子。 本節給出的代碼是baseline,也就是最差的方法,將來的方法都比這個要強的多,包括了精簡指令,記憶體的預取,MMX寄存器,塊複製等多項技術,希望讀者朋友持續閱讀。希望達到的目的包括:
Time of Update: 2018-12-04
接上文:http://blog.csdn.net/pennyliang/archive/2011/03/08/6231709.aspx 按照慣例,首先對代碼進行一些解釋。 rdtsc函數是擷取機器開機的時間戳記。下面這段文字來自intel指令手冊: Loads the current value of the processor’s time-stamp counter (a 64-bit MSR) intothe EDX:EAX registers and also
Time of Update: 2018-12-04
編譯展開的這篇部落格被CSDN推了首頁http://blog.csdn.net/pennyliang/archive/2010/10/28/5971059.aspx,有些讀者反映有些太難,考慮到有些地方沒有講得太清楚,本文一併進行深入討論。 首先關鍵的代碼是: #define DO(x) x #define DO4(x) x x x x #define DO8(x) DO4(x) DO4(x) #define DO16(x)
Time of Update: 2018-12-04
有時候,我們可以將計算好的值進行儲存,需要的時候取出,這樣可以大大降低計算量,用空間代替時間。 我們從一個問題出發,農夫John和他的朋友們一同去參加Cownty展會,這個展會的門票是50元,排隊購票的人有2n個人,其中n個人拿著100元的鈔票,另外n個人拿著50元的鈔票,農夫john想知道在這種情況下著2n個人共有多少種排隊的方式,使得售票處在不準備零錢的情況下,也能把票賣給這2n個人,而不會出現找不開錢的局面。這是一個經典的組合問題,最後可以通過求解catalan數一步解決,我們這裡通過深入
Time of Update: 2018-12-04
從該部落格開始,會有一些小系列預計有4-5篇博文來介紹,鎖的應用和實踐,我們常常聽到spin lock,wait-free,lock-free,這到底是怎麼回事,我們能不能自己實現一個spin lock,原理是什嗎?這個小系列就討論這個內容。 首先我們來看兩個基本操作compare_and_swap和fetch_and_add,基本上lock-free的操作都會依賴這兩個基本的原子操作。特別是compare_and_swap這個原子操作,它源於IBM System 370
Time of Update: 2018-12-04
接上回:http://blog.csdn.net/pennyliang/archive/2011/03/08/6231709.aspx 用複雜指令的方法,沒有任何最佳化的餘地,最佳化的工作全仰仗intel工程師了,採用精簡指令,將迴圈展開,可以使用更多的技巧包括預取,NT,關於non-temp該系列前面的一篇文章已經詳細介紹不在多說。另外這裡用到了r8開始的寄存器,這些是64位新增的,通常在這種流式資料中普遍採用。
Time of Update: 2018-12-04
在google上搜尋“linuxプログラミングの108種類”可以看到一些被翻譯的部落格,例如:http://bbs.flatworld.jp/node/1209 不知道這是機器自動翻譯的,還是人工翻譯的,有懂日語的朋友可以幫忙評鑑一下。 我的部落格好像被百度封了,可能是出現的外鏈太多的原因吧,但流量依然不減,可見還是受到一定的歡迎。 最近寫部落格的興趣在減退,不過看到這麼多讀者,感覺還是放不下啊。
Time of Update: 2018-12-04
在數量眾多的檔案讀寫時,例如一個目錄下有400萬個圖片檔案,需要將這400萬個圖片檔案打包,如果這400萬個檔案讀寫順序不對,將會到這磁頭來回seek,即便單檔案順序,但由於每個檔案較小,因此順序的機會有限,大部分呈現隨機讀的狀態。 linux核心的IO scheduling 是針對單個檔案的,有四種調度方式,但缺乏對大量檔案的調度,因此有必要在使用者空間進行IO調度。
Time of Update: 2018-12-04
關於下面兩段代碼的解釋:引自水木Maling: "寫雖然是16bytes/cycle但那是througput 也就是說我們需要儘可能使每個cycle有一個寫操作進入write buffer after allocation stage從而保證 16bytes/cycle. 上面的代碼palignr 在前端阻擋(從讀取到解碼階段)了寫操作儘快的進入decode以及allocatoin stage 所以每個迴圈會比下面的代碼多出
Time of Update: 2018-12-04
接上文:linux編程的108種奇淫巧計-15(減少複製) 上回提到了用movntdq指令寫xmm寄存器的方式,可以獲得效能上的收益,並且指出在預設的情況下,在發生寫入的時候,需要先從低層次儲存層次refill到高層次儲存層次(可以簡單認為從記憶體refill進cache),然後再cache中更新,再write back,特彆強調的是,這是預設的方式。 實際上,高一級儲存層次,向低一級儲存層次寫入有兩種方式,一種是預設的write back,一種是write
Time of Update: 2018-12-04
類似fputs這樣的標準檔案IO函數均為安全執行緒,即函數內部會加鎖解鎖,但如果是大量檔案讀寫,可以採用flockfile函數來進行統一加鎖減鎖,而內部採用線程不安全的檔案IO。 例如 fputs("XXX",stream); fputs("YYY",stream); fputs("ZZZ",stream); 可以改寫為 flockfile(stream) fputs_unlocked("XXX",stream);
Time of Update: 2018-12-04
再答gangban_lau:http://blog.csdn.net/gangban_lau/archive/2010/11/10/6000977.aspx 部落格確實不是很好的討論平台。 對於是否原子性這個問題,我們在水木體繫結構版曾討論過這個話題,參見yifanw的發言,“在所有mordern archiecture上,對齊的machine
Time of Update: 2018-12-04
今天繼續介紹第4種常見技巧,編譯展開,代碼見本文最後,重要的部分有注釋說明。 我們知道對於迴圈,編譯器會自動進行展開,但是如何展開,這完全不可控,如果我們自行碼代碼,代碼會顯得臃腫難看,大段重複代碼,因此本為介紹了一種常見的方法進行這種代碼展開,可以寫到任意層次,我這裡唯寫到了DO16,見代碼加粗的部分。 實驗表明在手動展開後,加上O3的編譯最佳化,依然能夠比不手動展開要快,大家可以實驗以下的代碼。
Time of Update: 2018-12-04
在linux下憂盤被作為SCSI裝置,掛載優盤前首先確認優盤裝置名稱,在終端輸入dmesg|more查看,我的是sda1 建立掛載點/mnt/usb 然後用mount -t vfat /dev/sda1 /mnt/usb掛載即可,或者通過在fstab中加入/dev/sda1 /mnt/usb vfat defaults 0 0開機自動掛載,但用defaults參數,如果開機時優盤沒有插上,就會報錯. 所以我是在fstab中加入/dev/sda1 /mnt/usb vfat noauto 0 0,
Time of Update: 2018-12-04
當初在編譯時間指定的(在~gcc/gcc/collect2.c:locatelib()寫在specs內的後來用-D -I -L指定的gcc環境變數設定(編譯的時候)ld.so的環境變數(這是run time的時候)一、標頭檔gcc 在編譯時間如何去尋找所需要的標頭檔 :※所以header file的搜尋會從-I開始※然後找gcc的環境變數
Time of Update: 2018-12-04
Linux 中的組與 Windows 中的組很類似。您可以建立一個組,然後將成員添加到這個組的列表中。可以以組為單位來分配資源。隸屬於同一個組的成員可以訪問同一資源。使用控制台命令 groupadd 建立組很簡單:groupadd mygroup 這將建立一個名為“newgroup”的沒有任何成員的組。組存放於 /etc/group 檔案中。每一個組由單獨的一行列出,如下所示:mygroup:x:527: 第一列是組的名字。第二列是一個密碼。同樣,“x”說明真正的密碼存放在
Time of Update: 2018-12-04
rh9發行版中取消了對一些有著作權爭議的功能的支援,所以,新安裝的rh9不能播放mp3,就連有名的xmms播放器都無法倖免。所以我們要做的就是安裝一個可以放mp3的播放器。 以xmms為例 到 http://www.gurulabs.com/files/xmms-mp3-1.2.7-13.p.i386.rpm 下載一個 xmms-mp3-1.2.7-13.p.i386.rpm 安裝: rpm -ivh xmms-mp3-1.2.7-13.p.i386.rpm 注意你必需使用root使用者來安裝,
Time of Update: 2018-12-04
突然有裝個LINUX來玩一下的想法,誰之裝起來竟是如此的麻煩,曆盡劫難,奮戰了四天,終於裝好了一個Fedora Core 3, 現在記錄曆程如下:周三晚: Problem 1: 我興沖沖的拿著四張碟的Redhat 9,塞進光碟機,開始安裝. 誰知馬上就停住了,最後一行文字為: USB ... dected : 2 ports.... 接下來的動作是反覆重啟及搜尋, 但是還是不知所以然. 突然想到我用的是USB介面的滑鼠, 是不是因為USB的裝置太多了?馬上試!
Time of Update: 2018-12-04
Apache最為一個最為流行的開原始伺服器,一直以來在Web Server都佔有很大的份額,領導著開源項目的發展。雖然在一些大型的商業電子商務與公司專屬應用程式上沒有什麼優勢(通常大型企業都是採用J2EE的伺服器來最為其商業交易平台,比如Bea Application Server,IBM Websphere,JBoss Server等),但是作為靜態網頁的解釋,Proxy