ZLIB::inflate Version FastCpy8
zlib:3BC78A9,5830144 ;FastCpy8 的成果
zliX:5025CC2,5830144,0 ;原始 ZLIB 的成果
asm :4237579,5830144,0 ;自己手工的 inflate_asm 加 FastCpy8
C :60FEFA8,5830144,0 ;自己手工的 inflate_asm 改寫成 C
大概去年吧, 開始找了 deflate 這些資料,
雖然在 compress 不是很了解,
不過 uncompress 卻有更多加強的空間,
當然這也是從 NRV 解壓縮 x86 assembly 所得到的知識.
手工的 inflate_asm 也是我軍旅中空閒所刻出來的,
當然效能當初是已經算是贏 ZLIB::inflate,
但是因為 PNG 的 Mulitple IDAT 是依賴 ZLIB 的 FLUSH,
開始在 ZLIB 的 inflate_asm 改善,
結果發現竟然比自己手工的 inflate_asm 強太多了.
當然主要原因
1.ZLIB 的 Table 已經把 Length 和 Distance 做好了.
2.ZLIB 的 BitStream Buffer 是 MMX 的 64bit 空間.
當然可惜的是 SSE 的 128bit 上面 Shift 沒有支援到
Double Quad Word, 不然應該可以更好.
zliX:5025CC2,5830144,0 ;原始 ZLIB 的成果
asm :4237579,5830144,0 ;自己手工的 inflate_asm 加 FastCpy8
C :60FEFA8,5830144,0 ;自己手工的 inflate_asm 改寫成 C
大概去年吧, 開始找了 deflate 這些資料,
雖然在 compress 不是很了解,
不過 uncompress 卻有更多加強的空間,
當然這也是從 NRV 解壓縮 x86 assembly 所得到的知識.
手工的 inflate_asm 也是我軍旅中空閒所刻出來的,
當然效能當初是已經算是贏 ZLIB::inflate,
但是因為 PNG 的 Mulitple IDAT 是依賴 ZLIB 的 FLUSH,
開始在 ZLIB 的 inflate_asm 改善,
結果發現竟然比自己手工的 inflate_asm 強太多了.
當然主要原因
1.ZLIB 的 Table 已經把 Length 和 Distance 做好了.
2.ZLIB 的 BitStream Buffer 是 MMX 的 64bit 空間.
當然可惜的是 SSE 的 128bit 上面 Shift 沒有支援到
Double Quad Word, 不然應該可以更好.
標籤: 編碼
0 Comments:
張貼留言
<< Home