SlideShare uma empresa Scribd logo
1 de 10
Baixar para ler offline
고급시스템프로그래밍
Optimizing merge program
컴퓨터공학과
20113313 이창현
Merge.c 코드는..
1. 두개의 파일을 하나로 합치는 프로그램이다.
2. 각 파일을 한줄씩 읽고 번갈아가며 새로운 파일에 write한다.
3. 입출력에 파일스트림을 이용한다.
최적화 1) 파일 입출력함수 변경
open함수는 시스템에서 제공해주는 버퍼를 이용하며, fopen함수는 C 표준 라이브
러리에서 할당해주는 버퍼를 이용한다.
fopen()함수는 이중버퍼를 사용하며 파일에서 한번 데이터를 읽어온 후 다음번에
얼마정도의 데이터를 가져올지 모르기 때문에 버퍼에 미리 얼마간의 데이터를 적
재함으로서 system call횟수를 줄인다.
하지만 merge.c와 같이 사용자가 파일에서 어느정도 크기의 데이터를 가져올지 알
고있을 때, open함수로 한번의 system call에서 필요한 데이터를 모두 가져오는것이
파일read를 여러번 실행하는것보다 system call 횟수를 줄이기에 효율적일 것이다.
최적화 1) 파일 입출력함수 변경
파일 입출력함수를 바꾼 모습.
read()함수로 100메가 크기의 파일을
메인 메모리로 한번에 읽어왔다.
(merge_read_write.c)
합쳐진 파일을 write할때 또한 200메가
크기를 한번에 write해주었다.
>> 결과: 실행시간이 절반가량 줄어듬
최적화 2) 병렬프로그래밍
오른쪽 사진은 라즈베리파이 내의 CPU 갯
수가 4개임을 알려준다.
이와 같은 다중코어 시스템에서는 여러개
의 스레드를 동시에 사용하면서 실행시간
을 단축시킬 수 있다.
> less /proc/cpuinfo
최적화 2) 병렬프로그래밍
본 코드에서는 병렬프로그래밍을 더 쉽게 적용하기위해 오픈소스 라이브러리중
하나인 OpenMP를 이용했다.
그림1은 두 개의 파일을 읽는 행동을 동시에 하도록 만든 task parallel코드
그림2는 reverse함수 for-loop의각 루프가 서로 dependency가 없으므로 적용시킨
data parallel코드(merge_openmp.c)
그림 1. 파일read 병렬화 그림 2. reverse함수 병렬화
최적화 2) 병렬프로그래밍
하지만 총 실행시간은 오히려 늘어났다! (약 55초->80초)
이유: reverse함수는수없이 많이 실행되는 함수.
실행시킬때마다 각 스레드에 할당시키는것 또한 context switch에 따른
overhead가 발생하며 overhead로 발생하는 낭비가 스레딩으로 줄어든
시간보다 컸음을 의미한다.
결론: 병렬프로그래밍을 적용할 다른 방법을 찾아야 한다.
최적화 3) reverse 분할
지금까지는 파일에서 입력받은 두 버퍼에서 한줄씩 읽고 reverse후 바로 출력버퍼에 써
주었다.
원본 버퍼를 reverse해주는 부분을 함수로 따로 떼어낸 후 스레드를 할당해주면 어떨까
=> 결과: 오히려 시간이 늘어났다.(약 55초 => 70초)
reverse함수 병렬화
<merge_divide_reverse.c>
최적화 4) write 분할
Race condition때문에두 입력버퍼에서 한줄씩 읽어 출력버퍼에 쓰는 행동을
동시에 할 수는 없다.
출력버퍼에 쓰는 구간을 앞부분과 뒷부분으로 나눠 각각 스레드를 할당해주면 실
행시간을 좀 더 줄일 수 있을것이다.
=> 결과: 실행시간이 약간 줄어들었다. (약 55초 -> 45초)
=> 여기에서는 스레드 2개까지밖에 활용하지 못했지만 스레드 4개를 모두 활용
한다면 더 좋은결과가 나올 것이다.
측정결과
단위: sec
System call이 최소화되도록 입출력함수를 바꿔준 것과, 출력버퍼에 쓰는 구간을
나눠 각각 스레드를 할당해준 것이 실행시간을 줄이는데 효과가 있었다.

Mais conteúdo relacionado

Mais procurados

