Skip to main content
  1. Posts/
  2. Today I Learned/

CSAPP 5.6 Eliminating Unneeded Memory References

·209 words·1 min
Jiho Kim
Author
Jiho Kim
๋‹ฌ๋ ค ๋˜ ๋‹ฌ๋ ค

๐Ÿ“ ์ƒ์„ธ ์ •๋ฆฌ
#

  • CSAPP 5.5 Reducing Procedure Calls ์—์„œ ์ตœ์ ํ™”ํ•œ ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
1	. L17:				loop:
2	   vmovsd (%rbx), %xmm0		  Read product from dest
3	   vmulsd (%rdx), %xmm0, %xmm0	  Multiply product by data[i]
4	   vmovsd %xmm0, (%rbx)		  Store product at dest
5	   addq $8, %rdx		  Increment data+i
6	   cmpq %rax, %rdx		  Compare to data+length
7	   jne .L17			  If !=, goto loop
  • ๋ฌธ์ œ์ ์ด ์กฐ๊ธˆ ๋ณด์ธ๋‹ค.
    • dest๋Š” %rbx์— ์ €์žฅ๋˜์–ด์žˆ๊ณ , ๋ฐ˜๋ณต๋ฌธ ์ธ๋ฑ์Šค i๋Š” %rdx์—, ๋ฃจํ”„ ์ข…๋ฃŒ๋Š” %rax์˜ ๊ฐ’์ด๋ž‘ ๋น„๊ตํ•˜๋ฉด์„œ ๊ฐ์ง€ํ•œ๋‹ค.
    • dest, ์ฆ‰ %rbx๋ฅผ ๊ณ„์†ํ•ด์„œ ์ฝ๊ณ ์“ฐ๊ณ  ํ•˜๊ณ ์žˆ๋‹ค!! ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋Š”๋ฐ.
1	/* Accumulate result in local variable */
2	void combine4(vec_ptr v, data_t *dest)
3	{
4		long i;
5		long length = vec_length(v);
6		data_t *data = get_vec_start(v);
7		data_t acc = IDENT;
8	
9		for (i = 0; i < length; i++) {
10			acc = acc OP data[i];
11		}
12		*dest = acc;
13	}
  • ๊ทธ ํŒŒํŠธ๋ฅผ ์œ„์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด๋ณด์ž.
    • data_t acc๊ฐ€ ์ƒ๊ธด๊ฒŒ ์ฐจ์ด์ ์ด๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ฝ์ง€ ์•Š๊ณ , ๋ ˆ์ง€์Šคํ„ฐ ํ•˜๋‚˜์—์„œ ๊ณ ์ •ํ•ด์„œ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฏ€๋กœ ํ›จ์”ฌ ๋นจ๋ผ์ง„๋‹ค!
  • ์ด๋Š” ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”๋กœ ์™œ ์ž๋™์œผ๋กœ ์žกํžˆ์ง€ ์•Š์•˜์„๊นŒ?
    • *dest๊ฐ€ v์˜ ์›์†Œ์—ฟ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์ด๋Ÿฐ alias๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด, ๋งˆ์Œ๋Œ€๋กœ ๋ฐ”๊พธ๋Š”๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ฐฐ์—ด์ด ํ›ผ์†๋˜๋ฉด์„œ ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค!!
    • ๋”ฐ๋ผ์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ทธ๋Ÿฐ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์ ํ™”ํ•˜์ง€ ๋ชปํ•˜๊ณ , ๋А๋ฆฌ๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.

โ”์งˆ๋ฌธ ์‚ฌํ•ญ
#

๐Ÿ”— ์ฐธ๊ณ  ์ž๋ฃŒ
#