SlideShare a Scribd company logo
1 of 13
Reverse & Merge
국민대학교 컴퓨터공학부
20113336 채한울
Index
1. Program 설명
2. 기존 코드 및 개선된 코드 성능 측정 결과
3. 개선 방법
4. 새로 개선된 사항
Merge.c
2개의 file을 읽어 line by line으로 reverse 한 후
1 line씩 교차하여 1개의 file로 merge하는 프로그램
기존 코드 성능 측정 결과
1차 : 75.49s
2차 : 75.73s
3차 : 78.08s
4차 : 68.52s
5차 : 77.30s
Average : 75.02s
개선된 코드 성능 측정 결과
1차 : 7.16s
2차 : 10.65s
3차 : 9.36s
4차 : 9.83s
5차 : 9.55s
Average : 9.31s
성능 측정 결과 비교
기존 코드보다 약 8.06배 빨라졌다.
성능 = Improved / Original
= 0.12
성능 개선 방법 1
기존 한 글자씩 읽던
file I/O 함수들(fopen, fgetc, fputc)을
open, read, write 함수로 바꾸고
input/output file size의 배열을 할당하고
1번씩의 system call만을 사용하여 file을
read/write 한다.
성능 개선 방법 2
읽어온 file을 line by line으로
reverse와 동시에 merge 하여 배열에 저장한다.
성능 개선 방법 3
병렬화를 쉽게 해주는 OpenMP library를 사용한다.
Line by line으로 reverse & merge를 수행할 때
앞, 뒤 구간을 나눠 multi-threading 한다.
새로 개선된 사항
1. File I/O, Memory allocation 시의 exception handling
2. 이해하기 어려운 goto문 제거
3. Function, section에 맞는 주석 추가
4. 전역변수 제거
5. 일관성 있는 코드 스타일로 수정
6. 2개의 Input file의 크기가 달라도 가능하도록 수정
File I/O, Memory allocation 시의 exception handling
이해하기 어려운 goto문 제거
감사합니다

More Related Content

Viewers also liked

Vitrine 12 .2015 Tupperware Essencial
Vitrine 12 .2015 Tupperware EssencialVitrine 12 .2015 Tupperware Essencial
Vitrine 12 .2015 Tupperware EssencialTUPPERWARE ESSENCIAL
 
Escultura del Renacimiento
Escultura del RenacimientoEscultura del Renacimiento
Escultura del RenacimientoMencar Car
 
TEMA 9. EL QUATTROCENTO. ARQUITECTURA Y PINTURA
TEMA 9. EL QUATTROCENTO. ARQUITECTURA Y PINTURATEMA 9. EL QUATTROCENTO. ARQUITECTURA Y PINTURA
TEMA 9. EL QUATTROCENTO. ARQUITECTURA Y PINTURA@evasociales
 
Vit 09 2016 Tupperware Tulipas
Vit 09 2016 Tupperware TulipasVit 09 2016 Tupperware Tulipas
Vit 09 2016 Tupperware TulipasCeluza Ferreira
 
Tema 3. los reinos cristianos de la reconquista
Tema 3. los reinos cristianos de la reconquistaTema 3. los reinos cristianos de la reconquista
Tema 3. los reinos cristianos de la reconquistacopybird
 

Viewers also liked (9)

VP 11/2015 Tupperware Essencial
VP 11/2015 Tupperware EssencialVP 11/2015 Tupperware Essencial
VP 11/2015 Tupperware Essencial
 
Vitrine 12 .2015 Tupperware Essencial
Vitrine 12 .2015 Tupperware EssencialVitrine 12 .2015 Tupperware Essencial
Vitrine 12 .2015 Tupperware Essencial
 
Vitrine 092016 TWESSENCIAL
Vitrine 092016 TWESSENCIALVitrine 092016 TWESSENCIAL
Vitrine 092016 TWESSENCIAL
 
VP 06.2016 Tupperware Essencial
VP 06.2016 Tupperware EssencialVP 06.2016 Tupperware Essencial
VP 06.2016 Tupperware Essencial
 
Escultura del Renacimiento
Escultura del RenacimientoEscultura del Renacimiento
Escultura del Renacimiento
 
TEMA 9. EL QUATTROCENTO. ARQUITECTURA Y PINTURA
TEMA 9. EL QUATTROCENTO. ARQUITECTURA Y PINTURATEMA 9. EL QUATTROCENTO. ARQUITECTURA Y PINTURA
TEMA 9. EL QUATTROCENTO. ARQUITECTURA Y PINTURA
 
Al-andalus
Al-andalusAl-andalus
Al-andalus
 
Vit 09 2016 Tupperware Tulipas
Vit 09 2016 Tupperware TulipasVit 09 2016 Tupperware Tulipas
Vit 09 2016 Tupperware Tulipas
 
Tema 3. los reinos cristianos de la reconquista
Tema 3. los reinos cristianos de la reconquistaTema 3. los reinos cristianos de la reconquista
Tema 3. los reinos cristianos de la reconquista
 

Similar to Merge version 2

Optimizing merge program
Optimizing merge program Optimizing merge program
Optimizing merge program CHANG-HYUN LEE
 
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작DACON AI 데이콘
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍CHANG-HYUN LEE
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍CHANG-HYUN LEE
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍CHANG-HYUN LEE
 
