Search
Write a publication
Pull to refresh
608
4
Андрей Карпов @Andrey2008

Директор по развитию бизнеса

Send message
По поводу Opera. Как продать в ней хорошую параллельность, я не знаю. Зато точно знаю, как продать в комплект к Опере многоядерный процессор. У меня дома относительно слабенькая 2-х ядерная машина. И когда идет процесс компиляции, я не могу нормально посмотреть видео в интернете. Даже если компиляция идет в один поток. Видимо второе ядро в этот момент съедается VS IntelliSense, Касперским и так далее. Причину точно я не знаю, но дискомфорт ощущаю. На работе на машине с 4 ядами, я кажется подобного не замечал.
Мода уйдет, если будет предложен альтернативный путь. А его пока не видно.
А на базе каких технологий (MPI/OpenMP/POSIX Threads) Вы строите программы и для каких операционных систем?
Тогда не знаю, как опция спряталась. :)
А возможно он вам и не нужен. В хорошем смысле. Должна чувствоваться потребность в инструменте. Вот тогда есть смысл принимать решение, внедрять его в процесс разработки или нет. Однако разумно быть в курсе возможностей различного инструментария, чтобы знать каким потребностям соответствуют какие решения. Я не предлагаю переходить на какие то инструменты. Я рассказываю о них и предлагаю попробовать.
Совсем не хочется дискутировать на эту тему. Просто замечу, что эта аргументация мне не понятна. Эта месячная зарплата одного нормального программиста. А если такие вложения не окупаются, то что-то не то с проектом, а не с ценой инструментария.
Дистрибутив хорошо скачивается с родного сайта. :)
Нет. Пока скачайте, но потерпите и не устанавливайте. :) Когда будет следующие уроки, тогда сразу все и попробуете. :)
Товарищи, у кого что есть по сути уроков? PDF мы со временем сделаем. Но в начале хочется по возможности выправить ошибки, ляпы, неточности, ошибки. Прошу писать сюда или на почту, кто что заметил, а также просто рекомендации по улучшению. Заранее все спасибо.
Согласен. Только обязательно нужно помнить, что чтение манов и мантр не помогает, когда у нас УЖЕ есть код проекта. :)
Мирового сговора не было. Так вот написалось… :) Тем более есть подозрение, что скоро название Intel 64 станет гораздо популярнее названия AMD64. Intel вкладывает усилия. чтобы везде использовать эти названия. И лучше примкнуть к этому направлению, чем продолжать использовать не модное название. :)
Да, но иногда в программе хочется выводить, что эта часть работала столько, а вот эта столько.
Что есть Enhanced timers?
Систем с общей памятью сейчас большинство. Я имею в виду машины обыкновенных пользователей. И именно по этому технология OpenMP должна стать весьма популярной среди прикладных программистов. Для систем с распределенной памятью давно существуют другие технологии, такие как MPI. И программирование под такие системы освоено гораздо лучше. Так что думаю не стоит переживать, что OpenMP не подходит для таких систем. Технологию OpenMP занимает новую быстро растущую нишу многоядерных систем, где крайне удобна.
Подведем итоги. Были быстро найдены все ошибки. Даже неинтересно как-то. :)

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», что в прочем является для данного кода ложным срабатыванием.

Продолжим или хватит спама? :)
Кстати, с 64-битными программами есть следующий интересный эффект. Пока у производителя ПО нет 64-битной версии, он утверждает, что она и не очень нужна. Например, когда не было 64-битного Adobe Photoshop, то были записи и обсуждения, в которых говорилось, что и не так это нужно. А как появился 64-битный Photoshop, то теперь везде его реклама и рассказывается о повысившейся производительности. :)
Сейчас у меня относительно свеже поставленная 64-битная Windows 7. Из программ запущена только Opera для просмотра этой страничке. В фоне работают такие приложения как Касперский, аська, лингво. Но это минимум, который действительно необходим. Ну и плюс конечно запущены разные сервисы и так далее. Что именно не знаю, что система посчитала нужны, то и запущено. Я ничего не включал и не отключал. Так вот, сейчас при запуске Task manager он пишет, что используется уже 1,47 ГБ памяти (всего в системе установлено 8 ГБ). Так что вот я еще ничего не запустил, а 1,5 ГБ уже израсходовалось. :)
Можно поменять int на unsigned и говорить об UINT_MAX. Или заменить size_t на ptrdiff_t. По поводу сравнения знакового и беззнакового — да ругнется. Немного неудачно типы в примере выбрал.

Information

Rating
1,874-th
Works in
Date of birth
Registered
Activity

Specialization

Specialist
C++
C
Software development