CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): zzapuno (정내훈)
날 짜 (Date): 2003년 4월 24일 목요일 오후 04시 46분 07초
제 목(Title): Re: 계산 코드 옵티마이즈..


> 4. 테스트 해보면 malloc으로 2차원, 3차원 배열 잡는거보다,
> 1차원으로 잡아서 indexing을 복잡하게 해주는게 더 빠르던데..
> (그러니까 a[i][j][k] 보다 a[(i*NX+j)*NY+k] 이런 식의 구조..)
> 이런 식으로 모두 바꾸어 주려다 보니 점점 일이 커지는 군요.
> indexing 함수를 벌써 두개 만들었고 앞으로 더 만들게 될 거 같은데...
> 이런 노가다를 컴파일러가 알아서 하게 해 줄 방법은 없는 건지..

아무래도 n차원에서 n이 커질수록 다단계로 malloc을 해줘야 하니
성능이 떨어질 수 있습니다. 하지만 그걸 flat한 구조로 만드는
게 좋은 것 같아 보이지는 않습니다.

index값을 구하는 방법을 위와 같이 expression으로 직접 쓰지 마시고
매크로로 정의해서 쓰시면 프로그래밍하기에 유용할 것 같네요.

컴파일러가 알아서 해주기는 좀 어려운 문제인 것 같네요.
---------------------------------------------------------------------

컴파일러가 의외로 삽질할 경우가 꽤 있습니다.

 for(k=0;k<100;k++) a[(i*NX +j)*NY+k]
 대신에
 ii=(i*NX+j)*NY;
 for(k=ii;k<ii+100;k++) a[k]

 가 몇배 빠른 경우도 경험해 봤습니다.


[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.