| [ 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] 가 몇배 빠른 경우도 경험해 봤습니다. |