gpt4 book ai didi

wolfram-mathematica - Mathematica 中的并行编程

转载 作者:行者123 更新时间:2023-12-04 08:28:32 29 4
gpt4 key购买 nike

我有兴趣运行相同的函数,该函数以并行方式在多核上使用不同的参数值进行一些蒙特卡罗评估。我还想确保整个函数在同一个内核上运行,而函数内的计算不会跨内核分布。例如,假设我有一个函数(故意简化)

f[a_, b_] := Module[{}, RandomReal[{a, b}]]


In[1]:= LaunchKernels[]

Out[1]= {KernelObject[1, "local"], KernelObject[2, "local"],
KernelObject[3, "local"], KernelObject[4, "local"],
KernelObject[5, "local"], KernelObject[6, "local"],
KernelObject[7, "local"]}

SeedRandom[795132, Method -> "ParallelGenerator"];

m1 = 1; m2 = 2; m3 = 3; m4 = 4; m5 = 5; m6 = 6; m7 = 7; m8 = 8;

DistributeDefinitions[f, m1, m2, m3, m4, m5, m6, m7, m8];

我现在想在五个不同的内核上运行 f[m1, m2], f[m3, m4], f[m5, m6], f[m7, m8] f[m9, m10] 并且这些内核之间没有信息传输,即,具有跨不同内核的单独随机数流。

如何在 Mathematica 中做到这一点?

最佳答案

也许您可以使用 $KernelID 为单个内核播种和 $ProcessID ?

ParallelEvaluate[
Print[$KernelID $ProcessID];
SeedRandom[$KernelID $ProcessID]
]

这应该适用于五个不同的内核( FinestGrained 选项将每次评估都用于新内核):
ParallelTable[$KernelID -> f[2 i - 1, 2 i], {i, 5}, Method -> "FinestGrained"]

i (max 5) 大于内核数 (8),但这会遇到问题,即 f[13,14]可以使用与 f[2,3] 相同的种子.

关于wolfram-mathematica - Mathematica 中的并行编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317731/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com