我正在尝试与一个 Slurm 批处理脚本并行运行多个 python 脚本。看一下下面的例子:
#!/bin/bash
#
#SBATCH --job-name=test
#SBATCH --output=/dev/null
#SBATCH --error=/dev/null
#SBATCH --ntasks=2
#SBATCH --cpus-per-task=1
#SBATCH --mem-per-cpu=1G
#SBATCH --partition=All
#SBATCH --time=5:00
srun sleep 60
srun sleep 60
wait
Run Code Online (Sandbox Code Playgroud)
如何调整脚本以便执行仅需 60 秒(而不是 120 秒)?将脚本拆分为两个脚本不是一个选项。
这是[如何使用一个 slurm 批处理脚本并行运行作业?] 的后续问题。目标是创建一个 SBatch 脚本,它可以启动多个进程并并行运行它们。damienfrancois给出的答案 非常详细,看起来像这样。
#!/bin/bash
#
#SBATCH --job-name=test
#SBATCH --output=/dev/null
#SBATCH --error=/dev/null
#SBATCH --partition=All
srun -n 1 -c 1 --exclusive sleep 60 &
srun -n 1 -c 1 --exclusive sleep 60 &
....
wait
Run Code Online (Sandbox Code Playgroud)
但是,我无法理解Exclusive关键字。如果我使用该关键字,则会选择集群的一个节点,并在那里启动所有进程。但是,我希望 Slurm 将 [“sleeps”/steps] 分布在整个集群上。
那么关键字Exclusive是如何工作的呢?根据Slurm 文档,不应发生对一个节点的限制,因为该关键字是在一步分配中使用的。
[我是 Slurm 新手]
我目前在理解 Haskell 中的任一种单子时遇到问题。两者都是 Monad 数据类型的实例。因此,我可以像这样在 Do 块中使用任一...
type MyAccount = Integer
transaction :: Integer -> MyAccount -> Either String MyAccount
transaction value account | value + account < 0 = Left "Error: insufficient funds!"
| otherwise = return $ account + value
Test1 :: Either String MyAccount
Test1 = do
account_state <- return 1000
r1 <- transaction (-200) account_state
r2 <- transaction (-1000) r1
return r2
Run Code Online (Sandbox Code Playgroud)
这是代码的工作片段:account_state、r1 和 r2是整数类型。因此函数事务正常工作。然而..
Test2 :: Either String MyAccount
Test2 = …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种从信号中获取频率的方法。下面是一个例子:
signal = [numpy.sin(numpy.pi * x / 2) for x in range(1000)]
Run Code Online (Sandbox Code Playgroud)
此数组将代表录制声音的样本(x = 毫秒)
sin(pi*x/2) => 250 赫兹
我们如何从信号(点列表)到从这个数组中获取频率?
注意: 我阅读了许多 Stackoverflow 线程并观看了许多 youtube 视频。我还没有找到答案。请用简单的词。(我很感激每一个回答)
在学校,我的任务是编写一个函数,将数字附加到列表的左侧,如果它们是偶数的话。类型签名如下:
appendIfEven :: (Applicative f, Monoid (f a), Integral a) => a -> f a -> f a
Run Code Online (Sandbox Code Playgroud)
我的回答是下面的一段代码
appendIfEven :: (Applicative f, Monoid (f a), Integral a) => a -> f a -> f a
appendIfEven x ms = if x `mod` 2 == 0 then mempty x `mappend` ms else ms
Run Code Online (Sandbox Code Playgroud)
Haskell 可以编译我的代码,但它不能正常工作。经过一些实验,我将mempty切换为pure:
appendIfEven :: (Applicative f, Monoid (f a), Integral a) => a -> f a -> f a
appendIfEven x ms = …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试了解 Haskell 类型类。在创建下面的简单示例并看到它有效之后......
data MyMaybe a = MyNothing | MyJust a
deriving(Show)
class IncreaseByOne a where
addOne :: a -> a
instance (Num a) => IncreaseByOne (MyMaybe a) where
addOne MyNothing = (MyNothing)
addOne (MyJust x) = (MyJust (x+1))
Run Code Online (Sandbox Code Playgroud)
问我自己:是否可以将函数addOne添加到现有的 Type-Class Num。所以所有数字都可以使用addOne函数。就像是:
instance IncreaseByOne Num where
addOne x = x+1
Run Code Online (Sandbox Code Playgroud)