标签: matlab

正确设置 LD_LIBRARY_PATH

我正在将 Docker 与 Ubuntu 16.04 的图像一起使用。我正在使用这个 docker 来运行:

  • 借助 boost.python 在 python 中导入 C++ 类
  • 借助 Matlab Runtime (MCR) 在 python 中导入 matlab 的 python 包。

在 docker 中安装 MCR 之前,我已经使用以下命令安装了 boost:

$ sudo apt-get install -y libboost-all-dev
Run Code Online (Sandbox Code Playgroud)

我能够包装 C++ 类并在 python 中调用它们。然后我安装了 MCR,其中一项要求是设置LD_LIBRARY_PATH为 Matlab 的库。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/MATLAB/MATLAB_Runtime/v94/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/sys/os/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v94/extern/bin/glnxa64
Run Code Online (Sandbox Code Playgroud)

它起作用了,我能够在 python 中运行 matlab 的 python 包,但是由于LD_LIBRARY_PATH. 例如,当我尝试在 python 中导入 C++ 类时出现以下错误:

 /usr/lib/x86_64-linux-gnu/libpython3.4m.so.1.0: undefined symbol: XML_SetHashSalt
Run Code Online (Sandbox Code Playgroud)

如果我取消设置LD_LIBRARY_PATHC++ 导入工作但 MCR 失败。那么问题LD_LIBRARY_PATH应该是什么才能成功运行 C++ 类和 Matlab 的 …

libraries environment-variables boost matlab

7
推荐指数
2
解决办法
3万
查看次数

控制用户进程数的shell脚本

我必须启动一个程序的总数,NUMTOT(可以是任何,C,Mathematica,ns-2 ...数学环境)。问题是运行这些进程的计算机只允许最大执行次数,例如 MAX,(MAX < NUMTOT)。

我在终端中使用以下行运行这些程序

./run.sh -d directory num
Run Code Online (Sandbox Code Playgroud)

重复,其中 run.sh 是我调用数学程序的脚本;directory 是我的程序所在的目录,num 表示新执行的次数(integer*num = NUM​​)。脚本“run.sh”使用“目录”(程序)的副本创建“num”个目录,并启动“num”个程序实例。在我的情况下是 Matlab 实例。

我想要一个脚本来自动跟踪正在运行的进程数量以及最大数量何时减少到(MAX-num),因为'num'已经完成,然后启动Matlab的下一个'num'模拟,直到总数完成了 NUM 次模拟。

如果脚本能够在只有一个程序刚刚完成时调用下一个程序,就能够维护 MAX 可能的进程,那就更好了。

实际上,要知道正在运行的进程数,我运行以下脚本

ps axu |grep plopez|grep simulacion|grep MATLAB|awk '{ $2} END{print NR}'
Run Code Online (Sandbox Code Playgroud)

这给出了此时运行的总 Matlab。

我怎样才能仅从一个脚本中进行整套模拟?

shell-script control-flow matlab

5
推荐指数
1
解决办法
2317
查看次数

替代 wait -n (因为服务器有旧版本的 bash)

我想解决以下有关提交已并行化到特定节点的作业的问题。


让我从解释我的问题的结构开始

我有两个非常简单的 Matlab 脚本

1) main.m

clear
rng default
P=2;
grid=randn(4,3);
jobs=1;
Run Code Online (Sandbox Code Playgroud)

2) 调频

sgetasknum_grid=grid(jobs*(str2double(getenv('SGE_TASK_ID'))-1)+1: str2double(getenv('SGE_TASK_ID'))*jobs,:); %jobsx3

result=sgetasknum_grid+1; 

filename = sprintf('result.%d.mat', ID);
save(filename, 'result')

exit
Run Code Online (Sandbox Code Playgroud)

我想做的是:

  • 运行 main.m;

  • 然后,运行 fm 4 次,允许每次并行执行2 个任务

  • 一切都应该在节点A上执行


这是我如何实现上述步骤

1)我保存main.mf.m放入一个名为My_folder

2)我创建如下脚本td.sh并将其保存到文件夹中My_folder

#!/bin/bash -l
#$ -S /bin/bash
#$ -l h_vmem=5G
#$ -l tmem=5G
#$ -l h_rt=480:0:0
#$ -cwd
#$ -j y


#$ -N try

date
hostname

J=4 #number …
Run Code Online (Sandbox Code Playgroud)

shell bash matlab parallelism

5
推荐指数
1
解决办法
1452
查看次数