SlideShare a Scribd company logo
merge.c
성능개선하기
20142872 전자공학부 김정은
기존 Merge 프로그램
100MB 파일 2개를 만들어서 merge하기
실 행 횟 수
버전
1 2 3 4 5 평균
template 108.55211 115.78331 106.67649 113.37243 107.07607 110.292081
Reverse/merge(v1) 106.5771 101.40357 101.26789 104.43641 107.16964 104.170922
final(v3) 66.230124 75.91081 78.949841 73.23087 78.204549 74.5052388
시간단위 : 초
→Template의 경우 5번 실행시 평
균 110초가 걸렸음.
내가 만든 reverse/merge 프로그램
Line-by-line으로 파일 읽어들이는 함수
• 알고리즘 : stack을 구현하여 readaline 함수를 실행했을 때 한
글자씩 stack에 Push하고 reverse_out함수에서 다시 Pop하여
f_out으로 출력하는 방식.
Stack의 원래 크기는 100으로 잡아놓음
한 Line을 fout 파일에 붙이는 함수
readaline함수
기존 코드에서 fputc로 바로
0x0a를 fout 파일에 출력하
던걸 대신 Stack에 Push함.
만약 gen.c로 만든 파일의
line 중에 100글자가 넘어가
는 line이 있을 경우에 동적
할당 했던 Stack 크기 2배로
동적할당 하기
파일에서 읽어들인 문자는
Stack에 Push해서 저장하기
reverse_out
Readaline에서 Stack에 넣어뒀던걸
다시 Pop해서 함수 안에 전역변수로
선언해놓은 배열에 집어넣음
배열의 맨 마지막에 ‘0’을 꼭 넣어줘
야 이상한 값이 출력되지 않음
fputs 함수로 line을 한 번에 찍어주고
함수 종료
f_out 결과
결과는 예상했던 대로 잘 나온다.
성능 향상?
성능 = 74.5052388/110.292081 = 0.67552
성능이 약 1.48배 향상되었다는 것을 알 수 있음
시도한 것들
성능 향상을 위해 시도했던 것들(ver2)
(1) 동적 할당
처음에 Stack 크기를 100으로 정해 놓았지만 gen으로 만든 파일
의 한 line의 크기가 100을 넘어가는 경우가 종종 있어서 동적할
당으로 변경함.
성능 향상을 위해 시도했던 것들(ver2)
(2) fputc보다는 fgets 이용하기
ver2를 처음 완성했을 때 reverse_out 함수에서는 Stack에서 Pop해서 반환되는
값을 fputc로 바로 출력하도록 되어 있었음.
그러나 그 결과를 perf report로 보니 fputc의 overhead가 생각보다 너무 크게
나온다는 것을 알게됨.
우선 배열을 지역 변수로 선언해 놓음
Readaline함수에서 한 줄 씩 읽어
서 Stack에 저장해 놓은 것을 Pop
해서 배열로 저장해놓음.
배열을 fputs로 출력
바꾸고 나서 perf report 결과를 보니 fputc에서 overhead를 은근히 많이 차
지하던 걸 줄일 수 있었고 아직 fgetc가 차지하는 overhead가 많이 남아 있었
지만 시간은 확실히 많이 줄어듬.
성능 향상을 위해 시도했던 것들(ver2)
(3) fprintf함수 이용하기
기존에 fputs를 이용해 구현한 걸 fprintf를 사용하면 어떨까 해
서 그 부분을 바꿔 보았었다. 성공은 했었지만 fputs와 비교 했을
때 5번 실행했을 때 시간 차이도 3초 정도 더 느리고 그 외엔 차
이가 없어서 그냥 폐기.
실패한 것들
성능 향상을 위해 시도했지만 실패한 것들
(1)fopen 대신 open 사용하기
시스템 관련 헤더 파일을 더 추가하고 open을 사용하려 해 봤지
만 에러가 많이 떴고 결국 해결에 어려움을 겪어 실패함.
성능 향상을 위해 시도했지만 실패한 것들
(2) mmap함수 사용하기
mmap함수가 buffer usage를 동적으로 조절할 수 있다는 장점
을 이용하여 메모리를 직접 매핑해주는 mmap하는 함수를 이용
해 readaline함수를 고치려 하였지만 구현에 실패함.
End

More Related Content

PDF
Optimizing merge program
PDF
File merging Report
PPTX
고급시스템프로그래밍
PPTX
[1106 조진현] if you( batch rendering )
PPTX
Unity performanceoptimzation
PDF
Asynchronous 101 (2)
PPTX
Merge revesed
PDF
Asynchronous 101 - (1)
Optimizing merge program
File merging Report
고급시스템프로그래밍
[1106 조진현] if you( batch rendering )
Unity performanceoptimzation
Asynchronous 101 (2)
Merge revesed
Asynchronous 101 - (1)

