Articles of assembly de

O ‘switch’ é mais rápido que ‘if’?

Uma instrução switch realmente mais rápida que uma instrução if ? Eu corri o código abaixo no compilador C ++ x64 do Visual Studio 2010 com o sinalizador /Ox : #include #include #include #define MAX_COUNT (1 << 29) size_t counter = 0; size_t testSwitch() { clock_t start = clock(); size_t i; for (i = 0; […]

A linguagem assembly inline é mais lenta que o código C ++ nativo?

Eu tentei comparar o desempenho da linguagem assembly inline e código C ++, então eu escrevi uma function que adiciona duas matrizes de tamanho 2000 por 100000 vezes. Aqui está o código: #define TIMES 100000 void calcuC(int *x,int *y,int length) { for(int i = 0; i < TIMES; i++) { for(int j = 0; j […]

Qual configuração o REP faz?

Citando o manual de referência de otimização de arquiteturas Intel® 64 e IA-32 , §2.4.6 “REP String Enhancement”: As características de desempenho da utilização da cadeia REP podem ser atribuídas a dois componentes: sobrecarga de boot e taxa de transferência de dados. […] Para a sequência REP de transferência de dados de granularidade maior, conforme […]

Por que o sqr (x) escalar do SSE é mais lento que o rsqrt (x) * x?

Eu tenho perfilado alguns dos nossos principais matemática em um Intel Core Duo, e ao olhar para várias abordagens de raiz quadrada eu notei algo estranho: usando as operações escalares SSE, é mais rápido ter uma raiz quadrada recíproca e multiplicá-lo para obter o sqrt, do que usar o código de operação do sqrt nativo! […]

Bloqueia a manipulação de memory via assembly in-line

Eu sou novo no material de baixo nível, então eu estou completamente alheio a que tipo de problemas você pode enfrentar lá embaixo e eu nem tenho certeza se eu entendi o termo “atômico” direito. Agora eu estou tentando fazer bloqueios atômicos simples em torno de manipulação de memory através de assembly estendido. Por quê? […]

Qual é a melhor maneira de mover um object na canvas?

Eu queria saber qual é a melhor maneira de mover um object na canvas – para expample: se algum tipo de forma fosse apresentado na canvas (no modo gráfico), eu gostaria de movê-lo para a esquerda e direita usando as teclas de setas do teclado. Eu sei ler o buffer do teclado. O importante é […]

Protegendo executável de engenharia reversa?

Eu estive contemplando como proteger meu código C / C ++ de desassembly e engenharia reversa. Normalmente, eu nunca aceitaria esse comportamento no meu código; no entanto, o protocolo atual em que tenho trabalhado não deve nunca ser inspecionado ou compreendido, para a segurança de várias pessoas. Agora, este é um assunto novo para mim, […]

É seguro ler além do final de um buffer na mesma página em x86 e x64?

Muitos methods encontrados em algoritmos de alto desempenho poderiam ser (e são) simplificados se tivessem permissão para ler uma pequena quantidade após o fim dos buffers de input. Aqui, “pequena quantidade” geralmente significa até W – 1 bytes após o final, onde W é o tamanho da palavra em bytes do algoritmo (por exemplo, até […]

Qual é o objective do registrador de pointers de quadro EBP?

Eu sou um iniciante em linguagem assembly e notei que o código x86 emitido pelos compiladores geralmente mantém o ponteiro do quadro em volta mesmo no modo release / optimized quando ele poderia usar o registrador EBP para outra coisa. Eu entendo porque o ponteiro do quadro pode tornar o código mais fácil de depurar, […]

A substituição de um contador de loops de 32 bits por um de 64 bits apresenta desvios loucos no desempenho

Eu estava procurando o caminho mais rápido para popcount grandes matrizes de dados. Eu encontrei um efeito muito estranho : Alterar a variável de loop de unsigned para uint64_t fez o desempenho cair 50% no meu PC. O benchmark #include #include #include int main(int argc, char* argv[]) { using namespace std; if (argc != 2) […]