R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
Asynchronous 101 (2)
Asynchronous 101 (2)Asynchronous 101 (2)
Asynchronous 101 (2)MinChul Lee
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)MinChul Lee
 
Mongo DB 활용가이드 Tip 35 ~ 41
Mongo DB 활용가이드 Tip 35 ~ 41Mongo DB 활용가이드 Tip 35 ~ 41
Mongo DB 활용가이드 Tip 35 ~ 41cosmosyc
 
Filemerge성능분석2차
Filemerge성능분석2차Filemerge성능분석2차
Filemerge성능분석2차선 유
 
19.컴퓨터 네트워크 program homework
19.컴퓨터 네트워크 program homework19.컴퓨터 네트워크 program homework
19.컴퓨터 네트워크 program homework호상 장
 
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
 
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기Minchul Jung
 
7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신Hyunsoo Jung
 
파이썬3 17장 파이썬과 인터넷
파이썬3 17장 파이썬과 인터넷파이썬3 17장 파이썬과 인터넷
파이썬3 17장 파이썬과 인터넷Jihoon Kong
 
TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수Yeon Soo Kim
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Gitaek kwon
 
[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?용민 박
 
DNS Express
DNS ExpressDNS Express
DNS Expressitian-f5
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVAcooddy
 
Nodejs_chapter9
Nodejs_chapter9Nodejs_chapter9
Nodejs_chapter9SH Park
 

Mais procurados (20)

R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
NLog 소개
NLog 소개NLog 소개
NLog 소개
 
Asynchronous 101 (2)
Asynchronous 101 (2)Asynchronous 101 (2)
Asynchronous 101 (2)
 
Asynchronous 101 - (1)
Asynchronous 101 - (1)Asynchronous 101 - (1)
Asynchronous 101 - (1)
 
Gfs Kyu
Gfs KyuGfs Kyu
Gfs Kyu
 
Mongo DB 활용가이드 Tip 35 ~ 41
Mongo DB 활용가이드 Tip 35 ~ 41Mongo DB 활용가이드 Tip 35 ~ 41
Mongo DB 활용가이드 Tip 35 ~ 41
 
Filemerge성능분석2차
Filemerge성능분석2차Filemerge성능분석2차
Filemerge성능분석2차
 
19.컴퓨터 네트워크 program homework
19.컴퓨터 네트워크 program homework19.컴퓨터 네트워크 program homework
19.컴퓨터 네트워크 program homework
 
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 이근원
 
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
 
9
99
9
 
7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신7가지 동시성 모델 - 6장. 순차 프로세스 통신
7가지 동시성 모델 - 6장. 순차 프로세스 통신
 
Nodejs_chapter3
Nodejs_chapter3Nodejs_chapter3
Nodejs_chapter3
 
파이썬3 17장 파이썬과 인터넷
파이썬3 17장 파이썬과 인터넷파이썬3 17장 파이썬과 인터넷
파이썬3 17장 파이썬과 인터넷
 
TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수TCP/IP 발표자료 - 김연수
TCP/IP 발표자료 - 김연수
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교
 
[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?[네트워크] TCP, 믿을 수 있나요!?
[네트워크] TCP, 믿을 수 있나요!?
 
DNS Express
DNS ExpressDNS Express
DNS Express
 
TCP/IP Protocol - JAVA
TCP/IP Protocol - JAVATCP/IP Protocol - JAVA
TCP/IP Protocol - JAVA
 
Nodejs_chapter9
Nodejs_chapter9Nodejs_chapter9
Nodejs_chapter9
 

Destaque

Jialifu high pressure laminate products and cases
Jialifu high pressure laminate products and casesJialifu high pressure laminate products and cases
Jialifu high pressure laminate products and casesGrace Xiao
 
Improving Medical Specialist Service in District Hospitals: Increasing the Nu...
Improving Medical Specialist Service in District Hospitals: Increasing the Nu...Improving Medical Specialist Service in District Hospitals: Increasing the Nu...
Improving Medical Specialist Service in District Hospitals: Increasing the Nu...ferry efendi
 
Palazzo Tradeline Presentation2
Palazzo Tradeline Presentation2Palazzo Tradeline Presentation2
Palazzo Tradeline Presentation2Oleh Turczak
 
Tounge twisters vivi
Tounge twisters viviTounge twisters vivi
Tounge twisters viviViviana Henao
 
безпечний інтернет для дітей что такое компьютер
безпечний інтернет для дітей что такое компьютербезпечний інтернет для дітей что такое компьютер
безпечний інтернет для дітей что такое компьютерНадежда Надежда
 
Cross platform mobile development using PhoneGap
Cross platform mobile development using PhoneGapCross platform mobile development using PhoneGap
Cross platform mobile development using PhoneGapKrishantha Jayathilake
 

Destaque (8)

Jialifu high pressure laminate products and cases
Jialifu high pressure laminate products and casesJialifu high pressure laminate products and cases
Jialifu high pressure laminate products and cases
 
Yambo pres 2
Yambo pres 2Yambo pres 2
Yambo pres 2
 
Improving Medical Specialist Service in District Hospitals: Increasing the Nu...
Improving Medical Specialist Service in District Hospitals: Increasing the Nu...Improving Medical Specialist Service in District Hospitals: Increasing the Nu...
Improving Medical Specialist Service in District Hospitals: Increasing the Nu...
 
Palazzo Tradeline Presentation2
Palazzo Tradeline Presentation2Palazzo Tradeline Presentation2
Palazzo Tradeline Presentation2
 
spring bed odyssey
spring bed odysseyspring bed odyssey
spring bed odyssey
 
Tounge twisters vivi
Tounge twisters viviTounge twisters vivi
Tounge twisters vivi
 
безпечний інтернет для дітей что такое компьютер
безпечний інтернет для дітей что такое компьютербезпечний інтернет для дітей что такое компьютер
безпечний інтернет для дітей что такое компьютер
 
Cross platform mobile development using PhoneGap
Cross platform mobile development using PhoneGapCross platform mobile development using PhoneGap
Cross platform mobile development using PhoneGap
 

Semelhante a Optimizing merge program

Adv sys prog_20123186_report1
Adv sys prog_20123186_report1Adv sys prog_20123186_report1
Adv sys prog_20123186_report1준석 김
 
Merge version 2
Merge version 2Merge version 2
Merge version 2한울 채
 
File merging Report
File merging ReportFile merging Report
File merging ReportKwonhong Min
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel ProgrammingUNIST
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍kimkiweon
 
Rankwave moment™ desc3
Rankwave moment™ desc3Rankwave moment™ desc3
Rankwave moment™ desc3Sungwha Shim
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTOiFunFactory Inc.
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법Daniel Kim
 
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...SANG WON PARK
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)HyoungEun Kim
 
Make fast file merge program using c (stage 2)
Make fast file merge program using c (stage 2)Make fast file merge program using c (stage 2)
Make fast file merge program using c (stage 2)Dong Kyu Lee
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfHo Jeong Im
 
Linux programming study
Linux programming studyLinux programming study
Linux programming studyYunseok Lee
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
React-Query가필요한가요.pptx
React-Query가필요한가요.pptxReact-Query가필요한가요.pptx
React-Query가필요한가요.pptxssuser89c688
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)Ubuntu Korea Community
 

