我正在寻找加快"紧密循环的方法。在我的灵药程序中。
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等编译语言相当 - 不会慢几个数量级。我真正的瓶颈似乎是将该循环的输出发送到另一个进程 - 特别是当这种情况发生在网络上的节点之间时。
感谢所有表现出兴趣的人。
答案 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