Elixir紧密循环加速

时间:2015-04-17 15:43:13

标签: erlang native elixir

我正在寻找加快"紧密循环的方法。在我的灵药程序中。

Enum.reduce( list, 0, fn ({c,v},acc) -> v*elem(tuple_array,c) + acc end )

它只是运行一个元组列表,并为每个元素执行: 元组查找(c是整数), 乘法,和 另外一个。

我尝试插入模块的头部

@compile [:native, {:hipe, [:verbose, :o3]}]

并在macOS上显示它编译本机。 然而,当我从iex shell运行代码时 它比以前运行得更慢。 我在这里错过了什么吗?

2015年5月3日更新 我现在已经意识到我的紧密循环运行速度几乎与Fortran等编译语言相当 - 不会慢几个数量级。我真正的瓶颈似乎是将该循环的输出发送到另一个进程 - 特别是当这种情况发生在网络上的节点之间时。

感谢所有表现出兴趣的人。

1 个答案:

答案 0 :(得分:1)

您是否尝试过模式匹配?通常它比使用引擎盖下使用的Enum.reduce更快:foldr

defmodule Test do
  def reduce_list([], acc, f) do
    acc
  end

  def reduce_list([h|t], acc, f) do
    reduce_list(t, f.(h, acc), f)
  end
end