Semelhante a Optimizing merge program (20)

Merge reversed2
Merge reversed2Merge reversed2
Merge reversed2
 
Adv sys prog_20123186_report1
Adv sys prog_20123186_report1Adv sys prog_20123186_report1
Adv sys prog_20123186_report1
 
Merge version 2
Merge version 2Merge version 2
Merge version 2
 
File merging Report
File merging ReportFile merging Report
File merging Report
 
Introduction to Parallel Programming
Introduction to Parallel ProgrammingIntroduction to Parallel Programming
Introduction to Parallel Programming
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
Rankwave moment™ desc3
Rankwave moment™ desc3Rankwave moment™ desc3
Rankwave moment™ desc3
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법
 
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...Apache kafka performance(throughput) - without data loss and guaranteeing dat...
Apache kafka performance(throughput) - without data loss and guaranteeing dat...
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)
 
Make fast file merge program using c (stage 2)
Make fast file merge program using c (stage 2)Make fast file merge program using c (stage 2)
Make fast file merge program using c (stage 2)
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdfOS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
OS Process, Thread, CPU Scheduling에 대해 알아봅시다.pdf
 
Linux programming study
Linux programming studyLinux programming study
Linux programming study
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
Chap4_2
Chap4_2Chap4_2
Chap4_2
 
