问题标签 [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.

0 投票
1 回答
82 浏览

c - 为 BEAM 创建硬件加速管道

我对在 Erlang 中启用 GPU 加速的管道有一个概念性的想法。该 API 将由高阶函数组成,这些函数采用 fun、二进制文件和一些标志,对 BEAM 字节码进行运行时检查,以查看 fun 是否可以编译到 OpenCL,缓存结果,然后与来自的高阶函数类似地工作列表模块。如果 fun 无法转换为 OpenCL,则该过程将失败。

所有操作都将在二进制文件上完成,因为 cons 列表不会在内存中连续表示,导致将它们移入和移出 GPU 内存需要大量工作。可以选择将二进制解释为浮点数、双精度数、整数或混合,并具有不同大小的输入和输出以供娱乐。是否可以在纯 Erlang 或 C 中做到这一点而无需破解 BEAM?如果是,将不胜感激相关资源的链接。

0 投票
1 回答
158 浏览

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

0 投票
0 回答
64 浏览

c - Mix中获取根项目的依赖路径

由于我的项目由一些使用 nifs 的混合项目组成,我正在尝试制作一个自定义编译器,以便 *.c 文件可以与这些混合项目一起编译。假设我有一个项目 A,它有 B 的依赖项,它有一些依赖于 C 的本机代码。问题出现了,当 C 也是 A 的依赖项时 - 然后从 Bs 的角度来看,Cs 代码的位置是未知的,因为它取决于将 C 链接到 A 的方式(特别是当它通过路径链接时),这使得无法将 C 的 *.c 文件链接到 B。这就是为什么我想从依赖项访问(在这种情况下为 B ) 到根 (A) 其他依赖路径。为了解决这个问题,我考虑将本机源代码放入priv可以通过 访问的文件夹,Application.app_dir/2但我不希望将源代码包含在发布中。

0 投票
1 回答
225 浏览

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更多的东西。

0 投票
1 回答
147 浏览

erlang - Erlang 中的循环神经网络

我目前正在做一个 erlang 项目,需要创建一个游戏机器人作为附带功能。但令我惊讶的是,我找不到一个可以用来在 erlang 中创建 RNN 的库。我应该怎么办?如何在 erlang 中实现 RNN?甚至可能吗?您知道的任何模块/库都可以帮助我完成任务吗?

提前致谢。

0 投票
1 回答
156 浏览

erlang - 在 Erlang VM 和 NIF 之间传递 BIGINT

有没有一种有效的方法在 Erlang VM 和 NIF 之间传递 BIGINT(x86_64/amd64 架构的整数超过 64 位)?到目前为止,我还没有在enif模块中找到支持功能。也许将 BIGINT 转换为二进制文件会有所帮助,但可能还有另一种好方法。

0 投票
1 回答
81 浏览

erlang - Erlang NIF 奇怪的 iolist 行为

我刚开始尝试使用 Erlang NIFS 并遇到了这个问题,我想知道是否有什么可以解决的。

这是NIF:

以及当我从 erlang 调用函数时的一些输出:

至少让二进制字符串正常工作会很好。有任何想法吗?

编辑:我忘记了我真正需要的是char *C 程序中作为字符串 () 的数据,所以我可能一开始就错了。

0 投票
2 回答
146 浏览

erlang - 如何使用函数值在erlang中切换大小写?

尽管似乎可以工作,但该程序正在崩溃。我不明白为什么。我正在尝试完成深度合并并需要条件逻辑。

给定以下列表:

我试图将它们进行如下比较,此函数按预期返回 true:

给出以下输出:

0 投票
1 回答
435 浏览

erlang - Elixir CRC 无法在 MAC 操作系统上编译

我的 elixir 项目间接使用了具有 NIF 的 crc。他们不会编译。看起来链接没有看到库。

我继续检查环境:

这很可能是配置问题。我将发布最小的可重现项目

0 投票
1 回答
301 浏览

multithreading - 在erlang nif中创建脏线程

我有点困惑,当我创建一个脏 NIF(例如,通过在其 ErlNifFunc 条目中为脏 NIF 设置适当的标志值)时,这会创建一个在脏线程上运行的脏调度程序。

我知道我只能有 N 个 cpu-bond 脏线程作为 N 个 cpu 核心的数量。但是,还有enif_thread_create函数。

它们之间有什么区别?我可以使用 enif_thread_create 创建的线程是否有限制?它们也会是脏线吗?我将欣赏一个通过 enif_thread_create 使用脏线程的简单代码示例。