虽然 C++11 标准规定了重新解释std::complex<double>为doubles:
complex<T>对于指向指定数组元素的任何指针p以及任何有效的数组索引i,reinterpret_cast<T*>(p)[2*i]是复数的实部p[i],reinterpret_cast<T*>(p)[2*i + 1]是复数的虚部。p[i]此要求的目的是保持 C++ 库复数类型和 C 语言复数类型(及其数组)之间的二进制兼容性,它们具有相同的对象表示要求。
向后重新解释是真的吗?我的意思是执行这样的操作是否安全:std::complex<double> *cppComplexArray = reinterpret_cast<std::complex<double> *>(cDoublesArray)哪里cDoublesArray有 type ofdouble *甚至 length 2 * n?如果它的长度是奇数 ( 2 * n + 1),那么潜在的陷阱是什么?
我有在集群上运行我的并行程序的脚本。我用通常的命令运行它:
sbatch -p PARTITION -t TIME -N NODES /full/path/to/my/script.sh PARAMETERS-LIST
在里面,script.sh我需要获取另一个 bash 脚本(位于所在的同一目录中script.sh)来加载一些例程/变量。对于在本地计算机上执行的常用脚本,我使用以下内容:
SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd )"
source "$SCRIPTDIR/funcs.sh"
print_header "Some text"
Run Code Online (Sandbox Code Playgroud)
它工作得很好。但是,在集群上这不起作用,我收到以下错误(例如):
/var/tmp/slurmd/job1043319/slurm_script: line 9: /var/tmp/slurmd/jobID/funcs.sh: No such file or directory
/var/tmp/slurmd/job1043319/slurm_script: line 13: print_header: command not found
Run Code Online (Sandbox Code Playgroud)
似乎 SLURM 创建了自己要提交的脚本副本,因此我无法获取任何本地脚本/文件。
在这种情况下可以做什么?如果我可以避免在脚本中硬编码绝对路径,那就太好了...