2012/09/30

O Hardware Não Chega, O Software Também Não


Single core, dual-core, quad-core, hyperthreading... tudo coisas que nos relembram da constante evolução que o hardware tem tido desde... bem, desde que o primeiro transístor foi inventado. No entanto, o que é que isso verdadeiramente significa para o utilizador comum?

E se eu vos oferecesse uma máquina, que não tivesse apenas um CPU quad-core, mas 8 CPUs quad-core? E já agora, adicionamos 4 GPUs topo-de-gama, meia-dúzia de DSPs para atacar todo o tipo de processamento especial que puder ser necessário... e que custa apenas o mesmo que um PC normal? Loucura, não?

Não, porque... o que fariam com tal máquina? Estamos a falar de uma placa cheia de componentes electrónicos, e que - quando muito - teria um LED iluminado para indicar que estava "a funcionar". Mesmo que alguém se desse ao trabalho de lá colocar um Windows ou Linux a correr, não saberia tirar partido de todas as funcionalidades extra que o hardware permitiria.

Pelo que, o hardware, por si só... não chega!

Não chega se não tiver o elemento crítico que se segue... o software.


O software é responsável por usar (da forma mais eficiente, espera-se) o hardware disponível. Sem ele, um CPU, ou vários, são apenas componentes electrónicos que para nada servem. Por isso é que quando se pensa um PC não se pensa propriamente numa placa com chips e circuitos, mas sim no ambiente gráfico (ou  de texto) que o sistema operativo apresenta ao utilizador.

Mas como todos sabemos, tal como o hardware, também o software evolui. Por cada funcionalidade que se tem há outras duas ou três que se gostariam de ter, mas que potencialmente necessitarão de mais recursos. E entramos na tal espiral que bem conhecemos: em que o software vai evoluindo e necessita de hardware mais potente, e o hardware vai ficando mais potente e os developers adicionam funcionalidades.

Este ciclo nem sempre é o mais eficiente: especialmente quando começa a haver algum desleixo por parte de alguma das partes. Não será incomum ver software que não é optimizado tanto quanto poderia ser, com a desculpa de "o hardware daqui por uns meses será mais potente e capaz de executar isto da forma que se espera".


Um bom exemplo de um ciclo que escapa a esta espiral são as consolas de jogos. Uma vez que são sistemas que permanecem inalterados durante todo o seu período de vída (ao contrário dos PCs, ou equipamentos mobile, que praticamente duplicam a sua potência de ano para ano), permitem - ou obrigam - a que os developers aprendam a tirar o máximo partido do hardware que têm disponíveis. Isso é algo que se pode ver facilmente, comparando os jogos que são lançados na fase inicial de uma consola, com os que são lançados anos depois, na sua fase final.

É o exemplo da simbiose que é necessária entre o hardware e o software, onde ambos são capazes de tirar partido um do outro da melhor forma possível. Uma simbiose que nem sempre será atingida na proporção ideal em plataformas que estão em rápida evolução e/ou que existem em infinitas combinações e variedade, como acontece com os "PCs" e os equipamentos mobile.

Poderemos ver isso com um desperdício, onde a rapidez da mudança não permite tirar total partido do hardware e software... mas poderá também ser visto por um lado mais positivo, de que há esperança que - mais cedo ou  mais tarde - os developers comecem a concentrar-se em tirar o máximo partido do hardware que existe agora, e não apenas do que "virá a seguir".

(E será bom recordar de que nem tudo são maus exemplo, e que felizmente também temos bons exemplos no mercado. :)

