Názory k článku Pohled pod kapotu JVM – základy optimalizace aplikací naprogramovaných v Javě (záhadná funkce System.arraycopy)

  • Článek je starý, nové názory již nelze přidávat.
  • 22. 10. 2013 10:51

    Franta Kučera

    Ad „termín ‚funkce‘ zde používám záměrně, protože System.arraycopy() je statická a současně i veřejná metoda, tudíž má blíže ke klasicky pojatým funkcím, než k OOP metodám :-)“

    Klidně bych šel ještě dál a nazval to procedurou – protože arraycopy() nemá návratovou hodnotu a používá vstupně/výstupní parametry.

  • 22. 10. 2013 11:15

    deda.jabko (neregistrovaný)

    Budu mozna trochu hnidopich: "SSE2 bude pravděpodobně výhodnější pouze na novějších mikroprocesorech firmy Intel"

    Je nejaky duvod, proc by SSE2 melo byt nevyhodne na procesorech od firmy AMD?

  • 22. 10. 2013 13:37

    kvr kvr

    Je pravda, že Intel tlačil SSE daleko víc a dřív, ale dneska bych větší rozdíly taky nečekal.

    Ty výsledky mě docela překvapují. Možná by bylo ještě zajímavé void benchmark7 { copy(src, i, dst, i, length); }, aby se lépe mohlo využít zarovnání.
    V Linuxovém kernelu se SSE na kopírování využívá poměrně dost a předpokládám, že to někdo měřil. Takže buď to někdo měřil špatně nebo je špatně implementace v Javě (matně si pamatuju, že v Linux kernel se poměrně dost používá mimojiné prefetch). Taky třeba podotknout, že od přechodu na 64bit se ten rozdíl mezi standardním registrem a SSE trochu snížil...

  • 22. 10. 2013 12:17

    Pavel Tišnovský
    Zlatý podporovatel

    Tak tady jsou pro zacatel vysledky pro:
    Intel(R) Xeon(R) CPU X3220 @ 2.40GHz

    java -server -XX:CompileThreshol­d=10000 -XX:-UseXMMForArrayCopy -XX:-UseUnalignedLo­adStores ArrayCopyTest2
    Warmup phase...
    0 1 2 3 4 5 6 7 8 9 done
    Method ArrayCopyTest2­.testArrayCopy1 time: 100,708,991 ns
    Method ArrayCopyTest2­.testArrayCopy2 time: 137,256,239 ns
    Method ArrayCopyTest2­.testArrayCopy3 time: 121,371,177 ns
    Method ArrayCopyTest2­.testArrayCopy4 time: 78,153,347 ns
    Method ArrayCopyTest2­.testArrayCopy5 time: 136,210,011 ns
    Method ArrayCopyTest2­.testArrayCopy6 time: 121,345,843 ns

    java -server -XX:CompileThreshol­d=10000 -XX:+UseXMMForA­rrayCopy -XX:-UseUnalignedLo­adStores ArrayCopyTest2
    Warmup phase...
    0 1 2 3 4 5 6 7 8 9 done
    Method ArrayCopyTest2­.testArrayCopy1 time: 100,502,913 ns
    Method ArrayCopyTest2­.testArrayCopy2 time: 137,067,723 ns
    Method ArrayCopyTest2­.testArrayCopy3 time: 121,365,836 ns
    Method ArrayCopyTest2­.testArrayCopy4 time: 78,151,333 ns
    Method ArrayCopyTest2­.testArrayCopy5 time: 136,215,355 ns
    Method ArrayCopyTest2­.testArrayCopy6 time: 121,342,873 ns

    java -server -XX:CompileThreshol­d=10000 -XX:-UseXMMForArrayCopy -XX:+UseUnalig­nedLoadStores ArrayCopyTest2
    Warmup phase...
    0 1 2 3 4 5 6 7 8 9 done
    Method ArrayCopyTest2­.testArrayCopy1 time: 116,575,323 ns
    Method ArrayCopyTest2­.testArrayCopy2 time: 158,186,271 ns
    Method ArrayCopyTest2­.testArrayCopy3 time: 159,060,561 ns
    Method ArrayCopyTest2­.testArrayCopy4 time: 115,436,567 ns
    Method ArrayCopyTest2­.testArrayCopy5 time: 156,915,770 ns
    Method ArrayCopyTest2­.testArrayCopy6 time: 158,959,367 ns

    java -server -XX:CompileThreshol­d=10000 -XX:+UseXMMForA­rrayCopy -XX:+UseUnalig­nedLoadStores ArrayCopyTest2
    Warmup phase...
    0 1 2 3 4 5 6 7 8 9 done
    Method ArrayCopyTest2­.testArrayCopy1 time: 116,566,568 ns
    Method ArrayCopyTest2­.testArrayCopy2 time: 158,254,976 ns
    Method ArrayCopyTest2­.testArrayCopy3 time: 159,073,464 ns
    Method ArrayCopyTest2­.testArrayCopy4 time: 115,399,695 ns
    Method ArrayCopyTest2­.testArrayCopy5 time: 156,926,495 ns
    Method ArrayCopyTest2­.testArrayCopy6 time: 158,962,351 ns

  • 22. 10. 2013 16:06

    Pavel Tišnovský
    Zlatý podporovatel

    Tak a AMDcko, konkretne Quad-Core AMD Opteron(tm) Processor 2350 dava:

    java -server -XX:CompileThreshol­d=10000 -XX:-UseXMMForArrayCopy -XX:-UseUnalignedLo­adStores ArrayCopyTest2
    Warmup phase...
    0 1 2 3 4 5 6 7 8 9 done
    Method ArrayCopyTest2­.testArrayCopy1 time: 115,435,000 ns
    Method ArrayCopyTest2­.testArrayCopy2 time: 143,528,000 ns
    Method ArrayCopyTest2­.testArrayCopy3 time: 125,978,000 ns
    Method ArrayCopyTest2­.testArrayCopy4 time: 62,768,000 ns
    Method ArrayCopyTest2­.testArrayCopy5 time: 121,899,000 ns
    Method ArrayCopyTest2­.testArrayCopy6 time: 120,338,000 ns
    java -server -XX:CompileThreshol­d=10000 -XX:+UseXMMForA­rrayCopy -XX:-UseUnalignedLo­adStores ArrayCopyTest2
    Warmup phase...
    0 1 2 3 4 5 6 7 8 9 done
    Method ArrayCopyTest2­.testArrayCopy1 time: 116,356,000 ns
    Method ArrayCopyTest2­.testArrayCopy2 time: 132,203,000 ns
    Method ArrayCopyTest2­.testArrayCopy3 time: 126,103,000 ns
    Method ArrayCopyTest2­.testArrayCopy4 time: 64,035,000 ns
    Method ArrayCopyTest2­.testArrayCopy5 time: 123,759,000 ns
    Method ArrayCopyTest2­.testArrayCopy6 time: 122,152,000 ns
    java -server -XX:CompileThreshol­d=10000 -XX:-UseXMMForArrayCopy -XX:+UseUnalig­nedLoadStores ArrayCopyTest2
    Warmup phase...
    0 1 2 3 4 5 6 7 8 9 done
    Method ArrayCopyTest2­.testArrayCopy1 time: 115,771,000 ns
    Method ArrayCopyTest2­.testArrayCopy2 time: 114,647,000 ns
    Method ArrayCopyTest2­.testArrayCopy3 time: 128,860,000 ns
    Method ArrayCopyTest2­.testArrayCopy4 time: 89,716,000 ns
    Method ArrayCopyTest2­.testArrayCopy5 time: 106,007,000 ns
    Method ArrayCopyTest2­.testArrayCopy6 time: 125,763,000 ns
    java -server -XX:CompileThreshol­d=10000 -XX:+UseXMMForA­rrayCopy -XX:+UseUnalig­nedLoadStores ArrayCopyTest2
    Warmup phase...
    0 1 2 3 4 5 6 7 8 9 done
    Method ArrayCopyTest2­.testArrayCopy1 time: 118,603,000 ns
    Method ArrayCopyTest2­.testArrayCopy2 time: 128,957,000 ns
    Method ArrayCopyTest2­.testArrayCopy3 time: 135,683,000 ns
    Method ArrayCopyTest2­.testArrayCopy4 time: 90,829,000 ns
    Method ArrayCopyTest2­.testArrayCopy5 time: 107,602,000 ns
    Method ArrayCopyTest2­.testArrayCopy6 time: 127,586,000 ns