使用 Matlab 进行多线程处理

2024-03-20

我正在开展一个 Matlab 项目,我们必须优化性能,并且我正在考虑并行化从 .m 文件进行的几个函数调用。

这个想法很简单,从 Matlab 文件 (.m) 调用编译为 MEX 的 C 文件,然后从该 C 文件创建几个线程并从每个线程回调 matlab 函数。

理论是有效的,我可以创建线程,我也可以调用matlab函数,问题是我无法从线程调用matlab函数:

//Global variables
mxArray **g_plhs;
mxArray **g_prhs;
int g_nlhs;
int g_nrhs;

//Thread function
DWORD WINAPI my_function( LPVOID lpParam ) 
{
    mexCallMATLAB(g_nlhs,g_plhs,g_nrhs,g_prhs,"matlab_function");
    return 0; 
}


//Main function
void mexFunction(int nlhs, mxArray *plhs[],
    int nrhs, const mxArray *prhs[]) {

    DWORD dwThreadIdArray[MAX_THREADS];
    HANDLE  hThreadArray[MAX_THREADS]; 
    g_plhs = plhs;
    g_prhs = prhs;
    g_nlhs = nlhs;
    g_nrhs = nrhs;

    hThreadArray[0] = CreateThread( 
        NULL,                   
        0,                      
        my_function,            
        NULL,                   
        0,                      
        &dwThreadIdArray[0]);   

    WaitForMultipleObjects(MAX_THREADS, hThreadArray, TRUE, INFINITE);

    for(i=0; i<MAX_THREADS; i++)
    {
        CloseHandle(hThreadArray[i]);
    }
}

使用 matlab 时,我们对该选项有任何限制吗? 有人尝试过这样的事情吗?

编辑:是否有任何选项不需要并行工具箱?


