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.
programming-languages
hardware
sorting
MaiaVictor
fonte
fonte
Respostas:
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.
fonte
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.
fonte
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.
fonte