상세 컨텐츠

본문 제목

퍼포먼스를 위한 발악

etc

by ryujt 2012. 2. 11. 23:52

본문

오래 전부터 습관이 된 탓에 and 조건을 분별할 때에는 항상 확률이 낮은 것부터 나열하도록 신경을 쓰고 있었습니다.  그러다가, 요즘 PC에서 그런 것이 과연 얼마나 퍼포먼스 향상에 도움이 될 까 궁굼해 졌습니다.  바로 테스트에 들어 갔습니다.

[소스 1]
procedure TForm1.Button1Click(Sender: TObject);
var
  Tick : Cardinal;
  Loop, a, b : integer;
begin
  Tick := GetTickCount;

  for Loop := 1 to 100000000 do begin
      a := Random(2);
      b := Random(100);
//      if (a = 1) and (b = 1) then Tag := Tag + 1;
      if (b = 1) and (a = 1) then Tag := Tag + 1;
  end;

  Caption := IntToStr(GetTickCount - Tick);
end;
11: 라인과 12: 라인이 오늘의 주인공입니다.  결과적으로 똑같은 두 문장의 속도 차이는 아래와 같습니다.
  • 11: 라인 평균 1200 ms 정도
  • 12: 라인 평균 730 ms 정도
and 문장에서는 앞에서 false가 판별되었을 경우 다음 조건을 검사하지 않기 때문에 확률이 낮은 것을 먼저 분별하면 성능에 도움이 됩니다.  or 에서는 반대로 확률이 높은 것부터 나열하는 것이 조금이나마 이득이 됩니다.

근래에는 PC의 성능이 워낙에 좋아졌기 때문에 일반적인 경우 퍼포먼스에 대한 고민을 많이 할 필요가 없었졌습니다.  하지만, 스마트폰, 게임 및 증권 시스템 트레이딩과 같이 반복 계산이 많은 프로젝트 등에서는 이런 작은 차이들이 엄청난 결과를 만들어 내기도 합니다.

그렇긴 해도 반복 횟수를 감안하면 상당한 뻘짓이네요 ^^; 

'etc' 카테고리의 다른 글

Use the Magic Trackpad with your Windows PC  (0) 2012.03.06
Tron 게임  (0) 2012.02.17
LED Display  (2) 2012.01.18
아들 넘의 첫 번 째 게임 - 홀짝 맞추기  (0) 2012.01.17
유치원생을 위한 프로그래밍 세 번 째 날  (0) 2011.12.26

관련글 더보기