2013-04-18 3 views
0

저는 컴퓨터 비전 프로젝트에서 많은 양의 데이터를 관리하는 것과 관련된 개념적 조언을 찾고 있습니다. 나는 문제를 일으키고있다. a) 개념화하고, b) 카메라로부터 프로그램으로의 입력과 코드에 의해 생성 된이 큰 데이터 스트림을 조정하는 개념을 구현한다.C++ 멀티 스레드 데이터 관리

그래서 데이터 내가 그들에게 전화 할게으로 다섯 별도의 '스트림'으로 분리 가능에 대한 핸들을 얻을 수 있습니다

원시 프레임 (카메라에서 직접 입력) 대상 이미지 (서브 프레임, 촬영 타임 스탬프) 이전 이미지 스트림 ( 차량 자세 데이터 (GPS 바디 각도 등의 차량에 무선 직렬 포트 연결)에서 우리 경우 자세 데이터가

일반적인 흐름 타임 스탬프) 원료 프레임 이것을 완전히 순차적으로 수행하는 것은 다음과 같습니다.

Frame = grabInputFrame(); 
TargetsVector = searchForTargets(Frame); 
VehicleData = getDataFromVehicle(); 

for each Target in TargetVector (
    targetData = processData(Target, VehicleData); 
    updateTargetLog(targetData); 
} 

알고리즘은 매우 프로세서 집약적이며 순차적으로 관련이 없으므로 스레드로이 작업을 수행하려고합니다. (즉, GPS 데이터를 얻기 위해 색상 데이터가 필요하지 않습니다. 대상의). 그러나 이미지와 목표물과 타임 스탬프로 이미지를 조정해야하므로 올바른 이미지에 올바른 차량 데이터를 사용할 수 있습니다.

친구가 관계형 DB 접근 방식을 제안했지만 사용하고 있습니다. C++. 필자가 궁금해하는 것은 C++에서 관계형 DB를 모방하는 방법 (타임 스탬프 또는 대상 ID가 데이터 또는 대상 이미지와 연결되는 것과 같은 데이터와 키를 연관시키는 방법)이 있습니까? SQL DB에 연결하면 더 쉽게 관리 할 수 ​​있습니까? 그렇게하는 것과 관련된 상당한 성능 저하가 있습니까? 여기서 가장 중요한 점은 내가하는 일을 모두 공유 데이터를 잠글 수 있어야 안전하게 멀티 스레드 할 수 있다는 것입니다.

이와 같은 계층 적 데이터 구조에 대한 경험이있는 사람이 내 상황을 밝힐 수 있기를 바랍니다. 나는 당신의 아이디어와 비판에 대해 미리 감사드립니다.

답변

0

OpenMP가 이러한 문제점을 해결하는 데 도움이 될 수 있습니다. 잠금 및 원자 적 조작을 위해 제공된 내장 함수가 있습니다. 5 개의 병렬 작업이 있으므로 5 개의 스레드를 만들고 threadId를 기반으로 다른 작업을 수행 할 수 있습니다.