Pergunta

Eu estava pensando que integer ou float tipos são os mais rápidos ..
eu estava pensando byte é mais rápido do que inteiro porque tem um intervalo menor.
Algumas pessoas me disseram .. que em alguns casos inteiro é mais rápido do que um byte.

segunda pergunta:
A GPU é em seu caminho para World Domination ..
Então eu me perguntei: Pode um casal "mais rápido" do que um Integer .. por causa da FPU
Então, onde estão os especialistas? :)

Foi útil?

Solução

Você tem que pensar em mais do que os ciclos de clock para realizar aritmética. Pode-se dizer que a adição de dois ints leva isso muitos ciclos, acrescentando duas duplas leva isso muitos ciclos, etc., mas que pode não ser relevante. Se todos os seus acessos de dados em cache ao mesmo tempo, então cronometrar operações individuais faz sentido. Mas se não, o tempo extra necessário devido a um erro de cache domina a diferença em operações individuais. Às vezes, trabalhar com tipos de dados menores é mais rápido porque ele faz a diferença entre ter que puxar algo de cache ou não, ou ter que ir para o disco ou não.

Hoje em dia os computadores passam a maior parte de seus dados em tempo movendo-se, não fazer aritmética, mesmo em aplicações de processamento de números. E a razão da primeira para a segunda está aumentando. Você não pode simplesmente comparar, por exemplo, o tempo necessário para calções multiplicam contra duplos. Você pode achar que dadas duas versões de seu programa, uma versão corre mais rápido em um pequeno problema e as outras corridas versão mais rápida em um programa maior, tudo por causa da eficiência relativa de tipos de memória.

Outras dicas

Eu estava pensando byte é mais rápido do que inteiro porque tem um intervalo menor.

Algo que eu experimentei: usando um short me deu um acerto de desempenho enquanto utilizando uma int foi muito bem. Isto porque, calções, normalmente, não existem na arquitetura. Eles são os tipos de conveniência. O processador trabalha realmente com a sua palavra-size. No meu caso, o tamanho da palavra era a de um int. Assim, ao acessar um curto, tinha que arrumar o valor em um int primeiro, trabalhar com ele e, em seguida, descompactar e me pegar o resultado em um curto. Tudo o que resultou em um impacto no desempenho. Então, mais curto não é necessariamente melhor.

Isso depende de nenhum dos databits na arquitetura. O processador de ponto flutuante vai tratar flutuador e dobrar de forma idêntica ao fazer cálculos. Ambos são avaliados com precisão de 80 bits e, portanto, ter a mesma quantidade de tempo. Carregar e salvar os valores nos registradores FPU pode fazer a diferença. Duplo leva duas vezes o espaço na RAM e pode, portanto, ser mais lento devido a erros de cache. Perceptível se você tem grandes matrizes que você tende a índice aleatoriamente.

Ao nível da CPU, não há bytes, apenas palavras, que são 32 ou 64 bits hoje em dia. unidades aritméticas são normalmente programado para lidar com os números de palavra-de tamanho maior (ou, no caso de ponto flutuante).

Portanto, não há vantagem de velocidade em usar tipos menores do que uma palavra em relação a operações aritméticas, e pode haver uma penalidade de velocidade porque você tem que fazer um trabalho adicional a fim de tipos de simulados que a CPU não tem nativamente, por exemplo, escrever um único byte de memória exige que você leu pela primeira vez a palavra é parte de, modificá-lo e, em seguida, escrevê-lo de volta. A fim de evitar isso, a maioria dos compiladores vai realmente usar uma palavra cheia de memória para todas as variáveis ??menores, por isso mesmo uma variável boolean ocupa 32 ou 64 bits.

No entanto, se você tem uma grande quantidade de dados, tais como uma grande matriz, em seguida, usando tipos menores geralmente resultam em melhor desempenho, porque você terá menos erros de cache.

O comprimento byte de tipos numéricos depende do idioma e às vezes também a plataforma que você está usando. Por exemplo, em ambos java int e flutuador utilização 4 bytes, de modo que o tempo de processamento deve ser igual. Ele me surpreenderia que embora tipos mais longos são processadas mais rapidamente. Se houver evidência de que eu gostaria de ler sobre isso.

Sobre qual deles é mais rápido, inteiro ou byte, desde que ambos se encaixam no registo eles funcionam da mesma, ou pelo menos sem diferença mensurável.

Sobre inteiro vs.double:. Pode ser GPU faz mais rápido aritmética com duplos então cpu regular, mas eu duvido que ele faz dupla aritmética mais rápido, então inteiro, desde inteiro aritmética é apenas registra arithmetics

A maior otimização está passando de usar cálculos escalares em loop, com cálculos uso vetor. Em seguida, tirar proveito da GPU ou SSE da CPU.

Bem, contanto que você não faça qualquer otimizações vetor você pode usar inteiros tão grande quanto seus registros (32/64 bits) sem qualquer impacto na performance real.

Números de ponto flutuante são um pouco diferentes: enquanto que os processadores são otimizados para duplas, GPUs normalmente trabalho com flutuadores

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top