What's hot (18)

PPTX
Filemerge성능분석
PPTX
카산드라를 설치해서 테스트 해보자 with virtualbox
PDF
Cassandra 멘붕기 | Devon 2012
PDF
R2서버정진욱
PDF
H3 2011 파이썬으로 클라우드 하고 싶어요
 
PPTX
Tcp summary
PDF
intro. typescript playground
PPTX
국민대학교 고급 시스템 프로젝트 #1
PPTX
7가지 동시성 모델 - 6장. 순차 프로세스 통신
PPTX
Make fast file merge program using c
PPTX
Cassandra education material
PDF
[ES6] 5. Destructuring
PDF
Ansible
PDF
3 1. preprocessor, math, stdlib
PPTX
Observable c++ expressions using the observable library 이근원
PDF
Mongo DB 활용가이드 Tip 35 ~ 41
PPTX
프로젝트 #1 최종
PDF
[NodeJS] - NET 모듈 소개
Filemerge성능분석
카산드라를 설치해서 테스트 해보자 with virtualbox
Cassandra 멘붕기 | Devon 2012
R2서버정진욱
H3 2011 파이썬으로 클라우드 하고 싶어요
 
Tcp summary
intro. typescript playground
국민대학교 고급 시스템 프로젝트 #1
7가지 동시성 모델 - 6장. 순차 프로세스 통신
Make fast file merge program using c
Cassandra education material
[ES6] 5. Destructuring
Ansible
3 1. preprocessor, math, stdlib
Observable c++ expressions using the observable library 이근원
Mongo DB 활용가이드 Tip 35 ~ 41
프로젝트 #1 최종
[NodeJS] - NET 모듈 소개
Ad

Viewers also liked (16)

DOCX
Métodos anticonceptivos y enfermedades de transmisión sexual informatica
PPTX
PDF
Dietetyk 321[11] o1.04_u
PPTX
Diapos de hepatitis mcro
PDF
Network lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسين
PDF
Dietetyk 321[11] o1.01_u
PPTX
Strategi for sosiale medier for Felles Verden (fiktiv hjelpe organisasjon)
PDF
Dietetyk 321[11] z3.06_u
PPTX
PDF
Team Collaboration with BIMserver and BIMcloud
PDF
Testimonial central hrd jasa pembuatan cv resume surat lamaran kerja
PDF
SchoolApp OnDemand | Best School Software
PDF
Dietetyk 321[11] z2.06_u
PPTX
Métodos anticonceptivos y enfermedades de transmisión sexual informatica
Dietetyk 321[11] o1.04_u
Diapos de hepatitis mcro
Network lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسين
Dietetyk 321[11] o1.01_u
Strategi for sosiale medier for Felles Verden (fiktiv hjelpe organisasjon)
Dietetyk 321[11] z3.06_u
Team Collaboration with BIMserver and BIMcloud
Testimonial central hrd jasa pembuatan cv resume surat lamaran kerja
SchoolApp OnDemand | Best School Software
Dietetyk 321[11] z2.06_u
Ad

Similar to Merge.c 성능개선보고서 (20)

PPTX
Adv sys prog_20123186_report1
PPTX
Merge reversed2
PPTX
Stage2
PPTX
Hw1 2 20113288_소현수
PPTX
Merge version 2
PPTX
고급시스템프로그래밍 Project#1 20123222_서기원
PPTX
Merge
PPTX
고급 시스템 프로그래밍
PPTX
고급 시스템 프로그래밍
PPTX
고급시스템프로그래밍
PPTX
File reverse & merge
PPTX
고급시스템프로그래밍
PPTX
고급시스템프로그래밍
PPTX
고급 시스템 프로그래밍
PPTX
Make fast file merge program using c (stage 2)
PDF
Project#2말의여행 Hwp
PPTX
FileMerge
PPTX
Windows reversing study_basic_1
 
PDF
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...
PDF
자료구조2보고서
Adv sys prog_20123186_report1
Merge reversed2
Stage2
Hw1 2 20113288_소현수
Merge version 2
고급시스템프로그래밍 Project#1 20123222_서기원
Merge
고급 시스템 프로그래밍
고급 시스템 프로그래밍
고급시스템프로그래밍
File reverse & merge
고급시스템프로그래밍
고급시스템프로그래밍
고급 시스템 프로그래밍
Make fast file merge program using c (stage 2)
Project#2말의여행 Hwp
FileMerge
Windows reversing study_basic_1
 
