更简单的带有持久线程池的MEX多线程

1.1.2版本(12.9 KB)由 oreoman
通过更容易地添加对多线程的支持和消除多线程开销,进一步加快您的MEX文件的速度。金宝app

59下载

更新2021年7月5日

从GitHub

在GitHub上查看许可证

真不敢相信这真的有用。
对于不能向量化的较小问题,在MEX文件中正确设置多线程可以产生足够的开销,单线程解决方案通常更快。使用线程池可以消除这种开销。池只创建一次,然后可以在对MEX函数的多次调用中重用。然后通过在命令行中输入'clear all'或'clear mex'(或关闭MATLAB)来关闭线程池并从内存中清除。
根据问题的不同,您可能会看到高达'maxNumCompThreads'的加速,尽管这不太可能。在我非常基本的测试中,我看到在一个小问题的多次迭代中加速了~2倍(使用4个线程)。对于我为实际问题创建的这个插件,我看到与标准MEX多线程相比,它的速度提高了约60%,总共节省了几天的模拟时间。
此外,向MEX文件添加多线程现在要容易得多,因为您只需要学习如何使用一个函数AddThreadPoolJob。然后,您只需要记住使用SynchronizeThreads关闭MEX文件,这样就不会出现可怕的竞态条件。
请参阅包含的madd_threadpool.c示例,并与使用常规多线程的mad .c进行比较,以找出发生了什么。在threadpool.h中还有更多的文档。要查看单线程与多线程、线程池代码与向量化代码的比较,请编译并查看threadpool_timings.m。
注意:适当向量化的MATLAB代码总是比这更快。只有当你不能向量化你的代码时才使用这个东西,但它仍然有助于直接的并行化,例如在多维度上积分递归关系。

引用作为

oreoman(2023)。更简单的带有持久线程池的MEX多线程GitHub (https://github.com/michael-nix/MATLAB-MEX-Threadpool)。检索

MATLAB版本兼容性
使用R2019a创建
兼容R2018a及后续版本
平台的兼容性
窗户 macOS Linux

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!

无法下载使用GitHub默认分支的版本

版本 发表 发布说明
1.1.2

简单修复了madd_threadpool.c中的错误

1.1.1

连接到GitHub…

1.1.0

添加了一些帮助函数,使我的工作更轻松,并可以在多个MEX文件中使用相同的线程池。因为我太懒,所以没有适当的记录。

1.0.0

要查看或报告此GitHub插件中的问题,请访问GitHub库
要查看或报告此GitHub插件中的问题,请访问GitHub库