[완료] masking function 속도 개선 문제 질문 있습니다.
글쓴이: sagidong / 작성시간: 화, 2009/01/13 - 11:16오전
현재 mask 함수를 구현중에 있는데요
====> function ( mask , masking data )
예를 들면
메모리에 read 한 data => 0x1234
mask 값 = 0xff00
masking 할 data => 0x56
결과 data = 0x5634 와 같이 변하게 됩니다.
현재 구현을
1. mask 값을 NOT
0xff00 => 0x00ff
2. mask 값 을 counting while 문으로 count
0x00ff 이면 8 .. ( >> 1 씩 0 이 나올때까지 )
3. 메모리 read
0x1234
4. mask
0x1234 & ~(0xff00) => 0x0034
5. 쉬프트 연산
0x56 << 8 => 0x5600
6. OR
0x0034 | 0x5600
7. write
0x5634 를 write
로 구현되어 있습니다.
불필요한 루틴이 많은 것 같아
속도 개선이 필요한데요 ..
아무리 생각해봐도 감이 안 오네여.
masking function 의 최적화 된 방법을 알고 싶습니다.
Forums:
인자를 불필요하게 복잡하게 받고 있습니다.
mask = 0xff00이면 masking data를 0x5600으로 받도록 부르는 쪽을 바꿔보세요.
그러면 한줄로 끝납니다:
return (read_data & ~mask) | masking_data;
헉 !!
그 생각을 못했네여.
^^/ 콜럼버스의 달걀 같군요
감사합니다~
서술하신
서술하신 내용은,
ffs() 를 좀 고민해보시면, 꽤 괜찮은 성능을 낼 수 있습니다.
가능하면 CPU 에서 지원하는 instruction 을 사용하는게 좋은데...
OTL
ffs 가 어떤건지요 ??
CPU 의 instruction 가 어떤 뜻인지 좀 찾아봐야겠군요 ^^;
CPU에서 제공하는 instruction 를 사용하면 성능이 더 좋아진다는 말씀이신가요 ?
ffs() 는 CPU 에서 제공하는 건지요 ?? 처음보는 용어라 생소하네요 ^^;
ffs, find first set fls,
ffs, find first set
fls, find last set
ffz, find first zero
flz, find last zero
glibc 에서 제공하는 것은 ffs()뿐입니다만, ~ 과 - 연산으로 나머지를 쉽게 만들 수 있습니다.
CPU instruction 을 언급한 것은 저 네가지 동작 중 몇몇은 CPU의 instruction 하나로도 가능할 수도 있기 때문입니다.
http://lxr.linux.no/linux 에서 ffs, fls, ffz, flz 등으로 검색해보시면
각 CPU 별로 보실 수 있습니다.
OTL
댓글 달기