为 BEAM 创建硬件加速管道
Creating a hardware accelleration pipeline for BEAM
我有一个关于在 Erlang 中启用 GPU 加速的管道的概念性想法。 API 将由高阶函数组成,这些函数采用 fun、二进制和一些标志,对 BEAM 字节码进行运行时检查以查看 fun 是否可以编译为 OpenCL,缓存结果,然后以类似的方式工作来自列表模块的高阶函数。如果 fun 无法转换为 OpenCL,则该过程将失败。
所有操作都将在二进制文件上完成,因为缺点列表在内存中没有连续表示,导致将它们移入和移出 GPU 内存的大量工作。可以选择将二进制解释为浮点数、双精度数、整数或混合,并为了好玩而具有不同大小的输入和输出。是否可以在不破解 BEAM 的情况下在纯 Erlang 或 C 中执行此操作?如果是,将不胜感激相关资源的链接。
erlang:fun_info/1
returns 包含元组 {env, ...}
的列表,其中包含 AST。我可以利用这个 sto 创建我的 OpenCL 代码,并使用现有的 OpenCL 绑定并在 gen_server 中使用 ETS table 进行缓存,覆盖纯 Erlang 中的 while 管道。
我有一个关于在 Erlang 中启用 GPU 加速的管道的概念性想法。 API 将由高阶函数组成,这些函数采用 fun、二进制和一些标志,对 BEAM 字节码进行运行时检查以查看 fun 是否可以编译为 OpenCL,缓存结果,然后以类似的方式工作来自列表模块的高阶函数。如果 fun 无法转换为 OpenCL,则该过程将失败。
所有操作都将在二进制文件上完成,因为缺点列表在内存中没有连续表示,导致将它们移入和移出 GPU 内存的大量工作。可以选择将二进制解释为浮点数、双精度数、整数或混合,并为了好玩而具有不同大小的输入和输出。是否可以在不破解 BEAM 的情况下在纯 Erlang 或 C 中执行此操作?如果是,将不胜感激相关资源的链接。
erlang:fun_info/1
returns 包含元组 {env, ...}
的列表,其中包含 AST。我可以利用这个 sto 创建我的 OpenCL 代码,并使用现有的 OpenCL 绑定并在 gen_server 中使用 ETS table 进行缓存,覆盖纯 Erlang 中的 while 管道。