React-Query가필요한가요.pptx
React-Query가필요한가요.pptxReact-Query가필요한가요.pptx
React-Query가필요한가요.pptx
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
 

Optimizing merge program

  • 2. Merge.c 코드는.. 1. 두개의 파일을 하나로 합치는 프로그램이다. 2. 각 파일을 한줄씩 읽고 번갈아가며 새로운 파일에 write한다. 3. 입출력에 파일스트림을 이용한다.
  • 3. 최적화 1) 파일 입출력함수 변경 open함수는 시스템에서 제공해주는 버퍼를 이용하며, fopen함수는 C 표준 라이브 러리에서 할당해주는 버퍼를 이용한다. fopen()함수는 이중버퍼를 사용하며 파일에서 한번 데이터를 읽어온 후 다음번에 얼마정도의 데이터를 가져올지 모르기 때문에 버퍼에 미리 얼마간의 데이터를 적 재함으로서 system call횟수를 줄인다. 하지만 merge.c와 같이 사용자가 파일에서 어느정도 크기의 데이터를 가져올지 알 고있을 때, open함수로 한번의 system call에서 필요한 데이터를 모두 가져오는것이 파일read를 여러번 실행하는것보다 system call 횟수를 줄이기에 효율적일 것이다.
  • 4. 최적화 1) 파일 입출력함수 변경 파일 입출력함수를 바꾼 모습. read()함수로 100메가 크기의 파일을 메인 메모리로 한번에 읽어왔다. (merge_read_write.c) 합쳐진 파일을 write할때 또한 200메가 크기를 한번에 write해주었다. >> 결과: 실행시간이 절반가량 줄어듬
  • 5. 최적화 2) 병렬프로그래밍 오른쪽 사진은 라즈베리파이 내의 CPU 갯 수가 4개임을 알려준다. 이와 같은 다중코어 시스템에서는 여러개 의 스레드를 동시에 사용하면서 실행시간 을 단축시킬 수 있다. > less /proc/cpuinfo
  • 6. 최적화 2) 병렬프로그래밍 본 코드에서는 병렬프로그래밍을 더 쉽게 적용하기위해 오픈소스 라이브러리중 하나인 OpenMP를 이용했다. 그림1은 두 개의 파일을 읽는 행동을 동시에 하도록 만든 task parallel코드 그림2는 reverse함수 for-loop의각 루프가 서로 dependency가 없으므로 적용시킨 data parallel코드(merge_openmp.c) 그림 1. 파일read 병렬화 그림 2. reverse함수 병렬화
  • 7. 최적화 2) 병렬프로그래밍 하지만 총 실행시간은 오히려 늘어났다! (약 55초->80초) 이유: reverse함수는수없이 많이 실행되는 함수. 실행시킬때마다 각 스레드에 할당시키는것 또한 context switch에 따른 overhead가 발생하며 overhead로 발생하는 낭비가 스레딩으로 줄어든 시간보다 컸음을 의미한다. 결론: 병렬프로그래밍을 적용할 다른 방법을 찾아야 한다.
  • 8. 최적화 3) reverse 분할 지금까지는 파일에서 입력받은 두 버퍼에서 한줄씩 읽고 reverse후 바로 출력버퍼에 써 주었다. 원본 버퍼를 reverse해주는 부분을 함수로 따로 떼어낸 후 스레드를 할당해주면 어떨까 => 결과: 오히려 시간이 늘어났다.(약 55초 => 70초) reverse함수 병렬화 <merge_divide_reverse.c>
  • 9. 최적화 4) write 분할 Race condition때문에두 입력버퍼에서 한줄씩 읽어 출력버퍼에 쓰는 행동을 동시에 할 수는 없다. 출력버퍼에 쓰는 구간을 앞부분과 뒷부분으로 나눠 각각 스레드를 할당해주면 실 행시간을 좀 더 줄일 수 있을것이다. => 결과: 실행시간이 약간 줄어들었다. (약 55초 -> 45초) => 여기에서는 스레드 2개까지밖에 활용하지 못했지만 스레드 4개를 모두 활용 한다면 더 좋은결과가 나올 것이다.
  • 10. 측정결과 단위: sec System call이 최소화되도록 입출력함수를 바꿔준 것과, 출력버퍼에 쓰는 구간을 나눠 각각 스레드를 할당해준 것이 실행시간을 줄이는데 효과가 있었다.