问题标签 [mixed-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1104 浏览

c++ - 在 Visual Studio 中直接调用 MATLAB(多线程)

目前我正在尝试直接在 Visual Studio 中调用 MATLAB,但它似乎不起作用。

为了清楚起见,以下面的演示案例为例,即使用 MATLAB 计算2+3. 预计结果 ieans = 5应打印在 lineprintf("%s\n", buf);中,结果为空。顺便说一句,MATLAB 引擎已engOpen()成功打开( )。

更多信息:

  • MATLAB版本:R2014a x64
  • Visual Studio 版本:2013 专业版
  • 该项目的构建平台也设置为x64。
  • 运行代码时会创建 MATLAB 命令窗口,这是预期的。
0 投票
1 回答
1304 浏览

c++ - 加速 Matlab 引擎调用

我正在使用MATLAB Engine API将 MATLAB 与 C/C++ 连接起来。

在我的特定情况下,MATLAB 用于计算某些东西,结果以 C 语言打印。然而,在双方的各种测试中,我注意到 C 语言有显着的性能损失。

以下是 MATLAB 函数调用的示例:

在 C 端,我将类似的函数称为如下:

我在 C++ 中的计时器实现如下所示:

上面的 MATLAB 代码以大约 180 帧/秒的速度运行,包括设置矩阵 ( data),而 C 代码仅以 24 FPS 运行。我使用tic/toc来测量 MATLAB 中的执行时间,而我自己的计时器实现用于 C/C++ 端。

在分析应用程序时,我注意到 MATLAB 引擎调用是瓶颈。我知道 Linux MATLAB 引擎实现使用命名管道与 MATLAB 进行交互,我想知道是否有一种方法可以加快 MATLAB 与其引擎的通信?

0 投票
1 回答
130 浏览

python - 在 C 程序中嵌入 Python 模块时,如何将 C 结构传递给 Python

我有一个可用的 C 程序,现在我正在嵌入一个实现特定功能的 python 脚本。

问题是,传递给 Python 的参数是在 C 中定义的复杂(我的意思是嵌套)C 结构。我希望解决方案能够轻松地进行两种通信方式:

1.在C中创建结构,并将其传递给Python。让 Python 做一些修改。

2.在Python中创建结构。并将其传回给 C。

我正在尝试“SWIG”为结构生成一些包装器,以及一些使用 SWIG for Python 的辅助函数,以便它可以返回结构的一些嵌套部分,以便我可以轻松地通过 Python 访问结构。

这会是一个很好的解决方案,还是我可能会错过一些非常简单的解决方法?

0 投票
2 回答
2415 浏览

c++ - 将 OpenCV Mat 文件转换为 Matlab 矩阵

我创建了一个 Matlab 引擎来将 OpenCV Mat 文件转换为 Matlab 矩阵。但是,我得到了错误的结果。我附上了我的代码,以便您可以直接测试它。

原始图像 结果在 Matlab 中显示

我怀疑下面的代码会导致这个问题,但我不知道如何解决它。

0 投票
0 回答
1312 浏览

c++ - 从 C++ OpenMP 并行调用 Fortran 子例程应该有效吗?

当从 C++ 函数调用 Fortran 子例程并且在 OpenMP 并行 for 构造中调用 C++ 函数时,Fortran 子例程会不时返回不同的值。它是一个黑盒子例程,应该返回相同的结果和相同的输入(50 个参数)。我并行化了子例程调用,以便为数百种不同的输入组合运行它。如果我运行程序两次并打印每个子程序执行的结果,结果是不一样的。

有关问题的详细信息:

  1. 串行版本一致且工作正常,始终给出相同的答案;
  2. 该子程序不使用伪随机生成数;
  3. 子程序调用同一个.F90文件中的其他子程序;
  4. 没有嵌套,没有 openmp pragma 或包含在 fortran 子例程中;
  5. 如果我尝试在 Fortran 子例程中使用 OpenMP API 函数,它们会返回乱码;
  6. 我在使用 gfortran 编译时使用 -fautomatic、-fopenmp 和 -frecursive(顺便说一句,我使用的是 gcc 5.2.0)并且所有子例程都设置为 RECURSIVE。一切都很好地编译和链接,当我运行.exe时问题确实出现了。
  7. Fortran 子例程不访问 I/O。所有变量都通过参数传递。没有 COMMON 或 SAVED 块。所有子程序都使用虚拟参数,并且输出变量在每个子程序内显式初始化;
  8. 我没有使用任何带有#pragma omp parallel for 的OpenMP 子句。
  9. 如果线程数小于可用处理器数,则结果之间的差异数会减少。将线程与处理器绑定并不能解决问题。

代码很大,但我设法在一个示例中对其进行了简化以说明问题:

0 投票
1 回答
1325 浏览

c++ - C++ 和混合编程中指针的默认参数

C++中指针默认参数的使用可以用下面的代码来演示

在这种情况下,程序的输出是

另一方面,如果我尝试将可选参数从 Fortran 传递到 C++,它就不起作用。下面的示例代码演示了这种情况

myfunc.cpp _

Fortran 主程序

并且可以使用以下命令编译混合代码(Fortran 和 C++)而不会出现任何错误

但程序打印

在这种情况下。那么,有没有解决这个问题的方法?我在这里错过了什么吗?我认为在混合编程中使用默认参数并没有按预期工作,但此时我需要建议。

0 投票
1 回答
82 浏览

c++ - MIXED_STR_LEN_ARG 与 gfortran

我有一个混合 C++/Fortran 的程序,其中一个 C++ 字符作为 Fortran 函数的参数给出。

该代码正在编译和使用ifort编译器,使用选项-mixed_str_len_arg指定字符参数的隐藏长度的位置(请参阅https://software.intel.com/en-us/node/525960)。

出于某种原因,我想使用gfortran编译代码,但没有找到任何与此编译器等效的选项。您是否知道类似的选择或其他选择?

0 投票
1 回答
210 浏览

c - 尝试从 Visual C 调用 Intel Visual Fortran 函数

我有两个项目:在我的解决方案中CPart。取决于,后者包含该功能。这是代码FortranPartFortranPartCPartmainmain.c

这是我的 fortran 模块的代码

编译完fortran后,我得到了文件FortranPart.lib。在CPart项目依赖项中,我将其添加为外部库。当我尝试编译和运行时,CPart我得到以下

PS我需要主程序是C,而不是C++。

0 投票
1 回答
612 浏览

c++ - Fortran 的 Pthread 包装器

我是 Fortran 和 C++ 的新手,致力于将两个用 Fortran 和 C++ 编写的程序耦合起来。

我正在尝试创建一个 pthread(detached) 包装器并从我的 Fortran 子例程中调用它并将一个 cpp 函数传递给它。我按照这个链接在 FORTRAN 中调用一个子程序而不阻塞主程序来编写一些代码。

当我执行它时,我得到如下运行时错误。

我使用以下命令编译

这是我可以重现错误的最小代码。

Pthreads_interface.h

pthreads_module.f90

主堡

PCModelpthread 执行的 C++ 函数在哪里。

pcmodel.cpp

理想情况下,我的 Fortran 和 C++ 代码都应该并行运行,一旦 fortran 代码触发线程启动 C++ 函数(PCModel

如果有人可以检查代码并帮助我,那就太好了。

0 投票
0 回答
75 浏览

c++ - 不一致的内存引用

我在 C++ 和 FORTRAN 之间做一些混合编程。如代码所示,将字符数组从 FORTRAN 传递到 C++ 时出现问题。

CDll.h:

CDll.cpp:

FMain.f90:

CDll.h 和CDll.cpp 生成DLL 并由FORTRAN 主程序链接。

调用子程序前后的内存地址不一致,因此没有正确传递字符数组。我做错了还是有什么我还没有注意到?谢谢你的帮助。

PS:项目在x64平台上调试。