Производительность Фортрана

Вы хотите, чтобы блочный элемент имел то, что CSS называет шириной сжатия, чтобы соответствовать, и спецификация не предоставляет благословенный способ получить такую ​​вещь. В CSS2 сжатие по размеру не является целью, но означает, что нужно иметь дело с ситуацией, когда браузер «должен» получить ширину из воздуха. Это следующие ситуации:

  • float
  • абсолютно позиционированный элемент
  • элемент строчного блока
  • элемент таблицы

когда ширина не указана. Я слышал, что они думают о добавлении того, что вы хотите в CSS3. Пока что обойдемся с одним из вышеперечисленных.

Решение не раскрывать функцию напрямую может показаться странным, но на то есть веская причина. Это дорого. Сжатие по размеру означает форматирование как минимум дважды: вы не можете начать форматирование элемента, пока не узнаете его ширину, и не можете рассчитать ширину без прохождения всего содержимого. Кроме того, элемент не нуждается в усадке так часто, как может показаться. Зачем вам нужен дополнительный div вокруг вашего стола? Может быть, заголовок таблицы - это все, что вам нужно.

6
задан Jimmy 28 July 2009 в 21:24
поделиться

3 ответа

Нет, это не только из-за компилятора.

Какие тесты вроде этого - где программа различается от теста к тесту - в значительной степени зависят от количества усилий (и качества усилий), которые программист вложил в написание любой данной программы. Я подозреваю, что Фортран находится в значительном невыгодном положении в этой конкретной метрике - в отличие от C и C ++, пул программистов, которые хотели бы попробовать свои силы в улучшении программы тестирования, довольно невелик, и, в отличие от всего остального, они, вероятно, не думаю, что им тоже есть что доказывать. Так что у кого-то нет мотивации тратить несколько дней на изучение сгенерированного ассемблерного кода и профилирование программы, чтобы она работала быстрее.

Это довольно ясно из полученных результатов. В основном, при достаточных усилиях по программированию и приличном компиляторе ни C, C ++, ни Fortran не будут значительно медленнее, чем код ассемблера - конечно, не более чем на 5-10% в худшем случае, за исключением патологических случаев. Тот факт, что фактические результаты, полученные здесь, являются более вариативными, чем это, указывает мне на то, что не было израсходовано «достаточных усилий по программированию».

Есть исключения, когда вы разрешаете сборке использовать векторные инструкции, но не разрешаете C / C ++ / Fortran, чтобы использовать соответствующие встроенные функции компилятора - автоматическая векторизация даже близко не приближается к совершенству и, вероятно, никогда не будет. Я не знаю, насколько они могут быть применимы здесь.

Точно так же исключение составляют такие вещи, как обработка строк, где вы сильно зависите от библиотеки времени выполнения (которая может иметь разное качество;

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

Некоторые случайные мысли:

Фортран работал очень хорошо, потому что было легче идентифицировать инварианты цикла, что облегчало некоторые оптимизации для компилятора. С тех пор

  1. компиляторы стали намного сложнее. В частности, огромные усилия были приложены к компиляторам c и c ++. Не отставали ли компиляторы fortran? Я полагаю, что gfortran использует тот же бэкэнд gcc и g ++, но как насчет компилятора Intel? Раньше это было хорошо, но все же?
  2. Некоторые языки получили много специализированных ключевых слов и синтаксиса, чтобы помочь компилятору ( ограниченный и const int const * p в c и встроенный в C ++). Не зная фортран 90 или 95, я не могу сказать, успели ли они.
2
ответ дан 8 December 2019 в 18:39
поделиться

Учитывая, что они не опубликовали точные параметры компилятора, которые они использовали для компилятора Intel Fortran, я мало верю в их тест.

Я также хотел бы отметить, что и математическая библиотека Intel, MKL, и математическая библиотека AMD, ACML, используют компилятор Intel Fortran.

Изменить:

Я нашел параметры компиляции, когда вы щелкнули по название теста. Результат удивителен, поскольку уровень оптимизации кажется разумным. Возможно, дело в эффективности алгоритма.

1
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

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