Articles of otimização de

O Haskell tem otimização recursiva de cauda?

Eu descobri o comando “time” no unix hoje e pensei em usá-lo para verificar a diferença nos tempos de execução entre funções recursivas e recursivas normais em Haskell. Eu escrevi as seguintes funções: –tail recursive fac :: (Integral a) => a -> a fac x = fac’ x 1 where fac’ 1 y = y […]

Java Integer compareTo () – por que usar comparação versus subtração?

Eu descobri que a implementação java.lang.Integer do método compareTo é a seguinte: public int compareTo(Integer anotherInteger) { int thisVal = this.value; int anotherVal = anotherInteger.value; return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1)); } A questão é por que usar comparação em vez de subtração: return thisVal – anotherVal;

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) […]

Por que a transposição de uma matriz de 512×512 é muito mais lenta que a transposição de uma matriz de 513×513?

Depois de realizar alguns experimentos em matrizes quadradas de diferentes tamanhos, surgiu um padrão. Invariavelmente, transpor uma matriz de tamanho 2^n é mais lento do que transpor uma de tamanho 2^n+1 . Para valores pequenos de n , a diferença não é importante. Grandes diferenças ocorrem no entanto, acima de um valor de 512. (pelo […]

Economizando tempo e memory usando parfor?

Considere prova.mat no MATLAB obtido da seguinte maneira for w=1:100 for p=1:9 A{p}=randn(100,1); end baseA_.A=A; eval([‘baseA.A’ num2str(w) ‘= baseA_;’]) end save(sprintf(‘prova.mat’),’-v7.3′, ‘baseA’) Para se ter uma ideia das dimensões reais dos meus dados, a 1×9 cell em A1 é composta pelas seguintes 9 matrizes: 904×5, 913×5, 1722×5, 4136×5, 9180×5, 3174×5, 5970×5, 4455×5, 340068×5 . Os […]

Tipo mais rápido de matriz de comprimento fixo 6 int

Respondendo a outra pergunta do Stack Overflow ( este aqui ), eu me deparei com um sub-problema interessante. Qual é o caminho mais rápido para classificar uma matriz de 6 ints? Como a questão é muito baixa: não podemos presumir que bibliotecas estão disponíveis (e a própria chamada tem seu custo), apenas C simples para […]

Por que os loops são sempre compilados no estilo “do… while” (salto de cauda)?

Ao tentar entender a assembly (com a otimização do compilador ativada), vejo esse comportamento: Um loop muito básico como este outside_loop; while (condition) { statements; } É frequentemente compilado em (pseudocódigo) ; outside_loop jmp loop_condition ; unconditional loop_start: loop_statements loop_condition: condition_check jmp_if_true loop_start ; outside_loop No entanto, se a otimização não estiver ativada, ela será […]

Ajuda de otimização de loop C para designação final

Então, para minha tarefa final na minha aula de Sistemas de Computação, precisamos otimizar esses forloops para serem mais rápidos que o original. A nota básica é inferior a 7 segundos e a nota máxima é inferior a 5 segundos com o nosso servidor linux. Este código que tenho aqui recebe cerca de 5,6 segundos. […]

Aritmética modular e otimizações NTT (campo finito DFT)

Eu queria usar o NTT para obter um rápido quadrado (veja Fast bignum square computation ), mas o resultado é lento mesmo para números realmente grandes … mais de 12000 bits. Então minha pergunta é: Existe uma maneira de otimizar minha transformação NTT? Eu não pretendia acelerá-lo pelo paralelismo (threads); isso é apenas camada de […]

Qual é o mais rápido? SELECT SQL_CALC_FOUND_ROWS FROM `table` ou SELECT COUNT (*)

Quando você limita o número de linhas a serem retornadas por uma consulta SQL, geralmente usada na paginação, há dois methods para determinar o número total de registros: Método 1 Inclua a opção SQL_CALC_FOUND_ROWS no SELECT original e, em seguida, obtenha o número total de linhas executando SELECT FOUND_ROWS() : SELECT SQL_CALC_FOUND_ROWS * FROM table […]