64-битные технологии – еще одно направление в современном программном обеспечении
В блоге Intel довольно много говорится о многоядерных процессорах, как очевидном этапе развития компьютерных систем. Это действительно так. Но помимо многоядерных машин, другим важным направлением развития являются 64-битные технологии. Что это такое, в чем преимущества, какие есть проблемы – взгляд пользователя и взгляд программиста.
Под 64-битными технологиями понимают как аппаратные, так и программные средства.
К аппаратным средствам относятся 64-битные процессоры (Intel 64, Intel Itanium). «Бытовые» процессоры делятся на x86-совместимые (Intel 64, AMD64) и несовместимые с ними процессоры Intel Itanium. Естественно, что для 64-битных процессоров должны быть соответствующие материнские платы, но, как правило, их в отдельный класс не выделяют.
К программным средствам относятся 64-битные операционные системы, 64-битные драйверы, а также приложения – как 64-битные, так и просто работающие на 64-битных операционных системах. Ну и не будем забывать об инструментах для разработчиков 64-битных приложений (компиляторы, отладчики, библиотеки).
Что касается аппаратной составляющей 64-битных технологий, то она уже давно готова, внедрена и более того, наверняка находится у вас на рабочем столе. Спорим, что у большинства читателей будет 64-битный процессор (см. ark.intel.com)?
С программной составляющей дело обстоит сложнее. 64-битные операционные системы как в Unix-мире, так и в Windows-мире давно уже существуют. Но вот их распространенность пока не велика. Причиной этого является небольшое количество программ, которые не имеют проблем в 64-битном окружении. Дошло даже до того, что Microsoft в Windows 7 встроила виртуальную машину в операционную систему, чтобы решить проблемы старых программ.
Причина недостаточного количества 64-битных программ кроется в замкнутом круге, который, надеемся, все-таки прорвется со временем. Разработчики программ не хотят вкладываться в 64-битный софт, поскольку у малого количества пользователей 64-битная операционная система, а пользователи не устанавливают 64-битные операционные системы, так как мало 64-битных программ. Разорвать этот круг может кто-то третий. Так, например, Microsoft выпустила Windows Server 2008 R2 только в 64-битном варианте.
Так что с одной стороны, вроде бы все готово к массовому переходу на 64 бита, но с другой – этот переход только начинается.
Для пользователя 64-битные технологии — это возможность получить для приложений больше двух гигабайт оперативной памяти. Где это нужно? В «тяжелых» задачах (видео, звук, графика, архивация), в играх и даже в браузерах (когда открыто несколько десятков вкладок). Вроде бы привлекательно, но пользователи пока не спешат переходить на 64 бита, так как есть проблемы взаимодействия 64-битного и 32-битного программного обеспечения. Это проблемы решаются, но видимо не так быстро как хотелось бы пользователям.
Но 64-битные технологии актуальны не только для «тяжелых» задач. Даже если программа использует немного оперативной памяти (около гигабайта), то при распространении многоядерных процессоров, 64-битные технологии окажутся востребованными. Ведь в 32-битной операционной системе всего доступно не более 4 Гбайт (2^32), хотя на практике даже меньше. А если на машине с четырьмя ядрами запущено несколько приложений? Да еще и каждому из них нужно по гигабайту оперативной памяти… Так что тут уже без 64-битных систем никуда.
Как говорилось выше, программисты не особо спешат делать 64-битные версии своих приложений. Хотя все инструменты для этого уже есть – есть компиляторы 64-битных приложений для большинства языков программирования (как от Intel, так и от Microsoft), есть сторонние инструменты (как, например, анализатор кода PVS-Studio, предназначенный для выявления ошибок, характерных для 64-битных и параллельных приложений).
Основная причина, почему не спешат программисты, это необходимость поддерживать две версии программы – 32-битную и 64-битную. В теории достаточно просто скомпилировать 32-битное приложение для 64-битной системы, однако на практике возникают многочисленные нюансы. Из-за чего и приходится поддерживать две версии. И пока можно обойтись только одной (как например, для 32-битных игр), то стараются обходиться одной версией приложения.
Очевидно, что 64-битный мир придет к нам. Насколько это будет быстро – это зависит и от программистов, и от пользователей. Но уже ясно, что те компании-разработчики программ, которые быстрее выпустят 64-битные версии своих приложений, смогут вырваться вперед в конкурентной борьбе. А пользователи, которые быстрее перейдут на 64-битные технологии, смогут чуть раньше оценить эти преимущества.
1. Форум компании Intel "Разработка 64-битных приложений" на русском языке.
2. Статья "20 ловушек переноса Си++ — кода на 64-битную платформу".
3. Ресурсы для разработчиков 64-битных и параллельных программ на русском языке.
4. Инструмент PVS-Studio – поиск проблем в 64-битных и параллельных программах.
Что такое 64-битные технологии (аппаратная и программная часть)?
Под 64-битными технологиями понимают как аппаратные, так и программные средства.
К аппаратным средствам относятся 64-битные процессоры (Intel 64, Intel Itanium). «Бытовые» процессоры делятся на x86-совместимые (Intel 64, AMD64) и несовместимые с ними процессоры Intel Itanium. Естественно, что для 64-битных процессоров должны быть соответствующие материнские платы, но, как правило, их в отдельный класс не выделяют.
К программным средствам относятся 64-битные операционные системы, 64-битные драйверы, а также приложения – как 64-битные, так и просто работающие на 64-битных операционных системах. Ну и не будем забывать об инструментах для разработчиков 64-битных приложений (компиляторы, отладчики, библиотеки).
Это уже есть или еще надо ждать?
Что касается аппаратной составляющей 64-битных технологий, то она уже давно готова, внедрена и более того, наверняка находится у вас на рабочем столе. Спорим, что у большинства читателей будет 64-битный процессор (см. ark.intel.com)?
С программной составляющей дело обстоит сложнее. 64-битные операционные системы как в Unix-мире, так и в Windows-мире давно уже существуют. Но вот их распространенность пока не велика. Причиной этого является небольшое количество программ, которые не имеют проблем в 64-битном окружении. Дошло даже до того, что Microsoft в Windows 7 встроила виртуальную машину в операционную систему, чтобы решить проблемы старых программ.
Причина недостаточного количества 64-битных программ кроется в замкнутом круге, который, надеемся, все-таки прорвется со временем. Разработчики программ не хотят вкладываться в 64-битный софт, поскольку у малого количества пользователей 64-битная операционная система, а пользователи не устанавливают 64-битные операционные системы, так как мало 64-битных программ. Разорвать этот круг может кто-то третий. Так, например, Microsoft выпустила Windows Server 2008 R2 только в 64-битном варианте.
Так что с одной стороны, вроде бы все готово к массовому переходу на 64 бита, но с другой – этот переход только начинается.
Точка зрения пользователей
Для пользователя 64-битные технологии — это возможность получить для приложений больше двух гигабайт оперативной памяти. Где это нужно? В «тяжелых» задачах (видео, звук, графика, архивация), в играх и даже в браузерах (когда открыто несколько десятков вкладок). Вроде бы привлекательно, но пользователи пока не спешат переходить на 64 бита, так как есть проблемы взаимодействия 64-битного и 32-битного программного обеспечения. Это проблемы решаются, но видимо не так быстро как хотелось бы пользователям.
Но 64-битные технологии актуальны не только для «тяжелых» задач. Даже если программа использует немного оперативной памяти (около гигабайта), то при распространении многоядерных процессоров, 64-битные технологии окажутся востребованными. Ведь в 32-битной операционной системе всего доступно не более 4 Гбайт (2^32), хотя на практике даже меньше. А если на машине с четырьмя ядрами запущено несколько приложений? Да еще и каждому из них нужно по гигабайту оперативной памяти… Так что тут уже без 64-битных систем никуда.
Точка зрения программистов
Как говорилось выше, программисты не особо спешат делать 64-битные версии своих приложений. Хотя все инструменты для этого уже есть – есть компиляторы 64-битных приложений для большинства языков программирования (как от Intel, так и от Microsoft), есть сторонние инструменты (как, например, анализатор кода PVS-Studio, предназначенный для выявления ошибок, характерных для 64-битных и параллельных приложений).
Основная причина, почему не спешат программисты, это необходимость поддерживать две версии программы – 32-битную и 64-битную. В теории достаточно просто скомпилировать 32-битное приложение для 64-битной системы, однако на практике возникают многочисленные нюансы. Из-за чего и приходится поддерживать две версии. И пока можно обойтись только одной (как например, для 32-битных игр), то стараются обходиться одной версией приложения.
Перспективы
Очевидно, что 64-битный мир придет к нам. Насколько это будет быстро – это зависит и от программистов, и от пользователей. Но уже ясно, что те компании-разработчики программ, которые быстрее выпустят 64-битные версии своих приложений, смогут вырваться вперед в конкурентной борьбе. А пользователи, которые быстрее перейдут на 64-битные технологии, смогут чуть раньше оценить эти преимущества.
Что есть в сети 64-битного?
1. Форум компании Intel "Разработка 64-битных приложений" на русском языке.
2. Статья "20 ловушек переноса Си++ — кода на 64-битную платформу".
3. Ресурсы для разработчиков 64-битных и параллельных программ на русском языке.
4. Инструмент PVS-Studio – поиск проблем в 64-битных и параллельных программах.
комментарии (14)
А если мы освободимся от этого 16-битного BIOS, то уберём 16-битный режим вообще, и процессор в результате может стать хотя бы немного проще, что сократит затраты на разработку и тестирование процессоров.
Насчёт скорости работы — не могу не согласиться. Не знаю только, насколько велик выигрыш. Если нехватка регистров действительно является узким местом, то почему их не сделать, к примеру, 1024?
Itanium — 128 регистров. ARM — 16 регистров. Сложность видимо в том, что во-первых для обеспечения работы конвейера приходится иметь несколько наборов регистров, а во-вторых сложность в сохранении контекста (тысячу регистров сохранять и восстанавливать долго).
«для обеспечения работы конвейера приходится иметь несколько наборов регистров» — так в чём проблема? Сделать 1024*N регистров…
«сложность в сохранении контекста» решается путём введения регистровых окон.
Ну и как сказали выше — ряд тестов показывает прирост производительности.
Я всё же вернусь к исходному утверждению. Большинству софта не нужно больше 2 ГБ памяти. Аська, антивирь, VPN клиент, почта, Notepad++, шифровалка дисков, смотрелка картинок, Акробат ридер… это из того, что сейчас запущено на моём компе. С браузером ситуация спорная (я неспособен удержать в голове больше пары десятков вкладок, некоторые открывают больше). Но вот например Хром, в котором каждая вкладка является отдельным процессом, точно не нуждается в немеряных гигабайтах.
С другой стороны, годы балансирования на грани 2ГБ даром не прошли: замечаю за собой, что стараюсь закрывать лишние файлы, проекты, фотографии. Экономлю :)
1) sizeof(int) + sizeof(void *) не равно sizeof(MyStruct). Это связано с выравниванием полей в структурах. В результате на 64-битной системе выделяется меньше памяти, чем необходимо. Обратите внимание, что если исправить все остальные ошибки, программа успешно работает. То есть перетирается некоторая пока неиспользуемая память. Это может быть весьма неприятно, так как усложняет диагностику подобных ошибок.
2) Условие result != unsigned(-1) на 64-битной системе всегда истинно. Схожие ошибки можно нередко встретить в программах активно работающих со строками. Образуются они так. В начале пишется код:
size_t result = str.find(«5»);
if (result != -1)
Он успешно работает на 32-битной системе. И хотя это плохой стиль, он будет успешно работать и на 64-битной системе. Иногда компиляторы/анализаторы предупреждают пользователя о сравнении знаковых и беззнаковых значений, что чревато определенным видом ошибок. И помятуя об этом программист приписывает некорректное приведение типов к unsigned. Оно подавляет предупреждения, но вносит ошибку, которая потом проявится на 64-битной системе.
3) Конструкция throw p — A; генерирует исключение, используя тип ptrdiff_t. Это приводит к тому, что на 64-битной системе данное исключение не будет перехвачено с помощью catch (int position) {}. Причина в том, что ptrdiff_t и int совпадают в 32-битной системе и не совпадают в 64-битной.
А теперь та долгожданная реклама, о которой так много говорят. Если запустить анализатор Viva64 входящий в состав PVS-Studio то он выдаст на рассматриваемый код следующие предупреждения:
error V119: More than one sizeof() operators are used in one expression. r:\...\example_x64_bug_01.cpp 22
error V112: Dangerous magic number 4 used: p = A; p <= &A[4]; p++). r:\...\example_x64_bug_01.cpp 31
error V115: Memsize type used for throw. r:\...\example_x64_bug_01.cpp 34
error V104: Implicit type conversion to memsize type in an arithmetic expression. r:\...\example_x64_bug_01.cpp 40
Анализатор обнаружил все ошибки, а также предупредил о наличии опасной константы «4», что в прочем является для данного кода ложным срабатыванием.
Продолжим или хватит спама? :)
Невижу никакой Cобственной выгоды в переходе на 64