Блог пользователя Egor

Автор Egor, 12 лет назад, По-русски

Добрый день!

На текущий момент времени 32битная архитектура практически умерла. Тем не менее во всех соревнованиях по программированию продолжают использоваться 32битные компиляторы. Есть какая-то скрытая причина этого? Или просто "так принято" и "так все привыкли"?

  • Проголосовать: нравится
  • +28
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится +33 Проголосовать: не нравится

Когда с 8-разрядной на 16-разрядную или потом с 16-разрядной на 32-разрядную архитектуру переходили — это было круто, важно, насущно — коротких чисел ощутимо не хватало. Сейчас же задач (прикладных в первую очередь) для которых не хватает 4млрд значений 32-битного инта не так много. Это сильно тормозит развитие и самих 64-битных решений, и софта и компиляторов для них.

(я не спорю что для какой-нибудь конкретной спортивной задачки с большими числами 64-битная архитектура может дать ускорение в несколько раз)

Если в ближайшие лет 10 пригрядёт переход на 128-битные архитектуры, боюсь он будет ещё медленне входить. Таким числам место в сопроцессорах, чипах видеокарт и т.п. — а не в CPU...

Насколько я неправ?

  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +6 Проголосовать: не нравится

    Не совсем так. Причина появления x64 — необходимость выделять более 4 гигабайтов памяти. На текущий момент разумных причин для x128 я не вижу, но, возможно, они появятся

    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится +6 Проголосовать: не нравится

      Ну для этого 64-разрядность проца необязательна. На 16-разрядных ведь памяти всегда было больше 65кб... ;-)

      Это только для работы с линейным блоком памяти было бы важно, но поскольку во-первых случаи когда нужен массив больше 4Гб реально редки, во-вторых обработка 4Гб занимает секунды, потому разница между например одним 16-гиговым блоком или четырьмя сегментами по 4гб вряд ли кого-то волновала бы...

»
12 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Полагаю, что так принято, привыкли и не везде есть 64-битные машины. У 64-битных компиляторов иногда обнаруживаются спецэффекты (если не ошибаюсь, в Java были какие-то забавные баги именно в 64-х битной версии).

Существенный для меня аргумент — указатели весят в два раза больше. Поэтому, например, всякие деревья на указателях (мне так сильно удобнее писать) автоматически занимают больше памяти. На informatics, вроде, была задача с ML=64, в которой пришлось переписать на массивы, иначе не входило.

Больше причин не вижу

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

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

    А мл в 64 мб — ну то же же пережиток уже. Ну и пока что можно оба варианта иметь на сервере

    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      .

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится

        Я не говорю, что это надо вводить везде и сразу в приказном порядке. На рыбинском ЧФ сравнительно недавно перешли на 32битную архетектуру. Но мне кажется там, где есть такая возможность (кф, опенкап, tc) — надо предоставлять в качестве опции 64битные компиляторы

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится +6 Проголосовать: не нравится

          На рыбинском ЧФ сравнительно недавно перешли на 32битную архетектуру.

          Надеюсь, это опечатка? Или на самом деле сравнительно недавно всех радовал Borland Pascal? :)

»
12 лет назад, # |
  Проголосовать: нравится +7 Проголосовать: не нравится

Говорить что 32х битная архитектура умерла пока рановато. Например у нас почти на всех университетских компах 32 бита. Не думаю что в других университетах школах ситуация сильно другая. А поскольку в соревнованиях по программированию участвуют в основном студенты и школьники думаю это и есть одна из главных причин.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    это звучит непатриотично, но измерять современные информационные технологии компьютерами в университетах в России немного странно :)

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Казалось вопрос не в том что современно, а в том что актуально)

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Вот еще пример из недавних новостей http://it.tut.by/321877. С 64bit пока и mozilla не может справится.

  • »
    »
    12 лет назад, # ^ |
    Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится

    Тот факт, что плагины для Firefox плохо совместимы с 64-битной Mozilla — это, конечно, повод не добавлять 64-битный компилятор, да

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Не так :) У них там плагины для Firefox плохо совместимы с 64-битным Firefox :)

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Заголовок жёлтый, они просто временно отменили ежедневные 64-битные сборки.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      В любом случае хоронить 32биную архитектуру рано. :)

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Мне кажется, что плюсов у перехода сейчас на 64-битные компиляторы, если это вообще возможно сделать для всех поддерживаемых языков, практически нет. В общем-то, какие они для соревнований? А минусы видны: мало того, что это затраты на обновление, так еще и участников придется переучивать :)

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +6 Проголосовать: не нравится

    Один плюсик всё-таки имеется: GCC на x86-64 поддерживает целочисленный тип __int128 :-)

    Весомых причин для перехода сейчас нет. Но рано или поздно переходить всё равно придётся. Поэтому поддерживаю Egor с предложением ввести 64-битные компиляторы как опцию. Есть же на CF и OpenCup отдельная опция посылать код как C++11, не так ли? Те, кто хочет, смогут использовать. Да и интерес к архитектуре x86-64 возрастёт, больше людей ознакомится с её особенностями.

    Да, указатели в два раза длиннее. Зато и в два раза больше регистров, в несколько раз быстрее операции с 64-битными числами, MMX/SSE/SSE2 включены по умолчанию — вполне себе компенсация.

    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится +3 Проголосовать: не нравится

      Весомых причин для перехода сейчас нет. Но рано или поздно переходить всё равно придётся.

      Хорошая логика "причин сейчас нет, а потом придётся"... :-)

      Почему бы вместо этого не начать юзать многоядерность в решениях спортивных задач? Это куда эффективнее, по-моему.

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

      UPD: по поводу "одного плюсика" — насколько часто встречаются задачи для таких чисел? Гораздо чаще по-моему на просто длинную арифметику (которой в C++ из коробки вообще нет, зато есть в java и python-е, гы — кстати в последнем вроде всё что больше 32 бит считается длинным числом, что кагбе намекает на актуальность 64-битных чисел)

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится -19 Проголосовать: не нравится

      По-моему, __int128 это скорее недостаток: участники, использующие GCC, получат неоправданное преимущество перед использующими MSVC++ и Java. У них и так есть long double, но он хоть почти бесполезен :)

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Есть одно "но": на CF на виртуалках стоит WinXP. 32-битная.