有谁知道在已经开放的 omp 并行区域中实现稀疏直接求解器的库?我所知道的唯一符合此要求的库是 Pardiso7.2,单用户许可证价值约 8K 美元。
英特尔 MKL Pardiso 和 MUMPS 求解器假定执行环境是单线程的,因此在并行程序中调用接口时,需要使用 omp 单区域进行保护。在这种情况下,激活嵌套并行没有帮助,迭代求解器也没有用,因为要以大约 1M 次的顺序调用内核的同步成本(范数和点积计算)很高。
有谁知道在已经开放的 omp 并行区域中实现稀疏直接求解器的库?我所知道的唯一符合此要求的库是 Pardiso7.2,单用户许可证价值约 8K 美元。
英特尔 MKL Pardiso 和 MUMPS 求解器假定执行环境是单线程的,因此在并行程序中调用接口时,需要使用 omp 单区域进行保护。在这种情况下,激活嵌套并行没有帮助,迭代求解器也没有用,因为要以大约 1M 次的顺序调用内核的同步成本(范数和点积计算)很高。
冒着自我推销的风险,我可以向您指出MyraMath,这是我出于自己/类似的挫折而在此空间中创作的一个包。[由于您提到作为驱动程序的成本,MyraMath 在 GPL/copyleft 下开源,但闭源许可证需要付费]。
我假设您的意图是同时调用多个稀疏分解,但每个分解可能都不足以“将整个机器扔给它”?(即类似于 N 个问题实例,每个问题实例都应用了 P 个核心,或多或少?)。MyraMath 确实支持这种工作流,基本思想是 MyraMath 中的所有并行操作都是使用任务图(想想 TBB 的流程图)完成的,并且 MyraMath 提供了一个 API 来将多个任务图“组合”成一个,然后解决“组合”问题在平行下。(请参阅本教程以获得更多详细信息)。
总而言之,这不是一个需要大量练习的工作流程,所以如果你决定继续它,我会鼓励进行彻底的测试/分析,以确保你通过像这样组织计算来真正领先。
PS:我的游戏当然不是镇上唯一的游戏,您也可以搜索 Clique/Elemental,这可能(?)公开类似的功能(IIRC 它也是基于任务图的代码)。事实上,我必须提到,我经常从多个线程(在我的应用程序中没有锁定机制)中使用 MKL 的 Pardiso,并且没有任何不良影响。但是,我必须仔细检查我的应用程序是否运行具有多个(MKL)线程的那些实例......我不确定。无论哪种方式,我都鼓励您深入了解那里。