SlideShare a Scribd company logo
1 of 17
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

What's hot

Filemerge성능분석
Filemerge성능분석Filemerge성능분석
Filemerge성능분석선 유
 
카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox카산드라를 설치해서 테스트 해보자 with virtualbox
카산드라를 설치해서 테스트 해보자 with virtualbox떠리 이
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Daum DNA
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요KTH
 
intro. typescript playground
intro. typescript playgroundintro. typescript playground
intro. typescript playgroundHan JaeYeab
 
국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1dldmsmchddldmschd
 
7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신Hyunsoo Jung
 
Make fast file merge program using c
Make fast file merge program using cMake fast file merge program using c
Make fast file merge program using cDong Kyu Lee
 
Cassandra education material
Cassandra education materialCassandra education material
Cassandra education materialYoungki Kim
 
[ES6] 5. Destructuring
[ES6] 5. Destructuring[ES6] 5. Destructuring
[ES6] 5. DestructuringHan JaeYeab
 
3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib3 1. preprocessor, math, stdlib
3 1. preprocessor, math, stdlib웅식 전
 
Observable c++ expressions using the observable library 이근원
Observable c++ expressions using the observable library 이근원Observable c++ expressions using the observable library 이근원
Observable c++ expressions using the observable library 이근원Kwen Won Lee
 
Mongo DB 활용가이드 Tip 35 ~ 41
Mongo DB 활용가이드 Tip 35 ~ 41Mongo DB 활용가이드 Tip 35 ~ 41
Mongo DB 활용가이드 Tip 35 ~ 41cosmosyc
 
[NodeJS] - NET 모듈 소개
[NodeJS] - NET 모듈 소개[NodeJS] - NET 모듈 소개
[NodeJS] - NET 모듈 소개문학청년
 

What's hot (18)

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

Viewers also liked

Métodos anticonceptivos y enfermedades de transmisión sexual informatica
Métodos anticonceptivos y enfermedades de transmisión sexual informaticaMétodos anticonceptivos y enfermedades de transmisión sexual informatica
Métodos anticonceptivos y enfermedades de transmisión sexual informaticajose david pinilla quezada
 
Dietetyk 321[11] o1.04_u
Dietetyk 321[11] o1.04_uDietetyk 321[11] o1.04_u
Dietetyk 321[11] o1.04_ugemix gemix
 
Diapos de hepatitis mcro
Diapos de hepatitis mcroDiapos de hepatitis mcro
Diapos de hepatitis mcroantonio flores
 
Dietetyk 321[11] o1.01_u
Dietetyk 321[11] o1.01_uDietetyk 321[11] o1.01_u
Dietetyk 321[11] o1.01_ugemix gemix
 
Strategi for sosiale medier for Felles Verden (fiktiv hjelpe organisasjon)
Strategi for sosiale medier for Felles Verden (fiktiv hjelpe organisasjon)Strategi for sosiale medier for Felles Verden (fiktiv hjelpe organisasjon)
Strategi for sosiale medier for Felles Verden (fiktiv hjelpe organisasjon)Mohamed Shakeel Bashir
 
Dietetyk 321[11] z3.06_u
Dietetyk 321[11] z3.06_uDietetyk 321[11] z3.06_u
Dietetyk 321[11] z3.06_ugemix gemix
 
Team Collaboration with BIMserver and BIMcloud
Team Collaboration with BIMserver and BIMcloudTeam Collaboration with BIMserver and BIMcloud
Team Collaboration with BIMserver and BIMcloudApplecore Designs Limited
 
Testimonial central hrd jasa pembuatan cv resume surat lamaran kerja
Testimonial central hrd jasa pembuatan cv resume surat lamaran kerjaTestimonial central hrd jasa pembuatan cv resume surat lamaran kerja
Testimonial central hrd jasa pembuatan cv resume surat lamaran kerjacentralhrd2
 
SchoolApp OnDemand | Best School Software
SchoolApp OnDemand | Best School SoftwareSchoolApp OnDemand | Best School Software
SchoolApp OnDemand | Best School Softwarehrsoftsolution
 
Dietetyk 321[11] z2.06_u
Dietetyk 321[11] z2.06_uDietetyk 321[11] z2.06_u
Dietetyk 321[11] z2.06_ugemix gemix
 

Viewers also liked (16)

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

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

[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 
Adv sys prog_20123186_report1
Adv sys prog_20123186_report1Adv sys prog_20123186_report1
Adv sys prog_20123186_report1준석 김
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍CHANG-HYUN LEE
 
Exploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMsExploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMsTae Young Lee
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍CHANG-HYUN LEE
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍CHANG-HYUN LEE
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
Hw1 2 20113288_소현수
Hw1 2 20113288_소현수Hw1 2 20113288_소현수
Hw1 2 20113288_소현수hyunsoo so
 
Vert.x 세미나 이지원_배포용
Vert.x 세미나 이지원_배포용Vert.x 세미나 이지원_배포용
Vert.x 세미나 이지원_배포용지원 이
 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&Csys4u
 
Processing 4th Class: Function
Processing 4th Class: FunctionProcessing 4th Class: Function
Processing 4th Class: FunctionMinGi KYUNG
 
고급시스템프로그래밍 Project#1 20123222_서기원
고급시스템프로그래밍 Project#1 20123222_서기원고급시스템프로그래밍 Project#1 20123222_서기원
고급시스템프로그래밍 Project#1 20123222_서기원giwon seo
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용Youngjae Kim
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS충섭 김
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_ozlael ozlael
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법Daniel Kim
 

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

[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
Adv sys prog_20123186_report1
Adv sys prog_20123186_report1Adv sys prog_20123186_report1
Adv sys prog_20123186_report1
 
Stage2
Stage2Stage2
Stage2
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
Exploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMsExploring Deep Learning Acceleration Technology Embedded in LLMs
Exploring Deep Learning Acceleration Technology Embedded in LLMs
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
Merge reversed2
Merge reversed2Merge reversed2
Merge reversed2
 
Hw1 2 20113288_소현수
Hw1 2 20113288_소현수Hw1 2 20113288_소현수
Hw1 2 20113288_소현수
 
Merge pt 2
Merge pt 2Merge pt 2
Merge pt 2
 
Vert.x 세미나 이지원_배포용
Vert.x 세미나 이지원_배포용Vert.x 세미나 이지원_배포용
Vert.x 세미나 이지원_배포용
 
Introduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&CIntroduction to Fork Join Framework_SYS4U I&C
Introduction to Fork Join Framework_SYS4U I&C
 
Processing 4th Class: Function
Processing 4th Class: FunctionProcessing 4th Class: Function
Processing 4th Class: Function
 
React Redux React Native
React Redux React NativeReact Redux React Native
React Redux React Native
 
고급시스템프로그래밍 Project#1 20123222_서기원
고급시스템프로그래밍 Project#1 20123222_서기원고급시스템프로그래밍 Project#1 20123222_서기원
고급시스템프로그래밍 Project#1 20123222_서기원
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법
 

Recently uploaded

공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 

Recently uploaded (8)

공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 

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