Увеличение скорости

Это - Java. Переместите свою обработку во второй поток. Теперь Вы можете

  • Read от stdin в цикле. Если кто-то вводит "ВЫХОД", установите в то время как флаг ко лжи и выходу.
  • Создают AWT или кадр Swing с Кнопкой остановки.
  • Притворяются, что Вы - демон Unix и создаете сокет сервера. Ожидайте кого-то, чтобы открыть сокет и отправить "ВЫХОД". (Это имеет добавленную премию, что можно изменить сон на выбор с помощью тайм-аута.)

должны быть сотни вариантов на этом.

6
задан ire_and_curses 19 August 2009 в 09:59
поделиться

6 ответов

Общий ответ на широкий вопрос:

while (the speed is not satisfied)
    Use a profile to find the bottle neck 
    optimize that part of code.
12
ответ дан 8 December 2019 в 13:01
поделиться

Как и другие предложил профилировать ваш код, прежде чем думать о его изменении.

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

Как только вы исчерпали возможности компилятора (и, как предложил один из других респондентов, убедитесь, что у вас хороший компилятор - они это не дорого, и я получаю примерно 40% сокращение времени выполнения для большинства программ, переходящих с g95 на платный компилятор), тогда вам НЕ следует начинать делать такие вещи, как:

- разворачивание цикла;

- инструкция re -ordering;

- встраивание функций;

- другие вещи, которые мы всегда делали в свое время.

Большая часть этих настроек кода теперь сделана, лучше, чем мы, углерод жизненные формы могут это сделать с помощью хороших оптимизирующих компиляторов.

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

4
ответ дан 8 December 2019 в 13:01
поделиться

Это очень широкая область, но ...

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

  • Профилирование, как предлагает Пьерр. Это скажет вам, где ваша программа на самом деле проводит время. Зная это, вы можете сосредоточить свое внимание на битах, которые действительно нуждаются в настройке.

  • Строка кэша и выравнивание слов плюс оптимизация фрагментов для размещения в кэшах процессора. Они считаются более подходящими для программирования на C, поскольку с помощью C легче контролировать подобные вещи. Однако те же проблемы могут вызывать проблемы с программами FORTRAN по тем же причинам.

    Штраф за промахи в кэше на современном ЦП очень велик, и в некоторых случаях оптимизация использования кэша может иметь значение порядка величины. Если вы определили это как проблему, вы можете захотеть переписать вычисление ядра на C, чтобы дать вам более детальный контроль над структурами данных.

  • Если вы ДЕЙСТВИТЕЛЬНО ограничены процессором, вы можете получить некоторую выгоду от таких методов, как GPU программирование.

1
ответ дан 8 December 2019 в 13:01
поделиться

Просто потому, что об этом никто не упомянул:

  • Купите более быструю машину

(Пожалуйста, не бейте меня :-) ...)

1
ответ дан 8 December 2019 в 13:01
поделиться

Ничего особенного, кроме:

  • оптимизировать свои алгоритмы
  • оптимизировать шаблоны доступа к данным
  • использовать современный компилятор, например, тот, который поддерживает OMP
  • рассмотрите возможность переноса критически важного кода в среду, которая дает вам больше возможностей - например, в код C / C ++, чтобы воспользоваться преимуществами распараллеливания потоков и инструкций SIMD)

Также есть некоторые доступные материалы, поиск в Google для оптимизации, например, появляется, например, this (PDF) и this . Однако будьте осторожны с более ранней литературой и ее предположениями: не так давно руководства по оптимизации для многих платформ (справедливо) предполагали, что памяти не хватает, доступ к памяти дешев, а инструкции дороги. Теперь это не так.

0
ответ дан 8 December 2019 в 13:01
поделиться

Код Fortran, с которым я знаком, очень отличается от кода на других языках. В других языках структура данных намного более доминирующая, наряду со слоями абстракций, глубокими стеками вызовов и замедлением, вызванным избыточными вызовами .

Фортран, с другой стороны, имеет тенденцию использоваться для сложных математических вычислений. алгоритмы с большими массивами и не такой большой глубиной вызова. В этих случаях проблемы с локализацией кэша становятся намного более серьезными, а также проблемы с алгоритмами. Например, я много работаю с нелинейным моделированием смешанных эффектов, и такие вопросы, как допуски, прямые или центральные градиенты разности, аналитические градиенты, имеют решающее значение. Методы решения ОДУ, такие как Рунге-Кутта, неявные методы, матричная экспонента или замкнутая форма, имеют огромное значение.

Кроме того, если вы можете (путем выборки) идентифицировать участки кода, которые являются настоящими горячими точками (т. Е.

0
ответ дан 8 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: