Skip to content

기글하드웨어기글하드웨어

커뮤니티 게시판 : 아주 기본적인 네티켓만 지킨다면 자유롭게 쓸 수 있는 커뮤니티 게시판입니다. 포럼에서 다루는 주제는 각각의 포럼 게시판을 우선 이용해 주시고, 민감한 소재는 비공개 게시판이나 수상한 게시판에, 홍보는 홍보/외부 사용기 게시판에 써 주세요. 질문은 포럼 게시판의 질문/토론 카테고리를 사용해 주세요.

잡담
2018.06.04 11:22

얼어죽을 병렬연산

profile
LeonHeadt https://gigglehd.com/gg/2980974
다음 생엔 부잣집 고양이로 태어나고 싶다.
조회 수 1506 댓글 20

 월요일마다 평생 눈 안뜨고 싶은 레온입니다. 오늘은 업무 얘기를 좀 하려고 합니다.

 

 저는 에기평에서 내 준 과제를 하나 맡고 있습니다. 이 과제는 제가 입사하기 전 부터 계속 진행되었던 과제라서 숟가락만 얹고 오우 개꿀ㅋ 했으면 얼마나 좋았을까 싶지만 역시 인생은 날먹이 아닌지라 몇 가지 트러블이 존재합니다.

 

 

 

1. 학교와 같이 하는 과제라 공대생들의 영원한 친구인 MATLAB으로 코드를 짜놨습니다. FPGA는 Xilinx를 사용하고 있고 Xilinx가 ISE라는 툴을 사용했을 땐 MATLAB(Simulink)을 이용한 VHDL CodeGen 툴을 만들어 놨는데 이 놈들이 ISE에서 Vivado로 아예 툴을 새로 만들더니 이 CodeGen 툴을 짜잔! 하고 없앴습니다.

 덕분에 CodeGen을 사용하려면 제한된 환경에서 제한된 ISE 버전을 통해서 만들어야 합니다.

 

자일링스 망했으면 좋겠네요.

 

 

2. 여기에 한 술 더 떠 MATLAB으로 프론트 엔드마저 만들어 놨습니다. 덕분에 GUI도 MATLAB으로 짜야되는 상황.

물론 MATLAB 자체에서도 Deploytool을 통해 객체 라이브러리를 비주얼 스튜디오로 이식할 수 있지만...

 

그 짓을 언제 다하지? 소스는 누가 새로 짜고 소는 누가 키우지?

 

물론 MATLAB에서도 GUI를 만들 수 있게 GUIDE 툴을 따로 제공은 해주지만 버린 자식 취급인지 추가할 수 있는 콜백 GUI 구성도 몇 개 없습니다. 한 10개 되는 것 같은데 꽤 많은 선택지를 주는 C#이나 Measurement Studio와 비교해 보면 매우 초라하고 볼 품 없죠. 쓰레깁니다. 그냥.

 

 

3. 저 혼자 짭니다. 설명 생략.

 

 

4. 여기가 본론인데, 프로그램이 느립니다. 최적화를 해도 느립니다. MATLAB한테 뭘 바랬겠냐만은...

말하기 전에 구조적인 부분을 먼저 간략하게 설명하면 FPGA에는 DAQ가 달려있어 실시간으로 데이터를 받습니다. 한 번에 1024 byte로 빠르면 0.2초씩 받습니다. 문제는 이걸 실시간으로 표현해줘야 하는데 당연히 느릴 수 밖에....

 

그래서 뭔가 효율적인 방법이 없을까 하다가...

 

parfeval.JPG

 

parfor.JPG

 

이 두 함수를 발견하게 됩니다.

Parallel Pool을 통한 비동기적 함수 호출을 가능케 만드는 함수와 병렬 연산 루프입니다.

 

쓰는 방법은 굉장히 간단하지만 귀찮은 조건이 걸려있어요.

 

1) Parallel Pool을 통한 병렬 연산은 전역 변수를 이용할 수 없다.

2) 연산만 병렬이지 다른 함수들을 병렬로 사용할 수 있다는 얘기는 아니다.

3) 핸들은 Parallel Pool로 넘길 수 있고 실행도 되지만 결과에 반영되지 않는다.

4) 디버깅 불가 ( 오류를 객체를 열어서 알아서 찾아야함 )

 

1번은 병렬 연산의 특성상 그럴 수 있다고 넘어갈 수 있는데 2,3번은 무슨 말이냐면...

 

MATLAB에서 자주 사용하는 plot, imshow같은 Image Processing 관련 함수들은 병렬 호출이 안됩니다.

