Em meu programa de doutorado em ciência computacional, estamos trabalhando quase exclusivamente em C ++ e Fortran. Parece que alguns professores preferem um ao outro. Estou me perguntando qual é o “melhor” ou se um é melhor do que o outro em determinada circunstância.
Comentários
- Uma mistura de alta e linguagem de baixo nível é melhor do que usar exclusivamente qualquer um deles, na minha opinião. Por exemplo. Eu uso Python + C ++.
- As respostas a esta pergunta serão quase puramente subjetivas e, portanto, ‘ não tenho certeza se esta pergunta é apropriada.
Resposta
Como sempre, a escolha depende (1) do problema que você está tentando resolver, (2) do habilidades que você tem e (3) as pessoas com quem você trabalha (a menos que seja um projeto solo). Vou deixar (3) de lado por enquanto, porque depende da situação individual de cada um.
Dependência do problema: o Fortran é excelente no processamento de matrizes. Se o seu problema pode ser descrito em termos de estruturas de dados simples e em matrizes específicas, o Fortran é bem adaptado. Os programadores de Fortran acabam usando matrizes mesmo em casos não óbvios (por exemplo, para representar gráficos). C ++ é mais adequado para estruturas de dados complexas e altamente dinâmicas.
Dependência de habilidades: é preciso muito mais experiência em programação para escrever bons programas em C ++ do que para escrever bons programas em Fortran. Se você começar com pouco programa Com sua experiência e pouco tempo para aprender esse aspecto do seu trabalho, você provavelmente terá um melhor retorno sobre o investimento aprendendo Fortran do que aprendendo C ++. Supondo, é claro, que seu problema seja adequado para Fortran.
No entanto, há mais em programação do que apenas Fortran e C ++. Eu recomendaria a qualquer um que entrasse em ciência da computação começar com uma dinâmica elevada linguagem de nível, como Python. Lembre-se sempre de que seu tempo é mais valioso do que o tempo de CPU!
Comentários
- ” Lembre-se sempre disso seu tempo é mais valioso do que o tempo de CPU! ” Como alguém que trabalha em HPC, discordo dessa parte; todo o resto está correto.
- ” Lembre-se sempre de que seu tempo é mais valioso do que o tempo de CPU! ” Como alguém que trabalha em pesquisa científica, eu não poderia ‘ concordar mais com essa parte.
- ” Sempre lembre-se disso seu tempo é mais valioso do que o tempo de CPU! ” – Eu ‘ gostaria de jogar meus 2 centavos – usando várias centenas de nós, cada com mais de 10 núcleos para executar algum programa por várias semanas pode ser interpretado como um desperdício horrível de um recurso muito precioso, se mais algumas semanas pudessem produzir um código que fosse executado em apenas alguns dias. Esses clusters de HPC são um recurso comum raro e caro.
- ” Lembre-se sempre de que seu tempo é mais valioso do que o tempo de CPU! “, codifique por uma semana, mas execute por um mês, isso ‘ é bastante comum, senhor!
- ” Lembre-se sempre de que o seu tempo é mais valioso do que o tempo da CPU! “, prefiro codificar por um mês e executar em uma semana! – mais pode ser feito quando o código for escrito e outras pessoas também acharão o código que você escreveu mais útil.
Resposta
Acho que C ++ e Fortran são bons o suficiente e funcionam bem.
No entanto, acho que Fortran é melhor para computação científica numérica , para algoritmos que podem ser expressos usando matrizes e não precisam de outras estruturas de dados sofisticadas, portanto, em campos como diferenças / elementos finitos, solucionadores de PDE, cálculos de estrutura eletrônica. Fortran é uma linguagem de domínio específico. Em particular, acho que é mais fácil escrever rápido programas em Fortran do que em C ++, por um cientista (não necessariamente um especialista em ciência da computação).
C ++ é uma linguagem de propósito geral, então pode-se expressar qualquer algoritmo nela, e é definitivamente melhor para algoritmos que não podem ser expressos usando arrays, do campo HPC provavelmente alguns gráficos, geradores de malha, manipulação simbólica e assim por diante.
Também é possível escrever arra algoritmos y em C ++, mas na minha experiência, requer muito mais conhecimento de ciência da computação e, em geral, mais trabalho (ou seja, é necessário criar ou reutilizar classes para manipulação de array e lidar com o gerenciamento de memória manualmente ou usando alguma biblioteca como Teuchos da Trilinos). Não especialistas tendem a escrever bons programas em Fortran, mas programas em C ++ horríveis (falando por experiência própria).
Aviso: Eu pessoalmente gosto muito de Fortran e prefiro-o a C ++ para computação numérica. Passei mais de 2 anos programando em C ++ diariamente, e quase um ano programando em Fortran moderno diariamente (na área de elementos finitos). Eu uso muito Python e Cython também.
Comentários
- Um a mais para a primeira resposta sendo equilibrada. Acho que C ++ e Fortran não são de longe as únicas possibilidades no HPC contemporâneo. Acho bom saber os pontos fortes e fracos quando você decide por Fortran, C ++ ou Python (ou o que você quiser). Eu vi 20.000 linhas de Fortran em um único arquivo, cultivadas organicamente ao longo de algumas décadas. Eu, pessoalmente, não usaria para outra coisa senão computação de matriz pesada isolada. Nem mesmo para qualquer coisa relacionada à produção. Até agora, para um comentário tendencioso.
- Eu não poderia ‘ discordar mais dessa resposta. Nosso código de elemento finito não teria sido possível escrever em Fortran. Na verdade, ele começou há 15 anos como uma mistura de C simples e Fortran (o último sendo para as partes numericamente intensivas do método), e gradualmente mudou para C puro e depois para C ++ ao longo de vários anos. O código ficou consistentemente menor, mais rápido e mais fácil de entender, e ficou mais capaz após cada iteração. Eu concordo com outros que apontam que C ++ lhe dá muita corda para atirar em si mesmo. Escolha o idioma com o qual ‘ se sente mais confortável.
- Bill, você usou o Fortran moderno (90 e adições posteriores?). Isso é muito importante (eu deveria ter sido mais explícito em minha resposta sobre isso). Obviamente, ” 20.000 linhas de Fortran ” ou f77 geralmente não é melhor do que C ++ bem escrito.
- @ OndřejČert í k: Eu acho que se você acredita que os programas modernos de elementos finitos usam ” simples ” estruturas de dados, então você ‘ não olhou para nenhuma delas recentemente. Tente implementar elementos finitos adaptativos, métodos hp ou multigrid em malhas não estruturadas usando estruturas de dados simples. Bill está certo e acredito que posso falar por ele ao dizer que usar o ” Fortran moderno ” teria rendido pouco mais do que um pequeno diferença.
- @WolfgangBangerth, consulte por exemplo Phaml ( math.nist.gov/phaml ) para uma implementação Fortran de praticamente tudo que você mencionou.
Resposta
Eu também estou jogando meus dois centavos meio tarde, mas eu ” Acabei de ver este tópico e sinto que, para a posteridade, há alguns pontos que precisam desesperadamente ser feitos.
Observe a seguir que falarei sobre C e não C ++. Porque? Bem, caso contrário, é muito difícil comparar uma linguagem orientada a objetos totalmente desenvolvida e dinamicamente tipada com algo tão estático como o Fortran. Sim, algumas implementações modernas dos padrões mais recentes do Fortran podem fazer mais do que apenas isso, mas muito poucas pessoas realmente usá-los, e quando falamos de Fortran, pensamos em linguagem simples, estática e imperativa. É onde C também está, então substituirei C por C ++ para o seguinte.
Primeiro de Ao todo, qualquer discussão sobre Fortran / C ter melhores compiladores é discutível. Compiladores C / Fortran dedicados são uma coisa do passado. Ambos gcc / gfortran e icc / ifc são apenas front-ends diferentes para o mesmo back-end, ou seja, seu programa será transformado em uma descrição abstrata pelo front-end e então otimizado e montado pelo back-end. Se você escrever, semanticamente, o mesmo código em Fortran ou em C, o compilador irá, em ambos os casos, produzir o mesmo assembly que será executado com a mesma rapidez.
Isso agora leva ao meu segundo ponto: por que ainda vemos diff erências? O problema é que a maioria das comparações são feitas por programadores Fortran tentando algo em C ou vice-versa. Já percebeu como a maioria dos autores ou poetas prefere escrever em suas línguas nativas? Você gostaria de escrever poesia em uma linguagem na qual não se sinta totalmente confiante ou em casa? Claro que não … Eu mesmo considero C minha linguagem de programação “nativa”. No entanto, também passei três anos trabalhando em um grupo que usava apenas Fortran, no qual atingi um certo nível de fluência. No entanto, nunca escreveria nada sozinho em Fortran, pois me sinto mais confortável com C e, como consequência, com o código resultante será melhor , como você definir isso.
Portanto, a principal diferença está no programador, não na linguagem. Portanto, não há diferenças? Bem, não exatamente. Aqui estão alguns exemplos:
-
SIMD: Seja SSE, SSE3 ou AltiVec, se você quiser usá-los em Fortran, é melhor esperar e rezar para que o compilador adivinhe exatamente o que você deseja e faz. Boa sorte. Em C, você geralmente tem funções intrínsecas para cada arquitetura ou, mais recentemente, tipos de vetor SIMD gerais no gcc . A maioria dos compiladores Fortran usará apenas instruções SIMD para desenrolar loops, mas se você tiver um kernel que funciona em vetores curtos de dados de uma maneira não óbvia, o compilador provavelmente não o verá.
-
Diferentes arquiteturas de hardware: toda a arquitetura CUDA é construída em torno de kernels em C. Sim, o Portland Group agora tem um CUDA -compilador fortran capaz também, mas é comercial e, o mais importante, não é da NVIDIA. O mesmo vale para OpenCL, para o qual o melhor que pude encontrar é um projeto recente que suporta apenas algumas chamadas básicas.
-
Programação paralela: Sim, MPI e OpenMP funcionam bem com C e Fortran. No entanto, se você deseja controle real de seus threads, ou seja, se você tem uma computação de memória compartilhada totalmente dinâmica, você estará no frio com Fortran. Em C você tem os pthreads padrão que, embora não sejam quentes e difusos, ainda o ajudará a superar a tempestade. Em geral, a maioria dos cálculos que dependem do acesso ao sistema operacional, por exemplo, threads, processos, sistema de arquivos, etc … são melhor servidos com C. Ah, e não tente fazer o seu próprio rede com Fortran.
-
Facilidade de uso: Fortran está mais próximo do Matlab do que C. Depois de superar todas as diferentes palavras-chave e como declarar variáveis, o resto do código se parece com Matlab, tornando-o mais acessível para usuários com experiência limitada de programação.
-
Interoperabilidade: quando você cria uma estrutura em C, o layout dos dados reais é direto e determinístico. Em Fortran, se você usar matrizes de ponteiro ou dados estruturados, o layout real dos dados é fortemente dependente do compilador, não direto para a frente, e geralmente completamente sem documentos. Você pode chamar C de Fortran e vice-versa, mas não comece a pensar que pode ser tão fácil passar qualquer coisa além de uma matriz estática de um para o outro e vice-versa.
Isso tudo é meio geek, de baixo nível, mas estamos falando de computação de alto desempenho, certo? Se você não estiver interessado em como explorar melhor o hardware subjacente paradigmas, ou seja, implementar e / ou desenvolver algoritmos que são os melhores para memória compartilhada / distribuída, threads, vetorização SIMD , GPUs usando SIMT e assim por diante, então você está apenas fazendo matemática em um computador.
Isso ficou muito mais longo do que qualquer coisa que pretendia, então aqui está um resumo – um conjunto de para levar para casa mensagens do tipo:
- Você escreverá o melhor código que puder, na linguagem que você conhece melhor.
- Não há diferença na qualidade do código produzido por dois compiladores que usam o mesmo back-end – somos nós que escrevemos código ruim em uma linguagem ou outra.
- Apesar de parecer mais de baixo nível, Fortran é uma abstração de alto nível e não permite que você acesse certos recursos de hardware / sistema operacional diretamente, por exemplo, SIMD, threads, rede, etc …
Comentários
- Boa resposta. Não ‘ acho que seu comentário final é necessariamente verdadeiro. Eu ‘ sou um programador C, mas você tem acesso a coisas de baixo nível em Fortran por meio de boas práticas de programação. A maneira ideal de utilizar coisas como operações SIMD é escrever um código que sugira fortemente (bloqueio de loops, por exemplo) e deixar o compilador fazer isso por você. Para threading, simplesmente use openMP (pthreads também pode ser usado com algum trabalho extra). Fortran tem todas as coisas que você mencionou e não ‘ t, apenas em um nível que importa para seu usuário típico: numérico.
- @ Reid.Atcheson: Bem , se você bloquear tudo de forma que o compilador o capture, ele funcionará automaticamente em C e em Fortran. O problema é, porém, até que ponto você deseja confiar em seu compilador? E por que você quer ter que confiar nos casos em que sabe exatamente o que quer que seja feito? OpenMP faz threading, sim, mas em bloco. Você pode enganá-lo fazendo com que diferentes conjuntos de threads façam coisas diferentes, mas isso é apenas um uso incorreto do OpenMP. Pthreads para Fortran são apenas wrappers para as funções C. No entanto, concordo que o Fortran é mais fácil se você ‘ não entrar nos detalhes.
- Claro que não ‘ t obteremos uma eficiência de pico de 99% total contando com o compilador, mas você pode facilmente chegar perto. Além disso, você deve usar o ASM intrínseco ou embutido. Você tem que fazer concessões em algum lugar para a eficiência geral do programador, que ‘ é o motivo pelo qual as linguagens de programação existem. No estágio em que você realmente é louco o suficiente para entrar nos detalhes do intrínseco ou ASM (já fui algumas vezes), Fortran não é ‘ uma muleta. Você ‘ saberia como vincular seu código montado otimizado manualmente de qualquer maneira.
- @ Reid.Atcheson: Bem, eu ‘ d argumenta que para aplicações paralelas de HPC, você pode acabar muito abaixo de 99% de eficiência de pico … E os tipos de vetor gcc tornam o uso de intrínsecos um problema 🙂
- @Pedro, Postagem brilhante. Absolutamente brilhante. Muito obrigado pela postagem.Apenas o encontrei enquanto vasculhava aleatoriamente tópicos interessantes.
Resposta
Dos meus 15 anos de pensamento sobre software científico : Se o seu código é executado 25% mais rápido porque você o escreve em Fortran, mas leva 4 vezes mais tempo para escrevê-lo (sem STL, dificuldade de implementação de estruturas de dados complexas, etc), então o Fortran só ganha se você gastar uma fração significativa de seu dia girando os polegares e esperando que seus cálculos terminem. Dado que para quase todos nós o mais valioso é o nosso próprio tempo, a conclusão é esta: use a linguagem que lhe permite desenvolver, depurar e testar o seu código o mais rápido, ignorando dentro do razoável que pode ser mais lento do que seria possível se você escreveu em Fortran.
Resposta
Minha abordagem tem sido usar C ++ para tudo, exceto kernels computacionais, que geralmente são os melhores escrito em assembléia; isso compra todo o desempenho da abordagem HPC tradicional, mas permite que você simplifique a interface, por exemplo, sobrecarregando kernels computacionais como SGEMM / DGEMM / CGEMM / ZGEMM em uma única rotina, digamos Gemm. Claramente, o nível de abstração pode ser aumentado muito mais evitando ponteiros brutos e mudando para classes opacas, mas é um bom primeiro passo.
Acho que a maior desvantagem do C ++ é o aumento no tempo de compilação, mas, na minha experiência, a economia no tempo de desenvolvimento mais do que compensa isso. Outra desvantagem é que os compiladores C ++ do fornecedor tendem a ter mais bugs do que os compiladores C e Fortran do fornecedor. No ano passado, acho que encontrei quase dez bugs em compiladores C ++.
Com tudo isso dito, acho que desfazer os pacotes científicos escritos em linguagens de baixo nível (e Fortran) é a relutância em expor interfaces convenientes para estruturas de dados sofisticadas: a maioria das pessoas está satisfeita com a interface Fortran BLAS, já que ela requer apenas ponteiros e dimensões principais para descrever matrizes, mas poucas pessoas argumentariam que a interface de solucionador esparso-direto de Fortran de 40 inteiros é qualquer coisa perto de conveniente (cf. UHM, SuperLU, PETSc e Trilinos).
Em resumo, eu defendo o uso de assembly para kernels computacionais de baixo nível, mas linguagens de nível superior para todo o resto, especialmente quando operando em estruturas de dados não triviais.
Observe que isso postagem resultou em esta comparação do desempenho de C e Fortran no kernel $ y: = \ alpha x + y $ .
Comentários
- Por que você não ‘ você confiaria em um compilador C padrão com a otimização apropriada habilitada para o propósito de compilar pequenos kernels? Nesse nível de tamanho de código e complexidade, a diferença no que um compilador poderia extrair dele não é clara.
- Conversei com várias pessoas que me disseram que, mesmo com o uso restrito apropriado, seu Fortran era ainda mais rápido do que seu código C e / ou C ++ para alguma operação como uma transposição de matriz explícita. Eu ‘ não estou dizendo que é ‘ impossível tornar o código C ou C ++ tão rápido, mas que o compilador Fortran tende a fazer um trabalho melhor.
- Tenho a mesma experiência com a palavra-chave ” restrição ” (meu código Fortran simples era sempre um pouco mais rápido). Mas minha experiência é limitada e eu simplesmente não ‘ não tenho tempo para investir no entendimento do assembly gerado pelo gcc. Então, eu simplesmente uso o Fortran, ele ‘ é simples e ‘ é rápido.
- @JackPoulson: O compilador argumento é algo que ouço bastante da comunidade Fortran. Infelizmente, a maioria dos compiladores, por exemplo gcc ou ifc / icc, use front-ends de idiomas diferentes para o mesmo back-end. A máquina que faz a otimização e geração de código é idêntica e, portanto, as diferenças nos resultados são provavelmente devido a diferenças na familiaridade do programador com a linguagem subjacente …
- Apenas para dar um pouco de perspectiva na afirmação frequentemente repetida e raramente validada de que o Fortran é mais rápido em kernels numéricos: um tempo atrás, notamos que o vetor-matriz esparso se multiplicava em Trilinos ‘ O pacote Epetra era 30% mais lento do que aquele em negociação.II. O primeiro foi escrito em Fortran 77 direto, o último em C direto sem o uso de ‘ restrito ‘. Ambos tinham cerca de 10-15 linhas de código. Hoje, Trilinos usa o trecho de código retirado do deal.II. Eu ‘ tenho certeza de que podemos encontrar muitos casos em que F77 é mais rápido que C. A questão é que não ‘ t universalmente, portanto, ainda mais hoje.
Resposta
Como sou novo aqui, estava procurando por perguntas antigas e encontrei esta. Espero que não seja tabu responder aos antigos!
Já que ninguém mais mencionou isso, pensei que sim. Fortran 2003 é quase totalmente suportado pela maioria dos principais compiladores (intel, ibm, cray, NAG, PCG) até mesmo gcc com o (em breve) versão mais recente 4.7. Fortran 2003 (e 2008) é uma linguagem orientada a objetos, embora um pouco mais prolixa do que C ++. Uma das coisas que acho legal sobre o Fortran é o fato de que o comitê padrão vê a computação científica como seu público principal (agradeço a Damian Rouson por apontar isso para mim outro dia).
Eu trago tudo isso não para que os programadores C ++ se tornem programadores Fortran, mas para que as pessoas do Fortran saibam que têm mais opções agora além de mudar para C ++ ou emular conceitos orientados a objetos no Fortran 90/95.
Um advertência que vou acrescentar é que há um custo para estar na vanguarda do que é implementado nos compiladores. Se você empreender um grande projeto no Fortran 2003 agora você encontrará bugs e precisará atualizar continuamente seu compilador (especialmente se você usa gcc), embora isso tenha melhorado significativamente nos últimos meses!
Resposta
O problema com C ++ é que você tem inúmeras chances de arruinar o desempenho, por exemplo, usando cegamente STL, exceções, classes (sobrecarga virtual mais alinhamento outros problemas), sobrecarga do operador (novos / exclusões redundantes) ou modelos (compilação sem fim e erros crípticos parecem benignos, mas você pode perder horas dessa forma).
Porém, quanto mais você ganha melhor acesso às bibliotecas gerais e possivelmente maior visibilidade do seu código (embora isso dependa fortemente do campo, e você ainda tenha C puro). E você ainda pode compensar a falta de flexibilidade do Fortran envolvendo seu código em uma linguagem de script como R, Lush, Matlab / Scilab ou mesmo Python, Ruby ou Lua.
Comentários
- Geralmente é uma má ideia aplicar técnicas de baixo nível em linguagens de alto nível. Por exemplo, o STL é projetado para operar em um nível muito abstrato. É preciso estar ciente de qual é a interface foi projetado para, use-o para esta tarefa e saia do caminho dos compiladores.
- Acho que mbq ‘ se Martin ‘ s pontos são injustos. Sim, existem maneiras de dar um tiro no próprio pé se você tentar implementar um vetor numérico para fins de álgebra linear usando std :: list < double >. Mas esse ‘ um argumento bobo: pelo menos C ++ tem uma classe de lista vinculada que você pode usar, enquanto o Fortran não ‘ t. É ‘ como dizer ” Os carros circulam a uma velocidade tão alta que você pode bater em uma parede e se ferir; em vez disso, você deve usar carruagens puxadas por cavalos. ” É ‘ uma ideia tola destruir uma linguagem de alto nível que também suporta baixo coisas de nível (por exemplo, C ++) para ter recursos de alto nível.
- @WolfgangBangerth Não, agora você está prejudicando o Fortran – é como ” baixo nível “, pois as bactérias são ” menos evoluídas ” do que os humanos . Se você quiser uma analogia com o carro, deve ser mais parecido com ” você pode usar o Jeep e o Lexus para cruzar um atalho pantanoso, mas usar o primeiro dói menos “.
- Agradeço sua opinião, mas defendo que o Fortran não ‘ t tão evoluído quanto C ++ é: -)
Resposta
Três fatos:
-
Estilo F77 n-dimensional arrays em C: sem problemas usando CnD (um plugue descarado, é verdade)
-
Sistema de módulos do F90 ” é mal projetado e hostil para a construção de ambientes. (O nome de um módulo não precisa corresponder ao seu nome de arquivo, por exemplo)
- Fortran não suporta bem a refatoração. Retirando algumas funcionalidades de uma função requer que você toque em quatro lugares: código real, declarações de variáveis, declarações de argumentos e lista de argumentos. C consegue dois lugares para tocar. Isso aumenta o efeito da falha em gerenciar bem os dados (desc com nervuras abaixo): Como a modularidade em pequena escala é tão dolorosa, quase todo mundo escreve sub-rotinas gigantescas.
Uma impressão pessoal:
- Fortran não funciona bem para gerenciar dados. Tente retornar um ponteiro para uma estrutura de dados opaca do usuário em F77 ou F90. (
transfer()
, lá vamos nós)
Comentários
- Olá Andreas! CnD é interessante, eu não ‘ sabia sobre ele. Ah, você escreveu isso. 🙂 (f90 também suporta fracionamento, alocável para arrays e o mais importante – sintaxe de array para multiplicação, adição e assim por diante.) Eu uso CMake com Fortran e funciona muito bem com módulos.O que exatamente é a ” lista de argumentos “? Eu não ‘ acho que não os uso, então apenas 3 lugares são necessários para modificar. Em C, você normalmente precisa modificar o código real, os parâmetros e um arquivo de cabeçalho, de modo que ‘ s também 3 lugares (mais definitivamente em C ++). Sim, transfer () não é ‘ muito bom, mas normalmente você não ‘ não precisa dele na prática.
- Refatorar fortran moderno é trivial com IDEs adequados, como Photran in eclipse.
- ” Um módulo ‘ nome do s não ‘ não precisa corresponder ao nome do arquivo, por exemplo, ” Você deve estar brincando, você pode ter muitos módulos em um arquivo. Alguns deles abrangem apenas algumas linhas. Eles são muito mais fáceis de criar se você não tiver que criar um arquivo para cada um deles.
- Só queria adicionar ao que @ user389 disse que, embora o Photran seja ótimo e é o único IDE Fortran que permite refatorações, seu analisador falha o tempo todo. Por outro lado, ‘ não há necessidade de comentar sobre o fato de que o Eclipse precisa de muita memória.
Resposta
Fortran é otimizado para cálculos de matrizes / matrizes e é muito difícil de trabalhar para qualquer tipo de análise de texto. C e C ++ podem não corresponder ao Fortran em computação numérica (é quase), mas acho muito mais fácil processar texto e organizar dados (ou seja, estruturas de dados personalizadas) com C / C ++.
Como outros mencionaram, não conte com as linguagens interpretadas dinamicamente (Python et al). Eles podem não oferecer a velocidade de fusão de faces do Fortan no início, mas permitem que você se concentre mais na solução de seu problema computacional do que em todos os detalhes de implementação. Freqüentemente, você pode implementar uma solução em Python e, se o desempenho for inaceitável, fazer alguns perfis, identificar as áreas problemáticas e otimizar esse código usando Cython ou reimplementar o programa inteiro em uma linguagem compilada. Depois de definir a lógica de solução de problemas, o resto é apenas implementação e, com uma boa compreensão dos fundamentos da computação, deve ser simples de representar em qualquer variedade de linguagens de programação.
Comentários
- Isso ‘ está certo. Para análise de texto, também uso Python.
- Você também pode implementar parte de um script Python em uma linguagem compilada, por exemplo, C ++ e conecte-o. Por exemplo, Boost Python, Swig etc.
Resposta
Estou atualmente trabalhando em um dos laboratórios nacionais. das pessoas ao meu redor são engenheiros mecânicos. Conversando com algumas das pessoas nos grupos HPC, eles estão trabalhando principalmente em Linux e principalmente em C ++. O grupo em que estou atualmente faz principalmente aplicativos de desktop e usamos Windows e em ordem decrescente: C #, FORTRAN, Python, VBA e VB (6, não .NET). Alguns dos os mecanismos de simulação que usamos foram escritos em outros laboratórios nacionais em FORTRAN.
Resposta
Desculpe por desenterrar um tópico antigo, mas parece que mesmo em 2015, o Fortran está sendo muito usado.
Acabei de encontrar isso (alternativo link ) lista que basicamente é uma lista de 13 códigos aprovados pela instalação OCLF do DOE para rodar na máquina 300-petaFLOPS Summit que será disponibilizada aos pesquisadores em 2018 . Tentei encontrar o idioma principal usado para o código (com base em uma rápida pesquisa no Google) e aqui está o que encontrei:
XGC Fortran SPECFEM Fortran ACME Fortran (Bunch of climate codes) DIRAC Fortran (Mostly) FLASH Fortran GTC Fortran HACC C/C++ LS-DALTON Fortran (some C) NAMD C/C++ NUCCOR Fortran NWCHEM Fortran QMCPACK C++ RAPTOR Fortran
Portanto, de 13 códigos, pelo menos 10 (com base na minha pesquisa rápida) parecem ser escritos em Fortran. Nada mal para um idioma de 50 anos.
NOTA: Estou bem ciente de que as comparações de linguagem são inúteis, mas dado o número de pessoas (especialmente usuários de C ++) que falam mal do Fortran, pensei que valeria a pena mencioná-lo.
Comentários
- Discordo, porque minha experiência nos laboratórios nacionais tem sido, no mínimo, o oposto. A maioria dos novos projetos que vejo em Lawrence Livermore são escritos em C ++, e a maioria das novas (ou ativamente mantidas) bibliotecas de código aberto de última geração em solucionadores de ODE, discretizações de FEM e bibliotecas de computação científica de uso geral parece estar em C ou C ++. Fortran parece ser usado principalmente em projetos que usam bibliotecas existentes / legadas; Não ‘ não vejo muitos projetos novos e grandes usando Fortran, independente do que penso sobre a linguagem.
- Alguns códigos de teoria funcional de densidade também escritos em Fortran inclui VASP e CASTEP , embora como @GeoffOxberry aponta, novo projetos tendem a ser C ++.
- @blochwave Como você pode ler no link, os projetos são para uma nova máquina (com aceleradores etc.) que estará online em 2018.Portanto, não é como se eles pegassem um código de 25 anos e o compilassem, na esperança de funcionar com um bom desempenho. Tenho certeza de que grande parte dos códigos da lista acima foram ou foram reescritos, como no novo código. Vários ” novos ” códigos climáticos também estão em Fortran e são usados por muitas agências em vários países.
Resposta
O que Jack P. eu acho que está tentando dizer é que você deve misturar e combinar. Um bom software é cuidadosamente dividido em camadas. Camadas diferentes podem ser mapeadas de maneira mais natural ou eficiente para idiomas diferentes. Você deve escolher o idioma mais adequado para cada camada. Você também deve entender como os idiomas podem interoperar, o que pode afetar o idioma que você escolhe para cada camada.
Uma pergunta melhor é quais exemplos de software com excelente design existem que valem a pena estudar para aprender como projetar software em camadas.