SetSharedFunction

SetSharedFunction[f1,f2,]

将符号 fi 声明为在所有并行内核之间同步的共享函数.

更多信息

  • 在任何并行子内核上计算的形为 f[] 的表达式都会被发送到主内核,在那里进行计算,并将结果发送回并行子内核.
  • 在任何并行子内核上定义的共享函数的下值均由主内核维护,并且任何内核上的每次访问都通过主内核进行同步.
  • 形式 f[] 并保持不计算的表达式给出 Null.

范例

打开所有单元关闭所有单元

基本范例  (2)

定义并共享一个函数:

从每个子内核调用时,在主内核上计算 getPID 的定义:

如果没有共享函数,则返回子内核中的值:

定义一个共享函数,来在主内核上对局部变量 results 进行操作:

从子内核调用函数:

在主内核上的变量已经被修改:

范围  (3)

定义并且共享一个函数:

当从每个子内核调用时,函数在主内核更新 next

使用一个默认规则建立一个共享函数:

在子内核上给出额外的定义:

由于函数被共享,主内核了解额外的规则:

维持具有默认值的带索引的共享变量:

推广和延伸  (1)

在主内核上给出共享函数的延迟定义:

在主内核上总是对这样的定义进行计算,不论是哪个内核进行计算:

在并行内核之一上给出共享函数的定义:

这样的定义总是在要求值的内核上计算:

应用  (3)

共享函数可以用于同步化:

一个共享变量和临界区的使用效率很低:

一个简单的队数据类型的构造:

创建两个共享队:

填入输入队:

并行地在输入队的元素上操作,并且把结果放入输出队:

使用一个简单的共享函数来在输入和结果上进行通讯:

建立一个搜索,并且显示它的进程,直到手动退出为止:

目前求得的结果是 的因子数目的一个列表:

属性和关系  (3)

对于局部变量使用共享追加函数来收集结果:

在共享的变量上使用 AppendTo 具有同样的效果:

fs 设为(全局)共享函数:

每个子内核都对同一个共享变量进行定义:

如果不共享,每个子内核都有自己的(本地)函数副本:

共享函数被列在 $SharedFunctions 中:

可能存在的问题  (3)

共享函数对于代码的分配效率很低,并且会导致串行计算:

简单地把并行内核上任意函数的定义进行分配:

在一个共享变量上分别进行读写操作对于线程不是安全的:

使用一个共享函数来同步访问一个(未共享的)变量:

或者,使用 CriticalSection 使整个代码段作为一个原子:

并行动态规划:

巧妙范例  (1)

一个并行的 Sow

Wolfram Research (2008),SetSharedFunction,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SetSharedFunction.html.

文本

Wolfram Research (2008),SetSharedFunction,Wolfram 语言函数,https://reference.wolfram.com/language/ref/SetSharedFunction.html.

CMS

Wolfram 语言. 2008. "SetSharedFunction." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/SetSharedFunction.html.

APA

Wolfram 语言. (2008). SetSharedFunction. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/SetSharedFunction.html 年

BibTeX

@misc{reference.wolfram_2024_setsharedfunction, author="Wolfram Research", title="{SetSharedFunction}", year="2008", howpublished="\url{https://reference.wolfram.com/language/ref/SetSharedFunction.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_setsharedfunction, organization={Wolfram Research}, title={SetSharedFunction}, year={2008}, url={https://reference.wolfram.com/language/ref/SetSharedFunction.html}, note=[Accessed: 22-November-2024 ]}