64-битная и пропускная способность памяти - PullRequest
4 голосов
/ 07 июня 2009

Мейсон спросил о преимуществах 64-битного процессора .

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

Но насколько это плохо, правда? И что восполняет это? Или я должен запускать все свои небольшие приложения на 32-битных компьютерах?

Я должен упомянуть, что, в частности, я рассматриваю случай, когда можно выбрать 32- или 64-разрядную версию на одной и той же машине, поэтому в любом режиме пропускная способность для основной памяти одинакова. *

[1]: И даже пятнадцать лет назад, если на то пошло. Я не забываю рассказывать о хорошем поведении кэша, а также, в частности, о том, что процессоры Alpha, которые выиграли все тесты, имели на тот момент гигантский 8 МБ кэш-памяти второго уровня.

Ответы [ 3 ]

9 голосов
/ 07 июня 2009

То, должно ли ваше приложение быть 64-битным, во многом зависит от того, какие вычисления оно выполняет. Если вам нужно обрабатывать очень большие наборы данных, вам, очевидно, нужны 64-битные указатели. Если нет, вам нужно знать, тратит ли ваше приложение относительно больше времени на арифметику или доступ к памяти. На x86-64 регистры общего назначения не только в два раза шире, их в два раза больше, и они более «общего назначения». Это означает, что 64-битный код может иметь гораздо лучшую целочисленную производительность. Однако, если вашему коду не требуется дополнительное место в регистре, вы, вероятно, увидите более высокую производительность, используя меньшие указатели и данные, благодаря повышенной эффективности кэширования. Если в вашем приложении преобладают операции с плавающей запятой, вероятно, нет смысла делать его 32-битным, так как в большинстве случаев доступ к памяти будет для широких векторов, и дополнительные регистры SSE помогут.

3 голосов
/ 07 июня 2009

В большинстве 64-битных сред программирования используется модель "LP64", что означает, что только указатели и long int переменные (если вы программист на C / C ++) являются 64-битными. Целые числа (int с) остаются 32-битными, если вы не в модели "ILP64", что довольно редко.

Я упоминаю об этом только потому, что большинство int переменных не используются для size_t -подобных целей, то есть они остаются в пределах диапазонов, удобно удерживаемых 32 битами. Для переменных такого рода вы никогда не сможете заметить разницу.

Если вы выполняете числовую или объемную работу с> 4 ГБ данных, вам все равно потребуется 64 бита. Если нет, вы не заметите разницы, если только вы не привыкли использовать long s, где большинство будет использовать int s.

2 голосов
/ 07 июня 2009

Я думаю, что вы начинаете с плохого предположения здесь. Вы говорите:

движется вдвое больше памяти для значительного числа операций не может будь хорошим

и первый вопрос: почему бы и нет? В истинной 64-битной машине путь данных имеет ширину 64 бита, поэтому перемещение 64-битных занимает ровно (в первом приближении) столько же циклов, сколько 32-битное перемещение на 32-битной машине. Таким образом, если вам нужно переместить 128 байтов, это займет вдвое меньше циклов, чем на 32-битной машине.

...