小编Mat*_*009的帖子

在python脚本中设置环境变量

我有一个bash脚本,用于设置环境变量并运行命令

LD_LIBRARY_PATH=my_path
sqsub -np $1 /homedir/anotherdir/executable
Run Code Online (Sandbox Code Playgroud)

现在我想使用python而不是bash,因为我想计算一些我传递给命令的参数.

我试过了

putenv("LD_LIBRARY_PATH", "my_path")
Run Code Online (Sandbox Code Playgroud)

call("export LD_LIBRARY_PATH=my_path")
Run Code Online (Sandbox Code Playgroud)

其次是

call("sqsub -np " + var1 + "/homedir/anotherdir/executable")
Run Code Online (Sandbox Code Playgroud)

但是程序总是放弃,因为没有设置LD_LIBRARY_PATH.

我怎样才能解决这个问题?

感谢帮助!

(如果我在调用python脚本之前导出LD_LIBRARY_PATH一切正常,但我希望python确定路径并将环境变量设置为正确的值)

python export

49
推荐指数
3
解决办法
15万
查看次数

Fortran增加了函数中的动态数组大小

我需要在Fortran中使用可变大小的数组.在C++中我会使用vector.所以我有一个像这样的功能

integer function append(n, array, value)
  integer, pointer, dimension(:) :: array
  integer, pointer, dimension(:) :: tmp_arr
  integer n

  if (size(array) .eq. n) then
     allocate(tmp_arr(2*size(array)))
     tmp_arr(1:size(array)) = array
     deallocate(array)
     array => tmp_arr
  end if
  n = n + 1
  array(n) = value
  append = n
end function
Run Code Online (Sandbox Code Playgroud)

如果我按照它的方式使用它可以正常工作

integer pos, val
pos = append(n, array, val)
Run Code Online (Sandbox Code Playgroud)

但是,如果我想用它的方式

integer i,j,n ! i,j<n
array(i) = append(n, array, array(j))
Run Code Online (Sandbox Code Playgroud)

与gfortran这不起作用.它编译,但段错误.问题似乎是gfortran从数组(i)和数组(j)中创建地址,将后者发送到函数append,然后当访问数组(j)的地址并且写入数组(i)时,地址空间已被解除分配.

我想要的是将数组(j)的值放在堆栈(而不是地址)上然后在函数中使用,并在函数完成后查找数组(i)的uptodate地址并查看结果保存的功能.

我很确定gcc会按照我想要的方式来做,为什么gfortran如此吝啬?

在Fortran中是否有任何方法可以使一个强大的(意味着数组(j)= ...示例工作)函数或数据类型具有类似行为的c ++ stl向量?

结论:

我最终介绍了临时变量

integer tmp_val
tmp_val = value
... …
Run Code Online (Sandbox Code Playgroud)

fortran

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

绘制简单的形状并保存到文件(pdf)

我正在寻找一个python库,我可以用它来绘制简单的形状和字符,然后保存到一个文件(格式可转换为pdf).如果我不需要运行X-server,我更愿意.

例如,看起来像这样

import drawing_lib
obj = drawing_lib.Object()
for i in range(5):
    obj.draw_line(from=(i*10, 20), to=(i*10+10, 35))
obj.save_pdf('five_inclined_lines.pdf')
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

python draw

7
推荐指数
1
解决办法
6994
查看次数

MPI Alltoallv或更好的个人Send和Recv?(性能)

我有许多进程(大约100到1000),每个进程都必须向其他进程的某些(比如大约10个)发送一些数据.(通常情况下,但如果A发送给B,B也发送给A,则不一定必要.)每个进程都知道它必须从哪个进程接收多少数据.

所以我可以使用MPI_Alltoallv,许多或大部分消息长度为零.但是,我听说出于性能原因,最好使用多个MPI_sendMPI_recv通信而不是全局MPI_Alltoallv.我不明白:如果一个系列的发送和接收呼叫,胜过一个Alltoallv通话更加高效,为什么Alltoallv不只是为实现一个系列的发送和接收?

对我(以及其他人)来说,只使用一次全局调用会更方便.此外,我可能不得不担心没有遇到几个Send和Recv的死锁情况(可以通过一些奇偶策略或更复杂的解决方案?或者使用缓冲的send/recv?).

你是否同意MPI_Alltoallv是必须比,说,10 MPI_SendMPI_Recv; 如果是,为什么和多少?

parallel-processing performance mpi

4
推荐指数
1
解决办法
2483
查看次数

标签 统计

python ×2

draw ×1

export ×1

fortran ×1

mpi ×1

parallel-processing ×1

performance ×1