Вопрос

Мне было интересно, какие целочисленные или плавающие типы являются самыми быстрыми..
я думал, что byte быстрее, чем integer, потому что он имеет меньший диапазон.
Некоторые люди рассказали мне ..что в некоторых случаях целое число быстрее, чем байт.

второй вопрос :
ГПУ находится на пути к Мировому господству ..
поэтому я спросил себя :Может ли двойное значение "быть быстрее", чем Целое число ..из - за FPU
так где же эксперты ?:)

Это было полезно?

Решение

Вы должны думать не только о тактовых циклах, чтобы выполнить арифметические вычисления.Вы могли бы сказать, что добавление двух целых чисел занимает столько-то циклов, добавление двух двойных чисел занимает столько-то циклов и т.д.но это может быть неуместно.Если все ваши данные помещаются в кэш одновременно, то синхронизация отдельных операций имеет смысл.Но если нет, то дополнительное время, требуемое из-за промаха кэша, перевешивает разницу в отдельных операциях.Иногда работа с меньшими типами данных происходит быстрее, потому что это делает разницу между необходимостью извлекать что-то из кэша или нет, или необходимостью переходить на диск или нет.

В наши дни компьютеры тратят большую часть своего времени на перемещение данных, а не на арифметические действия, даже в приложениях для подсчета чисел.И соотношение первых ко вторым увеличивается.Вы не можете просто сравнить, например, время, необходимое для умножения коротких позиций, с удвоением.Вы можете обнаружить, что при наличии двух версий вашей программы одна версия быстрее справляется с небольшой задачей, а другая - с более крупной программой, и все это из-за относительной эффективности видов памяти.

Другие советы

я думал, что byte быстрее, чем integer, потому что он имеет меньший диапазон.

Что-то, что я испытал:используя short дало мне повышение производительности, в то время как использование int было просто прекрасно.Это связано с тем, что в архитектуре обычно не существует коротких замыканий.Это типы удобства.Процессор действительно работает с его размером слова.В моем случае размер слова соответствовал значению int.Итак, при доступе к short ему пришлось сначала упаковать значение в int, поработать с ним, а затем распаковать и получить мне результат в short.Все это привело к снижению производительности.Таким образом, чем короче, тем не обязательно лучше.

Это зависит от отсутствия битов данных в архитектуре.Процессор с плавающей запятой будет обрабатывать float и double одинаково при выполнении вычислений.Они оба вычисляются с 80-битной точностью и, следовательно, займут одинаковое количество времени.Загрузка и сохранение значений в регистры FPU может иметь значение.Double занимает в два раза больше места в оперативной памяти и поэтому может быть медленнее из-за промахов в кэше.Заметно, если у вас большие массивы, которые вы склонны индексировать случайным образом.

На уровне процессора нет байтов, только слова, которые в настоящее время являются 32-битными или 64-битными.Арифметические единицы обычно запрограммированы для работы с числами размером со слово (или больше, в случае чисел с плавающей запятой).

Таким образом, нет преимущества в скорости при использовании типов размером меньше слова в отношении арифметических операций, и может возникнуть ограничение скорости, потому что вам придется выполнять дополнительную работу, чтобы имитировать типы, которых у процессора нет изначально, напримерзапись одного байта в память требует, чтобы вы сначала прочитали слово, частью которого оно является, изменили его, а затем записали обратно.Чтобы избежать этого, большинство компиляторов фактически используют полное слово памяти для всех переменных меньшего размера, так что даже логическая переменная занимает 32 или 64 бита.

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

Длина в байтах числовых типов зависит от языка, а иногда и от используемой платформы.Например, в java и int, и float используют 4 байта, поэтому время обработки должно быть равным.Однако меня бы удивило, что более длинные типы обрабатываются быстрее.Если есть доказательства этого, я хотел бы прочитать об этом.

О том, какой из них быстрее, целочисленный или байтовый, пока они оба помещаются в регистр, они работают одинаково или, по крайней мере, без заметной разницы.

О целочисленности и двойственности:Может быть, GPU выполняет более быструю арифметику с удвоением, чем обычный cpu, но я сомневаюсь, что он выполняет двойную арифметику быстрее, чем integer, поскольку целочисленная арифметика - это просто регистровая арифметика.

Самая большая оптимизация заключается в переходе от использования циклических скалярных вычислений к использованию векторных вычислений.Затем воспользуйтесь преимуществами SSE графического процессора или CPU.

Что ж, пока вы не выполняете никаких векторных оптимизаций, вы можете использовать целые числа размером с ваши регистры (32/64 бита) без какого-либо фактического снижения производительности.

Числа с плавающей запятой немного отличаются:В то время как процессоры оптимизированы для двойных вычислений, графические процессоры обычно работают с плавающими значениями.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top