Q&A 게시판

cancel
Showing results for 
Search instead for 
Did you mean: 

그래프 퍼포먼스가 나오지 않는 현상

Solved!
Go to solution

안녕하세요~

subvi당 3개의 그래프로 총 96개의 그래프를 실시간으로 출력하는 프로그램을 만들고 있는데 그래프의 wave가 툭툭 끊기는 현상이 있어서 질문드립니다.

 

현재 cpu는 i7 10700으로 꽤 고사양의 cpu를 사용하고 있으나 그림에서 보시는 바와같이 하나의 쓰레드에 작업이 몰리는 현상이 있습니다.

이 부분은 wave를 그리는 그래프를 없앴을 경우 반절로 떨어집니다. 결론적으로 그래프(xy그래프를 사용합니다)에 wave를 그리는 작업이 많은 리소스를 먹는 것으로 확인되었고 이러한 작업이 여러개의 cpu 쓰레드에 분배되지않고 하나의 쓰레드에 몰리는 현상이 있습니다. 

 

제가 알기로는 labview를 구동했을 경우  코어/쓰레드에 이러한 작업 리소스를 자동으로 분배하는 것으로 알고 있는데 한쪽에만 몰려서 wave 퍼포먼스가 나오지 않는 것으로 보입니다. 

 

현상을 완화하고자 패널업데이트를 70ms로 돌려서 일부 리소스를 다운시키는데는 성공했으나 퍼포먼스에 큰 변경사항은 없는 상황입니다.

프로그램 특성상 더 낮은 스펙의 cpu에도 구동이 원활하게 될 수 있도록 해야하는데 이러한 프로그램 구동 리소스를 cpu의 다른 쓰레드에 수동으로 분배할 수 있는 방법이 업을까요?

 

0 Kudos
Message 1 of 4
(125 Views)
Solution
Accepted by Codeblack

코드를 확인해 봐야 알겠습니다만...

 

기본적으로 그래프는 루프 내에서 배열로 데이터를 누적시켜 그립니다.

 

코드가 동작해 그래프를 그리기 시작하면, 데이터를 누적하고, 그 누적된 데이터는 코드가 동작하는 동안 지속되므로, 전부 컴퓨터 리소스를 차지하게 됩니다.

 

한가지 더 말씀 드리자면, LabVIEW에서는 Loop를 하나의 쓰레드 개념으로 설명합니다.

 

설명 할 때 보면 Timed Loop를 예로 드는데, Timed Loop 설정으로 CPU Core 를 설정 해 줄 수 있습니다.

 

이러한 기능 때문에 LabVIEW 가 OS 를 이용해 CPU 점유율을 자동으로 배분하지 않는 것으로 보입니다.

 

코드를 좀 더 부하가 가지 않는 방향으로 나눠서 만들어 보시길 권합니다.

 

저 같은 경우는 저장을 하고, 탭을 이용해 그래프를 가리고 있다가, 그래프를 볼때 이벤트를 발생해 파일을 읽고, 그 데이터 뒤에 이어서 나머지 데이터를 그리는 방식을 취했습니다.

 

이게 그나마 조금 낫습니다.

0 Kudos
Message 2 of 4
(99 Views)

실시간으로 계속 그래프를 그려야하는지라...여리군님이 말하는 방법으로는 진행하기 힘들것 같습니다 ㅠ.ㅠ

결국엔 전체 코드를 리빌딩하는 수준으로 가야될 것 같네요..최대한 while문을 없애는 방향으로...

 

0 Kudos
Message 3 of 4
(78 Views)

그래프를 최근 일정 시간만 디스플레이 하게 하는 방법도 있습니다.

 

전체 그래프는 특정 이벤트 때 저장 파일을 불러와 보여주는 방법을 쓰셔도 됩니다.

 

전체 데이터를 계속 그래프로 디스플레이 한다는 것은 좀 생각해 봐야합니다.

 

얼마나 많은 데이터일지는 모르겠습니다만, 표시 방법을 타협을 보셔야 할 겁니다.

0 Kudos
Message 4 of 4
(73 Views)