C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[38878] Re:Re:+ - 연산 & * / %연산 ==>감사합니다. 꾸벅[냉무]
김상면 [windyboy] 1352 읽음    2005-01-22 11:43
열씸! 님이 쓰신 글 :
: FPU는 부동소수점 연산 장치입니다. 정수 연산에선 의미 없습니다.
:
: 정수를 먼저 예로 들죠
: 1. 덧셈과 뺄셈은 2의 보수 표현을 쓸 뿐이므로 사실상 같습니다.
:
: 2. 인텔 80486 이하의 CPU들에선 곱셈과 나눗셈은 비트연산이나 덧셈 연산들에 비해
: 확실히 느렸었습니다만. 펜티엄 이상에선 정수의 덧셈 곱셈이 거의 동일한 사이클에 수행됩니다.
:
: 3. / 나눗셈과 % 나머지는 똑같이 DIV(부호가 있을 경우 IDIV) 연산을 거치게 됩니다.
:    DIV 연산의 결과 몫과 나머지가 분리되 두 개의 기억장소로 나뉘어 저장되는데
:    그 둘 중 몫만 쓰는게 / 고, 나머지를 쓰는게 %죠.
:
: 4. 486 이하의 과거시절엔 비트 연산 두번에 덧셈을 섞는게 곱셈 나눗셈 보다 두배는 빨랐습니다.
:    예를들어 성능을 고려한 코드에선 y * 640 을 하는 대신 (y << 9 ) + (y << 7) 을 했었죠.
:    포팅성을 고려한다거나 인텔 호환 CPU에서의 발열 / 에너지 소모 문제를 고려한다고 해도
:    상대적으로 간단한 instruction을 사용하는게 의미는 있지만,
:    과거처럼 곱셈 한번을 몇개의 비트연산 조합으로 사용하는건 오히려 성능에 장애를 주죠.
:    따라서 비트 연산 하나로 처리할 수 있는 연산들만 비트 연산을 사용하는게 좋습니다.
:
: 예>
:    2의 승수 형태로 표현되는 값의 곱셈, 나눗셈, 나머지 연산
:    a * 1024 ----> a << 10
:    a / 64 ----> a >> 6
:    a % 128 -----> a & 127
:
: 실수 연산의 경우를 잠시 언급하죠.
:
: 부동소수점 표현 매카니즘은 [부호 1비트 + 지수부 8비트 + 히든 비트 1 비트 + 가수부]
: 로 나뉘어 집니다. float 든 double 이든 long double 이든 말이죠.
: 이 매카니즘은 연산이 복잡하기 때문에, 펜티엄4라 하더라도 겔겔 대게 됩니다.
: 따라서 속도가 중요하다면 고정소수점(실은 정수) 형태로 변환해서 사용하셔야 하고,
: 함수 호출을 자제하고, 가능한 부분은 매크로함수로 정의하거나 인라인 함수, 인라인 어셈블리와
: 병행해서 처리하셔야 합니다.
:
: 고정소수점 최적화에 관한 내용은 게임 최적화 관련 문서들에서 흔히 접하실수 있습니다.

+ -

관련 글 리스트
38867 + - 연산 & * / %연산 김상면 834 2005/01/21
38874     Re:+ - 연산 & * / %연산 열씸! 1423 2005/01/22
38878         Re:Re:+ - 연산 & * / %연산 ==>감사합니다. 꾸벅[냉무] 김상면 1352 2005/01/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.