如何使用 python 中的位移位指定 3GB?

How to specify 3GB using bit shift in python?

我正在 Jetson TX2 中分配内存。它有 8GB 的​​内存。 我需要指定可用于 TensorRT 的最大 GPU 内存大小。

max_workspace_size_bytes = (has to be an integer)

我看过一些使用这些的示例 "values":

1<<20 = 1048576 (decimal)
      = 0001 0000 0000 0000 0000

1<<30 = 1073741824
      = 0001 0000 0000 0000 0000 0000 0000

但是如果我有8GB RAM,“1048576”或“1073741824”怎么能代表RAM的一部分呢?

我用这个分配了3GB:

3*(10**9)

但我想了解表示数字的另一种方式。

你可以总结一下。

((1<<30)+(1<<31))

或按位或它们。

((1<<30) | (1<<31))

或者移动一个大于 1 的值,例如3.

(3<<30)
3GB = 3,221,225,472
      1100 0000 0000 0000 0000 0000 0000 0000

3<<30 = 3GB

也许您遇到了 "Gb vs Gib" 问题。通常,3 Gigas 的 RAM 是指 3,221,225,472 字节而不是 3,000,000,000。

第一个值是 3 * (2^10)*(2^10)*(2^10),一个漂亮的 3 (11) 后跟 30 个零的二进制表示,而第二个是 3 * ( 10^3)​​(10^3)​​(10^3)​​,二进制乱七八糟

这种使用 2 的幂而不是 10 的幂的约定是您会看到人们将 3Gb 写成 3 << 30:

的原因
3 << 30 == 3 * (1 << 10) * (1 << 10) * (1 << 10)
        == 3 * (2**10 * 2**10 * 2**10)
        == 3 * (2**30)

如果您想了解更多信息,related question and a good Wikipedia article 关于这个问题。