[2009 CodeEngn Conference 03] hkpco - DEFCON CTF 2009 Binary Leetness 100-500...
자료구조2보고서

Merge.c 성능개선보고서

  • 2. 기존 Merge 프로그램 100MB 파일 2개를 만들어서 merge하기 실 행 횟 수 버전 1 2 3 4 5 평균 template 108.55211 115.78331 106.67649 113.37243 107.07607 110.292081 Reverse/merge(v1) 106.5771 101.40357 101.26789 104.43641 107.16964 104.170922 final(v3) 66.230124 75.91081 78.949841 73.23087 78.204549 74.5052388 시간단위 : 초 →Template의 경우 5번 실행시 평 균 110초가 걸렸음.
  • 3. 내가 만든 reverse/merge 프로그램 Line-by-line으로 파일 읽어들이는 함수 • 알고리즘 : stack을 구현하여 readaline 함수를 실행했을 때 한 글자씩 stack에 Push하고 reverse_out함수에서 다시 Pop하여 f_out으로 출력하는 방식. Stack의 원래 크기는 100으로 잡아놓음 한 Line을 fout 파일에 붙이는 함수
  • 4. readaline함수 기존 코드에서 fputc로 바로 0x0a를 fout 파일에 출력하 던걸 대신 Stack에 Push함. 만약 gen.c로 만든 파일의 line 중에 100글자가 넘어가 는 line이 있을 경우에 동적 할당 했던 Stack 크기 2배로 동적할당 하기 파일에서 읽어들인 문자는 Stack에 Push해서 저장하기
  • 5. reverse_out Readaline에서 Stack에 넣어뒀던걸 다시 Pop해서 함수 안에 전역변수로 선언해놓은 배열에 집어넣음 배열의 맨 마지막에 ‘0’을 꼭 넣어줘 야 이상한 값이 출력되지 않음 fputs 함수로 line을 한 번에 찍어주고 함수 종료
  • 6. f_out 결과 결과는 예상했던 대로 잘 나온다.
  • 7. 성능 향상? 성능 = 74.5052388/110.292081 = 0.67552 성능이 약 1.48배 향상되었다는 것을 알 수 있음
  • 9. 성능 향상을 위해 시도했던 것들(ver2) (1) 동적 할당 처음에 Stack 크기를 100으로 정해 놓았지만 gen으로 만든 파일 의 한 line의 크기가 100을 넘어가는 경우가 종종 있어서 동적할 당으로 변경함.
  • 10. 성능 향상을 위해 시도했던 것들(ver2) (2) fputc보다는 fgets 이용하기 ver2를 처음 완성했을 때 reverse_out 함수에서는 Stack에서 Pop해서 반환되는 값을 fputc로 바로 출력하도록 되어 있었음. 그러나 그 결과를 perf report로 보니 fputc의 overhead가 생각보다 너무 크게 나온다는 것을 알게됨.
  • 11. 우선 배열을 지역 변수로 선언해 놓음 Readaline함수에서 한 줄 씩 읽어 서 Stack에 저장해 놓은 것을 Pop 해서 배열로 저장해놓음. 배열을 fputs로 출력
  • 12. 바꾸고 나서 perf report 결과를 보니 fputc에서 overhead를 은근히 많이 차 지하던 걸 줄일 수 있었고 아직 fgetc가 차지하는 overhead가 많이 남아 있었 지만 시간은 확실히 많이 줄어듬.
  • 13. 성능 향상을 위해 시도했던 것들(ver2) (3) fprintf함수 이용하기 기존에 fputs를 이용해 구현한 걸 fprintf를 사용하면 어떨까 해 서 그 부분을 바꿔 보았었다. 성공은 했었지만 fputs와 비교 했을 때 5번 실행했을 때 시간 차이도 3초 정도 더 느리고 그 외엔 차 이가 없어서 그냥 폐기.
  • 15. 성능 향상을 위해 시도했지만 실패한 것들 (1)fopen 대신 open 사용하기 시스템 관련 헤더 파일을 더 추가하고 open을 사용하려 해 봤지 만 에러가 많이 떴고 결국 해결에 어려움을 겪어 실패함.
  • 16. 성능 향상을 위해 시도했지만 실패한 것들 (2) mmap함수 사용하기 mmap함수가 buffer usage를 동적으로 조절할 수 있다는 장점 을 이용하여 메모리를 직접 매핑해주는 mmap하는 함수를 이용 해 readaline함수를 고치려 하였지만 구현에 실패함.
  • 17. End