Вопросы о процессорах X86

У меня два вопроса о процессорах X86.

Во-первых: что такое SSE? Для чего это? Это архитектура CISC? Следует ли программисту, который не программирует на ассемблере и не программирует компиляторы, изучать SSE?

Второе: 64-битные процессоры поддерживают 32-битные процессоры. Если 64-битные процессоры заменят 32-битные процессоры, должны ли программисты компилировать приложение, которое использует менее 2 ГБ ОЗУ для 32-битных? 32-битное приложение использует меньший объем памяти, а его двоичные файлы меньше. ОС должна хранить общие библиотеки как для 32, так и для 64 бит, и это может быть проблемой.

Спасибо


person Squall    schedule 29.03.2011    source источник


Ответы (4)


[Хех, отвечая на этот вопрос, он был перенесен на суперпользователя, затем удален, и теперь он, кажется, волшебным образом вернулся сюда. Третья попытка - очарование!]

Я плохо разбираюсь в SSE, но это механизм, позволяющий работать с несколькими наборами данных параллельно за такт. (Более старые микросхемы оставляли удивительное количество кремния в простое за цикл; чипы стали лучше выполнять несколько инструкций за цикл самостоятельно, но это потребовало изрядного количества догадок и полностью отказало в некоторых алгоритмах с большим объемом данных.) Таким образом, SSE требует страница из старых систем SIMD, которые позволяли выполнять одни и те же команды для нескольких фрагментов данных. Время настройки могло занять больше времени, но в долгосрочной перспективе это было сделано много.

В зависимости от того, что вы пытаетесь сделать, это может иметь огромное значение, но большинство программистов вероятно, никогда не потребуются инструменты, которые может предоставить SSE.

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

Итак, за исключением Firefox и Flash, 64-разрядная версия является повсеместной, и расширение памяти из-за более крупных указателей не кажется большой проблемой.

person sarnold    schedule 29.03.2011

SSE - это реализация Intel одной инструкции для нескольких данных. Выполнение одной и той же операции с несколькими значениями одновременно для ускорения работы. Если вы выполняете тяжелую работу по числовому вычислению, особенно обработку изображений, возможно, стоит взглянуть на нее - хотя библиотеки, вероятно, уже делают это, и для настоящего успеха вы бы изучили Cuda / openCL.

32/64-битная версия сложна и очень специфична для ОС / компилятора. Для 64-битного кода требуется место, и могут быть преимущества использования 32-битных сборок в 64-битной ОС. Но многие причины связаны с очень ОС, выходящими за рамки размера указателя - например, требуются подписанные сборки для 64-битной версии.

person Martin Beckett    schedule 29.03.2011

  1. Вы можете прочитать о SSE здесь. По правде говоря, вам, вероятно, действительно не нужно ничего об этом знать, если вы не работаете в ASM или не занимаетесь тяжелыми вещами (и даже в этом случае, вероятно, лучше всего, если вы позволите своему компилятору сделать оптимизацию за вас).

  2. Не все 64-битные процессоры поддерживают 32-битные инструкции. Это правда, что современные 64-битные процессоры для ПК поддерживают 32-битные инструкции. Подробнее об этом можно узнать здесь. Что вас беспокоит по поводу поставки 64- или 32-битных двоичных файлов? Все зависит от того, что нужно / хочет ваш клиент. Верно, что 64-битные двоичные файлы имеют тенденцию быть больше по размеру. Вам решать, действительно ли ваша программа должна быть 64-битной.

person paulcam    schedule 29.03.2011
comment
Все 64-битные процессоры X86 (AMD64, x86-64, EM64T, как вы их называете) поддерживают 32-битные инструкции. Если бы они этого не сделали, они бы больше не были X86. 64-битные инструкции являются расширением существующего 32-битного набора команд. - person cHao; 29.03.2011
comment
Правильно - вот почему я связался со статьей википедии о x86-64 :) - person paulcam; 29.03.2011

SSE - это расширение архитектуры x86, предназначенное для поддержки мультимедиа. Дополнительную информацию можно найти http://en.wikipedia.org/wiki/Streaming_SIMD_Extensions.

По вашему второму вопросу ведется довольно много споров. Здесь я говорю только о 32- и 64-битной платформе Intel. Функционально, если программа никогда не использует более 2 ГБ памяти, разницы быть не должно. Однако компиляция для 64-битной версии может создать разные профили производительности. Например, размер указателя больше на 64-битной платформе, что приводит к увеличению размера программы. Чтобы компенсировать этот недостаток, 64-битная 64-битная платформа имеет больше регистров, что может ускорить работу вашей программы. Здесь есть сложный компромисс. Будет интересно посмотреть, что думают другие.

person ltc    schedule 29.03.2011