Resultados de Bench: Java x C

7 respostas
Kknd

Eu estava afim de testar a performance do Java 6 contra C, então baixei as fontes do http://math.nist.gov/scimark2/faq.html, tanto da versão em Java tanto da versão em C, compilei e rodei.

Obs.: Eu não me preocupei em fazer otimizações e também estou ciente que este é um teste sintético, que não avalia corretamente a performance para aplicações normais.

Me surpreendi com os resultado! Olhem vocês mesmos:

C sem otimizações:

Composite Score:                      ==> 143.36 <==
FFT             Mflops:                   103.82    (N=1024)
SOR             Mflops:                   279.27    (100 x 100)
MonteCarlo:     Mflops:    44.15
Sparse matmult  Mflops:   127.01    (N=1000, nz=5000)
LU              Mflops:   162.54    (M=100, N=100)

C com otimizações “-02”

Composite Score: ==> 449.46 <== FFT Mflops: 492.72 (N=1024) SOR Mflops: 441.96 (100 x 100) MonteCarlo: Mflops: 78.95 Sparse matmult Mflops: 416.10 (N=1000, nz=5000) LU Mflops: 817.56 (M=100, N=100)

Versão em Java (HotSpot 6):

Composite Score: ==> 312 <== FFT (1024): 268 SOR (100×100): 432 Monte Carlo : 61 Sparse matmult (N=1000, nz=5000): 372 LU (100×100): 425

Essa pontuação é expressa em MFlops, ou seja,quanto maior, melhor.

Percebe-se que o Java se aproxima muito da performance do código otimizado em C. Eu estava esperando que o Java fosse cerca de umas 3 ou 4 vezes mais lento, mas me surpreendi. Acredito que se foram os tempos em que Java era lento.

7 Respostas

Edufa

Oba, esse esse Bench q eu estava procurando para fazer um comparativo de uma máquina nova aqui :lol:

T

Pergunta - no caso da compilação em C, você usou o quê?

gcc, que versão? Que opções de compilação?

Kknd

thingol:
Pergunta - no caso da compilação em C, você usou o quê?

gcc, que versão? Que opções de compilação?

Usei a versão 4.1.2 20061115 (prerelease), compilei sem nenhuma otimização. Vou tentar compilar novamente com o máximo de otimizações possíveis e vou ver no que vai dar!

peczenyj

Fiz alguns testes

C sem optimizacao
**                                                              **
** SciMark2 Numeric Benchmark, see http://math.nist.gov/scimark **
** for details. (Results can be submitted to [email removido])     **
**                                                              **
Using       2.00 seconds min time per kenel.
Composite Score:          150.27
FFT             Mflops:    73.16    (N=1024)
SOR             Mflops:   336.88    (100 x 100)
MonteCarlo:     Mflops:    40.31
Sparse matmult  Mflops:   121.36    (N=1000, nz=5000)
LU              Mflops:   179.65    (M=100, N=100)
C com optimizacao -O4
**                                                              **
** SciMark2 Numeric Benchmark, see http://math.nist.gov/scimark **
** for details. (Results can be submitted to [email removido])     **
**                                                              **
Using       2.00 seconds min time per kenel.
Composite Score:          296.02
FFT             Mflops:   202.82    (N=1024)
SOR             Mflops:   399.78    (100 x 100)
MonteCarlo:     Mflops:    68.48
Sparse matmult  Mflops:   388.94    (N=1000, nz=5000)
LU              Mflops:   420.10    (M=100, N=100)
Java 1.5 (ainda... )
SciMark 2.0a

Composite Score: 220.40695386727958
FFT (1024): 121.97486830315665
SOR (100x100):   417.2704623789337
Monte Carlo : 16.73537660089184
Sparse matmult (N=1000, nz=5000): 171.78505640114815
LU (100x100): 374.2690056522674

java.vendor: Sun Microsystems Inc.
java.version: 1.5.0_05
os.arch: i386
os.name: Linux
os.version: 2.6.5-7.201-bigsmp

Tenho que testar no Java 6

Kknd

peczenyj:

Tenho que testar no Java 6

No Java 6 eu percebi um aumento enorme na performance!

Acabei de compilar com otimizações “-O2” aqui, a performance aumentou bastante! Atualizaei no primeiro post.

louds

Rodou a versão java com quais parâmetros?

Lembre que Java DEVE ser mais lento que C quando o assunto é performance de ponto flutuante, principalmente em hardware intel. Java garante muito maior precisão nos resultados e isso custa performance em vários casos.

T

Benchmarks de verdade devem especificar as condições onde foram realizados. Por exemplo:

  • Opções passadas na linha de comando, para o gcc e para o java;
  • Configuração da máquina (exemplo: Pentium D 930 (2.8GHz/DDR2-533/4GB etc.)
Criado 13 de fevereiro de 2007
Ultima resposta 13 de fev. de 2007
Respostas 7
Participantes 5