我的问题基本上归结为“我如何让这段线程 Python 代码在我的 GPU 而不是我的 CPU 上运行?”
我正在开发一个类似于旅行推销员问题的程序,在该程序中我递归地检查每个可能的移动(当然还有优化)。棘手的是全局变量的保留——python 的本机线程在这方面做得很好,而我使用的算法完全依赖于全局变量——我知道,这很糟糕。冒着进入太多细节的风险,我的许多线程将不得不产生它们自己的单独线程,直到某个“深度”(我发现大约 3 个效果最好),此时每个线程将不再被并行化,并且函数将被线性执行。
一开始它工作得很好,然后我通过线程化了一些性能改进。然而,它仍然不够好——如果我可以维护全局变量,那么理论上这个程序可以完全并行化,因此我认为它可以在 GPU 上快速运行。
目前代码很乱,但这是用伪代码表达的一般思想:
int x
function f( depth ): # THE RECURSIVE f( n ) TEMPLATE
global x
# do stuff with x
if depth <= maxDepth then # if we're still below the max depth
# then we'll thread the next round of recursion.
for i = 0 to n # this number will change each time
call_in_thread( target = f,
args = depth + 1
) # obviously the arguments
# passed to each thread will be a little different,
# but that shouldn't be a problem
else # if we're already past the max depth,
# then we won't bother parallelising,
# as the overheads would outweigh the benefits
for i = 0 to n #
f( depth + 1 ) # THE SELF-RECURSIVE CALL
所以我的问题很简单——我可以(轻松地)从线程 python 程序转换为在我的 GPU 上运行的线程 python 程序,同时仍然保持全局变量的使用?我知道 Numba/NumbaPro 的存在,但它们是非常令人生畏的软件包,我不确定像我这样的程序将如何转化为该框架。