Dyalog APL 中的并行会话
Parallel sessions in Dyalog APL
至少有一种 single-letter 语言(当然 q
)具有进程间通信的功能,一种在多台计算机上并行执行 longer-running 进程的方法。这些 session 可能位于同一台计算机上,也可能位于不同大陆的服务器上。
使用 q,我会简单地启动一个服务器来侦听特定端口,例如 q -p 8510
,然后从另一个 q session 或其他软件访问它。非常简单。
我记得,在遥远的过去,使用带有 Shared Variables
的大型机 APL 系统,我可以在其中与其他用户共享变量。这可能是 IBM APL.SV
。当时我并没有想太多,但今天,几十年后,Shared Variables
听起来像是并行 session 的基础。与另一台计算机共享一个变量。
我今天如何使用 Dyalog APL 或任何其他 APL 来做到这一点
在另一台物理计算机上调用 APL session
向它发送命令或表达式
收到结果
可能在许多其他计算机上并行执行此操作
好问题!在 recent Webinar Dyalog's CXO illustrated one way to do this (handling how to easily setup Docker Containers running your code on aws or elsewhere). Also Isolates might be useful - see i.e. this 示例中。
事实上,"Old Fashioned" Microsoft Windows 下的 Dyalog APL 通过 DDE 协议仍然支持共享变量,但它们被认为已弃用。
最新版本的 Dyalog APL 通过 isolates 支持并行或异步执行,这些独立进程显示为活动工作区的扩展。在 isolate 中立即执行的任何表达式 returns a future。 Futures 可以作为参数传递给函数,并由结构原语无阻塞地操作;如果将它们传递给需要知道值的原始函数,它们将自动阻塞,直到结果计算完成。
The documentation for futures and isolates is online, and there are a number of videos online - for example there is the talk where they were introduced at Dyalog'14 这里:
在 YouTube 上使用 Dyalog 14.0 进行并行编程
在版本 17.0 中,我们将包括对 APLSSH class 的支持,这将使在远程计算机上启动 isolate 变得简单。
最后,如果您想在已经 运行 的 APL 进程之间进行通信,TCP 库 "Conga"(它也包含在标准 Dyalog 安装中)允许您在 APL 数组之间传递使用 TCP/IP 的进程,即使这些进程在不同的机器架构上是 运行。 Documentation for Conga is also online.
如果您想以 old-fashioned 方式进行操作(相信我,您不会这样做),那么这里有一个如何操作的示例(原则上):
http://svn.savannah.gnu.org/viewvc/apl/trunk/src/testcases/APnnn.tc?view=log
查看所有文件 APnnn*。在 GNU APL 中,该示例仅适用于位于同一台机器上 运行 的两个 APL 工作区,但对于 IBM APL2,它们可以驻留在不同的机器上。在 IBM 案例中,需要对远程机器上的处理器 ID 进行一些额外的配置,因此需要对示例进行一些调整。
是的,但是 ⎕SVO 来自 IP 地址不常用(甚至不存在)的时代。 ⎕SVO的左边参数是一个"processor ID",一个类似文件描述符的概念
GNU APL 遵循 IBM APL2,除了 APL2 允许从本地处理器 ID 到远程处理器 ID 和 IP 地址的映射,该映射(在 APL2 中)作为外部配置文件提供并且缺少对该配置文件的支持GNU APL 中的位。
在 GNU APL 中,⎕SVO 只是为了与 IBM APL2 向后兼容而提供的,因此扩展其语法没有多大意义。对于新的 APL 应用程序,直接在进程之间使用 UDP 或 TCP 连接要简单得多,⎕FIO 提供了所需的一切。
至少有一种 single-letter 语言(当然 q
)具有进程间通信的功能,一种在多台计算机上并行执行 longer-running 进程的方法。这些 session 可能位于同一台计算机上,也可能位于不同大陆的服务器上。
使用 q,我会简单地启动一个服务器来侦听特定端口,例如 q -p 8510
,然后从另一个 q session 或其他软件访问它。非常简单。
我记得,在遥远的过去,使用带有 Shared Variables
的大型机 APL 系统,我可以在其中与其他用户共享变量。这可能是 IBM APL.SV
。当时我并没有想太多,但今天,几十年后,Shared Variables
听起来像是并行 session 的基础。与另一台计算机共享一个变量。
我今天如何使用 Dyalog APL 或任何其他 APL 来做到这一点
在另一台物理计算机上调用 APL session
向它发送命令或表达式
收到结果
可能在许多其他计算机上并行执行此操作
好问题!在 recent Webinar Dyalog's CXO illustrated one way to do this (handling how to easily setup Docker Containers running your code on aws or elsewhere). Also Isolates might be useful - see i.e. this 示例中。
事实上,"Old Fashioned" Microsoft Windows 下的 Dyalog APL 通过 DDE 协议仍然支持共享变量,但它们被认为已弃用。
最新版本的 Dyalog APL 通过 isolates 支持并行或异步执行,这些独立进程显示为活动工作区的扩展。在 isolate 中立即执行的任何表达式 returns a future。 Futures 可以作为参数传递给函数,并由结构原语无阻塞地操作;如果将它们传递给需要知道值的原始函数,它们将自动阻塞,直到结果计算完成。
The documentation for futures and isolates is online, and there are a number of videos online - for example there is the talk where they were introduced at Dyalog'14 这里:
在 YouTube 上使用 Dyalog 14.0 进行并行编程
在版本 17.0 中,我们将包括对 APLSSH class 的支持,这将使在远程计算机上启动 isolate 变得简单。
最后,如果您想在已经 运行 的 APL 进程之间进行通信,TCP 库 "Conga"(它也包含在标准 Dyalog 安装中)允许您在 APL 数组之间传递使用 TCP/IP 的进程,即使这些进程在不同的机器架构上是 运行。 Documentation for Conga is also online.
如果您想以 old-fashioned 方式进行操作(相信我,您不会这样做),那么这里有一个如何操作的示例(原则上):
http://svn.savannah.gnu.org/viewvc/apl/trunk/src/testcases/APnnn.tc?view=log
查看所有文件 APnnn*。在 GNU APL 中,该示例仅适用于位于同一台机器上 运行 的两个 APL 工作区,但对于 IBM APL2,它们可以驻留在不同的机器上。在 IBM 案例中,需要对远程机器上的处理器 ID 进行一些额外的配置,因此需要对示例进行一些调整。
是的,但是 ⎕SVO 来自 IP 地址不常用(甚至不存在)的时代。 ⎕SVO的左边参数是一个"processor ID",一个类似文件描述符的概念
GNU APL 遵循 IBM APL2,除了 APL2 允许从本地处理器 ID 到远程处理器 ID 和 IP 地址的映射,该映射(在 APL2 中)作为外部配置文件提供并且缺少对该配置文件的支持GNU APL 中的位。
在 GNU APL 中,⎕SVO 只是为了与 IBM APL2 向后兼容而提供的,因此扩展其语法没有多大意义。对于新的 APL 应用程序,直接在进程之间使用 UDP 或 TCP 连接要简单得多,⎕FIO 提供了所需的一切。