Začátky v Javě

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Začátky v Javě
« Odpověď #150 kdy: 02. 04. 2014, 16:19:12 »
C++ verzia (dufam ze tam nemam chybu):
Kód: [Vybrat]
#include <vector>
#include <limits>
#include <chrono>
#include <iostream>
#include <cstdlib>


const int INT_MAX = std::numeric_limits<int>::max();

int compute (int count, int start, int stop, const std::vector<int> &weight)
{
  std::vector<bool> invalid(count, false);
  std::vector<int> distance(count, INT_MAX);
       
  int u = start;
  distance[u] = 0;
       
  while(u != stop) {
    invalid[u] = true;
           
    int minDistance = distance[u];
    int min = INT_MAX;
           
    for (int v = 0; v < count; ++v) {
      if (invalid[v]) {
        continue;
      }
               
      int distanceThroughU = minDistance + weight[u * count + v];
               
      if (distanceThroughU < distance[v]) {
        distance[v] = distanceThroughU;
      }
               
      if (distance[v] < min) {
        u = v;
        min = distance[v];
      }
    }
  }
       
  return distance[u];
}

int main(int argc, char **argv)
{
  auto start = std::chrono::high_resolution_clock::now();

  const int COUNT = 5000;
  std::vector<int> weight(COUNT * COUNT);
  srand(time(0));

  for (int i = 0; i < COUNT * COUNT; ++i) {
    weight[i] = (random() % 100) + 1;
  }       

  int res = compute(COUNT, 0, COUNT - 1, weight);

  auto end = std::chrono::high_resolution_clock::now();

  int duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count();
  std::cout << "result: " << res << std::endl;
  std::cout << "time  : " << duration << std::endl;
       
  return 0;
}

Casy (priemer 50 spusteni, prvy stlpec je vypis casu s programu, druhy s programu time):

Java : 479ms, real 561ms
G++  : 373ms, real 384ms
Clang: 362ms, real 376ms

Java verziu som spustal len prikazom time java Dijkstra, mozno by to poladil nejaky parameter?
C++ verzie su kompilovane prikazmi (medzi -O2 a -O3 nieje podstatny rozdiel):

g++ -std=c++11 -O2 Dijkstra.cpp -o Dijkstra_gcc
clang++ -std=c++11 -O2 Dijkstra.cpp -o Dijkstra_clang


U vectoru asi rozdíl nebude, ale zkusil bych to clangem s libc++ (místo libstdc++).


zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Začátky v Javě
« Odpověď #151 kdy: 02. 04. 2014, 16:20:12 »
este pre zboja a python rest

https://gist.github.com/anonymous/9933517

Dík. Já myslel, že to má být z databáze. Mrknu na to blíže večer.

Re:Začátky v Javě
« Odpověď #152 kdy: 02. 04. 2014, 16:22:25 »
Jakou jsi použil Javu?

java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

gcc version 4.7.2 (Debian 4.7.2-5)

clang version 3.5 (trunk)

Mno, jak vidno, posral sem to. Poznámka pro majo33. Když použiješ release mód (při kompilování tvé C++ verze), dostaneš se na 330 ms. 380 ms máš s debug módem.

Ktory to je prepinac? Kompiloval som to len s -O2 a -std=c++11.

Jakub Galgonek

Re:Začátky v Javě
« Odpověď #153 kdy: 02. 04. 2014, 16:23:36 »
nepoužil ... s ním mi vyšel stejný (+-10) čas jako tam napsal (384) ... bez něj 330 ms

Můj ty Bože, tak má asi jiný hardware, ne? Majo33 použil volbu -O2, což by mělo odpovídat tomu tvému release módu.

JSH

Re:Začátky v Javě
« Odpověď #154 kdy: 02. 04. 2014, 16:26:08 »
nepoužil ... s ním mi vyšel stejný (+-10) čas jako tam napsal (384) ... bez něj 330 ms
Ano, pokud vezmeš kód a spustíš ho na jiném počítači, tak obvykle naměříš jiné časy. Překvapení  :P


RAII

Re:Začátky v Javě
« Odpověď #155 kdy: 02. 04. 2014, 16:40:22 »
Neříkej, proč sem asi dal výpis z /proc/cpuinfo...Jedno jádro mého procesoru má frekvenci 3Ghz, jeho má zřejmě také...

gamer

Re:Začátky v Javě
« Odpověď #156 kdy: 02. 04. 2014, 16:45:44 »
Doba běhu je při každém spuštění jiná, protože vzdálenosti v grafu jsou jiné, v tom kódu je:
Kód: [Vybrat]
srand(time(0));

Jakub Galgonek

Re:Začátky v Javě
« Odpověď #157 kdy: 02. 04. 2014, 16:51:03 »
Neříkej, proč sem asi dal výpis z /proc/cpuinfo...Jedno jádro mého procesoru má frekvenci 3Ghz, jeho má zřejmě také...

Prosím tě, podle čeho věštíš, co má za procesor?

Ještě jednou: Podle tvých zdrojáků je release mód definovaný použitím volby -O2, a tu volbu také majo33 použil.

Mimochodem, já mám procesor na 2.4 GHz a zvládne to rychleji než ten tvůj (za cca 270 ms).

JSH

Re:Začátky v Javě
« Odpověď #158 kdy: 02. 04. 2014, 16:53:23 »
Neříkej, proč sem asi dal výpis z /proc/cpuinfo...Jedno jádro mého procesoru má frekvenci 3Ghz, jeho má zřejmě také...
Mohl bys přidat i výpis z /dev/crystal_ball ? Na základě čeho usuzuješ, že jeho procesor má 3Ghz? Z toho, co tu napsal nejsem schopný ani určit, jestli má Intel nebo AMD.

perceptron

Re:Začátky v Javě
« Odpověď #159 kdy: 02. 04. 2014, 17:39:21 »
raii je ako chuck norris: dokaze z dlzky behu programu usudit, na akom procesore bezi

u mna je priemer javy 497ms, ale v kazdom behu priemerne 90ms zozerie jej boot

Jakub Galgonek

Re:Začátky v Javě
« Odpověď #160 kdy: 02. 04. 2014, 17:58:17 »
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

Díky, já zaznamenal nějaký výkonnostní propad na Javě od IBM (JDK 1.6.0.9_p2), tak mne jen zajímalo, na čem to pouštíš. Zkoušel jsem teď ještě icedtea, ale oproti té od Oracle tam už nebyl rozdíl.

Re:Začátky v Javě
« Odpověď #161 kdy: 02. 04. 2014, 18:00:32 »
Spustal som to na AMD Phenom x4 945 3GHz.

Jakub Galgonek

Re:Začátky v Javě
« Odpověď #162 kdy: 02. 04. 2014, 18:04:38 »
Spustal som to na AMD Phenom x4 945 3GHz.

3GHz? Tak teď to dostaneme pěkně sežrat :D

Prosím tě, zkompiluj to ještě bez té volby -O2, jinak RAII asi neuvěří, žeš to předtím měl v "release módu".

RAII

Re:Začátky v Javě
« Odpověď #163 kdy: 02. 04. 2014, 18:12:04 »
-O3

RAII

Re:Začátky v Javě
« Odpověď #164 kdy: 02. 04. 2014, 18:20:12 »
-O3 + release mód. Byl to pouze odhad ... a trefil jsem se jak vidím. I když, z části se divím, typoval sem Intel. AMD jádra obvykle potřebují vyšší frekvenci aby se vyrovnali Intel jádrům ze stejné "třídy".