[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gcc-3.1.1



Tsubai Masanari <tsubai@iri.co.jp> writes:

> じゃあ、最後の lwz だけ lwzu にする形ではどうでしょうか。
> テストしていませんが、こんな感じ。
> 
> 			asm volatile (
> 				"addic 0,0,0;"		/* clear carry */
> 				"mtctr %1;"		/* load loop count */
> 				"1:"
> 				"lwz 7,4(%2);"		/* load current data
> 							   word */
> 				"lwzu 8,8(%2);"
> 				"adde %0,%0,7;"		/* add to sum */
> 				"adde %0,%0,8;"
> 				"bdnz 1b;"		/* loop */
> 				"addze %0,%0;"		/* add carry bit */
> 				: "+r"(sum)
> 				: "r"(n), "b"(w - 4)
> 				: "7", "8");		/* clobber r7, r8 */
> 
> 64バイトの方もこっちのほうがいいのかも。

64 byte のほうは効いたけど 8 byte のほうは返って遅くなりました.

ちなみに, この packet は 0x2088 byte あって, それが 12 個の mbuf に別
れていて, 8/64 byte の loop はそれぞれ

8 byte: 3 * 5, 5 * 6, 6 * 1
64 byte: 22 * 5, 13 * 1

(意味は, iteration の数 * loop の数) だけ通ります.


lwz だけの場合:

% jot 5 | while read i; do csh -c 'time ./a.out-lwz,x10'; done
125.9u 0.0s 2:05.94 100.0% 0+0k 0+0io 0pf+0w
126.0u 0.0s 2:06.11 99.9% 0+0k 0+0io 0pf+0w
126.0u 0.0s 2:06.07 99.9% 0+0k 0+0io 0pf+0w
126.0u 0.0s 2:06.10 99.9% 0+0k 0+0io 0pf+0w
126.0u 0.0s 2:06.07 99.9% 0+0k 0+0io 0pf+0w

8 byte の loop だけ lwz + lwzu:

% jot 5 | while read i; do csh -c 'time ./a.out-lwzlwzu'; done
126.2u 0.0s 2:06.35 99.9% 0+0k 0+0io 0pf+0w
126.2u 0.0s 2:06.34 99.9% 0+0k 0+0io 0pf+0w
126.2u 0.0s 2:06.35 99.9% 0+0k 0+0io 0pf+0w
126.3u 0.0s 2:06.33 99.9% 0+0k 0+0io 0pf+0w
126.2u 0.0s 2:06.33 99.9% 0+0k 0+0io 0pf+0w

64 byte の loop も lwz + lwzu:

% jot 5 | while read i; do csh -c 'time ./a.out-lwzlwzu64'; done
121.7u 0.0s 2:01.83 99.9% 0+0k 0+0io 0pf+0w
121.7u 0.0s 2:01.76 99.9% 0+0k 0+0io 0pf+0w
121.6u 0.0s 2:01.71 99.9% 0+0k 0+0io 0pf+0w
121.7u 0.0s 2:01.78 99.9% 0+0k 0+0io 0pf+0w
121.6u 0.0s 2:01.77 99.9% 0+0k 0+0io 0pf+0w

enami.