Действительно ли C используется для многих научных вычислений? - PullRequest
10 голосов
/ 13 сентября 2009

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

Ответы [ 10 ]

24 голосов
/ 13 сентября 2009

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

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

12 голосов
/ 13 сентября 2009

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

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

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

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

7 голосов
/ 13 сентября 2009

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

5 голосов
/ 17 мая 2011

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

4 голосов
/ 13 сентября 2009

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

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

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

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

1 голос
/ 27 февраля 2016

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

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

1 голос
/ 17 апреля 2012

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

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

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

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

1 голос
/ 13 сентября 2009

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

0 голосов
/ 11 марта 2016

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

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

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

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

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

0 голосов
/ 18 мая 2014

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

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

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

...