|
|
|
|
WoW?
Nein quatsch. Dafür hab ich gerade gar kein Geld. Mich nervt nur heute, dass kein Club bzw. keine Disse geöffnet hat, damit ich ein bisschen was zu tun hätte heute abend. Naja. Dann wirds wohl ein Haufen mit Freunden in meiner Stube sein. Mit viel Bier.
|
|
|
|
|
|
*anschleich und zustech'*
|
Age of Conan!
Ich bin ein Moerder mit Kapuze und zwei enormen Butterbrotmessern!
Und ich mache tote Menschen
Im Ernst, so "richtiges offenes" PVP ist das Gailste wo gibt!
|
|
|
|
|
|
|
Warum wird das nicht nebenläufig ausgefügrt?
|
Code: |
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <wait.h>
int main(int argc, char **argv) {
FILE *file;
pid_t pid;
if ((file = fopen("u3a5.txt", "w")) == NULL) {
exit(1);
}
pid = fork();
int i;
switch (pid) {
case -1:
printf("Fehler bei Erzeugung des Kindprozesses!");
break;
case 0:
sleep(1);
for (i = 0; i<10; i++) {
fprintf(file, "Child: \%d \n", i);
}
break;
default:
sleep(1);
for (i = 0; i<10; i++) {
fprintf(file, "Parent: \%d \n", i);
}
break;
}
fclose(file);
exit(0);
}
|
|
gibt:
Parent: 0
Parent: 1
Parent: 2
Parent: 3
Parent: 4
Parent: 5
Parent: 6
Parent: 7
Parent: 8
Parent: 9
Child: 0
Child: 1
Child: 2
Child: 3
Child: 4
Child: 5
Child: 6
Child: 7
Child: 8
Child: 9
Das müsste doch aber ineinander verschachtelt sein, wenn es nebenläufig ist?!
|
|
|
|
|
|
|
Ach wird bestimmt vom Compiler wegoptimiert *abhak*
|
|
|
|
|
|
|
bau beim Default mal einen längeren Sleep ein. Kann sein, daß der Hauptzweig schon durch ist, bevor der Child-Zweig überhaupt erzeugt ist. Da sowohl Child als auch Parent jeweils eine Pause von 1 ms einlegen, bleibt der zeitliche Abstand zwischen den beiden Prozessen derselbe.
|
|
|
|
|
|
|
Ich häng hier auch schon wieder fest. Aber diesmal werde ich mich zurückhalten bevor wieder jemand sich beschwert.
|
|
|
|
|
|
|
Mit dem Sleep hab ich schon rumgespielt und eben auchnochmal deinen Vorschlag ausprobiert: keine Wirkung, außer dass das ausführen länger dauert
|
|
|
|
|
|
|
Ich versteh gerade nicht, wie das bei dir parallel ausgeführt werden sollte? Wegen dem fork()?
|
|
|
|
|
|
|
| Zitat von Strider
Age of Conan!
Ich bin ein Moerder mit Kapuze und zwei enormen Butterbrotmessern!
Und ich mache tote Menschen
Im Ernst, so "richtiges offenes" PVP ist das Gailste wo gibt!
| |
Gibts bei WoW auch.
|
|
|
|
|
|
|
| Zitat von [DK]Peacemaker
Ich versteh gerade nicht, wie das bei dir parallel ausgeführt werden sollte? Wegen dem fork()?
| |
Jop fork() erzeugt ne Kopie vom Prozess.
fork returned dann 0 für das Child und ne PID > 0 fürn Parent
|
|
|
|
|
|
|
Wie teile ich eigentlich eigentlich ne Matrixmultiplikation auf n Prozesse bzw. Threads auf?
|
Code: |
void matrix_mult(int A[MATRIXSIZE][MATRIXSIZE],int B[MATRIXSIZE][MATRIXSIZE], int C[MATRIXSIZE][MATRIXSIZE]) {
int y, x, k, s;
for(y = 0; y < MATRIXSIZE; y++) {
for(x = 0; x < MATRIXSIZE; x++) {
s = 0;
for(k = 0; k < MATRIXSIZE; k++) {
s = s + (B[y][k] * C[k][x]);
}
A[y][x] = s;
}
}
}
|
|
Also bei zwei Prozessen/Threads gehts ja noch. Aber wenn ich das auf beliebig viele aufteilen will?
|
|
|
|
|
|
|
Da fällt mir grad auf, ich muss ja die Matrizen ganz anders übergeben, sonst arbeiten die ja garnicht aufm selben Speicher.
|
|
|
|
|
|
|
Hmm bei ner Matrizenmultiplikation dürftest du recht viel mit Mutex-Variablen machen müssen. Aber leg einfach fest, welche Operationen du alle machen musst und wenn du das weißt, verteilst du diese auf alle verfügbaren Threads.
Hört sich aber leichter an, als es ist
|
|
|
|
|
|
|
40 Minuten noch zum Gratin. Hab mir sogar extra zwei Kumpels eingeladen. 1200g Kartoffeln kann ich nicht alleine essen.
|
|
|
|
|
|
|
Jetzt hab ich mal spasseshalber die Matrixmultiplikation für 2 Prozesse so aufgeteilt:
|
Code: |
void matrix_mult1(int A[MATRIXSIZE][MATRIXSIZE],int B[MATRIXSIZE][MATRIXSIZE], int C[MATRIXSIZE][MATRIXSIZE]) {
int y, x, k, s;
for(y = 0; y < (MATRIXSIZE/2) ; y++) {
for(x = 0; x < MATRIXSIZE; x++) {
s = 0;
for(k = 0; k < MATRIXSIZE; k++) {
s = s + (B[y][k] * C[k][x]);
}
A[y][x] = s;
}
}
}
void matrix_mult2(int A[MATRIXSIZE][MATRIXSIZE],int B[MATRIXSIZE][MATRIXSIZE], int C[MATRIXSIZE][MATRIXSIZE]) {
int y, x, k, s;
for(y = (MATRIXSIZE/2); y < MATRIXSIZE; y++) {
for(x = 0; x < MATRIXSIZE; x++) {
s = 0;
for(k = 0; k < MATRIXSIZE; k++) {
s = s + (B[y][k] * C[k][x]);
}
A[y][x] = s;
}
}
}
|
|
jeder macht also y/2 deer Matrix
Wenn ich mult1() und mult2() hinteinander aufrufe funktioniert es auch.
Wenn ich das aber nun mit vfork machen will, gehts wieder nicht
|
Code: |
Matrix A
0: 4 3 2 1
1: 5 4 3 2
2: 6 5 4 3
3: 7 6 5 4
Matrix B
0: 4 3 2 1
1: 5 4 3 2
2: 6 5 4 3
3: 7 6 5 4
Multipliziere Matrix A und B
0: 0 0 1374164672 16777216
1: 0 1375745624 0 0
2: 94 76 58 40
3: 116 94 72 50
Multipliziere Matrix A und B
0: -100927200 0 1389530640 -553639808
1: 1329016532 8871296 -162814044 -1281931516
2: 4 134520788 1582242968 134515190
3: 1374258263 1374594139 0 1375685670
Killed
|
|
http://nopaste.gwarg.de/47
Was mach ich falsch?
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von TriggerTG am 22.07.2008 16:04]
|
|
|
|
|
|
| Zitat von SkunkyVillage
40 Minuten noch zum Gratin. Hab mir sogar extra zwei Kumpels eingeladen. 1200g Kartoffeln kann ich nicht alleine essen.
| |
Selbstgemacht oder fertig-Kram?
|
|
|
|
|
|
|
| Zitat von Ashtray
| Zitat von SkunkyVillage
40 Minuten noch zum Gratin. Hab mir sogar extra zwei Kumpels eingeladen. 1200g Kartoffeln kann ich nicht alleine essen.
| |
Selbstgemacht oder fertig-Kram?
| |
Ersteres natürlich.
|
|
|
|
|
|
|
|
|
|
|
Übrigens ist Red Steel für die Wii ein geiles Spiel.
|
|
|
|
|
|
|
Was will mein Compiler hier von mir?
|
Code: |
triggertg@life-ends ~/studium/betriebssysteme/vorbereitung $ gcc -o u6a2 u6a2.c
u6a2.c:70:2: warning: no newline at end of file
/tmp/ccspTpxH.o: In function `main':
u6a2.c:(.text+0xf8): undefined reference to `pthread_create'
u6a2.c:(.text+0x119): undefined reference to `pthread_create'
u6a2.c:(.text+0x12c): undefined reference to `pthread_join'
u6a2.c:(.text+0x13f): undefined reference to `pthread_join'
collect2: ld returned 1 exit status
|
|
http://nopaste.gwarg.de/48
|
[Dieser Beitrag wurde 1 mal editiert; zum letzten Mal von TriggerTG am 22.07.2008 16:47]
|
|
|
|
|
|
Komisch, dass er sich nicht über die anderen pthread_* Methoden beschwert.
|
|
|
|
|
|
|
|
|
|
|
ach ich dussel, na klar!
Danke für den Hinweis
|
|
|
|
|
|
|
matrizen 0 : 1 triggertg
Jetzt das ganze nochmal mit OpenMP hinbekommen :X
|
|
|
|
|
|
|
Muss parallelisierung eigentlich generell so hässlig sein? Oder gibts da auch schöne Varianten von.
OpenMP sieht ja wenigstens halbwegs lesbar aus
|
|
|
|
|
|
|
Schreibt man in nen Lebenslauf noch die Religion rein wenn man sich gerade nicht beim Papst bewirbt?
Mein letzter ist von 2004, ich bin etwas aus der Übung
|
|
|
|
|
|
|
Ich würde sagen: Nein.
Ich würde sogar so weit gehen und sagen, dass die Punkte "Religion", "Eltern", und "Geschwister" sowie alle Schulbesuche vor (Fach)Hochschulqulifikation da nicht mehr rein gehören. Natürlich sofern es sich um eine Nicht-Ausbildungs-Bewerbung handelt.
|
|
|
|
|
|
|
Jup, genauso hab ich das bei meiner letzten auch gemacht. Es sei denn du bewirbst dich irgendwie bei ner kirchlichen Organisation.
|
|
|
|
|
|
|
Eltern und Geschwister hab ich schon länger raus. Sonst passt es auch nicht gut auf eine Seite und sieht scheisse auf zwei Seiten aus.
Religion ist raus. Sollte bei dem Job ja auch total egal sein wen ich anbete oder nicht ...
|
|
|
|
|
|
|
Bei Amazon gibt es übrigens im moment eine "Prime Account" Test. D.h. man kann für einen Monat umsonst die PrimeUser Features ausprobieren (und wenn man gleich in seinem Profil das "autoamtisch verlängern" deaktiviert, entstehen einem in keinem Fall Kosten). Das beste an diesen Features: kostenlose Expresslieferung.
Vorhin ein Buch bestellt, Lieferung morgen früh. Toll Sache
|
|
|
|
|
|
Thema: Gehirnsalat ( wir unter uns ) |