Problem mit Altes-hauptgebaeude.pgm

radix89
Mausschubser
Mausschubser
Beiträge: 66
Registriert: 13. Apr 2011 13:45

Problem mit Altes-hauptgebaeude.pgm

Beitrag von radix89 »

Hallo,

ich bin soweit fertig mit dem Praktikum und es funktioniert mit den Bildern Hachiko.pgm und apples.pgm.
Nur wenn ich Altes-haupgebaeude.pgm versuche, bekomme ich folgende Ausgabe:

./Praktikum2 Altes-hauptgebaeude.pgm
Ticks needed for the unoptimized C-Implementation 1977176340
Segmentation fault


Ich frage mich, warum dieses Bild nicht funktioniert, aber die anderen beiden tadellos durchlaufen.

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von mw1039 »

Hmmmm, sehr sehr schwer zu sagen. Ein segfault bedeutet eigentlich nur, dass du irgendwo eine Speicherverletzung begangen hast, also auf irgendwas zuzugreifen versucht hast, auf das du nicht zugreifen darfst. Kann es sein, dass du implizit in deinem Code Annahmen ueber die Beschaffenheit des Bildes hast, z.B. dass Bildbreite und -hoehe durch mehr als nur durch 4 ohne Rest teilbar sein muessen?

radix89
Mausschubser
Mausschubser
Beiträge: 66
Registriert: 13. Apr 2011 13:45

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von radix89 »

Für meinen ersten Filter muss die Höhe durch vier teilbar sein und die breite durch eins und für meinen zweiten Filter muss die breite durch vier teilbar sein und die Höhe durch eins. Das ist ja das seltsame. Das ist bei den drei testbildern ja der fall und zwei davon funktionieren davon tadellos.
Kann es daran liegen, dass das Hauptgebäude-Bild ein ganzes Stück größer ist?
Aber dann müsste ja die sse-copy aus dem template bei mir schon nicht funktioniert haben. Das hat Sie aber.

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von mw1039 »

Hmm, eigentlich sollte das Bild nicht zu gross, sein. Selbst wenn jeder Pixel 8 Byte verbraucht, waere das Bild nur gute 25MB gross. Schau dir mal an wieviel dein Programm an Speicher verbraucht oder versuch mal es zu debuggen.

studypad
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 158
Registriert: 30. Mär 2011 11:46

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von studypad »

Wir haben auch ein Problem mit dem altes-hauptgebaeude.pgm. Es funktioniert die c_sobel-Implementierung für apples und hachiko, jedoch nicht für altes-hauptgebaeude.pgm. Wir haben auch einen segmentation fault.. Vielleicht funktioniert dieses bild nicht recht.

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von mw1039 »

Das File sieht eigentlich in Ordnung aus und mit der Musterloesung des Praktikums laeuft es problemlos durch.

Eine Idee, die wir noch haetten, ist, dass du mit dem Eingabe- und dem Ausgabefile deine Quota ueberschreitest. Aber das hat sich bei uns auch anders geaeussert: Er schreibt dann das Ausgabefile nur bis zu dem Punkt, bis die Quota erreicht ist und ab da nichts mehr und gibt keinen Fehler aus.

Ohne eine detaillierte Fehlerbeschreibung koennen wir hier leider nichts machen.

radix89
Mausschubser
Mausschubser
Beiträge: 66
Registriert: 13. Apr 2011 13:45

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von radix89 »

Was für Angaben fehlen euch denn noch? Oder soll ich dir meine pr2.cpp zukommen lassen?

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von mw1039 »

Die Problembeschreibung (segfault), die wir (und deine Kommilitonen hier im Forum) bisher haben, um dir zu helfen, bedeutet so viel wie "Es gab einen Fehler." Aussagekraeftiger ist ein segfault leider kaum. Basierend darauf weiss man eigentlich fast garnichts ueber das Problem. Wie gesagt, du koenntest z.B. probieren das Programm zu debuggen und einzukreisen, in welcher Zeile der Fehler auftritt.

radix89
Mausschubser
Mausschubser
Beiträge: 66
Registriert: 13. Apr 2011 13:45

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von radix89 »

Wenn ich z.B. den teil, in dem Iy in asm berechnet wird auskommentiere, das quadrieren und wurzelziehen aber lasse. Bekomme ich folgende ausgabe:
Ticks needed for the unoptimized C-Implementation 1889862060
Ticks needed for the optimized SSE-Implementation 237094670
Segmentation fault

Nur bei Altes-hauptgebaeude. apples und hachiko laufen normal durch ohne den segmentation fault.
ABER: alle drei bilder liefern mir in c-das komplett gesobelte bild und in sse das Ix bild.
Hilft das vielleicht weiter?

