SlideShare a Scribd company logo
고급시스템 프로그래밍
20093286 민권홍
merge.c 와 비교
기본 제공 된 merge.c 로 파일을 merge 했을 경우 평균 111.8 초가 소요된 것을 확인
merge.c 와 비교
adv-merge.c 로 파일을 merge 하였을 때 평균 37초가 소요됨을 확인하였고 이는 실제 성능에서 3배
증가된 수치이다. 하지만 기본 merge.c 에는 string을 reverse 하는 함수가 빠져있으므로 이에 대한 함
수가 추가 된다면 실제로는 더 큰 성능 상향의 효과가 있었을 것으로 예상한다.
성능을 올리기 위해 시도한 일
성능에서 가장 많은 부분을 차지하는 함수는 fputc 함수 임을 확인하였다.
while 문으로 전체 문자를 한번 씩 다 파일에 쓰기 때문에 fputc()
함수가 호출 되는 경우가 많을 수 밖에 없다고 판단하였고 이를
해결하기 위하여 fprintf() 함수를 이용하여 한 문장 씩 파일에
write 해야겠다고 판단하였고 이를 실제 코드로 구현하였다.
성능을 올리기 위해 시도한 일
이를 해결하기 위하여 fread() 함수를 이용하기로 하였다. 이를
이용하여 지정한 버퍼 크기만큼 read 한다면 만약 버퍼 사이즈
가 1024 라면 fgetc() 에 비하여 read를 1024 분의 1 만큼으로
줄일 수 있을 것이라 판단하였다.
여기서 중요한 부분은 이 fread() 함수로는 한 문장씩 읽어오는
것이 아니므로 읽어온 버퍼에서 문장을 구분하는 알고리즘이
필요했다. 그래서 strtok_r() 함수를 이용하여 ‘n’ 의 토큰으로
문장을 구분하였다.
또 중요한 부분은 마지막 문장이 미완성 될 경우가 있는데 이
럴 경우에는 다음 버퍼에서 읽은 첫 문장을 strcat() 함수를 이
용하여 붙여주도록 하였다.
위에서 확인 했듯이 둘째로 많이 성능을 좌우 하는 부분은 바
로 fgetc() 함수였다. 이 또한 fputc() 함수와 마찬가지로 모든
파일의 내용을 한 문자씩 읽기 때문에 일어나는 일이었다.
성능을 올리기 위해 시도한 일
세번째로 성능에 영향을 미치는 부분은 바로
readaline_and_out 이라는 함수를 콜하는 오버헤드 였다.
이 부분을 해결하기 위해서 함수 콜이 아닌 메인 함수 안
에서 while 문으로 merge 가 진행되도록 하게 구현하였
다.
성능을 올리기 위해 시도한 결과
merge 프로그램의 성능을 올리기 위해 fputc 함수와 fgetc 함수, 그리고 readaline_and_out 함수를 수
정한 결과 오버헤드 중에 read와 write에 대한 부분은 줄어들고 reverseString(), 즉 문장을 거꾸로 뒤
집는 함수의 오버헤드가 가장 큰 것으로 나타났다.
시도했으나 성능 향상에 실패한 것들
fread() 하는 버퍼의 사이즈가 크면 클수록 성능이 빨라질 것으로 판단하여 BUFSIZE 를
2048로 변경하여 프로그램을 실행시켰으나 stdio.h에 정의 된 BUFSIZ 의 크기 보다 크
게 변화되는 것이 없는 것을 확인하였고 버퍼 사이즈를 크게한다고 하여 성능이 무조
건 빨라지는 것은 아니라는 것을 알 수 있었다.
시도했으나 성능 향상에 실패한 것들
fprintf() 함수 대신 fputs() 함수를 사용하여 보았으나 output 파일에 줄바꿈 문자가 들어가지
않아 임의로 줄바꿈 문자를 넣기 위해 fputs()를 한번 더 사용하였고 이로 인해 오버헤드가 더
커져 기존의 프로그램보다 성능이 저하된 것을 확인 할 수 있었다.

More Related Content

What's hot

Filemerge성능분석
Filemerge성능분석Filemerge성능분석
Filemerge성능분석
선 유
 
Merge revesed
Merge revesedMerge revesed
Merge revesed
Heesang Jin
 
고급 시스템 프로그래밍
고급 시스템 프로그래밍고급 시스템 프로그래밍
고급 시스템 프로그래밍
junghee yu
 
