64-битный компьютер, производительность для int64 и int16 - PullRequest
1 голос
/ 07 ноября 2011

У меня 64-битный компьютер, и некоторый набор данных в диапазоне -32000: 32000, поэтому для его хранения достаточно int16_t.

Вопросы:

  1. Если это 64-битная машина, то операции с int64_t являются атомарными, а стоимость (с точки зрения скорости) равна операциям с int16_t?Если это так, хранение данных в 64-битной системе экономит пространство, но не скорость?

  2. Для параллельного применения I может на самом деле реально сохранить скорость путем сохранения в int16_t, поскольку кеш также 64-битный, и чем больше данных я храню в кеше - тем быстрее потоки могут получить к нему доступ?

Это верно?

Ответы [ 3 ]

2 голосов
/ 07 ноября 2011

Если ваш компилятор может преобразовать ваш код для использования SSE или AVX, использование 64-битных целых чисел вместо 16-битных целых теоретически замедлит ваш код до 4 раз. Даже если ваш компилятор не может выполнить эту оптимизацию самостоятельно, вы, вероятно, можете вручную преобразовать свой код, чтобы он использовал SSE, и таким образом добиться хорошего ускорения.

Если вы не можете использовать SSE, то, вероятно, лучшим выбором будет использование 32-битных целых чисел, поскольку вам все еще нужно меньше памяти, а 64-битные ЦП по-прежнему оптимизированы для обработки 32-битных значений так же быстро, как 64-битные, поскольку многие программы еще не используют 64-битные. 1003 *

2 голосов
/ 07 ноября 2011

Невозможно быть уверенным без знания алгоритма и некоторого времени. Вы забыли учесть ложное совместное использование, которое будет более значительным с 16-битными целыми числами.

Итак, чтобы ответить на вопрос, вам нужно будет немного подождать.

1 голос
/ 07 ноября 2011

Нет общего ответа, который можно дать, поскольку существует много 64-битных архитектур. Существуют различные версии x86, Itanium, старая Alpha, Sparc, а теперь и ARM.

В целом это верно, меньший тип данных означает, что вы можете разместить больше данных в своем кеше, что хорошо для скорости (и пространства).

То, будет ли операция с той же скоростью, очень сильно зависит от архитектуры. Как уже упоминалось, есть процессоры с векторными единицами, которые могут работать с 64-битными типами данных или в 4 раза больше 16-битных значений. Точкой, которая может замедлить 16-битную операцию, является выравнивание. Некоторые 64-битные процессоры требуют, чтобы их данные были выровнены на 8 байт (выравнивание возможно, но медленнее).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...