Hallo,
wie kann ich diesen code beschleunigen? ideen waren:
Erstens: 4 threads(1 pro kern), in der innersten for schleife 4x m++ und 4 mal distance gleichzeitig berechnen.
Zweitens: Zeile 18-21 ersetzen, die distanzen in einer arraylist speichern, anschließend Collections.min(arraylist) irgendwie den index rauskriegen von dem kleinsten element und dann in "clusterid" speichern.
oder habt ihr grundlegende vorschläge. das problem ist dass bei der rechnung nur ein kern genutzt wird, diese rechnung sich gewissermaßen zwischen rechnungen befinden die mit 4 threads alle kerne auslasten. ich will permanent volle auslastung aller kerne erreichen.
vielen dank für jegliche hilfe.
wie kann ich diesen code beschleunigen? ideen waren:
Erstens: 4 threads(1 pro kern), in der innersten for schleife 4x m++ und 4 mal distance gleichzeitig berechnen.
Zweitens: Zeile 18-21 ersetzen, die distanzen in einer arraylist speichern, anschließend Collections.min(arraylist) irgendwie den index rauskriegen von dem kleinsten element und dann in "clusterid" speichern.
oder habt ihr grundlegende vorschläge. das problem ist dass bei der rechnung nur ein kern genutzt wird, diese rechnung sich gewissermaßen zwischen rechnungen befinden die mit 4 threads alle kerne auslasten. ich will permanent volle auslastung aller kerne erreichen.
vielen dank für jegliche hilfe.
Java:
for (int j = 0; j < ImageList.size(); j++){ // durch alle bilder durch
distanz = 0;
for (int k = 0; k < ImageList.get(j).size();k++){ // jeder vektor im bild?;P
for (int m = 0; m < clist.size(); m++){ // jeder Cluster ;P
if (m == 0){
clusterid = 0; // == 0
distanz = distance(clist.get(m).Centroid, ImageList.get(j).get(k));
// distance ist einfach nur eine abstandsfkt(manhattendistance) von 2 vektoren.
}// end if
distemp = distance(clist.get(m).Centroid, ImageList.get(j).get(k));
if (distemp < distanz){
// System.out.println("jow trifft zu");
distanz = distemp;
clusterid = m;
}//end if
} //end FOR m