Articles of x86 64

Ponto flutuante duplo atômico ou carregamento / armazenamento vetorial SSE / AVX em x86_64

Aqui (e em algumas perguntas do SO) eu vejo que o C ++ não suporta algo como std::atomic lock> livre e ainda não pode suportar algo como o vetor AVX / SSE atômico porque é dependente do CPU (embora atualmente de CPUs que eu conheço, ARM, AArch64 e x86_64 têm vetores). Mas há suporte em […]

O que será usado para troca de dados entre threads estão sendo executados em um Core com HT?

A tecnologia Hyper-Threading é uma forma de tecnologia de multithreading simultânea introduzida pela Intel. Esses resources incluem o mecanismo de execução, caches e interface de barramento do sistema; o compartilhamento de resources permite que dois processadores lógicos trabalhem uns com os outros com mais eficiência e permite que um processador lógico bloqueado peça resources do […]

Como imprimir um flutuador de precisão única com printf

Eu estou tentando imprimir um número de ponto flutuante no assembly x86_64 mas apenas imprime o valor como zero. Há algumas perguntas sobre isso já. Um parece ser resolvido garantindo que você defina o número de registradores vetoriais que você está usando em% al . Outro mostrou que você precisa ter um alinhamento de pilha […]

Por que multiplicações assinadas e não assinadas são instruções diferentes no x86 (-64)?

Eu pensei que o ponto principal do complemento de 2 era que as operações poderiam ser implementadas da mesma maneira para números assinados e não assinados. A Wikipedia até lista especificamente a multiplicação como uma das operações que se beneficiam . Então, por que o x86 tem instruções separadas para cada um, mul e imul […]

Segmentação de 32 bits e 64 bits com o Visual Studio na mesma solução / projeto

Eu tenho um pequeno dilema sobre como configurar o meu visual studio para multi-targeting. Background: c # .NET v2.0 com p / invocando em DLL de terceiros de 32 bits, SQL compact v3.5 SP1, com um projeto de instalação. No momento, o destino da plataforma é definido como x86 para que possa ser executado no […]

__builtin_prefetch, quanto lê?

Estou tentando otimizar algum código RK4 GCC C ++ usando __builtin_prefetch Estou com algum problema tentando descobrir como fazer a pré-busca de uma turma inteira. Eu não entendo o quanto o const void *addr é lido. Então, eu tenho os próximos valores de e to carregado. for (int i = from; i px- from->px; double […]

Como encontrar se um arquivo DLL nativo é compilado como x64 ou x86?

Eu quero determinar se um assembly nativo é cumprido como x64 ou x86 de um aplicativo de código gerenciado ( c # ). Eu acho que deve estar em algum lugar no header do PE, já que o carregador do sistema operacional precisa saber essas informações, mas não consegui encontrá-lo. Claro que eu prefiro fazê-lo […]

Em quais plataformas o inteiro dividido por zero triggers uma exceção de ponto flutuante?

Em outra pergunta, alguém estava se perguntando por que eles estavam recebendo um “erro de ponto flutuante” quando na verdade eles tinham um inteiro dividido por zero em seu programa C ++. Uma discussão surgiu em torno disso, com alguns afirmando que as exceções de ponto flutuante na verdade nunca são levantadas para float divide […]

Cálculo de ponto flutuante vs número inteiro em hardware moderno

Eu estou fazendo algum trabalho crítico de desempenho em C ++, e atualmente estamos usando cálculos de inteiros para problemas que são inerentemente ponto flutuante porque “é mais rápido”. Isso causa muitos problemas irritantes e adiciona muito código chato. Agora, lembro-me de ler sobre como os cálculos de ponto flutuante eram tão lentos aproximadamente nos […]

É necessário um sinal ou extensão zero ao adicionar um deslocamento de 32 bits a um ponteiro para o ABI x86-64?

Resumo: Eu estava olhando o código assembly para orientar minhas otimizações e ver muitas extensões de sinal ou zero ao adicionar int32 a um ponteiro. void Test(int *out, int offset) { out[offset] = 1; } ————————————- movslq %esi, %rsi movl $1, (%rdi,%rsi,4) ret No começo, achei que meu compilador foi desafiado a adicionar inteiros de […]