您只能从 MATLAB 主线程调用 mx* 和 mex* 函数。您可以编写多线程 MEX 文件,前提是这些文件在 mx 接口以下的级别上工作。如果您需要多个 MATLAB 解释器,则需要多个 MATLAB 进程。一种方法是通过 @You 指出的并行计算工具箱。这给你PARFOR循环和SPMD用于同时运行事物的块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Matlab 进行多线程处理 的相关文章

  • 如何使用按位运算根据另外两个字节来分配一个字节的特定位? (根据蒙版进行位混合)

    我有3个字节 一个字节决定了第 3 个字节的哪些位需要更改 1 表示位需要更改 0 表示不应发生更改 第 2 个字节决定变化的位分配为 1 还是 0 第三个字节是发生变化的地方 有没有办法使用按位运算符来实现此目的 如果是这样 怎么办 一个
  • 如何在 C# 中将 IEnumerable 转换为 Enum?

    我已将多个字符串解析为枚举标志 但看不到将它们合并为单个枚举位字段的巧妙方法 我使用的方法循环遍历字符串值 然后 将值转换为 Enum 对象 如下所示 Flags public enum MyEnum None 0 First 1 Seco
  • 在 C# 中读取并发送 mp4 文件

    我使用以下代码从服务器读取 mp4 文件并通过 http 发送它 我的服务器端是 mvc4 控制器 有趣的是 视频在 Chrome 中渲染得很好 但在 ios 设备上没有得到任何东西 所以我认为这可能是响应流标头问题 我缺少什么吗 var
  • 具有自定义字段名称的 RavenDB 查询索引

    我在 RavenDB 中收集了 Message 文档 定义 class Message string Content Tag Tags class Tag string Value 我有索引 from doc in docs Message
  • 如何设置 QTableView 中特定单元格的线条样式?

    我正在使用 QT GUI 我正在使用 QTableView 实现一个简单的十六进制编辑控件 我最初的想法是使用一个有十七列的表格 表的每一行都有 16 个十六进制字节 然后在第十七列中显示该数据的 ASCII 表示形式 理想情况下 我想编辑
  • C++变量声明和初始化规则

    考虑以下声明和初始化类型变量的方法C C c1 C c2 c2 C C c3 C C c4 C 所有这些是否完全等同 或者其中一些可以根据确切的定义而有所不同C 假设它有公共默认值和复制构造函数 这些意味着 C c1 default con
  • C# 中是否有相当于 php array_merge 的函数

    如果不是 创建它的最佳方法是什么 注意 合并不仅仅是附加 它融合了相同的键 此功能存在于 List 元素上 在 C 中 数组是固定宽度的项 因此在不创建新数组的情况下无法修改大小 然而 列表却是另一回事 你可以做 List
  • 如何强制操作系统收回内存? (C++)

    在我的 C 代码中 我分配了大量内存来创建树 然后在每个节点中使用 删除 来释放内存 删除所有内容后 我检查操作系统使用的内存量 发现内存未释放 这是预期的 因为该进程不会立即将内存返回给操作系统 因为它仍然可能会再次使用它 问题是 我在删
  • VS Code 不会构建具有多个 .cpp 源文件的 C++ 程序

    请注意 我在 Ubuntu 17 10 上使用 VS Code 并使用 GCC 编译器 我在构建一个使用附加 cpp 文件的简单程序时遇到问题 我可能在这里遗漏了一些明显的东西 因为我对编程相当陌生 但我会解释到目前为止我所做的事情 这阻止
  • Mono 的 DNS 刷新超时

    虽然目前Mono项目的ServicePointManager类有DnsRefreshTimeout属性启用到其接口中 相关属性未实现 调用示例 ServicePointManager DnsRefreshTimeout 10 60 1000
  • 如何分配二维数组? [复制]

    这个问题在这里已经有答案了 我需要创建一个二维数组 目前我将其创建为int a 100 100 但我需要使用动态分配内存malloc在C语言中 我用了代码 include
  • 为什么 ReadKey 在从 Git Bash 运行 .net-core 控制台应用程序时会抛出异常?

    这是代码 ConsoleKeyInfo cki while cki Console ReadKey true Key ConsoleKey Escape Console WriteLine cki Key 当我使用 dotnet run 从
  • 如何结束用户会话并确保用户已注销?

    我是 aspx 的新手 现在的问题是 因为我正在做一个支持网络的项目 所以我从用户那里登录了 我拖放登录模板 然后使用 Session Authentication username Tostring 存储当前登录用户的信息等 现在我什至使
  • Python 比 C++ 更快、更轻吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何仅从源代码构建 TensorFlow lite 而不是所有 TensorFlow?

    我正在尝试使用 Edgetpu USB 加速器与 Intel ATOM 单板计算机和 C API 进行实时推理 Edgetpu 的 C API 基于 TensorFlow lite C API 我需要包含来自tensorflow lite目
  • 链接的 ostream 内部行为及其在 MSVC 上的结果(与 Clang 相比)

    MSVC 与 GCC Clang 的流 内部字符串和操作排序问题 大家好 我最近刚刚开始更认真地使用 MSVC 来完成我的一个跨平台项目 同时通过以下方式测试输出chainedSTD 流 IE 一系列的obj foo lt lt endl
  • 让 clang-tidy 修复头文件

    我正在将当前使用 gcc 编译的项目移至 clang 并有一堆 gcc 没有生成的警告 Winconsistent missing override clang tidy致力于修复这些错误 cpp文件 但是它不触及hpp文件 因为在数据库中
  • 如何在 c# ASP.Net 中创建具有有效 JSON 输出的 JSON WebService 并使用 JQuery/Ajax 进行查询

    我创建了一个时间 2019 03 17 标签 c ASP NetJSONWebService 但是我在从这个 WebService 读取数据时遇到了很大的麻烦 因为在我看来输出不是有效的 JSON 格式 通常你应该得到一个 对象 对象 作为
  • 人们应该选择 ImmutableDictionary 还是 ImmutableSortedDictionary?

    我听说 NETSystem Collections Immutable集合被实现为平衡二叉树 以满足其不变性约束 甚至是传统上对哈希表进行建模的集合 例如Dictionary 通过使用积分值GetHashCode作为排序键 如果我有一种类型
  • WPF 中的 InvokeRequired [重复]

    这个问题在这里已经有答案了 我在一个中使用了这个函数Windows forms应用 delegate void ParametrizedMethodInvoker5 int arg private void log left accs in

