繁体   English   中英

Julia 使用大型 arrays,使用 Int8 与 Int64 相比有内存/速度优势吗?

[英]Julia working with large arrays, is there any memory/speed advantage to using Int8 vs Int64?

Julia 1.5.3 on Ubuntu。我正在编写一个迭代 model,微观模拟的形式,并从 R 转换。随着人口的增长,数组大小可能会变得相当大,但都由整数和小整数组成。 在这种情况下,就 memory 或速度而言,使用 Int8 与在我看来是默认的 Int64 相比有什么优势吗?

有没有办法告诉 Julia,一些全局/通用设置可以更改为默认使用 Int8 而不是 Int64,除非另有指示?

遇到了我的第一个问题。 我有一个使用 Int8 值的 function,但是当我这样称呼它时:

Pop = InitialPop(StaNum, LayNum, MaxSts, MaxPar, MaxDay, MaxTrt)

我收到此错误:

ERROR: MethodError: no method matching InitialPop(::Int8, ::Int8, ....

这个 function 只是创建了一个初始的起始“种群”或生物体,所以我的问题是:

  1. 是只使用默认的 Int64 方法并在生成整个数组后将其转换为 Int8 更好还是
  2. 我需要做什么才能使它在 Int8 中全部工作并克服上述错误?

最欢迎阐明我逻辑中的明显缺陷。 谢谢。

是的,对Int8的操作会更快并且消耗更少 memory - Int8 占用 1 个字节的 RAM 而Int64占用 8 个字节的 RAM(参见下面的基准测试)。 但是,对于 model 的元参数(例如人口规模),坚持使用Int64是可以的。 它们只使用一次,可能不是您计算的核心部分。

考虑以下两个向量:

a = rand(Int8(0):Int8(127), 1000)
b = rand(0:127, 1000)

让我们看看从这些向量的每个元素中减去 5 需要多少时间和 memory:

julia> using BenchmarkTools

julia> @btime $a.-Int8(5);
  118.053 ns (1 allocation: 1.06 KiB)

julia> @btime $b.-Int64(5);
  581.959 ns (1 allocation: 7.94 KiB)

您可以看到加速是 4 倍,memory 消耗减少了 8 倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM