모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    물어라이코스님의
    개인페이지입니다
    가입 : 12-09-25
    방문 : 3120회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : programmer_11976
    작성자 : 물어라이코스
    추천 : 0
    조회수 : 1012
    IP : 27.117.***.100
    댓글 : 4개
    등록시간 : 2015/07/09 05:03:28
    http://todayhumor.com/?programmer_11976 모바일
    질문] openmp 멀티 쓰레드!
    <div>줄거리 : </div> <div>web에서 json 데이터를 파싱해서 db에 저장한다.</div> <div>언어 : C, 구동 환경 : Centos, 컴파일러 : gcc</div> <div><br></div> <div><br></div>어제의 메모리 누수 문제를 해결하였습니다. <div><br></div> <div><a target="_blank" href="http://www.todayhumor.co.kr/board/view.php?table=programmer&no=11942&s_no=10501250&kind=member&page=1&member_kind=total&mn=285973">http://www.todayhumor.co.kr/board/view.php?table=programmer&no=11942&s_no=10501250&kind=member&page=1&member_kind=total&mn=285973</a></div> <div><br></div> <div>완벽한 해결은 아니지만...</div> <div><br></div> <div>제가 직접 정의하는 부분에 있어서 <span style="font-size:9pt;line-height:1.5;">전부 free 해주도록 하였고,</span></div> <div>데이터를 받아오는 curl 부분을 별도 함수로 만들어서 그때그때 쓰고 없애도록 하였으며,</div> <div><br></div> <div>json-c 에서 사용하는 json_object 부분도 json_object_put(); 으로 전부 초기화 하도록 하였습니다.</div> <div><br></div> <div>lcurl memory leak</div> <div>json-c memory leak</div> <div><br></div> <div>두가지 키워드로 검색해보니 저뿐만 아니라 다른 사람들도 메모리 누수 현상을 겪었더라구요.</div> <div>lcurl 의 경우 curl_global_cleanup(); 라는 걸로 해결했지만,</div> <div>json-c 의 경우는 딱히 해결 방법이 없네요;</div> <div><br></div> <div>우선 저렇게 수정한 후 valgrind 로 돌려보니 에러가 없다고 나오네요! 오오!</div> <div><span style="font-size:9pt;line-height:1.5;">(실제 구동에서는 반복문 1천개당 0.1%씩 메모리 점유율이 올라가지만.... 이정도면 1건당 0.5%씩 올라갈때보다는 나아진거 같아서 만족입니다;)</span></div> <div><br></div> <div><br></div> <div>다음 단계.......</div> <div><br></div> <div>작업의 효율을 높이기 위해서 반복문을 쓰레드로 나눠서 구동시키려고 했습니다.</div> <div>현재 1개의 for문을 돌리니 ... 돌아가긴 하는데... cpu 점유율이 5% 미만이네요?</div> <div>아무리 우선순위를 높이고, gcc 옵션에서 -O2 옵션을 주더라도 cpu 점유율이 올라가지도 않고, db에 입력되는 데이터를 보니 상당히 느립니다.</div> <div><br></div> <div>그래서 찾아보니 openmp 라는게 있더군요!</div> <div><a target="_blank" href="http://egloos.zum.com/sunyzero/v/4227785">http://egloos.zum.com/sunyzero/v/4227785</a></div> <div><br></div> <div>예제를 보니 심지어 사용법도 간단해요!</div> <div><br></div> <div><br></div> <div><br></div> <div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px;"> <div><pre style="color:#1f1f1f;font-size:13px;line-height:23px;"><span style="font-family:'굴림';"># include <stdio.h></span></pre><pre style="color:#1f1f1f;font-size:13px;line-height:23px;"># include <omp.h><br>int main() <br>{<br> omp_set_num_threads(4);<br>#pragma omp parallel<br> {<br> printf("Hello world\n");<br> }<br> return 0;<br>}</pre></div></blockquote></div> <div>(쓰레드 4개를 만들어서 Hello world\n를 한번씩 띄움. 즉 총 4개의 Hello world 출력)</div> <div><br></div> <div><br></div> <div>그래서 냉큼 적용했으나..............</div> <div>역시나 원치 않는 결과가 ㅠㅠㅠㅠ</div> <div>원인은 찾았으나 해결 방법이 도무지 떠오르지 않네요...</div> <div><br></div> <div>함수 없이 main 에서 통짜로 실행되던걸 쓰레드로 넘기고 싶어서 분리하여 함수로 만들었는데... 제대로 작동하질 않네요.</div> <div><br></div> <div><br></div> <div>1) 최초 버전</div> <div>변수 선언</div> <div>- for 반복문</div> <div> -> curl로 웹 데이터 가져옮</div> <div> -> json-c로 json_object로 파싱</div> <div> -> 데이터 분류 작업 + db 입력</div> <div>- for문 종료</div> <div>변수 초기화</div> <div><br></div> <div><br></div> <div>2) 함수로...</div> <div><span style="font-size:9pt;line-height:1.5;">- A : db 입력 함수 선언</span></div> <div>--> 인자로 넘어온 char을 db에 입력</div> <div><br></div> <div>- B : curl 함수 선언</div> <div>--> 인자로 넘어온 url에서 데이터를 받아서 문자열로 만든 후 리턴.</div> <div><br></div> <div>- C : A, B 함수를 호출하여 데이터를 처리하는 함수.</div> <div>--> 인자로 넘어온 고유 번호를 B함수로 넘겨서 데이터를 받아 json 작업을 거쳐서 A 함수 호출.</div> <div><br></div> <div>변수 선언</div> <div>- for</div> <div> -> C 함수 호출</div> <div> -> 고유 번호 증가</div> <div>- for 종료</div> <div><br></div> <div>이렇게 만들었습니다...</div> <div>테스트를 해보니 쓰레드 4개를 만들어서 고유 번호를 증가시키고, 그것을 C 함수로 넘긴 후 A, B 함수까지 전달이 잘 되는 것은 확인했습니다.</div> <div>하지만 C 함수에 있는 아래 작업에서 에러가 나오더라구요.</div> <div><br></div> <div><br></div> <div>// 고유번호를 가지고 데이터를 받아와서 처리 후 db에 저장하는 함수.</div> <div>void B(MYSQL *con, long num){</div> <div>- 생략 -</div> <div>json_object *jobj;</div> <div>- 생략 -</div> <div><br></div> <div>jobj = json_tokener_parse(get_json(url)); // get_josn() 함수는 직접 만든 함수로 고유 번호를 넘기면 url에서 데이터를 문자열로 돌려줌.</div> <div>- 생략 -</div> <div>}</div> <div><br></div> <div>이 부분을 주석처리하면 정상적으로 값을 넘겨주는데, 이 부분만 거치면 openmp 부분이 정상 작동하지 않더라구요.</div> <div>아무래도 json_object *jobj 가... 여러 쓰레드 사이에 공유가 되면서 생기는 문제인 것 같은데...</div> <div>이걸 어떻게 해결해야할지 해결 방법이 떠오르질 않습니다. --;</div> <div><br></div> <div>openmp 라는걸 그냥 쓰지 말까도 싶어지네요...</div> <div>구글링을 아무리 열심히해도..</div> <div>저처럼 json-c를 사용한 예제를 찾지 못하고 있습니다. ㅜㅜ</div> <div><br></div> <div>이런식의 작업을 할때 좋은 해결 방법이 있을까요?</div> <div><br></div> <div>1. 컴파일 옵션이나 소스코드를 수정하여 cpu 사용량을 올려 작업 속도를 높인다.</div> <div>(nice 명령어로 -18로도 만들어봤으나 속도는 차이가 없더라구요)</div> <div><br></div> <div>2. openmp 말고 다른 멀티 쓰레드를 사용한다.</div> <div><br></div> <div>3. 다른 방법!</div> <div><br></div> <div>전 글에도 썼었지만...</div> <div>초당 30~50회 정도의 반복 작업을 시켜야하는 거라서요... 좋은 방법이 있을까요?</div>

    이 게시물을 추천한 분들의 목록입니다.
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    233
    오징어 등록기 // 오징어 인증 // 오유 인증 싸이트 입니다. [30] 물어라이코스 15/07/20 20:43 68 6
    232
    php] 가입시 이메일 인증 시스템 구축하기 (?) 질문 [2] 본인삭제금지 물어라이코스 15/07/18 02:30 25 0
    231
    GCC 버전별 링크 [1] 물어라이코스 15/07/17 01:46 37 0
    230
    대리? 공유? 계정 정지에 대한 정확한 사항 입니다. 물어라이코스 15/07/16 20:52 69 1
    229
    뻘글] 몇날며칠을 고생한 메모리 누수를 잡았습니다! [4] 물어라이코스 15/07/10 17:16 47 13
    질문] openmp 멀티 쓰레드! [5] 물어라이코스 15/07/09 05:03 37 0
    227
    잡담] 왜 메모리 누수에 머리를 썩히는지 이제 알았습니다 ㅋㅋ [16] 물어라이코스 15/07/07 17:09 76 0
    226
    이 와중에 벌레 소탕 바랍니다. [신고] 물어라이코스 15/07/05 21:37 62 0
    225
    졸작하고 있는데 ... 이게 뭐하는 건지 모르겠습니다. ㅜㅜ [6] 물어라이코스 15/07/03 17:59 75 0
    224
    c언어 sprintf을 가변적으로 활용하는 방법? [21] 물어라이코스 15/07/02 15:14 38 0
    223
    안타까움에 올리는 직관 후기 (feat. CJ) [1] 물어라이코스 15/07/01 22:14 216 2
    222
    저격할때는 확실한 증거를 가지고 했으면 좋겠습니다. [41] 물어라이코스 15/07/01 21:11 167 1
    221
    PHP 서적 추천 부탁드립니다. (초급 X) [4] 물어라이코스 15/06/25 17:18 20 0
    220
    50만대 게이밍 와우 견적 검토 부탁드립니다! [5] 베스트금지본인삭제금지 물어라이코스 15/06/25 15:19 73 0
    219
    지하철인데 제 앞에 아재분이 계세요 [6] 물어라이코스 15/06/24 22:56 66 2
    218
    재저격] 롤게 사람들 단체 비방 후 사과 없음. [2] 물어라이코스 15/06/17 20:51 130 13
    217
    저격] 특정 게시판 사용자들 비방 후 사과 없음. 물어라이코스 15/06/17 20:50 47 4
    216
    광고유저에 대한 판단 부탁드립니다. [8] 물어라이코스 15/06/15 19:54 102 2
    215
    DB 설계 관련하여 조언 부탁드립니다! [12] 본인삭제금지 물어라이코스 15/06/15 02:34 40 0
    214
    모욕죄 인실X 인증 [3편] [22] 물어라이코스 15/06/14 17:51 143 6
    213
    오징어 등록기 나눔 당첨자 발표! (친추 받아주세요!) [2] 물어라이코스 15/06/08 20:50 53 4
    212
    오징어 검색기 나눔 결과! [7] 물어라이코스 15/06/08 02:27 125 7
    211
    오징어 검색기 싸이트에 저격 기능 도입 관련하여 의견 부탁드립니다. [5] 물어라이코스 15/06/06 16:41 86 3
    210
    오징어 인증제, 저격 관련 기능 의견 부탁드립니다! [3] 물어라이코스 15/06/06 02:45 87 3
    209
    [나눔] 오징어 인증을 하시거나 인증노말 유저 대상 나눔! [3] 베스트금지 물어라이코스 15/06/04 20:56 67 3
    208
    오징어 검색기 1400명 돌파 기념 나눔 !!! [11] 물어라이코스 15/06/03 23:35 101 24
    207
    포지 자체에 민감하신 분들이 보면 기절할영상.avi [10] 물어라이코스 15/05/27 22:51 248 0
    206
    오유에 뜨는 대리 광고는 바보님이 확인하셔야해요 [2] 물어라이코스 15/05/19 17:44 155 2
    205
    오징어 등록제를 많이 알려주세요! [10] 물어라이코스 15/05/17 23:10 53 12
    204
    오유 채널이 확실히 인력소가 되긴 한거 같네요 물어라이코스 15/05/15 16:17 98 3
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