Урок 3. Перенос кода на 64-битные системы. За и против

23.01.2012

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

Рассмотрим ряд факторов, которые помогут сделать выбор.

Продолжительность жизненного цикла приложений

Не следует создавать 64-битную версию приложения с коротким жизненным циклом. Благодаря подсистеме WoW64 старые 32-битные приложения достаточно хорошо работают на 64-битных Windows системах. Нерационально делать программу 64-битной, если через 2 года она перестанет поддерживаться. Практика показала, что переход на 64-битные версии Windows будет очень медленным и плавным. Возможно, большинство ваших пользователей в краткосрочной перспективе будут использовать только 32-битный вариант вашего программного решения. Следует учитывать, что этот курс был написан в 2009 году, когда большинство пользователей работало с 32-битными версиями операционных систем. Но со временем использование 32-битных программ будет выглядеть все более неестественным и отсталым.

Если планируется длительное развитие и длительная поддержка программного продукта, то следует начинать работать над 64-битным вариантом вашего решения. Спешить, конечно, не следует, но учтите, что чем дольше у вас не будет полноценного 64-битного варианта, тем больше сложностей будет возникать с поддержкой такого приложения, устанавливаемого на 64-битные версии Windows.

Требования к производительности приложения

Перекомпиляция программы для 64-битной системы позволит ей использовать огромные объемы оперативной памяти, а также повысит скорость ее работы на 5-15%. Повышение скорости работы на 5-10% произойдет за счет использования архитектурных возможностей 64-битного процессора, например большего количества регистров. Еще 1-5% прироста скорости обуславливается отсутствием прослойки WoW64, которая транслирует вызовы API между 32-битными приложениями и 64-битной операционной системой.

Например, компания Adobe заявляет, что новый 64-битный "Photoshop CS4" на 12% быстрее его 32-битной версии".

Колоссальный рост производительности могут получить приложения, работающие с большими объемами памяти. Такими программами могут быть графические редакторы, CAD-системы, САПР СБИС, базы данных, пакеты моделирования различных процессов. Возможность разместить все данные в памяти и, следовательно, отсутствие необходимости их подгрузки с жесткого диска может ускорить работу таких приложений уже не на проценты, а в разы.

В качестве примера можно привести интеграцию Альфа-Банком в свою IT-инфраструктуру платформы на базе Itanium 2. Рост инвестиционного бизнеса банка привел к тому, что система в имеющейся конфигурации перестала справляться с возрастающей нагрузкой: задержки в обслуживании пользователей временами достигали критической отметки. Анализ ситуации показал, что узким местом системы является не производительность процессоров, а ограничение 32-разрядной архитектуры в части подсистемы памяти, не позволяющей эффективно использовать больше 4 Гбайт адресного пространства сервера. Объем базы данных превышал 9 Гбайт. Использовалась она весьма интенсивно, что приводило к критической загрузке подсистемы ввода-вывода. Альфа-Банк принял решение о закупке кластера из двух четырехпроцессорных серверов на базе Itanium 2 с объемом оперативной памяти 12 Гбайт. Это решение позволило обеспечить необходимый уровень быстродействия и отказоустойчивости системы. По словам представителей компании, внедрение серверов на основе Itanium 2 позволило ликвидировать проблемы и достигнуть значительной экономии средств.

Использование в проекте сторонних библиотек

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

Зависимости сторонних разработчиков от ваших библиотек

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

Дополнительным преимуществом от выпуска 64-битной версии библиотеки является то, что вы можете продавать ее как отдельный продукт. Таким образом, ваши клиенты, желающие создавать как 32-битные, так и 64-битные приложения будут вынуждены приобретать 2 различные лицензии. Например, такая политика используется компанией Spatial Corporation при продаже библиотеки Spatial ACIS.

Наличие 16-битных приложений

Если в ваших решениях все еще присутствуют 16-битные модули, то пора от них избавиться. Работа 16-битных приложений в 64-битных версиях Windows не поддерживается.

Здесь следует пояснить один момент, связанный с использованием 16-битных инсталляторов. Они до сих пор используются для установки некоторых 32-битных приложений. Создан специальный механизм, который на лету подменяет ряд наиболее популярных 16-битных инсталляторов на более новые версии. Это может вызвать неверное мнение, что 16-битные программы по-прежнему работают в 64-битной среде. Помните, это не так.

Наличие кода на ассемблере

Не забывайте, что использование большого объема кода на ассемблере, может существенно повысить стоимость создания 64-битной версии приложения.

Инструментарий

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

Самой очевидной, как и самой непреодолимой, может стать проблема отсутствия 64-битного компилятора. Когда писался этот текст (2009 год), все еще не существовало 64-битного компилятора C++ Builder от Embarcadero. Его выпуск ожидается только к концу 2009 года. Невозможно обойти подобную проблему, если конечно не переписать весь проект, например, с использованием Microsoft Visual Studio. Но если с отсутствием 64-битного компилятора все понятно, то другие аналогичные проблемы могут оказаться неявными и проявить себя уже на этапе работ по переносу проекта на новую архитектуру. Разумно заранее провести исследование, существуют ли все необходимые компоненты, которые потребуются для реализации 64-битной версии вашего продукта. Вас могут поджидать неприятные сюрпризы.

Принимая решение, помните о последнем факторе, который не упоминался, но весьма важен. Это фактор стоимости модернизации программного кода для компиляции в 64-битном режиме. Как рассчитать эту стоимость, будет рассказано в одном из уроков. Стоимость переноса кода может быть достаточно высокой и должна внимательно учитываться при составлении планов и определении сроков.

Авторы курса: Андрей Карпов (karpov@viva64.com), Евгений Рыжков (evg@viva64.com).

Правообладателем курса "Уроки разработки 64-битных приложений на языке Си/Си++" является ООО "Системы программной верификации". Компания занимается разработкой программного обеспечения в области анализа исходного кода программ. Сайт компании: http://www.viva64.com.

Контактная информация: e-mail: support@viva64.com, 300027, г. Тула, а/я 1800.