问题标签 [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.
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 命令窗口,这是预期的。
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 与其引擎的通信?
python - 在 C 程序中嵌入 Python 模块时,如何将 C 结构传递给 Python
我有一个可用的 C 程序,现在我正在嵌入一个实现特定功能的 python 脚本。
问题是,传递给 Python 的参数是在 C 中定义的复杂(我的意思是嵌套)C 结构。我希望解决方案能够轻松地进行两种通信方式:
1.在C中创建结构,并将其传递给Python。让 Python 做一些修改。
2.在Python中创建结构。并将其传回给 C。
我正在尝试“SWIG”为结构生成一些包装器,以及一些使用 SWIG for Python 的辅助函数,以便它可以返回结构的一些嵌套部分,以便我可以轻松地通过 Python 访问结构。
这会是一个很好的解决方案,还是我可能会错过一些非常简单的解决方法?
c++ - 将 OpenCV Mat 文件转换为 Matlab 矩阵
我创建了一个 Matlab 引擎来将 OpenCV Mat 文件转换为 Matlab 矩阵。但是,我得到了错误的结果。我附上了我的代码,以便您可以直接测试它。
我怀疑下面的代码会导致这个问题,但我不知道如何解决它。
c++ - 从 C++ OpenMP 并行调用 Fortran 子例程应该有效吗?
当从 C++ 函数调用 Fortran 子例程并且在 OpenMP 并行 for 构造中调用 C++ 函数时,Fortran 子例程会不时返回不同的值。它是一个黑盒子例程,应该返回相同的结果和相同的输入(50 个参数)。我并行化了子例程调用,以便为数百种不同的输入组合运行它。如果我运行程序两次并打印每个子程序执行的结果,结果是不一样的。
有关问题的详细信息:
- 串行版本一致且工作正常,始终给出相同的答案;
- 该子程序不使用伪随机生成数;
- 子程序调用同一个.F90文件中的其他子程序;
- 没有嵌套,没有 openmp pragma 或包含在 fortran 子例程中;
- 如果我尝试在 Fortran 子例程中使用 OpenMP API 函数,它们会返回乱码;
- 我在使用 gfortran 编译时使用 -fautomatic、-fopenmp 和 -frecursive(顺便说一句,我使用的是 gcc 5.2.0)并且所有子例程都设置为 RECURSIVE。一切都很好地编译和链接,当我运行.exe时问题确实出现了。
- Fortran 子例程不访问 I/O。所有变量都通过参数传递。没有 COMMON 或 SAVED 块。所有子程序都使用虚拟参数,并且输出变量在每个子程序内显式初始化;
- 我没有使用任何带有#pragma omp parallel for 的OpenMP 子句。
- 如果线程数小于可用处理器数,则结果之间的差异数会减少。将线程与处理器绑定并不能解决问题。
代码很大,但我设法在一个示例中对其进行了简化以说明问题:
c++ - C++ 和混合编程中指针的默认参数
C++中指针默认参数的使用可以用下面的代码来演示
在这种情况下,程序的输出是
另一方面,如果我尝试将可选参数从 Fortran 传递到 C++,它就不起作用。下面的示例代码演示了这种情况
myfunc.cpp _
和Fortran 主程序
并且可以使用以下命令编译混合代码(Fortran 和 C++)而不会出现任何错误
但程序打印
在这种情况下。那么,有没有解决这个问题的方法?我在这里错过了什么吗?我认为在混合编程中使用默认参数并没有按预期工作,但此时我需要建议。
c++ - MIXED_STR_LEN_ARG 与 gfortran
我有一个混合 C++/Fortran 的程序,其中一个 C++ 字符作为 Fortran 函数的参数给出。
该代码正在编译和使用ifort编译器,使用选项-mixed_str_len_arg
指定字符参数的隐藏长度的位置(请参阅https://software.intel.com/en-us/node/525960)。
出于某种原因,我想使用gfortran编译代码,但没有找到任何与此编译器等效的选项。您是否知道类似的选择或其他选择?
c - 尝试从 Visual C 调用 Intel Visual Fortran 函数
我有两个项目:在我的解决方案中CPart
。取决于,后者包含该功能。这是代码FortranPart
FortranPart
CPart
main
main.c
这是我的 fortran 模块的代码
编译完fortran后,我得到了文件FortranPart.lib
。在CPart
项目依赖项中,我将其添加为外部库。当我尝试编译和运行时,CPart
我得到以下
PS我需要主程序是C,而不是C++。
c++ - Fortran 的 Pthread 包装器
我是 Fortran 和 C++ 的新手,致力于将两个用 Fortran 和 C++ 编写的程序耦合起来。
我正在尝试创建一个 pthread(detached) 包装器并从我的 Fortran 子例程中调用它并将一个 cpp 函数传递给它。我按照这个链接在 FORTRAN 中调用一个子程序而不阻塞主程序来编写一些代码。
当我执行它时,我得到如下运行时错误。
我使用以下命令编译
这是我可以重现错误的最小代码。
Pthreads_interface.h
pthreads_module.f90
主堡
PCModel
pthread 执行的 C++ 函数在哪里。
pcmodel.cpp
理想情况下,我的 Fortran 和 C++ 代码都应该并行运行,一旦 fortran 代码触发线程启动 C++ 函数(PCModel
)
如果有人可以检查代码并帮助我,那就太好了。
c++ - 不一致的内存引用
我在 C++ 和 FORTRAN 之间做一些混合编程。如代码所示,将字符数组从 FORTRAN 传递到 C++ 时出现问题。
CDll.h:
CDll.cpp:
FMain.f90:
CDll.h 和CDll.cpp 生成DLL 并由FORTRAN 主程序链接。
调用子程序前后的内存地址不一致,因此没有正确传递字符数组。我做错了还是有什么我还没有注意到?谢谢你的帮助。
PS:项目在x64平台上调试。