Time of Update: 2018-12-07
從lucene.apache.org上面下載最新版本的Lucene原始碼(目前是3.0.0), IDE我選擇的Eclipse, 我也不太懂java, 不過非常想能夠看看Lucene的底層的運作機制和一些技巧. 下載的包需要是尾碼有src的, 我主要想看看原始碼的內容, 所以就沒有下載編譯好的二進位包 從Eclipse的File->New->Java 選擇 Create Project From exsiting Source, 然後選擇原始碼中的src目錄,
Time of Update: 2018-12-07
以前版本的Lucene是用TokenStream.next()來遍曆TokenStream的內容, 目前的版本稍微修改了一下, 使用下面的的一段程式可以遍曆TokenStream的內容private static void displayTokenStream(TokenStream ts) throws IOException{ TermAttribute termAtt = (TermAttribute)ts.getAttribute(TermAttribute.class);
Time of Update: 2018-12-07
TermsHashPerField 類 一、類功能概述:負責詞項的索引過程,每個欄位有相應的一個TermsHashPerField;當索引某欄位詞項時,使用對應TermsHashPerField的add()函數完成(一個)詞項索引過程,並將索引內容(詞項字串/指標資訊/位置資訊等)儲存於記憶體緩衝中 二、類成員說明: 2.1 final int streamCount;如果需要記錄詞頻和位置,此值為2(用兩個int記錄位移指標),否則為1 // 代碼如下streamCount =
Time of Update: 2018-12-07
關於程式設計,掐指算來也寫了快有十年的程式了,之前很長的一段時間都是以演算法類的競賽為主,對於程式結構的設計,總是胡亂寫寫,能跑通就算ok了。來公司後, 接觸了一些大一點的項目的設計,設計的重要性就凸現出來了。 為了更好的設計(不能說到完美,但是至少不要把自己和使用者弄暈),我寫點自己的一些感悟(有自己思考的,也有和公司的前輩討論得到的),不能說本系列是一篇指導性的文章,權當是拋磚引玉,希望能夠大家不吝賜教,多多討論。 對於程式設計,常常是有下面的一個過程:
Time of Update: 2018-12-07
MMX指令有8個64位寄存器(MM0~MM7),不過可惜都是借的FPU的, FPU原來有8個80位寄存器(st(0)~st(7)),現在用在了MMX上,所以用之後要加上一條EMMS指令,用以複位.MMX寄存器有64位,可以同時進行8對位元組或4對字或2對雙字同時相同操作,還可以進行飽和運算,不會溢出,當然也可以進行普通運算.特別要注意的一點是:在x86上,一個字,WORD的長度是16位,而在ARM上,一個WORD的長度是32位。描述約定: MM表示64位MMX寄存器.
Time of Update: 2018-12-07
在很早之前,iOS上有這樣一款軟體叫Pimple Eraser,它實現的功能非常簡單,就是把人臉中的痘痘給去掉,而且效果很不錯。當然你得手動的選擇痘痘的位置和大小。不過可惜的是,這款軟體的互動做的不是很好。大約一年之後,美圖秀秀新的版本也實現了同樣的功能,而且它的人機互動功能做得比 Pimple Eraser好的多,由此成為美圖秀秀新的亮點。與此類似,百度魔圖其實早就有這一功能,不過他們做出來的效果真的是不敢恭維,難道魔圖團隊就沒有一個深入鑽研演算法的?
Time of Update: 2018-12-07
實際上,搞彙編最佳化的很多時間是在處理如何有效組織資料,以適應並行計算指令的資料結構。本小結描述的是資料混洗指令,這類指令使用起來相當的靈活。具體如下: 1. shufps XMM,XMM/m128,imm8(0~255) 描述: 從指令尾碼來看,這是一條SSE1指令。 該指令把源儲存空間與目的寄存器按雙字32位劃分, 由立即數imm8八個二進位位(00~11,00^11,00~11,00~11)指定排列,
Time of Update: 2018-12-07
4. 資料移位指令 psllw MM,MM/m64 psllw MM,imm8 把目的寄存器按字由源儲存空間(或imm8 立即數)指定位元邏輯左移,移出的位丟失. 低字移出的位不會移入高字. 例: 當MM0 = 0xffff ffff ffff ffff, 執行psllw MM0,1 則MM0 = 0xfffe fffe fffe fffe psrlw MM,MM/m64 psrlw MM,imm8 把目的寄存器按字由源儲存空間(或imm8
Time of Update: 2018-12-07
1. 資料載入儲存指令 LDDQU xmm, m128 從非對齊的記憶體位址中載入128位元到XMM寄存器,此條指令比SSE2的非對齊載入指令 MOVDQU 要快。 MOVDDUP xmm, xmm/m64 載入64bit資料到XMM寄存器的低64位,同時複製到其高64位。 MOVSHDUP xmm, xmm/m128 只需複製第二與第四個32位元素從而把資料讀入到接收寄存器中 MOVSLDUP xmm, xmm/m128
Time of Update: 2018-12-07
6. 資料壓縮指令 packuswb MM,MM/m64 把目的寄存器按字有符號數壓縮為飽和位元組無符號數放入目的寄存器低32位, 把源寄存器字有符號數壓縮為飽和位元組無符號數放入目的寄存器高32位。 簡單的說,就是16位有符號壓縮為飽和8位無符號數。 高32位 | 低32位 目的寄存器: a0 | a1 | a2 | a3 源寄存器:
Time of Update: 2018-12-07
這裡簡要描述幾個重要的算數運算指令。1. 水平相加指令 SSSE3指令集增加的主要是針對整數進行水平方向上相加的指令,與SSE3的浮點指令類似。 phaddd 寄存器水平方向上按照無符號32位整數進行加法 phaddw 寄存器水平方向上按照無符號16位整數進行加法 phaddsw 寄存器水平方向上按照16位整數進行飽和加法
Time of Update: 2018-12-07
本文要談的是這樣一條指令:PSADBW這條指令是SSE1引入的用於視頻編碼絕對差值求和的指令。在視頻編碼中的運動估計模組,一種常見的SAD代碼如下:1 // Get the SAD 16x16 macro block with full pixel2 for (y = 0; y < 16; y++)3 for(x = 0; x < 16; x++)4 sad += abs(current[y][x] -
Time of Update: 2018-12-07
4. 資料重排指令集 unpckhps XMM,XMM/m128 源儲存空間與目的寄存器高64位按雙字交錯排列,結果送入目的寄存器,記憶體變數必須對齊記憶體16位元組. 高64位 | 低64位 目的寄存器: a0 | a1 | a2 | a3 源儲存空間: b0 | b1 | b2 | b3
Time of Update: 2018-12-07
0. 下載scipy與numpy的packagehttp://www.scipy.org/Download#head-e68e4e32955ab584e1ac94e2b767f00179eac1371. sudo apt-get install libatlas-sse2-dev(科學計算庫)2. sudo apt-get install gfortran(編譯器)3.
Time of Update: 2018-12-07
6. SSE整數運算指令 pavgb MM,MM/m64 pavgb XMM,XMM/m128 把源儲存空間與目的寄存器按位元組無符號整數相加,再除以2,結果四捨五入為整數放入目的寄存器。 源儲存空間為m128時,記憶體變數地址必須16位元組對齊. pavgw MM,MM/m64 pavgw XMM,XMM/m128 把源儲存空間與目的寄存器按字無符號整數相加,再除以2,結果四捨五入為整數放入目的寄存器, 源儲存空間為m128時,記憶體變數必須對齊記憶體16位元組.
Time of Update: 2018-12-07
板著指頭數起來, 接觸電腦知識有十年的時間了, 感覺經曆了很多, 對於自己學習技術的方向一直是在不停的變化中, 可能不變的, 只是心底那份對學習技術的追求吧. 加入了自己的第一個公司, 加入了新的團隊, 方向是搜尋引擎中的演算法研究, 希望自己能夠在這個對我全新的領域裡面有著一番作為. 本博在以後的時間中的主要的內容是有關中文搜尋中的一些過程, 比如說分詞, 爬蟲, 分類, 索引等等可能會碰到的一些問題. 從一個小白的角度來談談自己對這些知識的理解,
Time of Update: 2018-12-07
SSE2與SSE1使用相同寄存器,指令描述約定: MM指64位MMX寄存器XMM指128XMM寄存器m32 指32位記憶體變數m128指128位記憶體變數SSE2主要是雙精確度浮點運算指令 1. 資料搬移指令 movapd XMM,XMM/m128 movapd XMM/m128,XMM 把源儲存空間內容值送入目的寄存器,當有m128時,記憶體變數地址必須16位元組對齊. movupd XMM,XMM/m1
Time of Update: 2018-12-07
一晃時間就過去了一個月的時間了,從找到工作到現在也有一個月的時間了。回顧這一個月的時間,感覺學習了一些東西,但是沒有到理想的效率。從10月25日差不多正式的開始瞭解搜尋引擎算起,到11月25日,列舉一下完成事情的內容,以後這些內容的記錄要更頻繁一些,也需要分享些經驗。東西堆在一起之後就不太想記錄下來了。 10月25日 - 11月6日,看了一下Managing Gigabytes(以下簡稱MG)這本書,感覺還是很不錯的一本書,翻譯版叫做《深入搜尋引擎》,作者是新西蘭的一位教授,屬於比較嚴肅的類型,
Time of Update: 2018-12-07
本小結描述的是SSE2整數運算指令。5. 資料搬移指令 movdqa XMM,XMM/m128 movdqa XMM/m128,XMM 把源儲存空間內容值送入目的寄存器,當有m128時,記憶體位址必須16位元組對齊. movdqu XMM,XMM/m128 movdqu XMM/m128,XMM 把源儲存空間內容值送入目的寄存器,記憶體位址不必16位元組對齊. movq2dq XMM,MM
Time of Update: 2018-12-07
在Effective C++中提到:讓自己熟悉TR1與Boost庫, 重複造輪子是一件不太划算的事情. 本來還計劃把一些內容自己寫寫, 想了想還是算了, 時間應該用來做一些更需要自己寫的事情. 使用Boost之前當然是配置它, 在VS2008下的配置方法如下: 首先去 http://www.boost.org/ 把最新版本的下載下來(目前是1.41最新了) 解壓到某一個檔案夾之下, 然後建立一個Empty Project, 在所建的工程上面按右鍵, 選擇屬性