2013-04-18 152 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坐标的目标)。但是,我确实需要使用这些图像来协调带有目标和时间戳的图像,因此我可以将正确的车辆数据用于正确的图像等。

我的一位朋友提出了一种关系数据库方法,但我正在使用C++。我想知道的是,有没有一种方法可以模仿C++中的关系数据库(具有与数据关联的键,如时间戳或与数据或目标映像关联的目标ID)?连接到SQL数据库会使这更容易管理吗?这样做是否会有显着的性能损失?这里最重要的一点是,无论我做什么,我都必须能够锁定共享数据,以便我可以安全地进行多线程。

我希望有这样的分层数据结构经验的人可以对我的情况有所了解。我提前感谢你的想法和批评。

回答

0

对于这样的问题,OpenMP可能会有所帮助,这里面提供了用于锁和原子操作的内置函数。由于您有5个并行操作,因此可以创建5个线程并基于threadId执行不同的操作。