我有一个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确定路径并将环境变量设置为正确的值)
我需要在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) 我正在寻找一个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)
有任何想法吗?
我有许多进程(大约100到1000),每个进程都必须向其他进程的某些(比如大约10个)发送一些数据.(通常情况下,但如果A发送给B,B也发送给A,则不一定必要.)每个进程都知道它必须从哪个进程接收多少数据.
所以我可以使用MPI_Alltoallv,许多或大部分消息长度为零.但是,我听说出于性能原因,最好使用多个MPI_send和MPI_recv通信而不是全局MPI_Alltoallv.我不明白:如果一个系列的发送和接收呼叫,胜过一个Alltoallv通话更加高效,为什么是Alltoallv不只是为实现一个系列的发送和接收?
对我(以及其他人)来说,只使用一次全局调用会更方便.此外,我可能不得不担心没有遇到几个Send和Recv的死锁情况(可以通过一些奇偶策略或更复杂的解决方案?或者使用缓冲的send/recv?).
你是否同意MPI_Alltoallv是必须慢比,说,10 MPI_Send和MPI_Recv; 如果是,为什么和多少?