| [ CnUnix ] in KIDS 글 쓴 이(By): terzeron (microkid) 날 짜 (Date): 2003년 4월 24일 목요일 오후 02시 37분 38초 제 목(Title): Re: 계산 코드 옵티마이즈.. > 1. 함수 앞에 inline을 붙이면 뭐가 달라지나요? optimiza 하면 어차피 > 컴파일러가 알아서 다 inline으로 처리하는 거 아닌가요.. 속도가 빨라지겠죠. optimization 방법에 따라 inline으로 바꿀지 아니면 그대로 사용할지가 달라지겠죠. -finline-functions를 gcc 매뉴얼에서 검색해보세요. > 2. inline 함수 안에서 inline 함수를 또 부르면 알아서 다 줄줄이 집어 > 넣어주나요? 네 > 3. 함수를 여러개 만들면 함수 부를 때마다 stack에 어드레서 저장하고 > 쩜뿌하고.. 이래서 느려지는 거 아닌지.. > 그냥 줄창 한 함수 안에서 노가다로 짜는 게 좋은 건지... 아무래도 loop 안에서 함수를 부르면 느려질테니 반복되는 작업이라면 loop에서 다른 함수로 분기하지 않도록 하는 게 한가지 방법이 될 수도 있겠죠. 하지만 성능때문이 아니라면 구조적 프로그래밍을 포기하는 일은 없어야 할 것 같습니다. > 4. 테스트 해보면 malloc으로 2차원, 3차원 배열 잡는거보다, > 1차원으로 잡아서 indexing을 복잡하게 해주는게 더 빠르던데.. > (그러니까 a[i][j][k] 보다 a[(i*NX+j)*NY+k] 이런 식의 구조..) > 이런 식으로 모두 바꾸어 주려다 보니 점점 일이 커지는 군요. > indexing 함수를 벌써 두개 만들었고 앞으로 더 만들게 될 거 같은데... > 이런 노가다를 컴파일러가 알아서 하게 해 줄 방법은 없는 건지.. 아무래도 n차원에서 n이 커질수록 다단계로 malloc을 해줘야 하니 성능이 떨어질 수 있습니다. 하지만 그걸 flat한 구조로 만드는 게 좋은 것 같아 보이지는 않습니다. index값을 구하는 방법을 위와 같이 expression으로 직접 쓰지 마시고 매크로로 정의해서 쓰시면 프로그래밍하기에 유용할 것 같네요. 컴파일러가 알아서 해주기는 좀 어려운 문제인 것 같네요. --- 어떤 성취가, 어떤 조롱이, 또는 어떤 고뇌가 나를 기다리고 있을지 나는 모른다. 나는 아무 것도 모른다. 그러나 나는 아직 과거의 경이로운 기적의 시대가 영원히 과거의 것이 되어 버리지는 않았다는 사실을 굳게 믿고 있다. - Stanislaw Lem - |