Плавание по сравнению с двойной производительностью

(a,b) = (None, []) if not len(c) else (c[0], c[1:])

также является опцией для обработки случая, когда c - пустая последовательность, хотя она не будет различать [None] и [] в терминах как присвоения a, b. Так что используйте его с осторожностью, try / except, вероятно, лучше всего.

Я не вижу никакой реальной разницы между Python 3 и 2.7 при обработке пустого контейнера, но хорошая вещь о Python 3 здесь работает с любой итеративный.

Это работает в версии 2.7, если вы знаете, что c является генератором.

a,b = c.next(), c

Но полная красота распаковки, по-видимому, требует Python 3.

89
задан Peter Mortensen 18 November 2017 в 11:24
поделиться

3 ответа

На x86 процессорах, по крайней мере, float и double будет каждый преобразован в 10 байтов, реальных FPU для обработки. FPU не имеет отдельных блоков обработки для различных типов с плавающей точкой, которые он поддерживает.

старый совет, который float быстрее, чем double, применялся 100 лет назад, когда большинство центральных процессоров не имело встроенного FPUs (и у немногих людей были отдельные микросхемы FPU), таким образом, управление самое с плавающей точкой было сделано в программном обеспечении. На этих машинах (которые приводились в действие паром, сгенерированным ямами лавы), это было быстрее для использования float с. Теперь единственная реальная выгода для float с - то, что они занимают меньше места (который только имеет значение, есть ли у Вас миллионы из них).

146
ответ дан P Daddy 24 November 2019 в 07:16
поделиться

Существуют все еще некоторые случаи, где плавания предпочтены однако - с OpenGL, кодирующим, например, намного более распространено использовать тип данных GLFloat (обычно отображаемый непосредственно на плавании на 16 битов), поскольку это более эффективно на большинстве GPU, чем GLDouble.

11
ответ дан Peter Mortensen 24 November 2019 в 07:16
поделиться

У меня был небольшой проект, в котором я использовал CUDA, и я помню, что float там тоже был быстрее, чем double. На этот раз трафик между Хостом и Устройством ниже (Хост - это ЦП, а «нормальная» ОЗУ, а Устройство - это графический процессор и соответствующая ОЗУ). Но даже если данные все время хранятся на устройстве, это медленнее. Думаю, я где-то читал, что это изменилось недавно или должно измениться в следующем поколении, но я не уверен.

Похоже, что в этих случаях графический процессор просто не может изначально обрабатывать двойную точность, что также объясняет, почему обычно используется GLFloat, а не GLDouble.

(Как я уже сказал, это насколько я помню, просто наткнулся на это, когда искал float vs. double на CPU.)

14
ответ дан 24 November 2019 в 07:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: