Разработка шаблонов при написании числового программного обеспечения на C ++


13

Я ищу ресурсы по шаблонам и принципам проектирования для числового программного обеспечения, возможно, но не обязательно, с упором на объектно-ориентированные подходы к числовым кодам.

Мне известен текст « Написание научного программного обеспечения: руководство по хорошему стилю» , но он по-прежнему во многом связан с такими вещами, как проблемы с плавающей запятой, как и когда оптимизировать и т. Д.

Я ищу информацию о более широкой картине проектирования числовых кодов, а не о чем-либо, касающемся алгоритмов и тому подобного.

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

(Это не зависит от языка, но если есть контент для конкретного языка, я бы предпочел C ++.)


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

2
Еще одна полезная ссылка, которая не совсем подходит для цели, - «Эффективные вычисления в физике» Энтони Скопаца и Кэтрин Хафф.
Брайан Борчерс

@BrianBorchers Хм, кажется, что половина из них находится в введении в Python, а затем фокусируется на инструментах разработки.
user1997744

Ответы:


8

Разработав числовое программное обеспечение в течение 20 лет, я обнаружил, что мы, вероятно, использовали большинство шаблонов проектирования, описанных в книге «Бандой четырех» ( см. Здесь ). В конце концов, числовое программное обеспечение - это просто крупномасштабное и сложное программное обеспечение, так что, возможно, неудивительно, что применяются те же конструктивные соображения, что и в других программах.

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


Я хотел бы добавить, что для численных вычислений на более новом оборудовании следует стремиться минимизировать погоню за указателями (которую используют многие шаблоны Gang of Four). Хорошей отправной точкой для разработки на C ++ является github.com/isocpp/CppCoreGuidelines/blob/master/…
Бисваджит Банерджи,

@BiswajitBanerjee Да, основные руководящие принципы C ++ являются базовыми знаниями для любого человека в современном использовании C ++. Херб Саттер - один из редакторов, и вы всегда можете доверять его советам.
user1997744

@ user1997744 Вы имели в виду Бьярне? Херб Саттер также известен своей «всегда автоматической» идеей, которая приводит к коду только для записи (не уверен, насколько бы я доверял его мнению). Кроме того, основные принципы C ++ далеки от базовых знаний. Вы будете удивлены.
Бисваджит Банерджи

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

6

Я рекомендую это Мэтью G Knepley. Языки программирования для научных вычислений. Препринт arXiv arXiv: 1209.1711, 2012 ( https://arxiv.org/pdf/1209.1711.pdf )

Также советую посмотреть и прочитать другие коды, например, triangle, PETSc, MoAB, deal.II, fenics и многие другие. Не все решения будут работать для вас, но, в конце концов, копирование и обучение у других (опытных разработчиков и успешных кодов) - лучший урок, как разрабатывать код.

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


Моим аргументом, чтобы начать что-то новое, является опыт обучения и чувство выполненного
долга

1
Я понимаю этот аргумент. Я сделал то же самое давным-давно. Теперь я думаю, что это было преждевременно. Вполне возможно, что в начале все мы должны делать одни и те же ошибки. Чтобы научиться ходить первым, нужно упасть. Написание собственного кода, если это первый раз, вы, скорее всего, будете единственным пользователем вашего кода. Внося свой вклад в разработанный сообществом код, ваша работа, вероятно, будет использоваться другими, и это даст вам чувство успеха и признательности. Вы получите комментарии / обзор по запросу, из которого вы узнаете и улучшите свои навыки.
likask

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

Отличный совет присоединиться к проекту с открытым исходным кодом. Я попал в сеть программистов намного лучше меня.
user14717
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.