小编Dro*_*tor的帖子

将双精度数组重新解释为 std::complex<double> 数组

虽然 C++11 标准规定了重新解释std::complex<double>doubles:

complex<T>对于指向指定数组元素的任何指针p以及任何有效的数组索引ireinterpret_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),那么潜在的陷阱是什么?

c++ arrays complex-numbers language-lawyer

8
推荐指数
1
解决办法
627
查看次数

如果我的脚本正在由 SLURM 执行,如何获取另一个 bash 脚本?

我有在集群上运行我的并行程序的脚本。我用通常的命令运行它:

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 创建了自己要提交的脚本副本,因此我无法获取任何本地脚本/文件。

在这种情况下可以做什么?如果我可以避免在脚本中硬编码绝对路径,那就太好了...

bash slurm

3
推荐指数
1
解决办法
1839
查看次数

标签 统计

arrays ×1

bash ×1

c++ ×1

complex-numbers ×1

language-lawyer ×1

slurm ×1