基于OpenCL的卡尔曼滤波

基于OpenCL的卡尔曼滤波,opencl,kalman-filter,Opencl,Kalman Filter,我是一名新的OpenCL程序员,刚刚进入GPGPU计算领域,我使用的是Nvidia Quadro 600。 我正在做一项基于GPU编程的研究工作,我的目标是使用SIMT方法为OpenCL编写一个简单的卡尔曼滤波内核。我找到了一个文档,它描述了如何使用CUDA实现这一原理,我认为这是一个类似于OpenCL的方法 卡尔曼滤波器对线性系统进行的基本运算有三个方程,每个方程都涉及矩阵操作,计算卡尔曼增益矩阵(K)、状态估计(x~),并更新误差协方差矩阵(p)以进行下一次状态估计。对于从实际系统中获取的每

我是一名新的OpenCL程序员,刚刚进入GPGPU计算领域,我使用的是Nvidia Quadro 600。 我正在做一项基于GPU编程的研究工作,我的目标是使用SIMT方法为OpenCL编写一个简单的卡尔曼滤波内核。我找到了一个文档,它描述了如何使用CUDA实现这一原理,我认为这是一个类似于OpenCL的方法

卡尔曼滤波器对线性系统进行的基本运算有三个方程,每个方程都涉及矩阵操作,计算卡尔曼增益矩阵(K)、状态估计(x~),并更新误差协方差矩阵(p)以进行下一次状态估计。对于从实际系统中获取的每个测量,这三个步骤都是迭代的。 考虑到SIMT方法,我认为在线程块内的每个gpu线程上执行一次卡尔曼滤波器迭代,我向每个线程发送计算迭代所需的值(实际系统测量的输入和输出,线性系统矩阵)

有一些更好的设计,我可以考虑用OpenCL来完成这个算法吗? 在一个单独的内核上以并行方式进行矩阵操作是可能的(并且是有用的)

另一个问题:假设我们有k个迭代,对于每个迭代k,我们计算步骤k+1的p,将迭代k-1中步骤k的p作为输入。。。由于每个线程计算一次迭代,因此可以同步线程k以等待线程k-1的P矩阵

更新:经过多次搜索和尝试后,我认为不可能将针对此问题的实现(如上所述)与OpenCL操作原则相适应。我发现的唯一方法是将每个矩阵运算并行化,可能使用更多的GPU同时计算每个矩阵运算。这种实现的真正效率可以通过使用大型线性系统进行过滤来实现(这意味着:它可以很好地处理大型矩阵)