C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[76381] Re:Re:Re:감사 합니다. ^^;
Alone [] 710 읽음    2022-11-14 13:31
의미있는 결과를 얻으셨다니, 저도 좋네요.
수고하세요~

하루종일 님이 쓰신 글 :
: 수정보완 하신 코드 감사 드립니다. 큰 도움이 되었습니다.
:
: 계산중간에 생성되는 임시생성 파일을 미처 고려 하지 못했네요^^;
: 수정하신대로 입력파일이름 폴더를 만들고 계산 후 결과파일을 원 폴더로 복사 하는 것이 가장 좋은 방법 이네요.
:
: 결과파일 저장이 누락되지 않도록 CPU로드 를 줄여봐야 겠습니다.
:
: 좀더 테스트를 해보고 완성도를 높여야 겠습니다. ^^
:
: 다시 한번 감사 드립니다. ^^;
:
: ====>> 
: 동시에 계산하는 쓰레드를 코어 갯수 만큼 줄이니, 에러 없이 계산이 됩니다.
: 너무 속도에 욕심 부리지 말아야 겠네요. ^^;
: 잘 작동되니 기분이 좋습니다. ^^;
:
:
: Alone 님이 쓰신 글 :
: : 제가 테스트 해 본 결과물 공유 드립니다.
: : 각각 폴더를 만들고, 실행파일 과 입력 파일을 복사하여 폴더에서 실행할 수 있도록 수정해 보았습니다.
: : 그래서 폴더 마다, TAPExx 파일들이 생성됩니다.
: : 폴더에 만들어진 out 파일을 다시 원래 폴더로 복사해 두고, (사용한 폴더는 삭제해 버리면..)
: : 파일 체크?가 수행될 수 있도록 하였습니다.
: :
: : 테스트로는 CPU 점유가 Full load 걸리네요.
: : 하지만 예시로 주신 모든 파일 중 몇몇 파일은 오류가 검출됩니다.
: :
: : 메인 파일 수정해 본 내용과,
: : 제가 테스트한 실행파일 릴리즈 본으로 업로드 해 둡니다.
: :
: : 테스트를 더 해보시고, 더 좋은 결과를 얻으실 수 있으면 합니다.
: :
: :
: : 하루종일 님이 쓰신 글 :
: : : 계산 중 생성되는 임시 파일을 생각 못했네요.
: : :
: : : 의견 주신대로 폴더를 만들어서 각각 계산을 해야 겠네요.
: : :
: : : 감사 드립니다.
: : :
: : : Alone 님이 쓰신 글 :
: : : : 일단 올려주신 실행파일은 패키지 빌드가 아니어서 바로 실행이 안되서,
: : : : 소스를 빌드 해서 살펴보았습니다.
: : : : hec1.exe가 수행될 때, TAPE23, TAPE24, TAPE25라는 파일이 현재 실행 디렉토리에 생성되는데,
: : : : 실행시 이 파일들이 서로 기존 실행파일이 만든 파일에 다시 작동을 해서
: : : : 동작에 문제를 야기하는 것이 아닐까 의심되네요.
: : : : 실행때 마다 해당 파일이 중간단계의 결과물로 사용되는 것으로 보이는데, 다른 프로세서가
: : : : 다시 해당 파일을 갱신하면서 문제가 나는 것으로 의심됩니다.
: : : :
: : : : 풀패스만 제공하면, 입력파일은 실행파일과 다른 디렉토리라도 상관없는 것은 확인하였구요.
: : : :
: : : : 하루종일 님이 쓰신 글 :
: : : : : 입력파일을 별도의 폴더에 넣어서 계산하는 방법은 시험해 보지 않았습니다.
: : : : : 입력파일이 수백개 또는 수천개 가 되는 경우도 있는데, 각각의 폴더를 생성 하는 것은 비 효율적이라고 생각 됩니다.
: : : : : bat 파일로 만들어서 계산하는 방법보다 빠르게 계산하는 것이 목적이라....
: : : : :
: : : : : 도스로 실행하는 부분만 별도로 프로그램을 작성 했습니다.
: : : : : "입력자료 폴더 열기" 버튼으로 입력파일 폴더를 선택하고.
: : : : : "계산하기" 버튼을 누르면 계산이 됩니다.
: : : : : "계산결과 파일 확인" 버튼은  정상적으로 저장이 되었는지를 확인 합니다.
: : : : :
: : : : : 첨부 파일에 소스와 입력자료, 도스실행파일이 포함되어 있습니다.
: : : : : 입력자료와 도스실행파일(hec1.exe)은 "HEC_Input_Data" 폴더에 있습니다.
: : : : : 입력자료와 도스실행파일(hec1.exe)는 같은 폴더에 있어야 합니다.
: : : : :
: : : : : Thread Pool 함수는 "씹어먹는 C++" 강좌의 소스를 그대로 사용했습니다.
: : : : : https://modoocode.com/285
: : : : :
: : : : :
: : : : : Alone 님이 쓰신 글 :
: : : : : : 저번에 말씀드린대로 속도 문제가 아니었지요?
: : : : : : 혹시 다른 폴더에 각각 실행되게끔 해보신 것인지요?
: : : : : :
: : : : : : 이런 경우에서 단순한 문제가 아니면, 뭐가 잘못되는지 알기가 어렵습니다.
: : : : : : 현상을 확인할 수 없으면, 어려운 부분인 듯 하니, 가능하시면(?)
: : : : : : 해당 문제의 도스실행파일과 테스트 해보신 소스를 올려주시면 문제를 같이 고민해 드릴 수는 있습니다..
: : : : : :
: : : : : :
: : : : : : 하루종일 님이 쓰신 글 :
: : : : : : : 첨부한 프로그램을 설치해서, 시험을 해보았는데...
: : : : : : : 여전히 같은 문제가 발생을 합니다.
: : : : : : :
: : : : : : : 그럼,, 하드디스크 속도 문제가 아니라는 결론인데...
: : : : : : :
: : : : : : : 도스 프로그램 실행은  WinExec(command.c_str(), SW_HIDE);, CreateProcess  를 사용해 보았는데 마찮가지로 계산결과가 중간에 달리게 저장되네요
: : : : : : :
: : : : : : : 무엇이 문제 일까요??
: : : : : : :
: : : : : : :
: : : : : : : Alone 님이 쓰신 글 :
: : : : : : : : 그럼, 말씀하신 대로의 내용이 문제가 된다고 치고, 고성능의 디스크로 테스트 해보면 되겠네요?
: : : : : : : : 
: : : : : : : : RAM DIsk를 설치하셔서 해당 디스크 상에서 테스트 해보세요.
: : : : : : : : 시스템에 설치된 RAM 속도에 비례하는 I/O를 성능을 보여줍니다.
: : : : : : : :
: : : : : : : : 현존하는 SSD보다 일반적으로 빠르게 동작하는 디스크 이니,
: : : : : : : : 테스트 해 보시는 것을 권합니다.
: : : : : : : : (메모리의 속도에 따라 틀려지지만, 제 시스템의 경우 1TB/s 이상 측정, 크리스털 디스크마크 결과)
: : : : : : : :
: : : : : : : : 첨부 파일에 무료(상위버전은 유료)로 사용할 수 있는 버전의 프로그램을 하나 올려둡니다.
: : : : : : : : 제한이 최대 디스크 크기가 4G 라서
: : : : : : : : 설정화면에서 4095 MB 로 설정하면 됩니다.  더 큰값은 에러납니다.
: : : : : : : :
: : : : : : : :
: : : : : : : :
: : : : : : : : 하루종일 님이 쓰신 글 :
: : : : : : : : : 의견 감사 합니다.
: : : : : : : : :
: : : : : : : : : 도스프로그램은 입력을 받아 계산을 하고 계산결과를 파일로 저장 합니다.
: : : : : : : : : 도스프로그램이 동시에 여러개 실행되더라도, 입력파일 및 저장파일 이름은 다릅니다.
: : : : : : : : :
: : : : : : : : : 이런 도스 프로그램을 동시에 여러개 (CPU 코어 갯수에 비례해서 증가) 실행이 됩니다.
: : : : : : : : : 즉 동시에 여러 파일을 읽고, 여러 파일을 하드디스크에 쓰기를 하게 됩니다.
: : : : : : : : : 저장한 결과 파일 중 약 30%정도는 계산결과가 저장이 완료되지 않습니다.
: : : : : : : : :
: : : : : : : : : 저는 이 현상을 하드디스크의 쓰기 속도 문제로 생각을 하고 있기 때문에, 다른 폴더에 저장을 한다고 해도 동일 것 같다고 판단됩니다.
: : : : : : : : :
: : : : : : : : : 만약 도스프로그램 계산결과를 파일이 아닌 메모리에 저장하는 방법이 있다면,
: : : : : : : : : 해결방법이 있을것 같기는 합니다.
: : : : : : : : :
: : : : : : : : :
: : : : : : : : : Alone 님이 쓰신 글 :
: : : : : : : : : : : 아마도, 도스프로그램 저장속도를 하드디스크 가 따라가지 못해서 저장손실이 발생하는 듯 합니다.
: : : : : : : : : :       라고 하셨는데, 도스 프로그램을 쓰던 시대에 비하면, 저장 속도는 이미 충분하다 못해 넘치는 하드웨어라고 봅니다.
: : : : : : : : : :      아마 파일을 저장하기 위해 동일한 파일을 동시에 쓰레드 여러곳에서 엑세스해서 문제가 생기는 것은 아닐지요?
: : : : : : : : : :     
: : : : : : : : : :      각 쓰레드 별로 폴더 구조를 만들어서 도스 실행파일이 있도록해서, 서로 다른 경로에서 실행되도록 해보시는 건 어떨까요?
: : : : : : : : : :     각 폴더 내에 별개로 결과 파일이 생성되겠지요.
: : : : : : : : : :
: : : : : : : : : :
: : : : : : : : : : 하루종일 님이 쓰신 글 :
: : : : : : : : : : : 실행 파일만 있고, 이 실행파일을 동시에 여러개 (CPU코어갯수 * 2 +1, 쓰레드 풀 사용)를 실행한다는 것입니다.
: : : : : : : : : : :
: : : : : : : : : : : 제가 이해 하기 어렵게 글을 작성한 듯 합니다.
: : : : : : : : : : :
: : : : : : : : : : : 왕초보와코드 님이 쓰신 글 :
: : : : : : : : : : : : 글 내용에 모순이 있는데요.
: : : : : : : : : : : :
: : : : : : : : : : : : 소스가 없는 도스프로그램이라, 저장을 제어 할수가 없습니다
: : : : : : : : : : : :    => 이건 결국 실행파일만 가지고 있다는 거죠?  그런데 스레드로 구현했다는 말은 뭔가요?
: : : : : : : : : : : :
: : : : : : : : : : : : 아니면 실행파일을 여러개 동시에 실행했다는 말인가요?
: : : : : : : : : : : :
: : : : : : : : : : : :
: : : : : : : : : : : :
: : : : : : : : : : : : 하루종일 님이 쓰신 글 :
: : : : : : : : : : : : : 1980년대에 개발된 도스프로그램을 멀티스레드로 동시에 여러개를 실행하려 합니다.
: : : : : : : : : : : : : 동시에 여러개 실행은 잘 되는데, 문제는 동시에 여러개의 파일을 하드디스크에 저장을 하지 못하네요.
: : : : : : : : : : : : :
: : : : : : : : : : : : : 도스프로그램이라, 입력파일을 읽고 계산이 끝나면 파일로 저장을 합니다.
: : : : : : : : : : : : : 한번에 한개씩 저장할때는 문제가 없는데,
: : : : : : : : : : : : : 스레드로 구현을 하니, 여러개가 동시에 실행되면서, 하드디스크에 동시에 저장을 하니 저장파일이 깨지는 문제가 발생 합니다.
: : : : : : : : : : : : : 아마도, 도스프로그램 저장속도를 하드디스크 가 따라가지 못해서 저장손실이 발생하는 듯 합니다.
: : : : : : : : : : : : :
: : : : : : : : : : : : : 하드디스크를 SSD로 사용을 해봐도 여전히 문제가 발생 합니다.
: : : : : : : : : : : : :
: : : : : : : : : : : : : 소스가 없는 도스프로그램이라, 저장을 제어 할수가 없습니다.
: : : : : : : : : : : : :
: : : : : : : : : : : : : 이 문제를 해결 하려면, 도스프로그램이 저장하는 파일을 메모리에 저장한 후 하드디스크 저장속도를 초과하지 않게 저장을 해야 할 것 같은데,,,,
: : : : : : : : : : : : :
: : : : : : : : : : : : : 혹시 해결 방법이 있을까요?

+ -

관련 글 리스트
76358 도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 727 2022/10/30
76359     Re:도스 프로그램의 멀티쓰레드 구현방법은? 왕초보와코드 706 2022/11/01
76360         Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 691 2022/11/01
76361             Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? Alone 658 2022/11/02
76365                 Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 741 2022/11/04
76369                     Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? Alone 689 2022/11/11
76370                         Re:Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 620 2022/11/11
76373                             Re:Re:Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? Alone 628 2022/11/12
76375                                 Re:Re:Re:Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? 하루종일 708 2022/11/13
76376                                     Re:Re:Re:Re:Re:Re:Re:Re:Re:도스 프로그램의 멀티쓰레드 구현방법은? Alone 695 2022/11/13
76377                                         감사 합니다. ^^; 하루종일 641 2022/11/13
76378                                             Re:감사 합니다. ^^; Alone 645 2022/11/13
76379                                                 Re:Re:감사 합니다. ^^; 하루종일 655 2022/11/13
76381                                                     Re:Re:Re:감사 합니다. ^^; Alone 710 2022/11/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.