6 comentários:

  1. Do lado dos maus exemplos no hardware temos o Pentium IV em que a Intel andou cegamente atrás dos Gigahertz sem optimizar o desenho do hardware. O resultado foi uma AMD altamente competitiva e processadores Intel quentes, caros e ineficientes.

    ResponderEliminar
  2. Ou imagine-se também a tecnologia espacial, em que o projeto baseia-se com a tecnologia disponível na altura, para depois ser enviado para o espaço, pelo menos, uma meia dúzia de anos depois... Lembro-me dos artigos, por exemplo, da "Memória de cordel que nos levou à Lua" ou da "A Câmara de 2MP da Curiosity em Marte", aqui falados.

    P.S. Acho que nessa máquina só faltava também meter uma FPGA pelo meio :)

    ResponderEliminar
  3. Contrariamente aquilo que disseste é perfeitamente colocar uma máquina dessas a tirar partido de todo o hardware que lhe metam pela frente.
    Claro que para o cidadão comum tal não faça sentido, visto que apenas usa uma ínfima parte duma máquina actual mesmo que "puxe" com uns jogos bem esforçados.
    Porém, o "ferro" é sempre importante e embora alguns dos exemplos que apresentaste anteriormente (memória de cordel e uns meros k)tenham resultado em algo extraordinário tal apenas acontece devido ao enorme contributo que uma brutal dose de processamento deu anteriormente a esses factos terem acontecido. Ou seja, uma máquina destas seria apenas uma gota no oceano da NASA!

    Para além de poder contribuir para o bem da humanidade, poderia ainda usar, mais egoisticamente, uma máquina desse género para gerar bitcoins... :-)

    @braço.

    ResponderEliminar
  4. "perfeitamente" viável...

    ResponderEliminar
  5. Essa é uma visão da tecnologia. É importante como em tudo na vida um equilíbrio, mas enfim a resposta a este artigo dava um artigo tão grande ou maior.
    Quando eu tinha 20 anos achava que o software deveria ser todo open source, inclusivé o hardware, com o tempo percebi que isso era uma utopia.
    Projectos opensource normalmente precisam de um conhecimento maior para a sua utilização e têm normalmente um acesso mais dificultado ao hardware, uma vez que os fabricantes não costumam libertar os drivers em código aberto. Contudo a Microsoft trouxe-nos um sistema democrático onde através de padrões, conseguiu um avanço nesta industria e um acesso globalizado, aos meios informáticos com a percentagem que vemos hoje.
    Sinceramente acredito que a história se repita noutras áreas :)

    -> Padrões de tecnologia (tanto software, como hardware)
    -> Produtividade na comunidade de desenvolvimento
    -> Democratização digital

    Estes são os pontos que eu considero mais importantes a existirem num sistema (hardware/software), mesmo que para isso se comprometam algumas frames das aplicações.

    O exemplo que me lembro para isto é a internet. Imagina que o que o browser, que interpreta tags HTML e scripts de javascript era escrito em C ao invés disso, para um único modelo de máquinas, porque para aproveitar ao máximo teria que ser uma linguagem compilada, já para não falar em assembler embora fosse essa a única forma de garantir o acompanhamento perfeito entre hardware e software.
    Acredito que uma aplicação bem feita em c, teria uma eficiência muito superior a qualquer que fosse a página html.

    Mas não é isso que pelo menos eu procuro, mas sim um mercado onde posso escolher várias máquinas com características diferentes, com muito ou pouco desempenho. Em que o mesmo acontece com o software. Ou seja sou acima de tudo a favor da liberdade e de um mundo digital para todos.

    Uma aplicação em c é mais rápida do que uma aplicação em java?
    Claro que sim, ou melhor se for um óptimo programador, senão, até duvido. Também é importante a máquina virtual em causa estar bem implementada.

    De qualquer forma, não te tiro a razão, eu próprio tenho uma consola de jogos por isso mesmo. Contudo acredito que no caso dos pcs as software houses não despendem tanto trabalho por causa da pirataria existente.

    ResponderEliminar
  6. As coisas sempre foram assim e é assim que as coisas irão continuar. É a suposta falta de capacidade de processamento que fez com que o mercado e desenvolvimento de hardware tenha tido o crescimento que se viu nos últimos 15 anos.

    O ideal era estar tudo optimizado como falaste, e bem, no caso das consolas. Mas isso não faz dinheiro. Não ganhas dinheiro a vender uma gilete que dure uma vida, mas sim uma que dure 1/2 semanas. O dono da marca Gilette apercebeu-se disso ha uns 100 anos atrás e ate agora foi bem sucedido.

    Eu gostaria que o meu P4 1.7 + 512MB aguentasse bem o XP SP3. Mas não aguenta e nesse caso la tive de lhe meter o Debian. Neste caso a medida que vais avançando procuras algumas alternativas.

    No que toca ao software, e uma faca de dois gumes. Ou optimizas o software para tirar bom proveito de dual-core e tens um single-core e queixas-te, ou vice-versa.
    Ainda me lembro quando saíram os primeiros dual-core para o mercado domestico. Toda gente dizia que não era um bom investimento que não haviam apps e que era dinheiro desnecessário. Mas a verdade e que quem os comprou actualmente ainda consegue ter um PC um minimamente decente ao contrário dos restantes.

    Mas a questão de fundo é, toda essa "falta" de optimização e o que faz vender...

    ResponderEliminar