SlideShare a Scribd company logo
merge.c
성능분석보고서
20142872 전자공학부 김정은
Stage1
Stage1 코드
 Stack을 이용한 프로그램. 파일을 한 글자씩 Stack에 Push
해서 한 줄을 읽어들이고 다시 Pop해서 한 글자씩 출력해 결과
적으로 line-by-line으로 2개의 파일을 reverse-merge 하는
프로그램.
문자열을 뒤집는 함수를 만들지 않고 바로 Stack을 통해 출력
한다는 점이 간편했었음.
Stage1 코드 소요시간
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
실행횟수
버전
시간단위 : 초
1 2 3 4 5 평균
Stage1 코드 설명
 기본적인 Stack의 크기는 우선 100으로
해놓고 후에 메모리 공간이 더 필요하게
될 경우를 대비해 realloced 변수 선언
해 놓음
 readaline 함수는 한 line을 한 글자씩
Stack에 Push하는 함수
 reverse_out 함수는 Stack의 글자를
한 글자씩 출력해 역순으로 출력되게끔
하는 함수
 IsEmpty 함수는 Stack이 비었는지 확
인해주는 함수, Push 함수는 Stack에
값 하나를 밀어넣는 함수, Pop 함수는
Stack에서 값 하나를 꺼내는 함수.
 한 글자씩 Stack에 Push하고, 만
약 Stack의 크기가 한 line의 크기
보다 작을 경우 realloced 변수 값
을 하나 증가시킨 다음
STACK_SIZE * realloced 크기
만큼 메모리를 다시 할당한다.
 Stack에 있던 글자들
을 !IsEmpty가 아닌 동안 Pop
하게 되면 결과적으로 뒤집어진
한 line을 fout에 출력하게 된
다. 한 줄을 readaline 함수로
읽어들이고 바로
reverse_out 함수로 역순으
로 출력하는 과정을 file1,
file2 돌아가면서 반복한다.
Stage2
Stage1과 달라진 점은?
fgetc와 fputs를 쓰는 것이 overhead를 상당히 많이 차지했다.
그 부분이 비효율적이라 판단이 되어서 Push와 Pop 등의 함수
를 필요로 하는 Stack을 사용하지 않기로 함.
따라서 100MB 파일을 fread 함수로 한 번에 읽어오는 방식을
택함.
Stage2 코드
100MB 짜리 파일 2개를 fread를 통해 각각 한 번에 읽어온
다.
strtok_r 함수를 써서 ‘n’ 문자를 기준으로 문장을 읽어들이
고 f_out 파일에 출력한다. 이 과정이 file1과 file2에서 반복
된다.
f_out 파일에 출력할 때는 fwrite 함수를 사용한다.
Stage2 코드 설명
 fread 함수로 100MB를 한번에 읽
어오기 위해 SIZE 라는 상수를
1024 * 1024 * 100으로 잡았다.
fout 파일에 출력하기 전에 문자열
을 먼저 뒤집어 주기 위해서 문자열
뒤집기 함수도 따로 만들어 줌.
 버퍼 2개, strtok_r 함수에서 한 line
을 읽어올 때 쓰일 line 시작과 끝을 나
타내줄 char형포인터 변수 선언.
 버퍼1, 버퍼2 모두 100MB씩 동적할
당 해줌.
 fread 함수로 버퍼1과 버퍼2에
100MB씩 한 번에 읽어옴.
 start point 변수1, 2 모두 strtok_r 함
수가 ‘n’ 기준으로 문자열을 잘랐을 때의
포인터 값으로 해줌.
 strtok_r가 반환한 포인터는 token ‘n’
을 포함하지 않으므로 fputc 함수로 ‘n’
따로 출력
 strtok_r 함수가 반환한 포인터가 둘다
NULL일 때까지 반복.
Stage2 코드 실행시간
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
stage2 26.31586 40.876017 30.774619 29.260346 29.210764 31.2875212
실행횟수
버전
시간단위 : 초
1 2 3 4 5 평균
110.292081/31.2875212 = 0.28379
→성능이 약 3.53배 향상되었다!!!
The End

More Related Content

What's hot

More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3현찬 양
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2현찬 양
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
devCAT Studio, NEXON
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
SeungYeonChoi10
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1현찬 양
 
tcp ip study
tcp ip studytcp ip study
tcp ip study
준철 박
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
세빈 정
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2현찬 양
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
Injae Lee
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 

What's hot (12)

More effective c++ 3
More effective c++ 3More effective c++ 3
More effective c++ 3
 
More effective c++ 2
More effective c++ 2More effective c++ 2
More effective c++ 2
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
Effective C++ Chapter 1 Summary
Effective C++ Chapter 1 SummaryEffective C++ Chapter 1 Summary
Effective C++ Chapter 1 Summary
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
tcp ip study
tcp ip studytcp ip study
tcp ip study
 
Mec 56
Mec 56Mec 56
Mec 56
 
Effective c++ 1,2
Effective c++ 1,2Effective c++ 1,2
Effective c++ 1,2
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리effective c++ chapter 3~4 정리
effective c++ chapter 3~4 정리
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 

Viewers also liked

Network lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسين
Network lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسينNetwork lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسين
Network lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسين
PolyTechnic Sulaimania University/Kala Institute/IT Dept.
 
Diapos de hepatitis mcro
Diapos de hepatitis mcroDiapos de hepatitis mcro
Diapos de hepatitis mcro
antonio flores
 
Dietetyk 321[11] o1.01_u
Dietetyk 321[11] o1.01_uDietetyk 321[11] o1.01_u
Dietetyk 321[11] o1.01_u
gemix gemix
 
Bab 3
Bab 3Bab 3
Tic luciana armoa
Tic   luciana armoaTic   luciana armoa
Tic luciana armoa
Luciana Armoa
 
Mi papel en la comunidad
Mi papel en la comunidadMi papel en la comunidad
Bab 5
Bab 5Bab 5
Bab 4
Bab 4Bab 4
Natural dister
Natural disterNatural dister
Natural dister
vaibhav09012007
 
Dietetyk 321[11] o1.02_u
Dietetyk 321[11] o1.02_uDietetyk 321[11] o1.02_u
Dietetyk 321[11] o1.02_u
gemix gemix
 
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
jose david pinilla quezada
 
Team Collaboration with BIMserver and BIMcloud
Team Collaboration with BIMserver and BIMcloudTeam Collaboration with BIMserver and BIMcloud
Team Collaboration with BIMserver and BIMcloud
Applecore Designs Limited
 
Dietetyk 321[11] z2.06_u
Dietetyk 321[11] z2.06_uDietetyk 321[11] z2.06_u
Dietetyk 321[11] z2.06_u
gemix gemix
 
Dietetyk 321[11] z2.04_u
Dietetyk 321[11] z2.04_uDietetyk 321[11] z2.04_u
Dietetyk 321[11] z2.04_u
gemix gemix
 
Mohd Sabri Ahmad resume
Mohd Sabri Ahmad resumeMohd Sabri Ahmad resume
Mohd Sabri Ahmad resume
MohdSabri Ahmad
 
Arpanet/Internet
Arpanet/InternetArpanet/Internet
Arpanet/Internet
Maria Martinez
 

Viewers also liked (16)

Network lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسين
Network lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسينNetwork lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسين
Network lectures mohammad hassan husain محاظرات الشبكات_محمد حسن حسين
 
Diapos de hepatitis mcro
Diapos de hepatitis mcroDiapos de hepatitis mcro
Diapos de hepatitis mcro
 
Dietetyk 321[11] o1.01_u
Dietetyk 321[11] o1.01_uDietetyk 321[11] o1.01_u
Dietetyk 321[11] o1.01_u
 
Bab 3
Bab 3Bab 3
Bab 3
 
Tic luciana armoa
Tic   luciana armoaTic   luciana armoa
Tic luciana armoa
 
Mi papel en la comunidad
Mi papel en la comunidadMi papel en la comunidad
Mi papel en la comunidad
 
Bab 5
Bab 5Bab 5
Bab 5
 
Bab 4
Bab 4Bab 4
Bab 4
 
Natural dister
Natural disterNatural dister
Natural dister
 
Dietetyk 321[11] o1.02_u
Dietetyk 321[11] o1.02_uDietetyk 321[11] o1.02_u
Dietetyk 321[11] o1.02_u
 
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
 
Team Collaboration with BIMserver and BIMcloud
Team Collaboration with BIMserver and BIMcloudTeam Collaboration with BIMserver and BIMcloud
Team Collaboration with BIMserver and BIMcloud
 
Dietetyk 321[11] z2.06_u
Dietetyk 321[11] z2.06_uDietetyk 321[11] z2.06_u
Dietetyk 321[11] z2.06_u
 
Dietetyk 321[11] z2.04_u
Dietetyk 321[11] z2.04_uDietetyk 321[11] z2.04_u
Dietetyk 321[11] z2.04_u
 
Mohd Sabri Ahmad resume
Mohd Sabri Ahmad resumeMohd Sabri Ahmad resume
Mohd Sabri Ahmad resume
 
Arpanet/Internet
Arpanet/InternetArpanet/Internet
Arpanet/Internet
 

Similar to Stage2

Merge.c 성능개선보고서
Merge.c 성능개선보고서Merge.c 성능개선보고서
Merge.c 성능개선보고서
Jung Eun Kim
 
Adv sys prog_20123186_report1
Adv sys prog_20123186_report1Adv sys prog_20123186_report1
Adv sys prog_20123186_report1
준석 김
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
CHANG-HYUN LEE
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
CHANG-HYUN LEE
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
CHANG-HYUN LEE
 
Optimizing merge program
Optimizing merge program Optimizing merge program
Optimizing merge program
CHANG-HYUN LEE
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
Taeoh Kim
 
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
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
Vong Sik Kong
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)문익 장
 

Similar to Stage2 (10)

Merge.c 성능개선보고서
Merge.c 성능개선보고서Merge.c 성능개선보고서
Merge.c 성능개선보고서
 
Adv sys prog_20123186_report1
Adv sys prog_20123186_report1Adv sys prog_20123186_report1
Adv sys prog_20123186_report1
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
고급시스템프로그래밍
고급시스템프로그래밍고급시스템프로그래밍
고급시스템프로그래밍
 
Optimizing merge program
Optimizing merge program Optimizing merge program
Optimizing merge program
 
스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오스칼라와 스파크 영혼의 듀오
스칼라와 스파크 영혼의 듀오
 
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
 
Lambda 란 무엇인가
Lambda 란 무엇인가Lambda 란 무엇인가
Lambda 란 무엇인가
 
Effective c++(chapter 5,6)
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
 

Stage2

  • 3. Stage1 코드  Stack을 이용한 프로그램. 파일을 한 글자씩 Stack에 Push 해서 한 줄을 읽어들이고 다시 Pop해서 한 글자씩 출력해 결과 적으로 line-by-line으로 2개의 파일을 reverse-merge 하는 프로그램. 문자열을 뒤집는 함수를 만들지 않고 바로 Stack을 통해 출력 한다는 점이 간편했었음.
  • 4. Stage1 코드 소요시간 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 실행횟수 버전 시간단위 : 초 1 2 3 4 5 평균
  • 5. Stage1 코드 설명  기본적인 Stack의 크기는 우선 100으로 해놓고 후에 메모리 공간이 더 필요하게 될 경우를 대비해 realloced 변수 선언 해 놓음  readaline 함수는 한 line을 한 글자씩 Stack에 Push하는 함수  reverse_out 함수는 Stack의 글자를 한 글자씩 출력해 역순으로 출력되게끔 하는 함수  IsEmpty 함수는 Stack이 비었는지 확 인해주는 함수, Push 함수는 Stack에 값 하나를 밀어넣는 함수, Pop 함수는 Stack에서 값 하나를 꺼내는 함수.
  • 6.  한 글자씩 Stack에 Push하고, 만 약 Stack의 크기가 한 line의 크기 보다 작을 경우 realloced 변수 값 을 하나 증가시킨 다음 STACK_SIZE * realloced 크기 만큼 메모리를 다시 할당한다.
  • 7.  Stack에 있던 글자들 을 !IsEmpty가 아닌 동안 Pop 하게 되면 결과적으로 뒤집어진 한 line을 fout에 출력하게 된 다. 한 줄을 readaline 함수로 읽어들이고 바로 reverse_out 함수로 역순으 로 출력하는 과정을 file1, file2 돌아가면서 반복한다.
  • 9. Stage1과 달라진 점은? fgetc와 fputs를 쓰는 것이 overhead를 상당히 많이 차지했다. 그 부분이 비효율적이라 판단이 되어서 Push와 Pop 등의 함수 를 필요로 하는 Stack을 사용하지 않기로 함. 따라서 100MB 파일을 fread 함수로 한 번에 읽어오는 방식을 택함.
  • 10. Stage2 코드 100MB 짜리 파일 2개를 fread를 통해 각각 한 번에 읽어온 다. strtok_r 함수를 써서 ‘n’ 문자를 기준으로 문장을 읽어들이 고 f_out 파일에 출력한다. 이 과정이 file1과 file2에서 반복 된다. f_out 파일에 출력할 때는 fwrite 함수를 사용한다.
  • 11. Stage2 코드 설명  fread 함수로 100MB를 한번에 읽 어오기 위해 SIZE 라는 상수를 1024 * 1024 * 100으로 잡았다. fout 파일에 출력하기 전에 문자열 을 먼저 뒤집어 주기 위해서 문자열 뒤집기 함수도 따로 만들어 줌.
  • 12.  버퍼 2개, strtok_r 함수에서 한 line 을 읽어올 때 쓰일 line 시작과 끝을 나 타내줄 char형포인터 변수 선언.  버퍼1, 버퍼2 모두 100MB씩 동적할 당 해줌.  fread 함수로 버퍼1과 버퍼2에 100MB씩 한 번에 읽어옴.
  • 13.  start point 변수1, 2 모두 strtok_r 함 수가 ‘n’ 기준으로 문자열을 잘랐을 때의 포인터 값으로 해줌.  strtok_r가 반환한 포인터는 token ‘n’ 을 포함하지 않으므로 fputc 함수로 ‘n’ 따로 출력  strtok_r 함수가 반환한 포인터가 둘다 NULL일 때까지 반복.
  • 14. Stage2 코드 실행시간 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 stage2 26.31586 40.876017 30.774619 29.260346 29.210764 31.2875212 실행횟수 버전 시간단위 : 초 1 2 3 4 5 평균 110.292081/31.2875212 = 0.28379 →성능이 약 3.53배 향상되었다!!!