Teste de desempenho com números primos em C
Publicado por Andre Miguel (última atualização em 12/07/2011)
[ Hits: 9.448 ]
Download 1291342736.primos_time_ext_17.c (versão 2)
Estendendo o assunto de teste de desempenho com números primos em BASH que publiquei antes http://www.vivaolinux.com.br/script/Teste-de-desempenho-com-numeros-primos-em-BASH
tive um tempinho e codifiquei também em C.
Desta vez não compilei no SO do servidor, mas em desktop Windows com GCC mesmo.
No período de quase uma hora rodando num Celeron D com 1 GB de memória, obtive UM resultado:
Primo 1410065413
Primo 1410065441
Primo 1410065443
O Desktop apresenta alguns momentos de "stall", travamento, mas bem de leve. Tipo ao digitar demora pra sair do buffer.
Vou compilar no servidor e executar com `time` como fiz com o BASH.
Testem o desempenho e divirtam-se!
Versão 2 - Enviado por Andre Miguel em 03/12/2010
Changelog: Segue atualização do programa de primos em C.
Quem baixou a primeira versão: http://www.vivaolinux.com.br/script/Teste-de-desempenho-com-numeros-primos-em-C e teve paciência de deixar rodando horas até achar um primo de 11 dígitos, percebeu que dava um pau de especie de "estouro de buffer" de variável, fazendo o resultado a ser expresso com 11 dígitos, retornar apenas 10.
Após 9 meses (nasceu ^.^!) fiz a correção. isso se devia ao fato de tratar variáveis (long long int) como simplesmente (int), sem querer. Explico. Se você incrementar com ++ ou decrementar com -- o GCC estava assumindo como (int), mesmo operando sobre (long long int), o que me fez alterar para, por exemplo, "j=j-1LL".
Versão do GCC: gcc version 4.4.1 [gcc-4_4-branch revision 150839] (SUSE Linux)
Versão da GLIB: glibc-2.10.1-10.4.i686
Fiz uns incrementos com as funções da time.h e timeb.h para retornar o tempo passado a cada iteração em segundos. Coloquei alguns comentários no código-fonte e um helpzinho esdrúxulo.
NOTA: a intenção não é necessariamente ser eficiente (como tal é o propósito da TI), mas estressar a utilização de uma máquina, por meio de iterações matemáticas simples e sucessivas e debugar possíveis gargalos, tipo cache, mesmo o processador, enfim, tudo que possa causar latência em retornar processamento crítico, concorrente ou de sistemas de tempo-real REALMENTE críticos e tal.
Tente rodar com strace, com parâmetros parecidos com o truss do Solaris:
strace -failedD ./exec_primos_time_ext_17 1 10
# Sim, foi a décima-sétima tentativa de fazer funcionar o programa direito :P
Exemplo resumido do que consegui num Intel i5:
Primo 10000000019 diff:49.1974500 min ts ini:1290431045.656 ts fim:1290433997.503
Primo 10000000033 diff:34.7964667 min ts ini:1290433997.503 ts fim:1290436085.291
Primo 10000000061 diff:68.3464667 min ts ini:1290436085.291 ts fim:1290440186.079
Primo 10000000069 diff:18.9710000 min ts ini:1290440186.079 ts fim:1290441324.339
Primo 10000000097 diff:67.2385000 min ts ini:1290441324.339 ts fim:1290445358.649
Primo 10000000103 diff:14.8446833 min ts ini:1290445358.649 ts fim:1290446249.330
Primo 10000000121 diff:44.4549333 min ts ini:1290446249.330 ts fim:1290448916.626
Primo 10000000141 diff:48.9059500 min ts ini:1290448916.626 ts fim:1290451850.983
Primo 10000000147 diff:14.5078667 min ts ini:1290451850.983 ts fim:1290452721.455
Postem aí o que conseguiram. Depois postarei o que consegui em alguns servidores mais parrudos...
Abraços.
Download 1291342736.primos_time_ext_17.c
#include <stdio.h> int main(){ int j, primo = 0; unsigned long i=0; for ( i=10000000000; i <= 999999999999; i++){ // for ( i=10; i<=99; i++ ){ j=i; primo=0; for ( j=i; j>=1; j-- ){ if ( i%j == 0 ){ primo++; if ( primo > 2 ){ j=1; } else{ if ( primo == 2 && j == 1 ){ printf("Primo %d\n", i); } } } } } }
Lista simplesmente encadeada C
Teoria do Caos - (Equação Logística)
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Preciso resolver um erro de DPKG (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (2)
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta