问题标签 [erlang-nif]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 为 BEAM 创建硬件加速管道
我对在 Erlang 中启用 GPU 加速的管道有一个概念性的想法。该 API 将由高阶函数组成,这些函数采用 fun、二进制文件和一些标志,对 BEAM 字节码进行运行时检查,以查看 fun 是否可以编译到 OpenCL,缓存结果,然后与来自的高阶函数类似地工作列表模块。如果 fun 无法转换为 OpenCL,则该过程将失败。
所有操作都将在二进制文件上完成,因为 cons 列表不会在内存中连续表示,导致将它们移入和移出 GPU 内存需要大量工作。可以选择将二进制解释为浮点数、双精度数、整数或混合,并具有不同大小的输入和输出以供娱乐。是否可以在纯 Erlang 或 C 中做到这一点而无需破解 BEAM?如果是,将不胜感激相关资源的链接。
erlang - error_logger 和 error_logger_tty_h 处理程序之间的区别
我都知道,error_logger
并且error_logger_tty_h
是 gen_event 的可交换处理程序error_logger
。
从他们的源代码中,我知道error_logger
报告消息以`io:format(user, String, Argserlang:display
)error_logger_tty_h
结尾
error_logger
我感到困惑的是,目的和目的有什么区别error_logger_tty_h
?
c - Mix中获取根项目的依赖路径
由于我的项目由一些使用 nifs 的混合项目组成,我正在尝试制作一个自定义编译器,以便 *.c 文件可以与这些混合项目一起编译。假设我有一个项目 A,它有 B 的依赖项,它有一些依赖于 C 的本机代码。问题出现了,当 C 也是 A 的依赖项时 - 然后从 Bs 的角度来看,Cs 代码的位置是未知的,因为它取决于将 C 链接到 A 的方式(特别是当它通过路径链接时),这使得无法将 C 的 *.c 文件链接到 B。这就是为什么我想从依赖项访问(在这种情况下为 B ) 到根 (A) 其他依赖路径。为了解决这个问题,我考虑将本机源代码放入priv
可以通过 访问的文件夹,Application.app_dir/2
但我不希望将源代码包含在发布中。
c - Elixir NIF 中的正确资源处理
我正在尝试为简单的线性代数实现 NIF。这是我的矩阵内部结构:
这是它的“构造函数”:
然后我有两个 NIF 包装器——一个用于构造函数:
还有一个测试构造函数是否正常工作:
似乎构造函数包装器工作得很好(我已经用 using 对其进行了测试printf
),但nif_matrix_rows
返回奇怪的结果,例如
直接传递LinearAlgebra.matrix(2,3)
给LinearAlgebra.rows
两次会导致段错误:
(注意“相同”矩阵的不同结果)。
我正在关注 Andrea Leopardi 的教程,并进行了轻微的(我不确定是否如此)更改以对抗gcc
警告。恕我直言,最重要的是这部分
而 Andrea Leopardi 使用
但这对我来说似乎无效,因为 AFAIR(void *) conn_res
假设它conn_res
已被初始化。
这是我使用 Andrea 的方式时发生的错误:
LinearAlgebra.rows
并从iex
导致段错误调用。
有人能告诉我在 NIF 中处理结构的正确方法吗?
PS对不起C代码,我从来没有写过比一堆helloworlds更多的东西。
erlang - Erlang 中的循环神经网络
我目前正在做一个 erlang 项目,需要创建一个游戏机器人作为附带功能。但令我惊讶的是,我找不到一个可以用来在 erlang 中创建 RNN 的库。我应该怎么办?如何在 erlang 中实现 RNN?甚至可能吗?您知道的任何模块/库都可以帮助我完成任务吗?
提前致谢。
erlang - 在 Erlang VM 和 NIF 之间传递 BIGINT
有没有一种有效的方法在 Erlang VM 和 NIF 之间传递 BIGINT(x86_64/amd64 架构的整数超过 64 位)?到目前为止,我还没有在enif
模块中找到支持功能。也许将 BIGINT 转换为二进制文件会有所帮助,但可能还有另一种好方法。
erlang - Erlang NIF 奇怪的 iolist 行为
我刚开始尝试使用 Erlang NIFS 并遇到了这个问题,我想知道是否有什么可以解决的。
这是NIF:
以及当我从 erlang 调用函数时的一些输出:
至少让二进制字符串正常工作会很好。有任何想法吗?
编辑:我忘记了我真正需要的是char *
C 程序中作为字符串 () 的数据,所以我可能一开始就错了。
erlang - 如何使用函数值在erlang中切换大小写?
尽管似乎可以工作,但该程序正在崩溃。我不明白为什么。我正在尝试完成深度合并并需要条件逻辑。
给定以下列表:
我试图将它们进行如下比较,此函数按预期返回 true:
给出以下输出:
erlang - Elixir CRC 无法在 MAC 操作系统上编译
我的 elixir 项目间接使用了具有 NIF 的 crc。他们不会编译。看起来链接没有看到库。
我继续检查环境:
这很可能是配置问题。我将发布最小的可重现项目
multithreading - 在erlang nif中创建脏线程
我有点困惑,当我创建一个脏 NIF(例如,通过在其 ErlNifFunc 条目中为脏 NIF 设置适当的标志值)时,这会创建一个在脏线程上运行的脏调度程序。
我知道我只能有 N 个 cpu-bond 脏线程作为 N 个 cpu 核心的数量。但是,还有enif_thread_create函数。
它们之间有什么区别?我可以使用 enif_thread_create 创建的线程是否有限制?它们也会是脏线吗?我将欣赏一个通过 enif_thread_create 使用脏线程的简单代码示例。