# [gelöst] Multicore



## assoziatives pseudonym (26. Mrz 2008)

Wie kann ich in Java Threads einzelnen Prozessorkernen zuweisen?
Bisher fand ich das:

http://kccoder.com/fracture/

Wie kann ich nun explizit Kern X oder Y ansprechen?


----------



## Illuvatar (27. Mrz 2008)

Generell: Wenn du Threads verwendest verteilt die JRE die schon sinnvoll auf die Kerne.
Wie du jetzt explizit "Kern 2" ansprichst, weiß ich nicht. Die Fracture-Lib kenn ich auch nicht, kann ich dir nicht mehr zu sagen.


----------



## maki (27. Mrz 2008)

> Wie kann ich in Java Threads einzelnen Prozessorkernen zuweisen?


Gar nicht, ist Aufgabe des OS.


----------



## assoziatives pseudonym (16. Aug 2008)

maki hat gesagt.:
			
		

> > Wie kann ich in Java Threads einzelnen Prozessorkernen zuweisen?
> 
> 
> Gar nicht, ist Aufgabe des OS.





			
				tha_specializt hat gesagt.:
			
		

> http://kccoder.com/fracture/


----------



## Wildcard (16. Aug 2008)

maki hat gesagt.:
			
		

> > Wie kann ich in Java Threads einzelnen Prozessorkernen zuweisen?
> 
> 
> Gar nicht, ist Aufgabe des OS.


----------



## Tobias (16. Aug 2008)

Fracture hat null damit zutun irgendeinem physikalischen Prozessorkern etwas zu zuweisen, sondern vereinfacht schlicht und ergreifend nur die Multi-Thread-Entwicklung - weil die nämlich Vorraussetzung ist, damit das *Betriebssystem* irgendwas verteilen kann.

Aber poste ruhig noch ein paar Mal den Link, der ist nämlich gar nicht schlecht ...


----------



## Beni (16. Aug 2008)

Soweit ich den Code der KCoder-Library durchschaue, machen die auch nicht mehr als Threads starten, und hoffen dass die ordentlich verteilt werden. Wenn man die Zahlen anschaut die sie angeben, funktioniert das auch ganz gut. Aber es bringt dich keinen Schritt näher an Threads Prozessorkernen zuzuweisen.

Sieht trotzdem nach einer Library aus, die man sich bookmarken sollte.

Falls das aber doch irgendwie anders ist, als maki schreibt (ich habe selten gesehen, dass maki sich irrt und hätte spontan dasselbe gesagt), würde mich auch interessieren wie das geht.

[Edit: uh, da war jemand schneller als ich]


----------



## Tobias (16. Aug 2008)

Du hast mehr als 10 Minuten an deinem Beitrag gefeilt? Respekt.


----------



## Beni (16. Aug 2008)

Ich habe zwischendurch die Library runtergeladen, in Eclipse rumgespielt um den Quellcode anzusehen, und sonst ein bisschen auf der KCCoder-Homepage rumgeschnuppert... soviel Zeit für den eigentlichen Beitrag habe ich nicht investiert :wink:


----------



## assoziatives pseudonym (16. Aug 2008)

Tobias hat gesagt.:
			
		

> Fracture hat null damit zutun irgendeinem physikalischen Prozessorkern etwas zu zuweisen, sondern vereinfacht schlicht und ergreifend nur die Multi-Thread-Entwicklung - weil die nämlich Vorraussetzung ist, damit das *Betriebssystem* irgendwas verteilen kann.



