我有一个概念性的想法,即在 Erlang 中启用 GPU 加速的管道。 该 API 将由高阶函数组成,这些函数采用 fun、二进制和一些标志,对 BEAM 字节码进行运行时检查,看看是否可以将乐趣编译为 OpenCL,缓存结果,然后类似于列表模块中的高阶函数。如果乐趣无法转换为 OpenCL,则该过程将失败。
所有操作都将在二进制文件上完成,因为缺点列表不会在内存中连续表示,从而导致将它们移入和移出 GPU 内存的大量工作。 可以选择将二进制解释为浮点数、双精度数、整数或混合数,并且为了好玩而具有不同大小的输入和输出。 是否可以在纯 Erlang 或 C 中做到这一点而不对 BEAM 进行黑客攻击? 如果是,请提供相关资源的链接。
erlang:fun_info/1
返回一个包含元组{env, ...}
的列表,该元组包含 AST。 我可以利用这个 ss 来创建我的 OpenCL 代码,并使用现有的 OpenCL 绑定,并在gen_server中使用 ETS 表进行缓存,从而覆盖纯 Erlang 中的 while 管道。