ParallelTry[f,{arg1,arg2,…}]
f[argi]を並列評価し,最初に得た結果を返す.
ParallelTry[f,{arg1,arg2,…},k]
最初の k 個の結果のリストを返す.
ParallelTry
ParallelTry[f,{arg1,arg2,…}]
f[argi]を並列評価し,最初に得た結果を返す.
ParallelTry[f,{arg1,arg2,…},k]
最初の k 個の結果のリストを返す.
詳細とオプション
- ParallelTryは,使用可能なことなるカーネルとプロセス間に自動的に計算を分配する.
- k 個の結果が返された後になお残っている評価は放棄される.
- f[argi] の1つを評価した結果が$Failedの場合,その結果は無視される.
- $Failed以外の結果が得られない場合,ParallelTryは$Failedを返す.
- ParallelTry[f,{arg1,arg2,…}]は f[argi]の評価を,arg1から始まる異なるカーネルとプロセスに割り当てる.
- argiの数がカーネル数よりも多い場合,argiの中には最初の方のカーネルが$Failedを返さない限り試みられないものもある.
- ParallelTryはParallelTableと同じDistributedContextsオプションを取る.
例題
すべて開く すべて閉じる例 (2)
スコープ (2)
ParallelTry[If[PrimeQ[#], #, $Failed]&, Range[10 ^ 100, 10 ^ 100 + 1000], 2] - 10 ^ 100結果が少なすぎる場合は,要求されたものよりも少なくなるかもしれない:
ParallelTry[If[PrimeQ[#], #, $Failed]&, Range[10 ^ 100, 10 ^ 100 + 1000], 4] - 10 ^ 100成功した結果がない場合,ParallelTryは$Failedを返す:
ParallelTry[If[PrimeQ[#], #, $Failed]&, Range[10 ^ 100, 10 ^ 100 + 100]]オプション (5)
DistributedContexts (5)
remote[x_] := {$KernelID, x ^ 3}ParallelTry[remote, {1, 2, 3, 4}]local[x_] := {$KernelID, x ^ 2}ParallelTry[local, {1, 2, 3, 4}, DistributedContexts -> None]並列計算に現れるすべてのコンテキストのすべての記号の定義を配布する:
a`f[x_] := {$KernelID, x}ParallelTry[a`f, {1, 2, 3, 4}, 2, DistributedContexts -> Automatic]b`g[x_] := {$KernelID, -x}ParallelTry[b`g, {1, 2, 3, 4}, DistributedContexts -> {"a`"}]DistributedContextsオプションの値をデフォルト値に戻す:
SetOptions[ParallelTry, DistributedContexts :> $DistributedContexts]アプリケーション (5)
ParallelTry[
(While[!PrimeQ[p = RandomInteger[{10 ^ 100, 10 ^ 101}]]];p)&, Range[$ProcessorCount]]randPoly[n_Integer ? Positive, x_, p_] := Expand[Fold[x * #1 + #2&, 1, RandomInteger[{0, p - 1}, n]]]findOne[n_, x_, p_ ? PrimeQ] := Module[{poly},
While[!IrreduciblePolynomialQ[poly = randPoly[n, x, p], Modulus -> p], Null];
poly]ParallelTry[findOne[100, x, 2]&, Range[$KernelCount]]指定の素数指数から始めてメルセンヌ(Mersenne)素数を検索する:
search[n0_, dn_] :=
Module[{n = n0}, While[!PrimeQ[2 ^ Prime[n] - 1], n += dn];n]With[{dn = $KernelCount, n0 = 500},
n = ParallelTry[search[n0 + #, dn]&, Range[0, dn - 1]];
{n, Prime[n]}
]ParallelTry[
{#, FindMinimum[E^Sin[50 x] + Sin[60 E^y] + Sin[70 Sin[x]] + Sin[Sin[80 y]] - Sin[10 (x + y)] + (1/4) (x^2 + y^2), {x, y}, Method -> #]}&, {"Gradient", "ConjugateGradient", "InteriorPoint", "QuasiNewton", "Newton"}]ParallelTry[(s = Sum[(a^k (-1 + a - k)/(1 + k) k!), k, Method -> #];If[Head@s === Sum, $Failed, s])&, {"Polynomial", "PolynomialExponential", "HypergeometricTermGosper", "PolynomialTrigonometric"}]ParallelMap[(s = Sum[(a^k (-1 + a - k)/(1 + k) k!), k, Method -> #];If[Head@s === Sum, $Failed, s])&, {"Polynomial", "PolynomialExponential", "HypergeometricTermGosper", "PolynomialTrigonometric"}]特性と関係 (5)
ParallelTryは一般に最初に受け取った成功した結果を返す:
ParallelTry[(Pause[#];#)&, {4, 3, 2, 1}]ParallelTryはParallelMapと同じように働くが一つの結果しか返さない:
ParallelMap[f, {a, b, c, d}]ParallelTry[f, {a, b, c, d}]ParallelTryは基本的にWaitNextによって実装される:
parallelTry[f_, args_List] := Module[{evs, ev, res = $Failed},
evs = Composition[ParallelSubmit, f] /@ args;
While[res === $Failed && Length[evs] > 0, {res, ev, evs} = WaitNext[evs]];
AbortKernels[];
res
]parallelTry[FactorInteger, Range[10 ^ 20 + 1, 10 ^ 20 + $KernelCount]]インタラクティブに定義される関数は必要になると自動的にすべてのカーネルに配布される:
ftest[n_] := Labeled[Framed[PrimeQ[2 ^ n - 1]], $KernelID]ParallelTry[ftest, Range[1275, 1285]]gtest[n_] := Labeled[Framed[PrimeQ[2 ^ n - 1]], $KernelID]DistributeDefinitions[gtest];ParallelTry[ftest, Range[1275, 1285], 3, DistributedContexts -> None]パッケージからの関数にはDistributeDefinitionsではなくParallelNeedsを使う:
Needs["FiniteFields`"]Map[FieldSize, Table[GF[2, i], {i, 10}]]ParallelNeeds["FiniteFields`"]ParallelTry[FieldSize, Table[GF[2, i], {i, 10}], 4]考えられる問題 (3)
式の数がカーネル数よりも多い場合,試されないものが出て来る:
ParallelTry[(Print[#];Pause[RandomReal[]];$KernelID)&, Range[$KernelCount + 1]]並列カーネルにとって未知の関数を使うと連続評価になる事がある:
ptest[n_] := If[PrimeQ[2 ^ n - 1], {n, $KernelID}, $Failed]ParallelTry[ptest, Range[20, 40], DistributedContexts -> None]DistributeDefinitions[ptest]ParallelTry[ptest, Range[20, 40], DistributedContexts -> None]qtest[n_] := If[PrimeQ[2 ^ n - 1], {n, $KernelID}, $Failed]ParallelTry[ptest, Range[20, 70], 2]デフォルトコンテキスト以外のコンテキストからの定義は自動的には配布されない:
ctx`ptest[n_] := If[PrimeQ[2 ^ n - 1], {n, $KernelID}, $Failed]ParallelTry[ctx`ptest, Range[20, 40]]DistributeDefinitionsをつあkってそのような定義を配布する:
DistributeDefinitions[ctx`ptest]ParallelTry[ctx`ptest, Range[20, 40]]すべてのコンテキストを含むようにDistributedContextsオプションを設定することもできる:
cty`ptest[n_] := If[PrimeQ[2 ^ n - 1], {n, $KernelID}, $Failed]ParallelTry[cty`ptest, Range[20, 70], 2, DistributedContexts -> Automatic]関連するガイド
関連するワークフロー
- 並列計算を実行する
テキスト
Wolfram Research (2008), ParallelTry, Wolfram言語関数, https://reference.wolfram.com/language/ref/ParallelTry.html (2010年に更新).
CMS
Wolfram Language. 2008. "ParallelTry." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2010. https://reference.wolfram.com/language/ref/ParallelTry.html.
APA
Wolfram Language. (2008). ParallelTry. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ParallelTry.html
BibTeX
@misc{reference.wolfram_2026_paralleltry, author="Wolfram Research", title="{ParallelTry}", year="2010", howpublished="\url{https://reference.wolfram.com/language/ref/ParallelTry.html}", note=[Accessed: 03-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_paralleltry, organization={Wolfram Research}, title={ParallelTry}, year={2010}, url={https://reference.wolfram.com/language/ref/ParallelTry.html}, note=[Accessed: 03-November-2026]}