Suponha que eu receba uma matriz de números inteiros de largura fixa (ou seja, eles se encaixam em um registro de largura ), . Eu quero calcular a soma em uma máquina com aritmética de complemento 2, que executa adições do módulo com semântica envolvente. Isso é fácil - mas a soma pode exceder o tamanho do registro e, se o fizer, o resultado estará errado.
Se a soma não exceder, desejo calculá-la e verificar se não há excedência o mais rápido possível. Se a soma exceder, quero apenas saber que sim, não me importo com nenhum valor.
Adicionar ingenuamente números na ordem não funciona, porque uma soma parcial pode estourar. Por exemplo, com registradores de 8 bits, é válido e possui uma soma de , mesmo que a soma parcial excede o intervalo de registro .
Obviamente, eu poderia usar um registro maior como um acumulador, mas vamos assumir o caso interessante em que já estou usando o maior tamanho de registro possível.
Existe uma técnica conhecida para adicionar números com o sinal oposto à soma parcial atual . Essa técnica evita estouros a cada etapa, com o custo de não ser compatível com o cache e não aproveitar muito a previsão de ramificação e a execução especulativa.
Existe uma técnica mais rápida que talvez aproveite a permissão para estourar somas parciais e seja mais rápida em uma máquina típica com um sinalizador de estouro, um cache, um preditor de ramificação e execução e cargas especulativas?
(Este é um acompanhamento da soma segura de estouro )