随机推荐

  • 从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的强制转换无效

    Type t typeof int will get this dynamically object val 5 will get this dynamically object nVal Convert ChangeType val t
  • 如何一次刷新Postgresql 9.3中的所有物化视图?

    我正在将一堆数据加载到 PostgresQL 9 3 数据库中 然后我想刷新依赖于更新表的所有物化视图 有没有一种方法可以自动执行此操作 而不是逐一浏览每个视图并刷新它们 我知道 Oracle 可以很容易地做到这一点 但在梳理 Postgr
  • 使用单选按钮组打破键盘焦点

    这看起来很简单 但这对我来说有点令人头疼 给出以下 有效的 xhtml 过渡 代码
  • Angular CLI 将 font-awesome 字体文件输出到 dist root

    你一定要吗eject你的 angular cli 并覆盖 webpack 配置以放置font awesome字体放入 asset fonts 文件夹中 我有这个 angular cli 并且我以这种方式将 font awesome 包含在我
  • Python 特征向量

    eigenvalues eigenvectors linalg eig K 我怎样才能只打印特征向量len K 所以如果有K 2x2矩阵 我得到4个特征向量 如果有的话我怎样才能只打印其中2个len K 2 非常感谢 您将得到两个长度为 2
  • LLVM环境变量在哪里或者LLVM环境是如何配置的?

    作为上下文 我有一台 Mac 我在工作中使用它使用各种自定义构建脚本进行开发 我现在尝试使用同一台机器来玩一些个人 Xcode 项目 第一步 我在 Xcode 11 3 1 中创建一个新的 Single View App 项目 并尝试在我连
  • C# 中的内存使用情况

    我有一个在 C 中使用线程的程序 有没有办法以编程方式了解应用程序的内存使用情况 我想将线程的产生限制为 10 MB 内存 我该怎么做 如果您想要整个正在运行的进程的内存而不是每个线程的内存 那么 get the current proce
  • 用于出版质量图的 Python Pylab pcolor 选项

    我正在尝试使用 DFT 离散傅立叶变换 图pcolor在Python中 我之前一直使用 Mathematica 8 0 来执行此操作 但我发现 Mathematica 8 0 中的颜色条与我尝试表示的数据具有不良的一对一相关性 例如 这是我
  • Java:使用多个 DatagramSocket 接收 UDP 数据报包

    我正在尝试实现一种将 UDP 数据包发送到多个接收者的方法 我认为这应该是可行的设置setReuseAddress true 在接收 DatagramSocket 实例上 我的问题是 在某些情况下 我需要限制与本地计算机的通信 因此限制本地
  • 如何将RGB值转换为色温?

    如何获取以 RGB 值 例如 0 255 之间的三个坐标 表示的颜色并从中生成一个色温 https en wikipedia org wiki Color temperature在开尔文 或泥潭 I see 这个问题 https stack
  • for 循环:C++ 和 python

    我了解如何使用 for 循环 for x 0 x lt 5 x some code 在 C 中 但是 for 循环怎么样 for x in y 至少存在于 python 中 最接近的等效项是基于范围的 for 循环 例如 auto y 0
  • DreamHost 上的 Rails 3?

    我想在 dreamhost 上部署一个小型 Rails 3 应用程序 仅用于测试目的 没什么大不了的 我想知道是否有人已经这样做了 请选择以下选项之一 我做到了 非常简单 方法如下 虽然我没有尝试过 但应该很容易 方法如下 这很复杂 但这应
  • 使用具有根 UITabBarController 的故事板将 ManagedObjectContext 传递给视图控制器

    使用故事板 您无法轻松访问 appDelegate 中的第一个视图控制器 尽管一旦您这样做了prepareForSegue可以轻松地将 ManagedObjectContext 传递到导航堆栈中 我决定为每个需要核心数据访问的视图控制器 或
  • 更新到 OSX 10.9.5 后如何更改 Java 应用程序的签名方式

    刚刚从 OSX 10 9 4 更新到 10 9 5 看起来我必须更改更新后签署 Java 应用程序的方式 因为我现在在签名后得到此输出 export CODESIGN ALLOCATE Applications Xcode app Cont
  • Javascript:向函数原型添加方法

    有没有更短的写法 var controller function constructor controller prototype function1 function Prototype method1 controller protot
  • 我可以/应该编辑 R.java 文件吗?如果是这样,怎么办?

    因此 我正在 Eclipse for Android 4 0 中编写一个简单的计算器 并尝试简化我的代码并使其尽可能简单 我试图清理的地方是我的 findViewById 的 因为我有按钮 0 9 来实例化 所以我有一个十行长的代码块 如下
  • 主动类与被动类

    在 UML 规范上层结构 2 5 仍为 Beta 第 203 页 中 可以通过将 isActive 设置为 true 来指定类为活动类 即 它的每个实例都是一个活动对象 当 isActive 为 false 时 类是被动的 即 它的每个实例
  • 如何嵌入PDF?

    我正在尝试将 PDF 嵌入 HTML 文档 但这似乎仅适用于 Chrome 其他浏览器似乎要么需要插件 要么要求用户单击不是我想要的链接 这是我尝试过的 nbsp alt a href pdfFiles interfaces pdf 以下是
  • 在 Python 中求解 x 的高度非线性方程

    我正在尝试求解以下 dB 方程 为简单起见 我在问题标题中将 dB 表示为 x 方程中的所有其他项都是已知的 我尝试使用 SymPy 象征性地求解 dB 但我不断收到超时错误 我也尝试过使用fminbound from scipy opti
  • 使用 Matlab 进行多线程处理

    我正在开展一个 Matlab 项目 我们必须优化性能 并且我正在考虑并行化从 m 文件进行的几个函数调用 这个想法很简单 从 Matlab 文件 m 调用编译为 MEX 的 C 文件 然后从该 C 文件创建几个线程并从每个线程回调 matl