혹시 스레드 할당시간을 늘리는 방법도 있나요?

livey의 이미지

안녕하세요

수백MB 에서 수GB 정도 되는 대용량 텍스트 포멧 파일을 읽어 파싱 처리하여 여러개의 파일로 저장해야하는데요
문제는 성능입니다. 최대한 빨리 처리하도록 만들어야하는데요

Windows 기반이고 Memory Mapped File 방식이 빠르다고해서 파일 읽을땐 이방법으로 읽습니다만
텍스트 라인수가 수백만라인이라 라인단위로 파싱하여 처리를 하는 부분이 꽤 오래 걸리네요.
루프안에 코드 하나만 추가되도 소요시간이 눈에 띄게 증가합니다.

혹시 스레드에 할당된 시간을 늘려 더 오래 작업하게끔 할수 있는 win32 API 가 있는지 궁금합니다.

감사합니다~

라스코니의 이미지

파일을 읽을 때 어떤 크기 단위로 읽고 계시나요? fread로 읽을 때 수 메가 바이트 단위로 읽어보세요. 그것을 memory buffer에 넣고 메모리에서 처리하면 실행 속도를 높일 수 있습니다.

char str[512];
char *membuf = malloc(수메가 ~ 수십메가)
 
while(!EOF) {
FILE_READ:
   cnt = fread(membuf, 수 ~ 수십메가)
   used_cnt = 0;
   while(cnt > used_cnt) {
      ret = sscanf(membuf+used_cnt, "%[^\n]", str); // 한줄씩 읽기
      used_cnt += ret;
      // str 처리
   }
 
   if not End of buf
      goto FILE_READ;
}

livey의 이미지

그런 좋은 방법이 있었네요
버퍼를 수십메가 단위로해서 fread 를 잘 활용해보겠습니다!!
답변 감사합니다 ^^

jick의 이미지

"쓰레드에 할당된 시간을 늘려"는 별 의미없는 표현이고요, 프로그램이 돌아가고 있을 때 각 쓰레드가 CPU를 얼마나 사용하고 있는지가 중요합니다.

1. 각 쓰레드가 CPU를 100%씩 사용하고 있다 -> 이미 CPU를 쓸 수 있는 만큼 최대한 사용하고 있습니다. 코드를 더 효율적으로 고치는 수밖에 없습니다.

2. 전체 시스템이 CPU를 100% 사용하는 것도 아닌데 쓰레드가 100%를 못 쓰고 놀고 있다 -> 설명을 봐서는 그럴 가능성은 적어 보입니다만 I/O가 병목인 상태입니다. 쉽지는 않지만 I/O 속도를 늘리는 방법을 찾아봐야겠죠.

livey의 이미지

일단 다 읽고난후 처리를 하는형태구요.
말씀대로 코드를 좀 더 개선하는방법과 openmp 같은 병렬처리 방법을 사용해봐야할것같습니다.
답변 감사합니다~~~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.