H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요KTH
 
국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1
dldmsmchddldmschd
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
kimkiweon
 
Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client문익 장
 
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
현웅 김
 
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
Dong Kyu Lee
 
[ES6] 5. Destructuring
[ES6] 5. Destructuring[ES6] 5. Destructuring
[ES6] 5. Destructuring
Han JaeYeab
 
파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리
SeongHyun Ahn
 
텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)
텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)
텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)
limdongjo 임동조
 
네트워크 공격 실습 보고서
네트워크 공격 실습 보고서네트워크 공격 실습 보고서
네트워크 공격 실습 보고서
Dong-Jin Park
 
모바일 해커톤 사전교육 3일차
모바일 해커톤 사전교육 3일차모바일 해커톤 사전교육 3일차
모바일 해커톤 사전교육 3일차
Han Sung Kim
 
[Gpg2권 박민근] 1.13 스택 와인딩
[Gpg2권 박민근] 1.13 스택 와인딩[Gpg2권 박민근] 1.13 스택 와인딩
[Gpg2권 박민근] 1.13 스택 와인딩MinGeun Park
 
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
Minchul Jung
 
A tour of go
A tour of goA tour of go
A tour of go
Mungyu Choi
 

What's hot (19)

Filemerge성능분석
Filemerge성능분석Filemerge성능분석
Filemerge성능분석
 
Merge revesed
Merge revesedMerge revesed
Merge revesed
 
고급 시스템 프로그래밍
고급 시스템 프로그래밍고급 시스템 프로그래밍
고급 시스템 프로그래밍
 
H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요H3 2011 파이썬으로 클라우드 하고 싶어요
H3 2011 파이썬으로 클라우드 하고 싶어요
 
국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1국민대학교 고급 시스템 프로젝트 #1
국민대학교 고급 시스템 프로젝트 #1
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
Tcp server / client
Tcp server / clientTcp server / client
Tcp server / client
 
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
Part14 %ed%8 c%8c%ec%9d%bc%ec%9e%85%ec%b6%9c%eb%a0%a5
 
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
 
[ES6] 5. Destructuring
[ES6] 5. Destructuring[ES6] 5. Destructuring
[ES6] 5. Destructuring
 
파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리 파이썬 파일처리 및 문자열 처리
파이썬 파일처리 및 문자열 처리
 
반복문
반복문반복문
반복문
 
텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)
텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)
텍스트 마이닝 기본 정리(말뭉치, 텍스트 전처리 절차, TF, IDF 기타)
 
네트워크 공격 실습 보고서
네트워크 공격 실습 보고서네트워크 공격 실습 보고서
네트워크 공격 실습 보고서
 
skku cp2 w4
skku cp2 w4skku cp2 w4
skku cp2 w4
 
모바일 해커톤 사전교육 3일차
모바일 해커톤 사전교육 3일차모바일 해커톤 사전교육 3일차
모바일 해커톤 사전교육 3일차
 
[Gpg2권 박민근] 1.13 스택 와인딩
[Gpg2권 박민근] 1.13 스택 와인딩[Gpg2권 박민근] 1.13 스택 와인딩
[Gpg2권 박민근] 1.13 스택 와인딩
 
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
 
A tour of go
A tour of goA tour of go
A tour of go
 

Similar to File merging Report

Merge.c 성능개선보고서
Merge.c 성능개선보고서Merge.c 성능개선보고서
Merge.c 성능개선보고서
Jung Eun Kim
 
Optimizing merge program
Optimizing merge program Optimizing merge program
Optimizing merge program
CHANG-HYUN LEE
 
Merge reversed2
Merge reversed2Merge reversed2
Merge reversed2
Heesang Jin
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법Daniel Kim
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
CHANG-HYUN LEE
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_ozlael ozlael
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
CHANG-HYUN LEE
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
CHANG-HYUN LEE
 
Windosw via c 스터디17장
Windosw via c 스터디17장Windosw via c 스터디17장
Windosw via c 스터디17장
HolyTak
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
jaypi Ko
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
jaypi Ko
 

Similar to File merging Report (11)

Merge.c 성능개선보고서
Merge.c 성능개선보고서Merge.c 성능개선보고서
Merge.c 성능개선보고서
 
Optimizing merge program
Optimizing merge program Optimizing merge program
Optimizing merge program
 
