Java - Programmera ett benchmarkingprogram

Permalänk
Medlem

Java - Programmera ett benchmarkingprogram

Tjena!

Jag hade tänkt att försöka ge mig på att programmera ett benchmarkingprogram i Java som stressar CPUn.
Min fråga är om den virtuella tolken kan belasta cpun med 100%?

Visa signatur
Permalänk
Medlem

Min motfråga är: vad är det som får dig att tro att du inte skulle kunna se en javaprocess som slukar 100% cputid?

EDIT:
Lät lite drygare än vad det var menat, så jag kompletterar:
en javaprocess kan sluka så mycket cputid du kan ge den, förutsatt att den behöver den så klart

Visa signatur

Dator - Maskinfan du arbetar med
Data - Ettor och nollor lagrade på t.ex hårddisken
Hur svårt kan det vara? :p

Permalänk
Medlem

Worfen: Jag tror inte ett dugg :). Men då vet jag. Tack.

Visa signatur
Permalänk
Medlem

Vet av egen erfarenhet att en while-loop kan dra all processortid för en kärna.

Permalänk
Medlem

Jag skulle vilja påstå att det är dumt att göra ett benchmarkningsprogram i Java. Fast det beror iofs på vad det är man vill benchmarka. Är det JavaVM så är det ju bra (no shit) men om man vill benchmarka en CPU är det potensiellt dumt eftersom du testar hur bra tolken översätter dina instruktioner till den plattformen som fanns tillgänglig för utvecklarna då dom gjorde den virtuella maskinen. Om du sitter på en helt ny processor med nya balla instruktioner kommer dessa inte användas tills javatolken är skapt för det. Dock stämmer ju det antagandet överrens med ett kompilerat program fast där vet du ju i förväg vilka instruktioner som skapats och körs.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Klockan
Vet av egen erfarenhet att en while-loop kan dra all processortid för en kärna.

Jo, någon form av loop vet jag att man skall använda. Men hur är det med 2 kärnor och 4:a kärnor?

iXam: Jag använder Java eftersom att jag i kursen har valt att programmera i Java. En kul idé helt enkelt och jag vill se om det går bra att göra

Visa signatur
Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Brajan
Jo, någon form av loop vet jag att man skall använda. Men hur är det med 2 kärnor och 4:a kärnor?

iXam: Jag använder Java eftersom att jag i kursen har valt att programmera i Java. En kul idé helt enkelt och jag vill se om det går bra att göra

Åter igen så måste du veta vad du vill benchmarka. En "tom" whileloop kan säkert ta 100% CPU men du benchmarkar inget. Däremot vill du göra så mycket som möjligt i loopen. Delasta de olika delarna av processorn. Och det vill man troligtvis göra var för sig och då faller Java bort helt och hållet eftersom du inte kan styra vilka instruktioner som ska genereras/köras.

Men eftersom du håller på att lära dig just Java och verkar vilja göra någon form av benchmarking så skulle jag satsa på annan benchmarking än CPU. Benchmarka något mer Javaspecifikt eller något där Java inte bromsar. Gör ett bandbreddstest exempelvis. Då lär du dig både nätverksprogrammering och viss grafik (om du ska presentera resultatet på något snyggt sätt).

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av iXam
Åter igen så måste du veta vad du vill benchmarka. En "tom" whileloop kan säkert ta 100% CPU men du benchmarkar inget. Däremot vill du göra så mycket som möjligt i loopen. Delasta de olika delarna av processorn. Och det vill man troligtvis göra var för sig och då faller Java bort helt och hållet eftersom du inte kan styra vilka instruktioner som ska genereras/köras.

Men eftersom du håller på att lära dig just Java och verkar vilja göra någon form av benchmarking så skulle jag satsa på annan benchmarking än CPU. Benchmarka något mer Javaspecifikt eller något där Java inte bromsar. Gör ett bandbreddstest exempelvis. Då lär du dig både nätverksprogrammering och viss grafik (om du ska presentera resultatet på något snyggt sätt).

Så du menar att det inte alls går att bygga ett benchprogram i Java som belastar CPUn? Jag tänkte använda mig utav FFT, fast fourier transform, vilket jag tycker borde få CPUn att räkna. Men som du säger så är det nog kört eftersom att man inte kna styra vilka instruktioner som skall köras.

Visa signatur
Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Brajan
Så du menar att det inte alls går att bygga ett benchprogram i Java som belastar CPUn? Jag tänkte använda mig utav FFT, fast fourier transform, vilket jag tycker borde få CPUn att räkna. Men som du säger så är det nog kört eftersom att man inte kna styra vilka instruktioner som skall köras.

Jodå. Det går alldeles utmärkt att Javaprogram som belastar processorn till "100%". Dock vet du inte säkert *vad* i processorn som belastas. Och FFT låter nog vettigt. En snabbare processor kommer högst troligen köra koden snabbare. Men en annan VM kanske kör koden snabbare på en annan processor. Det är bara så att Java inte lämpar sig för att benchmarka en CPU. Men du kan skriva ett benchmarkningsprogram FÖR Java i Java som benchmarkar olika JVM på olika aktitekturer och processorer. Men då är det ju inte bara Java du ska lära dig utan även JVM.