Blödsinn, Java verteilt selbst ganz gut (hier auf nem Quadcore werden alle Kerne sehr schön benutzt, ohne Fracture und zudem wurde Java sogar für Multicore / Multisocket-Server *entwickelt*, zb. skaliert Java deutlich besser als C++, je mehr Power man hat.

Und wenn ihr euch ma n bischen informiert hättet dann wüsstet ihr dass es mittels Fracture sehr wohl möglich ist, einzelne Kerne anzusprechen


----------



## Tobias (16. Aug 2008)

lol.

Ich halte ab sofort die Klappe, ich kann nämlich bald nicht mehr.


----------



## assoziatives pseudonym (16. Aug 2008)

Tobias hat gesagt.:
			
		

> lol.
> 
> Ich halte ab sofort die Klappe, ich kann nämlich bald nicht mehr.


Besser is das, anscheinend bist du zu jung für Diskussionen ... aber macht ja nix


----------



## Guest (16. Aug 2008)

tha_specializt hat gesagt.:
			
		

> Tobias hat gesagt.:
> 
> 
> 
> ...


nein, java verteilt genausowenig wie c++ irgendwelche threads verteilt.



> Und wenn ihr euch ma n bischen informiert hättet dann wüsstet ihr dass es mittels Fracture sehr wohl möglich ist, einzelne Kerne anzusprechen


nein ist nicht möglich. wenn du dir so sicher darin bist, warum hast du überhaupt den thread aufgemacht, denn wie das funktioniert war doch deine anfangsfrage. hast du es denn inzwischen rausgefunden? teile es uns doch bitte mit.  :applaus:


----------



## assoziatives pseudonym (16. Aug 2008)

ja, hab ich. Hast du jemals die Prozessorauslastung mit Java gesehen? Nein? Woher willst du das dann wissen? Soll ich nen Screenshot machen?


----------



## foobar (16. Aug 2008)

Warum sollte man als Entwickler überhaupt Einfluss auf die Verteilung der Threads auf Prozessorkerne haben? Wofür sollte das gut sein? Dafür gibts nen Scheduler im Kernel.


----------



## assoziatives pseudonym (16. Aug 2008)

Naja ... für zeitaufwendige Tasks wäre das interessant ... so kann der Anwender zb. noch besser semiparallel arbeiten und berechnen lassen


----------



## Guest (16. Aug 2008)

tha_specializt hat gesagt.:
			
		

> ja, hab ich.


dann poste doch bitte den java code dazu. denn das interessiert mich nun. außerdem markiere den thread dann bitte als gelöst.


> Hast du jemals die Prozessorauslastung mit Java gesehen? Nein? Woher willst du das dann wissen? Soll ich nen Screenshot machen?


prozessorauslastung wovon überhaupt? ich weiß es weil es a. technisch nicht möglich ist und b. kannst du dich selbst davon überzeugen wenn du dich mal 5 minuten mit der library von oben beschäftigen würdest und deren code liest.
und dass die pro-kern-auslastung runtergeht wenn man diese library benutzt ist ja auch sinn der sache, die threads werden trotzdem von deinem OS aufgeteilt  :roll:


----------



## assoziatives pseudonym (16. Aug 2008)

Anonymous hat gesagt.:
			
		

> dann poste doch bitte den java code dazu.


Hab ich schon lang nimmer .. zwischen der Threaderstellung damals und heute liegen ca. 3 Windows-Versionen


			
				Anonymous hat gesagt.:
			
		

> prozessorauslastung wovon überhaupt?


Von Core 1,2,3,4 zum Beispiel?


			
				Anonymous hat gesagt.:
			
		

> ich weiß es weil es a. technisch nicht möglich ist


ist es sehr wohl ... das es auf Maschinennaher Ebene tatsächlich vieles seriell abläuft ist uninteressant, die für den Anwender/Programmierer sichtbaren Schaltzeiten sind die wichtigen, und diese kann man beliebig anordnen


			
				Anonymous hat gesagt.:
			
		

> und dass die pro-kern-auslastung runtergeht wenn man diese library benutzt ist ja auch sinn der sache,


Nur sekundär, primär geht es um die selektierte Verteilung, man kann ganz bequem wählen wieviele Kerne / CPU´s benutzt werden sollen


----------



## Guest (16. Aug 2008)

tha_specializt hat gesagt.:
			
		

> Hab ich schon lang nimmer .. zwischen der Threaderstellung damals und heute liegen ca. 3 Windows-Versionen


 :applaus: alles klar  es funktioniert leider trotzdem nicht. warum kramst du den thread nach "so lange" überhaupt wieder raus wenn du eh nix sinnvolles dazu mehr beizutragen hast?



> Von Core 1,2,3,4 zum Beispiel?


von solitär oder was? *kopfschüttel*



> ist es sehr wohl ... das es auf Maschinennaher Ebene tatsächlich vieles seriell abläuft ist uninteressant, die für den Anwender/Programmierer sichtbaren Schaltzeiten sind die wichtigen, und diese kann man beliebig anordnen


erstens sind die schaltzeiten auch bei singlecore prozessoren weder für programmierer noch anwender wahrnehmbar, es sei denn du programmierst so, dass die gui hängt (...). beliebig anordnen kannst du sie, ja, im scheduler code...



> Nur sekundär, primär geht es um die selektierte Verteilung, man kann ganz bequem wählen wieviele Kerne / CPU´s benutzt werden sollen


du kannst mit der library wählen, wie viele threads gestartet werden sollen, mehr nicht. das aufteilen auf die kerne ist noch immer OS sache  :roll:


----------



## assoziatives pseudonym (16. Aug 2008)

Anonymous hat gesagt.:
			
		

> wieder raus wenn du eh nix sinnvolles dazu mehr beizutragen hast?


Wieso bist du in diesem Thread? Kennst du den "Eigene Beiträge anzeigen"-Knopf bei phpbb? 


			
				Anonymous hat gesagt.:
			
		

> von solitär oder was? *kopfschüttel*


Weisst du eigentlich um was es hier geht? Weisst du was ein Prozessor ist und was es da so für neues Zeug gibt?


			
				Anonymous hat gesagt.:
			
		

> du kannst mit der library wählen, wie viele threads gestartet werden sollen, mehr nicht. das aufteilen auf die kerne ist noch immer OS sache  :roll:


Du weisst nicht wirklich, wovon du redest:



			
				http://kccoder.com/fracture/ hat gesagt.:
			
		

> Core Mode
> By default Fracture uses all available cores; however, you can configure Fracture to use fewer cores by setting the CoreMode via Fracture.setCoreMode(). The modes available are pretty self explanatory. Future releases will provide more sophisticated (and granular) configuration options.


----------



## Gast (16. Aug 2008)

doch, ich weiß leider wovon ich rede. wie wärs wenn du dir den code mal genau anschaust von der library. ich hab hier für dich das wichtigste zusammengestellt, damit wär das thema eigentlich erledigt (falls du den code verstehst...)

in Fracture.java beispiel eine der forEach methoden:

```
public static <T> void forEach(Iterator<T> iterator, IProcessor<T> processor) {
		new ThreadedForEach<T>(iterator, processor).execute();
	}
```
aus der klasse ThreadedForEach:

```
int coreCount = Utils.getCoreCount();
		CountDownLatch latch = new CountDownLatch(coreCount);
		for(int i = 0; i < coreCount; i++) {
			Utils.startThread(new MyRunnable(latch));
		}
```
die methode getCoreCount und dein glorreicher CodeMore:

```
static int getCoreCount(CoreMode cr) {		
		if (cr == CoreMode.ALL_CORES) {
			return getProcessorCount();
		} else if (cr == CoreMode.ALL_CORES_BUT_ONE) {
			return getProcessorCount()-1;
		} else if (cr == CoreMode.ONE_CORE) {
			return 1;
                // wie es hier weitergeht kannst du dir ja denken, aus platzgründen gekürzt
                } else {
			return 1;
		}
	}
```
und Utils.startThread macht genau das, was der methodenname sagt. q.e.d.
ergo: die library macht nichts weiter als eine reihe von threads zu starten. maximal soviele wie kerne vorhanden sind. das lässt sich durch CoreMode einschränken.
jetz verstanden, du spezialist?


----------



## assoziatives pseudonym (16. Aug 2008)

Gast hat gesagt.:
			
		

> q.e.d.


Das is Selbstdisqualifikation in Reinform, das "warum" stand offensichtlich nicht an der Tafel :wink:


			
				Gast hat gesagt.:
			
		

> jetz verstanden, du spezialist?


verbal überforderte Gegenüber lassen sich meiner Erfahrung nach immer ganz leicht erkennen: Assoziation von Pseudonymen mit Ansichten/Absichten


----------



## Beni (16. Aug 2008)

Hast du meine PN (private Nachricht) nicht bekommen specializt?

Ganz oben im Forum solltest du einen fetten Link finden (angeschrieben mit "Nachrichten"), klick darauf.


----------