Adv sys prog_20123186_report1
Adv sys prog_20123186_report1Adv sys prog_20123186_report1
Adv sys prog_20123186_report1준석 김
 
속도의 필요성
속도의 필요성속도의 필요성
속도의 필요성민욱 이
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
01.표준프레임워크개요
01.표준프레임워크개요01.표준프레임워크개요
01.표준프레임워크개요Hankyo
 
Hw1 2 20113288_소현수
Hw1 2 20113288_소현수Hw1 2 20113288_소현수
Hw1 2 20113288_소현수hyunsoo so
 
한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기
한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기
한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기Hangil Kim
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9ukjinkwoun
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorialBingu Shim
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Daum DNA
 
테스트개선지원 사례 - 웹어플리케이션대상
테스트개선지원 사례 - 웹어플리케이션대상테스트개선지원 사례 - 웹어플리케이션대상
테스트개선지원 사례 - 웹어플리케이션대상SangIn Choung
 
React-Query가필요한가요.pptx
React-Query가필요한가요.pptxReact-Query가필요한가요.pptx
React-Query가필요한가요.pptxssuser89c688
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기Jaeseung Ha
 
클린코드 9, 10장
클린코드 9, 10장클린코드 9, 10장
클린코드 9, 10장진화 손
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법Daniel Kim
 

Similar to Merge version 2 (20)

Optimizing merge program
Optimizing merge program Optimizing merge program
Optimizing merge program
 
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
위성관측 데이터 활용 강수량 산출 AI 경진대회 1위 수상작
 
The Introduction to Refactoring
The Introduction to Refactoring The Introduction to Refactoring
The Introduction to Refactoring
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
Adv sys prog_20123186_report1
Adv sys prog_20123186_report1Adv sys prog_20123186_report1
Adv sys prog_20123186_report1
 
속도의 필요성
속도의 필요성속도의 필요성
속도의 필요성
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
01.표준프레임워크개요
01.표준프레임워크개요01.표준프레임워크개요
01.표준프레임워크개요
 
Hw1 2 20113288_소현수
Hw1 2 20113288_소현수Hw1 2 20113288_소현수
Hw1 2 20113288_소현수
 
한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기
한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기
한국어 문서 추출요약 AI 경진대회- 좌충우돌 후기
 
Clean code chapter9
Clean code chapter9Clean code chapter9
Clean code chapter9
 
Refactoring tutorial
Refactoring tutorialRefactoring tutorial
Refactoring tutorial
 
Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기Devon 2011-b-5 효과적인 레거시 코드 다루기
Devon 2011-b-5 효과적인 레거시 코드 다루기
 
테스트개선지원 사례 - 웹어플리케이션대상
테스트개선지원 사례 - 웹어플리케이션대상테스트개선지원 사례 - 웹어플리케이션대상
테스트개선지원 사례 - 웹어플리케이션대상
 
React-Query가필요한가요.pptx
React-Query가필요한가요.pptxReact-Query가필요한가요.pptx
React-Query가필요한가요.pptx
 
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
[NDC2015] 언제 어디서나 프로파일링 가능한 코드네임 JYP 작성기 - 라이브 게임 배포 후에도 프로파일링 하기
 
클린코드 9, 10장
클린코드 9, 10장클린코드 9, 10장
클린코드 9, 10장
 
어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법어플리케이션 성능 최적화 기법
어플리케이션 성능 최적화 기법
 

Merge version 2

  • 1. Reverse & Merge 국민대학교 컴퓨터공학부 20113336 채한울
  • 2. Index 1. Program 설명 2. 기존 코드 및 개선된 코드 성능 측정 결과 3. 개선 방법 4. 새로 개선된 사항
  • 3. Merge.c 2개의 file을 읽어 line by line으로 reverse 한 후 1 line씩 교차하여 1개의 file로 merge하는 프로그램
  • 4. 기존 코드 성능 측정 결과 1차 : 75.49s 2차 : 75.73s 3차 : 78.08s 4차 : 68.52s 5차 : 77.30s Average : 75.02s
  • 5. 개선된 코드 성능 측정 결과 1차 : 7.16s 2차 : 10.65s 3차 : 9.36s 4차 : 9.83s 5차 : 9.55s Average : 9.31s
  • 6. 성능 측정 결과 비교 기존 코드보다 약 8.06배 빨라졌다. 성능 = Improved / Original = 0.12
  • 7. 성능 개선 방법 1 기존 한 글자씩 읽던 file I/O 함수들(fopen, fgetc, fputc)을 open, read, write 함수로 바꾸고 input/output file size의 배열을 할당하고 1번씩의 system call만을 사용하여 file을 read/write 한다.
  • 8. 성능 개선 방법 2 읽어온 file을 line by line으로 reverse와 동시에 merge 하여 배열에 저장한다.
  • 9. 성능 개선 방법 3 병렬화를 쉽게 해주는 OpenMP library를 사용한다. Line by line으로 reverse & merge를 수행할 때 앞, 뒤 구간을 나눠 multi-threading 한다.
  • 10. 새로 개선된 사항 1. File I/O, Memory allocation 시의 exception handling 2. 이해하기 어려운 goto문 제거 3. Function, section에 맞는 주석 추가 4. 전역변수 제거 5. 일관성 있는 코드 스타일로 수정 6. 2개의 Input file의 크기가 달라도 가능하도록 수정
  • 11. File I/O, Memory allocation 시의 exception handling