radix89
Mausschubser
Mausschubser
Beiträge: 66
Registriert: 13. Apr 2011 13:45

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von radix89 »

Wenn ich apples um den faktor vier in jede richtung strecke, habe ich mit meinem normalen code dasselbe problem.
Wenn ich Altes-hauptgebaeude um den Faktor 2 in jeder richtung stauche, lässt es sich problemlos bearbeiten mit dem Praktikum.

Also ist das Problem wohl die größe des Bildes.

Woran kann es dann liegen, ich definiere keine neuen Arrays oder sonstiges, nur gelegentlich einen float oder int im C-Teil. Im asm-Teil lege ich keine neuen variablen oder sonstiges an.
Ich benutze dort auch nur ein paar der xmm register, eax, ecx, edi und esi.

radix89
Mausschubser
Mausschubser
Beiträge: 66
Registriert: 13. Apr 2011 13:45

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von radix89 »

Hab den Fehler gefunden...

@studypad:
Bei mir lag es daran, dass in asm die Schleife für jeden Filter zu oft lief. Keine ahnung, warum es dann bei apples und hachiko funktioniert hatte...

Thomas Huxhorn
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 6. Okt 2011 15:25

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von Thomas Huxhorn »

Habe auch ein Problem mit dem Bild. Er rechnet schneller als Einstein erlaubt ;)
./Praktikum2 ../../Altes-hauptgebaeude.pgm
Ticks needed for the unoptimized C-Implementation -1669876444
(32 Bit Rechner)

Thomas Huxhorn
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 172
Registriert: 6. Okt 2011 15:25

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von Thomas Huxhorn »

Es gibt auch noch ein Fehler im SSE Teil

Code: Alles auswählen

"movl %%ebx, %%ecx\n"                   // else copy the remainder into the count register
: : "S"(src), "D"(dst), "c"(len), "d"(rem) : "ebx");
Der remainder idelt aber in %edx rum und nicht in %ebx. Dieser Teilcode kommt aber mit den Beispiel Bilder garnicht zu Ausführung. Daher gabs wohl nie ein Fehler.

mw1039
Computerversteher
Computerversteher
Beiträge: 346
Registriert: 12. Apr 2011 12:18

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von mw1039 »

Thomas Huxhorn hat geschrieben:./Praktikum2 ../../Altes-hauptgebaeude.pgm
Ticks needed for the unoptimized C-Implementation -1669876444
Da ist der Counter uebergelaufen.
Das sind wahrscheinlich zwei voneinander unabhaengige Probleme:

1. So lange sollte der C-Code eigentlich nicht brauchen. ints fassen Zahlen von ca. -2 Mrd. bis +2 Mrd.. Die Musterloesung braucht 200 Mio. Ticks und benutzt keine haesslichen Tricks um die Laufzeit zu verbessern. D.h. du musst vielleicht nochmal ueber deinen Code drueberschauen, ob er nicht noch effizienter gemacht werden kann. Aber das ist nicht so wichtig. Der C-Teil soll hauptsaechlich implementiert werden um ein Verstaendnis fuer das Problem zu bekommen. Aber es waere natuerlich sinnvoll seine SSE-Variante gegen eine schnelle C-Variante zu vergleichen.

2. Im Coderahmen ist der Tick-Counter ein long long int, also mind. 64 Bit breit. Da sollte es eigentlich nicht zu einem Ueberlauf kommen. Das Problem ist wahrscheinlich printf. Probier mal an der Stelle, an der die Zahl der Ticks ausgegeben wird %llu statt %d zu benutzen.

Benutzeravatar
Ronny
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 133
Registriert: 18. Nov 2005 14:33
Wohnort: IGD

Re: Problem mit Altes-hauptgebaeude.pgm

Beitrag von Ronny »

Thomas Huxhorn hat geschrieben:Es gibt auch noch ein Fehler im SSE Teil

Code: Alles auswählen

"movl %%ebx, %%ecx\n"                   // else copy the remainder into the count register
: : "S"(src), "D"(dst), "c"(len), "d"(rem) : "ebx");
Der remainder idelt aber in %edx rum und nicht in %ebx. Dieser Teilcode kommt aber mit den Beispiel Bilder garnicht zu Ausführung. Daher gabs wohl nie ein Fehler.
Sie haben recht! Das ist leider ein Relikt aus einer aelteren(schwereren) Version der Aufgabenstellung.
Der Code wird aber sowieso nicht zur Loesung der Aufgabe benoetigt.

Antworten

Zurück zu „Archiv“