Por que os computadores não vêm com hardware especializado, como redes de classificação?

10

Em vez de programar da maneira que fazemos, por que não fazemos especificações de tarefas comuns como "classificação" e, em seguida, deixamos o ambiente compilá-lo para fazer melhor uso de seu hardware? Dessa forma, poderíamos enviar o computador com um novo hardware especializado, como redes de classificação, e ele funcionaria automaticamente com o código existente.

MaiaVictor
fonte
2
Compre uma placa PCI FPGA e implemente as extensões que desejar.
SK-logic
Hardware não é mágico. Muitas coisas não podem ser muito aceleradas (ou absolutamente) por hardware especializado e, mesmo que seja possível, o hardware existente geralmente precisa ser adaptado (ou pelo menos recompilado). Consulte yosefk.com/blog/its-done-in-hardware-so-its-cheap.html
3
@ WorldEngineer Não vejo como isso entra em cena. Seu usuário médio não sabe para que servem 80% das coisas em uma CPU moderna, fica feliz porque é informado que isso torna seus programas mais rápidos (e isso tem um núcleo de verdade). Se a classificação fosse realmente tão comum quanto o OP supõe e pudesse ser otimizada por hardware dedicado, eles a colocariam ao lado do preditor de ramificação ("o que é isso, jardinagem?"), Publicariam um comunicado de imprensa dizendo que criaram aplicativos X e Y 5% mais rápido e vendê-lo.
11
Isso me lembra a idéia dos Núcleos de Conservação , voltados para a eficiência energética, e não para o desempenho máximo.
Paul A. Clayton

Respostas:

19

Primeiro de tudo, os computadores vêm com hardware especializado . Todos os laptops e computadores de mesa vendidos há alguns anos agora têm um co-processador especializado, uma Unidade de Processamento Gráfico, que lida com algoritmos de processamento visual, como exigem aplicativos de vídeo e jogos. Muito grandes computadores ( por exemplo , "supercomputadores", família System z da IBM) têm uma variedade de processadores especializados para lidar com processamento numérico ( "processamento vector"), etc .

Em segundo lugar, a classificação é um dos aspectos mais pesquisados ​​da computação e acaba sendo muito complexa para ser incorporada ao hardware para os casos mais simples. A classificação tem tudo a ver com velocidade e correção. A velocidade depende da escolha do algoritmo, do tipo e variação dos dados e do volume de dados. A correção depende do tipo e contexto dos dados. É positivamente trivial classificar uma matriz de números inteiros de tamanho médio que caiba no tamanho da palavra nativa da CPU ( por exemplo,, 31 ou 63 bits mais sinal). A classificação de cadeias de caracteres que contêm mais do que apenas valores ASCII é extremamente complexa - a IBM publicou um livro de mais de 500 páginas há 20 anos apenas discutindo as questões dos conjuntos de caracteres no contexto de fronteiras nacionais e uso comum. E ainda há a questão de dados não contíguos - classificar uma lista vinculada envolve perseguir ponteiros por toda a memória.

Ross Patterson
fonte
10

A questão principal é que os algoritmos de classificação (1) precisam de muita flexibilidade e (2) seria muito difícil acelerar o uso de hardware de qualquer maneira.

Uma coisa é que os algoritmos de classificação já são fáceis com rapidez suficiente para superar a largura de banda da memória do processador - o processador já gastará uma grande proporção de seu tempo esperando que os dados se movam para trás e para a frente na memória principal. Um co-processador de classificação acelerado por hardware ou uma instrução de classificação especial teria o mesmo problema.

A maneira como essa largura de banda de memória está sendo tratada é usando algoritmos e estruturas de dados melhores com melhor "localidade", e ainda há trabalho significativo sendo feito nesse campo, particularmente "cache de algoritmos alheios" (eles são alheios no sentido em que trabalham) bem, independentemente dos detalhes do armazenamento em cache, enquanto os algoritmos "cientes do cache" são ajustados para um tamanho de página de cache específico etc).

