【发布时间】:2021-05-13 21:37:06
【问题描述】:
我正在尝试多线程前向后算法以找到边际概率。这将用作训练 CRF 的子模块。以下是单个示例的 CRF 训练前向部分的伪代码(来自here)。
for i in 0 .. T-1:
for j in 1 ... N:
for k in 1 ... N:
p = alpha[(i-1)][k] + trans[k][j] + obvs[j][i]
alpha[i][j] = logadd(alpha[i][j], p)
我计划使用 N 个线程(对于我的用例,N 最多为 10)来独立计算 alpha 矩阵的列,并在完成计算每一行时与屏障同步实际上比原始顺序代码运行更慢.
我相信同步机制的开销是这个问题的根源,因为我使用池中的线程和所有操作的可重用屏障。是否有更好的设计我应该考虑,或者 N 的小尺寸不能证明并行计算 alpha 列是合理的?
【问题讨论】:
标签: python multithreading machine-learning crf