혹시 스레드 할당시간을 늘리는 방법도 있나요?
글쓴이: livey / 작성시간: 금, 2019/02/22 - 7:24오후
안녕하세요
수백MB 에서 수GB 정도 되는 대용량 텍스트 포멧 파일을 읽어 파싱 처리하여 여러개의 파일로 저장해야하는데요
문제는 성능입니다. 최대한 빨리 처리하도록 만들어야하는데요
Windows 기반이고 Memory Mapped File 방식이 빠르다고해서 파일 읽을땐 이방법으로 읽습니다만
텍스트 라인수가 수백만라인이라 라인단위로 파싱하여 처리를 하는 부분이 꽤 오래 걸리네요.
루프안에 코드 하나만 추가되도 소요시간이 눈에 띄게 증가합니다.
혹시 스레드에 할당된 시간을 늘려 더 오래 작업하게끔 할수 있는 win32 API 가 있는지 궁금합니다.
감사합니다~
Forums:
파일을 읽을 때 어떤 크기 단위로 읽고 계시나요?
파일을 읽을 때 어떤 크기 단위로 읽고 계시나요? fread로 읽을 때 수 메가 바이트 단위로 읽어보세요. 그것을 memory buffer에 넣고 메모리에서 처리하면 실행 속도를 높일 수 있습니다.
아.
그런 좋은 방법이 있었네요
버퍼를 수십메가 단위로해서 fread 를 잘 활용해보겠습니다!!
답변 감사합니다 ^^
...
"쓰레드에 할당된 시간을 늘려"는 별 의미없는 표현이고요, 프로그램이 돌아가고 있을 때 각 쓰레드가 CPU를 얼마나 사용하고 있는지가 중요합니다.
1. 각 쓰레드가 CPU를 100%씩 사용하고 있다 -> 이미 CPU를 쓸 수 있는 만큼 최대한 사용하고 있습니다. 코드를 더 효율적으로 고치는 수밖에 없습니다.
2. 전체 시스템이 CPU를 100% 사용하는 것도 아닌데 쓰레드가 100%를 못 쓰고 놀고 있다 -> 설명을 봐서는 그럴 가능성은 적어 보입니다만 I/O가 병목인 상태입니다. 쉽지는 않지만 I/O 속도를 늘리는 방법을 찾아봐야겠죠.
네
일단 다 읽고난후 처리를 하는형태구요.
말씀대로 코드를 좀 더 개선하는방법과 openmp 같은 병렬처리 방법을 사용해봐야할것같습니다.
답변 감사합니다~~~
댓글 달기