Por outro lado, os aplicativos de mídia (áudio e gráficos, principalmente gráficos 3D) fazem uso de algumas estruturas muito repetitivas - é claro que há flexibilidade, mas são construídas sobre uma base grande e muito bem estruturada. Isso permitiu que a aceleração gráfica iniciasse simples com coisas como Blitting (uma operação de cópia em bloco configurável, mas ainda muito estruturada) e desenho de linhas / polígonos. Isso significava que, à medida que o processamento de gráficos e som se tornava mais sofisticado, as operações de vetor se tornaram um alvo óbvio para otimização - primeiro MMX (vetores de números inteiros) e depois SSE (vetores de flutuadores). Isso significava que havia uma estrutura bem definida para o funcionamento de um mecanismo de gráficos 3D quando o antigo pipeline de gráficos 3D de função fixa foi movido para o hardware de gráficos 3D.

No entanto, com gráficos 3D, o que antes era feito em hardware agora é feito em software para flexibilidade - shaders são softwares, por exemplo, e é assim que obtemos uma enorme variedade de shaders diferentes, dando a aparência de materiais diferentes. No entanto, esse software ainda funciona de uma maneira muito mais estruturada que o software geral e, portanto, ainda pode usar uma plataforma de hardware muito mais especializada. É por isso que sua placa gráfica agora pode acelerar tudo, desde a física até a quebra de senhas - aplicativos que também se encaixam no mesmo modelo e podem ser implementados com eficiência usando os conjuntos de instruções que os modernos processadores gráficos fornecem.

Os processadores gráficos agora são descendentes espirituais ou reais dos processadores de sinais digitais, que eram (e provavelmente ainda são) um tipo de processador especializado para lidar com sinais digitais (por exemplo, áudio).

O que leva a um ponto final - os algoritmos de classificação podem ser acelerados pelo hardware. Dependendo dos seus dados, a classificação pode ser feita com as instruções MMX ou SSE (instrução única com vários dados) no seu processador, mas provavelmente não há muito sentido por causa do problema de largura de banda da memória - talvez você possa ser um pouco mais eficiente em termos de energia dessa forma, no entanto. No entanto, você também pode usar seu hardware gráfico. Dessa forma, você pode se beneficiar da largura de banda de memória muitas vezes muito melhor para placas gráficas. Você não poderá substituir todos os tipos dessa maneira, mas certamente é possível e provavelmente está sendo feito quando apropriado.

Devido às várias questões práticas e econômicas, projetar hardware especificamente para acelerar uma tarefa relativamente estreita como a classificação não faz muito sentido. Um recurso que acelera uma gama mais ampla de tarefas ou que torna o hardware de aceleração existente aplicável a uma gama mais ampla de tarefas geralmente faz muito mais sentido.

Steve314
fonte
3

Mas eles fazem! Eles são chamados de extensões do conjunto de instruções. (Coisas como SSE e similares)

Certas tarefas têm implementações muito boas em software. Geralmente essas implementações são boas o suficiente para fazer o trabalho, portanto, nenhum hardware especializado é necessário. Se você criar algum tipo de hardware especializado, precisará de uma ampla variedade de aplicativos para fazer valer a pena.

Se você olhar para o hardware que poderia fazer isso funcionar, meu palpite seria que você procuraria algo como FPGAs. Como você pode ver nos FPGAs, o chip se tornaria muito mais caro e não seria aplicável a muitos aplicativos.

Onno
fonte
Vou precisar pesquisar no SSE, mas, com antecedência, a classificação é provavelmente universal. É implementado no nível do hardware?
MaiaVictor
Eh também, como estamos lá, você recomendaria livros?
MaiaVictor
Eu estava falando sobre otimizações específicas de tarefas sendo implementadas em processadores de estilo de CPU em geral, uma vez que as redes de classificação são usadas como exemplo. Não sei se o SSE ou qualquer outro conjunto de instruções inclui a classificação de otimizações específicas. Fiz redes de classificação do Google e, como existem implementações gerais otimizadas, acho que as implementações de software poderiam fazer o trabalho da mesma forma se a implementação fosse feita corretamente.
Onno
Devo ressaltar que a maioria das extensões do conjunto de instruções opera em um nível inferior ao da rede de classificação que você usou como exemplo, mas não é impossível criar uma otimização de vários registros que possa fazer a classificação dessa maneira. Mas a pergunta para os fabricantes de CPU seria: "pagaria o suficiente para justificar o custo?".
Onno 26/05