Merge reversed2
Merge reversed2Merge reversed2
Merge reversed2
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_Optimizing the graphics_pipeline_
Optimizing the graphics_pipeline_
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
Windosw via c 스터디17장
Windosw via c 스터디17장Windosw via c 스터디17장
Windosw via c 스터디17장
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 
C언어 들어가기
C언어 들어가기C언어 들어가기
C언어 들어가기
 

File merging Report

  • 2. merge.c 와 비교 기본 제공 된 merge.c 로 파일을 merge 했을 경우 평균 111.8 초가 소요된 것을 확인
  • 3. merge.c 와 비교 adv-merge.c 로 파일을 merge 하였을 때 평균 37초가 소요됨을 확인하였고 이는 실제 성능에서 3배 증가된 수치이다. 하지만 기본 merge.c 에는 string을 reverse 하는 함수가 빠져있으므로 이에 대한 함 수가 추가 된다면 실제로는 더 큰 성능 상향의 효과가 있었을 것으로 예상한다.
  • 4. 성능을 올리기 위해 시도한 일 성능에서 가장 많은 부분을 차지하는 함수는 fputc 함수 임을 확인하였다. while 문으로 전체 문자를 한번 씩 다 파일에 쓰기 때문에 fputc() 함수가 호출 되는 경우가 많을 수 밖에 없다고 판단하였고 이를 해결하기 위하여 fprintf() 함수를 이용하여 한 문장 씩 파일에 write 해야겠다고 판단하였고 이를 실제 코드로 구현하였다.
  • 5. 성능을 올리기 위해 시도한 일 이를 해결하기 위하여 fread() 함수를 이용하기로 하였다. 이를 이용하여 지정한 버퍼 크기만큼 read 한다면 만약 버퍼 사이즈 가 1024 라면 fgetc() 에 비하여 read를 1024 분의 1 만큼으로 줄일 수 있을 것이라 판단하였다. 여기서 중요한 부분은 이 fread() 함수로는 한 문장씩 읽어오는 것이 아니므로 읽어온 버퍼에서 문장을 구분하는 알고리즘이 필요했다. 그래서 strtok_r() 함수를 이용하여 ‘n’ 의 토큰으로 문장을 구분하였다. 또 중요한 부분은 마지막 문장이 미완성 될 경우가 있는데 이 럴 경우에는 다음 버퍼에서 읽은 첫 문장을 strcat() 함수를 이 용하여 붙여주도록 하였다. 위에서 확인 했듯이 둘째로 많이 성능을 좌우 하는 부분은 바 로 fgetc() 함수였다. 이 또한 fputc() 함수와 마찬가지로 모든 파일의 내용을 한 문자씩 읽기 때문에 일어나는 일이었다.
  • 6. 성능을 올리기 위해 시도한 일 세번째로 성능에 영향을 미치는 부분은 바로 readaline_and_out 이라는 함수를 콜하는 오버헤드 였다. 이 부분을 해결하기 위해서 함수 콜이 아닌 메인 함수 안 에서 while 문으로 merge 가 진행되도록 하게 구현하였 다.
  • 7. 성능을 올리기 위해 시도한 결과 merge 프로그램의 성능을 올리기 위해 fputc 함수와 fgetc 함수, 그리고 readaline_and_out 함수를 수 정한 결과 오버헤드 중에 read와 write에 대한 부분은 줄어들고 reverseString(), 즉 문장을 거꾸로 뒤 집는 함수의 오버헤드가 가장 큰 것으로 나타났다.
  • 8. 시도했으나 성능 향상에 실패한 것들 fread() 하는 버퍼의 사이즈가 크면 클수록 성능이 빨라질 것으로 판단하여 BUFSIZE 를 2048로 변경하여 프로그램을 실행시켰으나 stdio.h에 정의 된 BUFSIZ 의 크기 보다 크 게 변화되는 것이 없는 것을 확인하였고 버퍼 사이즈를 크게한다고 하여 성능이 무조 건 빨라지는 것은 아니라는 것을 알 수 있었다.
  • 9. 시도했으나 성능 향상에 실패한 것들 fprintf() 함수 대신 fputs() 함수를 사용하여 보았으나 output 파일에 줄바꿈 문자가 들어가지 않아 임의로 줄바꿈 문자를 넣기 위해 fputs()를 한번 더 사용하였고 이로 인해 오버헤드가 더 커져 기존의 프로그램보다 성능이 저하된 것을 확인 할 수 있었다.