첫번째 어프로치 :
inline long radix( const char* buf, const int mul )
{
if( mul == 1 )
return *buf & 0xF;
return ( *buf & 0xF ) * mul + radix( buf + 1, mul / 10 );
}
요즘 컴파일러가 상수 재귀를 얼마나 잘 정리하는지 테스트 해봤는데
결과는 3배 느림. 그냥 꼬리재귀 정도만 먹고 루프를 도는듯
두번째 어프로치 :
inline long ascDec( const char* s )
{
return ( s[ 0 ] - '0' ) * 1000000000 + ( s[ 1 ] - '0' ) * 100000000 +
( s[ 2 ] - '0' ) * 10000000 + ( s[ 3 ] - '0' ) * 1000000 +
( s[ 4 ] - '0' ) * 100000 + ( s[ 5 ] - '0' ) * 10000 +
( s[ 12 ] - '0' ) * 1000 + ( s[ 13 ] - '0' ) * 100 +
( s[ 14 ] - '0' ) * 10 + ( s[ 15 ] - '0' );
}
inline long getHeadLen( const char *out )
{
return ascDec( out + 6 );
}
SIMD를 쓰지 않는 이상 성능 최적화는 쉽지 않다는 판단하에 늘어선걸 정리하고 inline 화.
다른 곳에서 쓸 수 있도록 offset 을 0 부터 출발하게 맞추고 함수명을 일반화.
대신 헤드의 길이를 가져오는 함수를 따로 구현하여서 거기서 offset 주소를 추가.
성능은 inline 때문에 오히려 증가했고 재사용성을 높였음.
깔끔한 줄 맞춤으로 니 코드 보단 보기 좋지.
이상.
long getHeadLen(uint8 *out) { return ((out[6] -'0') *1000000000+ (out[7] -'0') *100000000+ (out[8] -'0') *10000000+ (out[9] -'0') *1000000+ (out[10]-'0') *100000+ (out[11]-'0') *10000+ (out[12]-'0') *1000+ (out[13]-'0') *100+ (out[14]-'0') *10+ (out[15]-'0')); } |
와. 개감동이네 진심
앞으로 꺄~ 코세형아 하고 부르렴
그래도 성인이니까 꺄 말고 캬 라고 해야함
아니면 아. 아꼬세형
캬~ 코세형으로 양보할께 : )
그리고 푸퍼 맘에든다. 푸펔ㅋㅋㅋㅋㅋㅋㅋ
매크로로 써커스 하려다 참음 ㅋㅋ 사실 오늘 좀 바쁨.
써커스 해봐야 득도 없고 이런건 : )
C++ 이면 템플릿으로 그나마 가져다 쓰기 쉬운거 몇 갠 만들기 좋은데 말야. 쩝.
퍄...
왜 포인터 위치가 왼쪽에 붙었다 오른쪽에 붙었다가 하죠 ㅂㄷㅂㄷ
첫번째 const char* const 가 왜 아니죠??
ascDec 함수
난 왼쪽에 붙이는데 저 아저씨가 오른쪽에 붙여서 그럼 ㅡㅡㅋ
그거 다 따져봐야 별로 코드만 길어짐.
아 더 빠른방법 배열에 0~9 자리수 옮겨가면서 다 계산해서 넣어놓고 배열접근으로 곱하기를 생략 할 수 있을듯
ㄴ 생각 좀 더해봐봐
'0'빼주는 것도 생략가능할거 같은데
껄껄 그럼 한 글자에 256 개 짜리 배열에서 숫자 하나 뽑는거지.
곱하길 안할 수 있나 10진수인데. ( a << 3 ) + ( a << 1 ) 해봐야 노답이고. 배열에 꺼내도 2클럭. 메모리만 먹구. 괜히 캐시 거리 멀어지면 시작할때 캐시 깨먹으면서 로드나 걸리겠지
ㅋㅋ 제가생각한 방법이 있는데
이거 컴퓨터 한 5시쯤되야 만질 수 있을듯요
오늘 바쁘신거 같으니 그때 보시죵
배열을 몇개짜리 잡겠단건데
- 없에는건 128짜리
* 없에는건 [10][10]
숫자만 받는단 가정하에 64개면 되긴 함.
2차원 배열이면 그게 곱셈인줄은 알지?
ㅇㅎ 그럼 100으로 해놓고 덧셈접근도 가능은하죠
1바이트 이내 곱셈은 1클럭인줄은 알지?
참고로 9만 정도 나와있는저 클럭 있잖아.
10000번 루프돈 결과야.
그니깐 요즘 루프 비용 1.5클럭이라고 계산하고 대입하는 것까지 2.5 클럭 계산하면
6.5 클럭만에 저 10쌍의 뺄셈 곱셈 포인터 연산이 실행되었다는거임
2클럭 무조건 먹는 배열을 이용하겠다고?
거기다 안에 인덱스 계산까지 넣어서?
ㅋㅋ 이따 해보구요. 일단 전 눈앞에 할일이 있어서 이따 뵈요.
ㅋㅋ 츄라이츄라이