Как указать 3 ГБ, используя битовый сдвиг в python? - PullRequest
0 голосов
/ 12 марта 2020

Я выделяю память в Jetson TX2. Имеет 8 ГБ оперативной памяти. Мне нужно указать максимальный размер памяти GPU, доступный для TensorRT.

max_workspace_size_bytes = (должен быть целым числом)

Я видел несколько примеров, использующих эти "значения" :

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

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

Но если у меня 8 ГБ ОЗУ, как «1048576» или «1073741824» могут представлять часть ОЗУ?

Я использовал это для выделения 3 ГБ:

3*(10**9)

Но я хотел бы понять другой способ представления числа.

Ответы [ 3 ]

1 голос
/ 16 марта 2020

Возможно, у вас проблема "Gb vs G i b". Обычно 3 гигабайта ОЗУ означают 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)

Есть связанный вопрос и хорошая Википедия статья об этой проблеме, если вы хотите узнать больше.

1 голос
/ 12 марта 2020

Вы можете подвести их.

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

Или побитовое ИЛИ их.

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

Или смещение большего значения, чем 1, например 3.

(3<<30)
0 голосов
/ 12 марта 2020
3GB = 3,221,225,472
      1100 0000 0000 0000 0000 0000 0000 0000

3<<30 = 3GB
...