(다른 특정 함수도 아마 그럴 가능성이 높음)

GUI로부터 만들어진 핸들을 Parallel Pool로 넘겨주면 얘들이 이게 핸들인지 인식을 못합니다.

 

결론 : 안됨

:((((((((((((((((((((((((((((((((((((((((((((((((((((((((((

 

이럴거면 왜 만들었나.

솔직히 병렬 연산까진 기대 안하더라도 비동기적 함수 호출은 필요했거든요. MATLAB 함수들이 꽤 느린 편이라...

 

그래... 희소/비희소 행렬 연산, 2-D 컨벌루전, 영상 처리등을 부분적이라도 병렬 연산하면 좀 나아지지 않을까?

그래서 결국 병렬 연산이 가능할 만한 구간을 병렬 연산으로 만들어서 적용을 하고 총 연산 시간을 실험한 결과

 

기존 : 1분 40초

적용 후  : 10분 40초

 

 

 

ㅎㅎ.....

 

 

* 추가

MATLAB도 지들 GUI 툴이 X신같다는걸 알았는지 JAVA Swing 라이브러리가 존재하긴 합니다.

근데 이 라이브러리는 차후 릴리즈 버전에서 폐기된다는 말이 있고, 현재 GUI와 충돌이 일어나는 부분이 간혹 있습니다.

게다가 라이브러리만 있지 딱히 툴이 있는 건 아니라서 정말 쓸려면 코드를 일일히 다 써줘야 합니다. 그리고 라이브러리에 관련된 레퍼런스도 그렇게 많지는 않네요.



  • profile
    title: 가난한카토메구미      카토릭교 신자 입니다.! 카토는 언제나 진리 입니다. 2018.06.04 11:24
    시간이...ㅠ
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.04 11:29
    전 지금 하루를 날려먹어서 매우 화납니다 ;((((((((((((((
  • profile
    아란제비아 2018.06.04 11:49
    어려운 용어들이 한가득...!
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.04 12:39
    공대생은 나중에 배우게 됩니다.
    그것은 숙명 그것은 무스비
  • profile
    rnlcksk      감사합니다! 2018.06.04 11:51
    끔찍하네요.
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.04 12:41
    이 얼마나 끔찍하고 무서운 삽질입니까
  • ?
    쿠쿠리123 2018.06.04 12:17
    호출되는 함수 개별적으로 사용되는 시간을 측정해 보신 다음, 가장 시간이 많이 들어가는 함수가
    병렬호출 불가 함수라면, 직접 구현하여 병렬처리를 하는게 어떨런지 합니다,.

    컨볼루젼이랑 개별적으로 돌릴 수 있을 만한 영상처리 알고리즘이 있으면,
    따로 빼서 병렬처리 가능하면 좋을 것 같네요.

    덩치가 많이 큰 행렬이 있으면, 열이나 행을 블록단위로 나눠서 병렬처리한 후 나중에 합치는 방법도 괜찮습니다.
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.04 12:27
    컨벌루전이라고 했지만 사실 쓰는 함수는 Xcorr2 (2D Cross Corelation)이긴 합니다. 원리는 비슷하니까... 뭐..

    그래서 먼저 가장 많이 시간이 드는 연산이나 함수들을 스톱워치로 알아내고 하나씩 거쳐서 테스트 해보긴 했었습니다. 결과적으론 연산양만 따지고 보면 예상대로 고차원 행렬에 대한 연산이 가장 효과가 크긴 했는데 그렇다고 그닥 재미는 많이 보진 못했습니다.

    아무래도 가장 문제가 되는 건 기존 MATLAB에서 제공되는 함수를 병렬화 시킬 수 없다는 거죠. 이게 가장 느리고 리소스도 많이 잡아먹더라구요. 딱히 병렬화를 못시킬건 없어보이긴 한데 왜 안되는지 모르겠습니다. MATLAB Central에서도 '응 못해ㅎ' 라고 말하는 사람이 많더라구요

    https://kr.mathworks.com/matlabcentral/answers/260118-parallel-processing-to-update-plot
  • ?
    dom607 2018.06.04 12:20
    ISE에서 Vivado로 넘어가던 과도기에 VHDL 코딩 업무와는 완전히 손절한게 참 다행이라고 생각하고 있습니다. Matlab 병렬연산은 어떤 경우 오히려 더 느려지는 현상 때문에 너무 빡친 나머지 병렬 처리해야 되는 부분을 CUDA kernel로 구현한 뒤 불러와서 사용했었던 기억이 나네요.
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.04 12:38
    저도 VHDL이나 Verilog는 안 쓸 줄 알았는데 VHDL로 백엔드가 짜져있는 장비들이 많아서(특히 제 분야에 가는 장비 중에는 필드 특성상 노후화 된게 많아서) 조금씩 개선할려면 알아야 하더라구요. 근데 Verilog로 짜진건 없네요. Verilog가 더 편한데...

    저도 사실 CUDA 가속을 좀 생각해 봤었는데, 이만큼 재미도 못느끼는 마당에 그걸 해봤자 얼마나 빨라지겠나... 좀 회의적이 되서 그 쪽까진 손을 안댔습니다. :(
  • profile
    이유제 2018.06.04 12:41
    제가아는 다섯이상의 자칭 '젊은-'을 사용하지않으시는 FPGA 엔지니어분들은 자신이 배우고 한창쓰던 툴의 버전을 평생가져간다하더라구요...
    저도 아트웍의경우 알티움을배워야지배워야지하다가 구버전의 ORCAD - LAYOUT PLUS만 사용하게되네요..
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.04 13:08
    아직도 쿼터스나 모델심 가르치는 학교도 많죠.
    솔직히 자기 손에 익은 툴이 가장 좋죠. 호환성 문제만 안나온다면....
  • ?
    PHYloteer      🤔 2018.06.04 13:21
    알테라쪽이 학교대상으로 할인을 잘 해주는 편이고 비교적 라이센스비도 싸서 학부 실습용은 알테라를 많이 써요. 알테라 쓰면 쿼터스는 써야죠.. 모델심은 뭐 솔직히 시놉시스나 케이던스쪽 소프트웨어들보다 인기없긴 한데 싼 맛에 현업에서도 쓰긴 할 겁니다.
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.04 13:25
    저는 학부때 Vivado를 통해 Zynq쓰는 게 마지막이였네요. 그걸 보면 알테라보단 자일링스가 좀 더 매력적인지는 모르겠네요. 근데 정말 고성능을 쓸게 아니라면 뭘 쓰든 다 또이또이하긴 할테니... 싼 게 좋겠죠
  • ?
    PHYloteer      🤔 2018.06.04 12:57
    그래서 연산속도가 중요한 랩에서는 결국 걍 생짜 C나 포트란 쓰더라고요.. 저는 귀찮아서 그 짓은 못하지만요. 걍 어떻게든 파이썬가지고 기성 선형대수 라이브러리나 잘 갈궈보고 말지.. (매트랩에서는 병렬화를 안 해봐서 잘 모르겠습니다만 넘파이 기준으로는 뭐 잘 쓰레드 파주면 괜찮게 되더랩니다.)

    그런데 0.2초에 1024바이트씩 받는다는 건가요? 아무리 그래도 그렇게 많은 데이터 같지는 않은데요.. 로직이 많이 복잡한가 봐요?
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.04 13:16
    4채널의 16비트 ADC를 1024씩 받는데 강한 방사선이 몰리면 이거보다 더 빨라지는 경우도 있습니다. 게다가 한 번에 받는 데이터의 양이 채널당 5배 더 늘어나는 식르로 가변적일 수도 있습니다. 그리고 한 번에 받는 양이 적더라도 이게 10분, 20분 이렇게 모이면 무시할 수는 없는 크기니까요. 게다가 이 축적된 데이터를 가지고 후미에서 연산하는 종류도 다양합니다.

    그래서 어떻게든 속도를 좀 늘리려고 많이 생각해보고 적용도 해봤는데 역시 제 실력과 현실에 타협하게 되더라구요. :( 제 선에서 할 수 있는 가장 효과적인 방법은 애시당초 연산양과 함수 호출을 최대한 억제하면서도 실시간'처럼' 보이게 만드는 것이였습니다. 눈속임이죠 뭐...

    결국 높으신 분들은 정밀한 매커니즘이고 뭐고 알 바 아니고 눈에 보이는게 더 중요하다고 생각하니까요.
  • ?
    PHYloteer      🤔 2018.06.04 13:32
    오오 방사선 오오.. 신기한 일 하시네요 (...)

    뭐 결국 눈속임으로 넘기는 건 이 바닥에선 어쩔 수 없는 것 같습니다.
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.04 15:44
    잘 짜이고 정밀한 코드 따위는 장식인거죠. 높으신 분들은 그걸 잘 모르니까요. 쩝...
  • profile
    쮸쀼쮸쀼 2018.06.04 19:00
    이렇게 된 이상 Julia로 간다! 같은 걸 외쳐보시는 건…?
  • profile
    LeonHeadt      다음 생엔 부잣집 고양이로 태어나고 싶다. 2018.06.05 08:59
    사표각 오지게 박습니다!

작성된지 4주일이 지난 글에는 새 코멘트를 달 수 없습니다.


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
17607 잡담 저도 MSI USB 송장이 떴습니다! 1 file Blanc91 2018.06.04 171
17606 잡담 하......이건뭐..... 8 file 뚜까뚜까 2018.06.04 232
17605 잡담 MSI USB 송장이 떴습니다.! 9 file title: 가난한카토메구미 2018.06.04 172
17604 잡담 존재감 뿜뿜 3 file title: 저사양0.1 2018.06.04 209
17603 잡담 M-sata는 망했나보네요...? 22 ani-love 2018.06.04 1908
17602 잡담 프로그래밍을 배우고 싶은데 어려워요 3 금산조 2018.06.04 358
17601 잡담 nvidia 부스 상황 18 file 낄낄 2018.06.04 620
17600 잡담 공항에서 보이는 한국 사람 7 낄낄 2018.06.04 583
» 잡담 얼어죽을 병렬연산 20 file LeonHeadt 2018.06.04 1506
17598 잡담 다나와 로또 이벤트 당첨!! 5 title: 가난한카토메구미 2018.06.04 554
17597 핫딜 롯데리아 신규버거 세트 3000/기프티콘 8 title: 가난한까마귀 2018.06.04 348
17596 잡담 월요병이란.... 10 스위키 2018.06.04 149
17595 잡담 E5400 PC보다 스냅드래곤 435 가 더 빠르게 느껴... 12 conix 2018.06.04 825
17594 이벤트 [9일] 와사비망고 스위치 USB 3.1 Type C-C 고속... 낄낄 2018.06.04 700
17593 잡담 군 전역 후 제 몸에 마법이 걸렸습니다. 19 프레스핫 2018.06.04 1059
17592 잡담 가끔 드는생각이 인텔 내장은 왜이렇게 구릴가요? 59 iks4rus 2018.06.03 1181
17591 잡담 M.2가 52도를 찍네요 ㅠㅠ 20 A11 2018.06.03 10561
17590 잡담 어..음 4790K가 이제는 고인 이군요... 20 file 스파르타 2018.06.03 926
17589 잡담 밀리시타 & 데레스테 pc 4K 구동 성공 26 file Ahn 2018.06.03 4714
17588 잡담 게임 웹진/커뮤에 새로운 지각변동의 조짐이 보이... 12 file 미야™ 2018.06.03 518
17587 잡담 아이폰에는 nPlayer는 필수 어플이에요. 13 file title: 부장님호무라 2018.06.03 2013
17586 잡담 무슨 영상 하나 만드는 데 두달이나 걸렸네요 12 숲속라키 2018.06.03 300
17585 잡담 지르고 싶습니다.!! 3 file title: 가난한카토메구미 2018.06.03 256
17584 잡담 오늘 카페에 갔는데... 5 프레스핫 2018.06.03 389
17583 퍼온글 이게 천조국 2 Hack 2018.06.03 677
17582 잡담 미니노트북 잡담... 45 올드컴매니아 2018.06.03 1112
17581 잡담 밥을 먹어도 영 힘이 안나네요. 역시 고기 8 타미타키 2018.06.03 400
17580 잡담 월드컵이 코앞인데... 10 문워커 2018.06.03 294
17579 잡담 용산 건물이 무너졌군요; 7 하뉴 2018.06.03 619
17578 잡담 노트북을 하나 영입할까하는데 살만한게없네요.. 19 iks4rus 2018.06.03 594
목록
Board Pagination Prev 1 ... 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 ... 2790 Next
/ 2790

AMD
더함
MSI 코리아
한미마이크로닉스

공지사항        사이트 약관        개인정보취급방침       신고와 건의


기글하드웨어는 2006년 6월 28일에 개설된 컴퓨터, 하드웨어, 모바일, 스마트폰, 게임, 소프트웨어, 디지털 카메라 관련 뉴스와 정보, 사용기를 공유하는 커뮤니티 사이트입니다.
개인 정보 보호, 개인 및 단체의 권리 침해, 사이트 운영, 관리, 제휴와 광고 관련 문의는 이메일로 보내주세요. 관리자 이메일

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소