芭樂永生

2008年12月28日 星期日

About Clear MMX & SSE Register...

CPU MMXpxor psub_ pcmp_
Pentium with MMX1.0/0.51.0/0.51.0/0.5
Pentium II1.0/0.51.0/0.51.0/0.5
Pentium 41.0/1.02.0/1.02.0/1.0
Prescott1.0/1.01.0/1.02.0/1.0
Core 2 Duo0.3/0.30.5/0.50.5/0.5
AMD K6-21.0/0.61.0/0.61.0/0.6
AMD Athlon2.0/0.52.0/0.52.0/0.5
AMD Athlon 640.5/0.52.0/0.52.0/0.5
AMD Athlon 64 (90nm)0.5/0.50.5/0.5

0.5/0.5


CPU SSE

pxor psub_ pcmp_
Pentium !!!2.0/2.0N/AN/A
Pentium 42.0/2.02.0/2.02.0/2.0
Pentium M1.0/1.01.0/1.01.0/1.0
Core 2 Duo0.3/0.3*0.5/0.50.5/0.5
Core i7 0.3/0.3 0.5/0.5 0.5/0.5
AMD Athlon2.0/2.0N/AN/A
AMD Athlon 641.0/1.02.0/1.02.0/1.0
AMD Athlon 64 (90nm)1.0/1.0*1.0/1.01.0/1.0
AMD Phenom0.5/0.5*0.5/0.50.5/0.5

PS:* included XORPS, XORPD.

Source : http://instlatx64.freeweb.hu/

標籤:

2008年12月27日 星期六

About Clear Register...

CPUmov eax, 0xor eax, eax sub eax,eax
Pentium1.0/1.01.0/0.51.0/0.5
Pentium with MMX1.0/0.51.0/0.51.0/0.5
Pentium Pro0.5/0.51.0/0.51.0/0.5
Pentium 4 0.7/0.7 0.5/0.5 0.3/0.3
Prescott 0.4/0.4 0.5/0.5 0.3/0.3
Core Duo0.5/0.50.5/0.50.5/0.5
Core 2 Duo0.3/0.30.3/0.30.3/0.3
AMD K50.5/0.51.0/1.01.0/1.0
AMD K60.5/0.50.5/0.50.5/0.5
AMD Athlon0.4/0.40.4/0.40.4/0.4
AMD Athlon 640.3/0.30.3/0.30.3/0.3
VIA Nano1.0/1.00.5/0.51.0/1.0

Source : http://instlatx64.freeweb.hu/

標籤:

2008年12月26日 星期五

Matrix Operation Version SSE

一些常用的 Matrix 4x4 Operation 把它改成 SSE 後,
效能有所提升, 而且 SSE2 的 pshufd 指令優勢,
可以減少一次 movaps 的指令, 當然 SSE 的 shufps 也是有它的用途,
只是在 Matrix 4x4 之下, 這 shufps 似乎沒有它的使用價值.

(單位為 rdtsc 測出值)
MatrixMultiply
 MatMul4_x87: 130.00
 MatMul4_SSE: 32.00
 MatMul4ASSE: 23.67
 MatMul4_SSE2: 30.61
 MatMul4ASSE2: 22.33
 MatMul4_SSE3: 37.00
 MatMul41SSE3: 40.25


MatrixInverse
 MatInv4_D3D: 111.02
 MatInv4_SSE: 90.00
 MatInv41SSE: 70.50
 MatInv42SSE: 70.63
 MatInv4_SSE2: 66.23
 MatInv4USSE2: 76.66
 MatInv4_SSE4: 61.66

MatrixRotation
 MatrixRotationX_x87: 135.00
 MatrixRotationX_D3D: 147.04
 MatrixRotationX_SSE2: 26.00

標籤:

2008年12月25日 星期四

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, 不然應該可以更好.

標籤: