C действительно используется для многих научных вычислений?

StackOverflow https://stackoverflow.com/questions/1416745

  •  06-07-2019
  •  | 
  •  

Вопрос

В настоящее время я учусь на уроке математики в колледже под названием «Научные вычисления». и профессор сказал нам, что C является наиболее распространенным языком, используемым для научных вычислений, и мне просто интересно, насколько точен этот профессор?

Это было полезно?

Решение

В моем бизнесе (физика элементарных частиц) мы в значительной степени перешли с Fortran 77 прямо на C ++ и Python. Те из нас, кто заботится о программировании, все знают c, но он написан только для нишевых приложений (встроенные платы DAQ, драйверы специального назначения, ...).

Но обучение c даст вам прочную основу для программирования, и спорить с профессорами редко бывает выгодно.

Другие советы

Я не думаю, что ответ вашего профессора служит вам хорошо, даже если он правильный.

По моему опыту, как консультанта по научным вычислениям и системам данных, C, конечно, часто используется, но также и Fortran, и C ++. Python - безусловно, наиболее часто используемый язык сценариев.

Я думаю, что это изменится. Большое дело сейчас в параллельных вычислениях, и это болезненно (MPI кто-нибудь?) На традиционных языках, которые я упомянул. Я предполагаю, что большая часть распараллеливания будет (и должна) перемещаться на виртуальные машины: Java или .NET; то есть, я думаю, что параллелизация должна быть работой JIT. Будет ли это включено, скажем, Fortress , или одним из традиционные языки, я не знаю. Intel продвигает параллельные инструменты для C / C ++, но Интересно, может ли что-то вроде терракоты лучше в долгосрочной перспективе (я не слышал никого в научном сообществе, кто бы это пробовал - большие финансы, но они не настолько открыты).

Если вопрос заключается в том, что вы должны научиться, чтобы получить работу в области научных вычислений, то первое, что я бы сказал, - это то, что вас с большей вероятностью наймут за ваши научные навыки, чем за навыки программирования (что частично объясняет Извините, состояние большого научного кода, подробнее об этом см. в этом SO тема ). Если вас собираются нанять для ваших навыков программирования (возможно, HPC), то подумайте, что, по мнению этого профессора, они могут устареть для новых проектов в не столь отдаленном будущем. Тем не менее, было бы не плохо знать Python, включая NumPy .

Из того, что я слышал, Fortran очень распространен в научных целях, но C достаточно универсален, и для некоторых он является хорошим решением для большинства программ любого типа.

Для биоинформатики и вычислительной биологии C очень популярен.

Много "научных вычислений" обрабатывается в Mathematica, Matlab и других подобных инструментах.

Ну ... под капотом Matlab написан на C или C ++, я думаю, но многие части Mathematica написаны на самой Mathematica. Конечно, по историческим причинам, а также из-за внутренних характеристик C, многие научные и высокотехнологичные компьютерные библиотеки написаны на C / C ++.

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

Как указал dmckee, изучение c обеспечивает хорошую основу для программирования в целом, по крайней мере, процедурного программирования. Он также имеет практическое применение, поэтому мнение вашего профессора в настоящее время имеет серьезную поддержку. Но делай! продолжайте оспаривать, с уважением, мудрость, полученную от ваших профессоров и старейшин, понимая, что иногда, подобно хорошим мастерам дзен, они ставят вас на путь не столько к месту назначения, сколько к путешествию / процессу.

C широко используется в программировании. Большинство из нас, программистов, когда-либо программировали на C, особенно когда мы в колледже. Я полагаю, это просто предпочтение вашего профессора: -)

  

Действительно ли C используется во многих научных вычислениях?

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

Традиционно научные вычисления подразумевали высокопроизводительные вычисления и ограничивались по объему в основном линейной алгеброй и некоторыми спектральными методами (например, БПФ) и в основном выполнялись в Фортране. С тех пор широта научных вычислений чрезвычайно расширилась: многие люди, которые сейчас рассматривают технические вычисления (например, массирование данных, построение графиков, создание прототипов), попадают под одну и ту же рубрику, а другие люди выбирают новые формы высокопроизводительных вычислений, такие как символьные вычисления. / р>

Такие языки, как Python, R, Mathematica и MATLAB, обычно используются для технических вычислений. Такие языки, как C, C ++ и Fortran, все еще используются для обработки чисел. Такие языки, как OCaml, используются для крупномасштабных символьных вычислений.

Как профессиональный программист, создающий программное обеспечение для ученых и инженеров, я могу сказать, что почти все наши численные методологии написаны на языке C. Поэтому в нашем случае это, безусловно, верно. У нас есть карманы C ++ и Fortran. С точки зрения производительности трудно превзойти хорошо закодированный C и хороший компилятор. Очень, очень редко мы можем погрузиться в сборку.

Но мир сильно изменился. Python - это замечательный язык - самый хороший язык ИМХО и может вызывать нативные библиотеки. Затем снова есть R, исходный интерпретируемый язык, но с огромной библиотекой численных методов, скомпилированных на C или C ++. Затем добавьте все новые аппаратно-ускоренные методы, такие как openCL и множество привязок ... C или Fortran больше не единственный ответ. Но для традиционного сокращения числа процессоров C и ASM являются лучшими в своем классе.

Исходя из моего опыта работы в различных лабораториях и исследовательских институтах, я бы сказал, что изучение компьютерного языка даст вам только основу и введение в программирование. Язык C или Java был бы предпочтительным языком для ознакомления, поэтому ваш профессор в некоторой степени прав.

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

Конечно, если вы выбираете язык для проекта, выберите 1, в котором есть нужные вам библиотеки.

Да, ANSI C сопровождается MPI.

Иногда люди хотят использовать «объективный C», что означает, что они помещают функции в методы большого класса, и каждый его пример будет работать на отдельном ядре. Обратите внимание, что это не C ++, а «C с объектами». Ни одна из возможностей C ++ не используется, кроме метод-объектной модели. Это просто завершение того же старого C в «рациональную объектную модель», позволяющее использовать промежуточные слои и т. Д.

Хорошие примеры выше: LAMMPS.

Charm ++ - еще один хороший способ получить «старый добрый C современным способом».

На другом холме научных языков находятся LISP, Haskell и другие группы мета-языков Это другой, "мягкий" Мир научного программирования, где время не проблема, а существование ответа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top