Zum Inhalt springen

Wodar Hospur

Mitglieder
  • Gesamte Inhalte

    497
  • Benutzer seit

  • Letzter Besuch

Beiträge von Wodar Hospur

  1. Hatte ich irgendwo schon einmal geschrieben, dass der Schwerpunkt innerhalb von 20-40 ECTS festgelegt wird, die in Wahlfächern zu suchen sind. Von 180!

    Btw. ein FH Bachelor kann auch gerne 210 ECTS haben.

    D.h. 140-160 ECTS sind Grundlagen, die in jedem Informatik-Studiengang gleich sind.

    Das ist übrigens falsch, jede Hochschule kann selber aussuchen was alles Pflichtmodule sein werden, welche verpflichtend sind und welche nicht, wichtig dabei ist nur, dass er akkreditiert wird. So kenn ich es z.B. von meiner Alma Mater, das im alten Info Bachelor Computer Graphik, Semantik, Compilerbau und Wissensbasierte Systeme verpflichtend sind, welches sowohl an der FU als auch im neuen Info Bachelor Wahlbereiche sind.

    Im Master hast Du i. d. R. ein/zwei Mathekurse, die zu belegen sind. Diese bauen auf den Bachelor-Grundlagen auf. Das könnte problematisch sein. Ich bin jedoch der Meinung, dass ich dann evtl. lieber das dazu notwendige Wissen für die Kurse nachpauke, als mich durch 180 ECTS Uni-Theorie zu prügeln. Vorausgesetzt, Dir geht es um den Abschluss und nicht um Wissenserwerb auf einem bestimmten Level.

    Wobei sich das Niveau und die Art des Kurses von einem Analysis 1 Kurs doch sehr unterscheidet. Wie weit es sinnvoll ist Wissen "nachzupauken" muss jeder für sich selber beantworten, gerade Beweisstrategien werden eher trainiert. Wobei Vorlesungen mit dem Schwerpunkt theoretische Informatik zwischen staatlichen Fachhochschule und Universitäten ähnlichen Stoff und Arbeitsweisen vermitteln werden.

    Ich habe die Uni genau deswegen gewählt. Ich wollte theoretisches Wissen, Praxis hatte ich durch den Job genug. Hätte ich das jedoch nur wegen dem Abschluss gemacht, wäre ich wohl eher an eine FH (wahrscheinlich sogar eine private, wenn ich mir den Stoff, das Lernpensum und die Klausuren eines Studienkollegen so ansehe). Anschließend Zähne zusammenbeißen und ab an die staatliche Uni. Ob man dann das so steil ansteigende Niveau würde bewältigen können, wenn man die 3 Jahre vorher Piano hatte, mag ich aber nicht zu beurteilen...

    Staatliche FHs nehmen sich vom Stoff her nicht viel zwischen Universitäten und Fachhochschulen, die Wissensvermittelung ist eine andere, z.B. gibt es dieses Konzept vom betreuten Programmieren nicht ;). Genauso wie die FU sich, von dem Stoff den ich bisher gesehen hab, nicht groß abgehoben hat.

    Der Threadstarter sollte sich lieber seine Arbeitsweise ansehen und es nicht vom Niveau abhängig machen. Denn mit der falschen Einstellungen kann man sowohl an Universitäten wie auch an Fachhochschulen scheitern.

  2. Nach der Bologna Reform muss dir der Zugang zu einem konsekutiven Master möglich sein. Die Universität kann allerdings trotzdem bestimmte zusätzliche Vorlagen dir auferlegen, z.B. Vorlesungen im Bereich der Mathematik oder theoretischen Informatik nachzuholen.

    Die inhaltlichen Änderungen sind da, sind allerdings auch zwischen Universitäten gegeben, z.B. unterscheiden sich die Computergrafik I Vorlesungen zwischen Siegen und München auch erheblich.

    Naja, die Frage ist ob du entweder eine Sachbearbeiterin hast, die beide Augen zusammen kneift, oder die Einschreibungsunterlagen nicht genau prüft. Wichtig dabei auch die Frage, was tust du, wenn die Universität dich nicht immatrikulieren lässt?

    Außerdem heißt ein Wechsel der Hochschule auch ein Wechsel des sozialen Umfeldes. Das ist nicht zu unterschätzen, gerade an einer Universität (FU ausgenommen) sind Lerngruppen, Projektgruppen sehr wichtig, in Hinsicht auf Motivation und Erfolg. Du findest natürlich auch bei einem Wechsel mitten im Studium Anschluss, leichter ist es aber jeweils am Anfang.

  3. Universitäten in NRW lassen teilweise auch Studenten nur mit FH - Reife sich einschreiben.

    Ein Wechsel selber wird wohl wenn nur mit viel gutem Willen der Universität möglich sein, mit anschließender Zitterpartie bis zum Abschluss.

    Ansonsten natürlich die Frage, wieso Universität und nicht Fast... ups Fachhochschule ;)?

  4. Das is ABSOLUTER Quatsch. Sofern du dich für eine Vollzeit Studiengang einschreibst darfst du unter keinen Umständen einen Nebenjob annehmen, bei dem du mehr als 20 Stunden die Woche arbeitest. Falls das jemand doch tut und die Uni erfährt davon, droht dir die Zwangsexmatrikulation.

    Das ist aber auch Quatsch, du verlierst deinen Status als Student gegenüber Versicherungen, das war es. Mir ist keine Universität bekannt die solche Regelungen in ihren Prüfungsordnungen drin stehen hat.

    Ich kann aus Erfahrung sagen, dass du als Informatik-Student relativ problemlos 800-1000 Euro im Monat (netto) mit einem Nebenjob verdienen kannst - und das sollte für ein einfaches Studentenleben reichen.

    Vorsicht, die meisten Studenten, die außerhalb der Uni jobben (denn 800-1000 € netto sind nicht als SHK möglich), schließen ihr Studium mit "etwas" Verspätung ab, gerade wegen der Doppelbelastung und du bist bereits 30.

    Außerdem ist gerade die Anlaufzeit nicht zu unterschätzten, wenn du ein Info Studium anfängst, sind die ersten 3 Semester meistens die härtesten, da sollten dann Nebenbelastungen (mehr als 20 Stunden arbeiten) vermieden werden.

  5. Dazu fällt mir folgendes Video ein:

    Mit Algorithmen aus der KI könnte mit genügend Datenmaterial vielleicht sogar ein halbwegs zuverlässiges extrahieren von 3D Informationen aus Bildern helfen.

    Das wird allerdings dir nicht helfen, weil du nur deine 2D Struktur besitzt.

    Btw. die Idee mit einer festen Tiefe für alle 2D Objekte ist ziemlich abwegig, da kein Nutzen vorhanden ist.

  6. Also ich hab mir deine Doku mal angeschaut. Tut mir leid, das ist einfach nichts. Sowas zeigt nicht das du dem Berufsbild eines Informatikkaufmanns gewachsen bist...

    Wieso hast du die Rechner ausgewählt, deine Kriterien sind zwar ganz nett, aber es gibt keine Details, wieso wurde dem Kunden kein Leasing für die Rechner angeboten, gerade bei einer Kostengrenze?

    Was hast du dem Kunden in Rechnung gestellt, wie hoch ist dein Stundenpreis, was ist deine Kalkulation? Hat sich der Auftrag für dich gelohnt? Wie viele Stunden hast du fakturiert? Du bist Kaufmann... wo bleiben diese ganzen Aspekte, die gehören nicht nur in den Anhang, sondern auch in den aktiven Teil der Dokumentation.

    Außerdem willst du auch noch Informatik- und nicht Bürokaufmann sein, ganz ehrlich, der Informatikanteil ist ein Witz. Du stellst 2 Rechner auf, auf die du Software installierst, wieso? Du sagst nicht was für Rechner du jetzt wirklich mit welcher Ausstattung dem Kunden empfiehlst. Deine Auswahl des Monitors und des Laserdruckers ist ein WITZ. Die Verkabelung und Konfiguration mit Testen... Du brauchst also anderthalb Tage! um die Rechner auszupacken, anzuschließen, 4 Programme zu installieren und den Drucker zu konfigurieren... Von den 2 Stunden um diesen Netzplan zu zeichnen oder den VIER Stunden schwafeln mit dem Kunden mal ganz zu schweigen.

    Btw. ist das wirklich dein Literaturverzeichnis... und bei deiner Zielerreichung, ich glaub ich hab immer noch Holzsplitter zwischen den Zähnen...

    Schau dir bitte 10 - 20 gute Dokumentation an und such dir dann ein Thema mit Tiefgang ODER aber bring selber Tiefgang rein. Vergiss aber nicht, in deiner späteren Berufsbezeichnung soll auch Informatik vorkommen... Also solltest du was von der Materie verstehen, was IMHO nicht durch Sätze wie:

    Der Drucker soll unbedingt eine Netzwerkfähigkeit aufweisen und ein Farblaserdrucker sein, da diese Art von Druckern eine hohe Druckgeschwindigkeit besitzen und vergleichsweise niedrige Druckkosten aufweisen.

    oder

    Die Bildschirme weisen beispielsweise eine matte, entspiegelte Oberfläche, sowie ein TCO-Gütesiegel auf. Letzteres zeichnet sich u.a durch eine hohe Bildschirmqualität und Farbausgabe sowie einem niedrigen Energieverbrauch aus.
    geschieht.
  7. Lustig wie sich die Welt nach einem Jahr verändert hat. Ich habe ein Praxissemester bei der IBM gemacht und arbeite jetzt als voller Mitarbeiter in einem Bereich der mich wirklich interessiert.

    Leider nicht in Hamburg, aber dank dieses Internets und eines gut ausgebauten Fernverkehrs alles nicht ganz so tragisch.

    Aus meiner Erfahrung, es muss nicht Master sein, aber mindestens Bachelor, der Unterschied ist finanziell nicht so groß und Forschung und Entwicklung geht auch, nur ist die Dr. Dichte schon sehr hoch, das merkt man auch bei technischen Diskussionen, was mir persönlich sehr gefällt.

  8. Bitte sag mir es gibt keinen solchen Kunden.. Wenn ich das richtig verstehe zählst du viele Standardprobleme auf und versuchst dann mit der Installation von Standardsoftware diese zu lösen. Wenn du sowas durchbringen willst, muss imho das ganze viel eher aus der Projektseite angegangen werden.

    Verglichen mit anderen Projekten ist es technisch recht schwach, bzw. wenn müsstest du den Fokus verschieben imho.

    Vielleicht im Sinne von:

    xxxxx wird ab sofort als Service Unternehmen die komplette IT Sicherheit des Unternehmens xxx übernehmen.

    Dies erfolgt in Form eines Pilotprojekts, wo besonders Wert, auf die Wiederverwendung der Lösungen für weitere Kunden gelegt wird.

    Basierend auf einer Vorabanalyse wurden folgende Bereich als problematisch eingestuft:

    - Backup

    - Virenschutz

    - Integrität und Vertraulichkeit der Daten

    In diesem Projekt sollen jetzt für die jeweiligen Bereiche Konzepte erarbeitet werden, dafür wird erstmal eine komplette Bestandsaufnahme gemacht um anschließend die Möglichkeiten zu evaluieren.

    Projektablauf:

    - Bestandsaufnahme (Welche Geräte, Welche Daten, Welche Firmenabläufe, Haftung, Datenschutz?)

    - In Absprache mit dem Kunden Erstellung eines Anforderungsprofils (SLA?)

    - Schriftliche Ausformulierung für den Kunden

    -> 6-8 Std.

    - Evaluierung der Backup Lösungen

    - Systemweit, nur Daten, Recovery Fall

    - Recherche möglicher Lösungen (On-Site, Off-Site, zentral, dezentral, Cloud)

    - Auswahl der geeignetsten Variante und vorbereiten zweier Angebote (Basic und Premium)

    -> 8 Std.

    - Evaluierung einer geeigneten Antiviren Lösung, vor allem für die mobilen Arbeitsplätze (Haftung?)

    - Ursache bisheriger Infektionen ermitteln

    - Vorschlag für eine modifizierte Firmenpolicy (kein Porn) erstellen

    - Berechtigungskonzept erstellen um Schaden zu minimieren (nicht Admin, Bildschirmschoner...)

    - Software auswählen und vorbereiten für ein Angebot

    -> 6 Std.

    - Evaluierung einer geeigneten HDD-Verschlüsselung

    -> 4 Std.

    - Wieso signierte E-Mails, wer ist bisher der Mail Provider?

    Planung einer Migration ohne Produktionsausfall, Erstellung einer Kosten/Nutzen Analyse für das anbietende Unternehmen (was kann alles fakturiert werden, welche zukünftigen Projekte sind zu erwarten?)

    Kosten/Nutzen Analyse für den Kunden, wann, wieso, weshalb?

    -> 4 Std.

    - Angebot finalisieren

    - Zusammenfassen des Ablaufs und der Erkenntnisse in der Projektdokumentation

  9. Dst ja das große Problem!

    Ausser dem Logeintrag über das Senden an den Empänger (was tadellos funktioniert) gibt es keine weiteren Meldungen.

    Keine Meldungen über den Versand an die Bcc - Adressen..

    Disclaimer: es ist schon länger her... Also bitte durch Querlesen der RFCs kontrollieren.

    Bei SMTP sind die BCC Adressen kein Bestandteil des Headers, immerhin sind es ja Blind Copies, die Idee ist dabei stattdessen im SMTP Protokoll TO richtig zu setzen.

    Wenn du also das SMTP Protokoll selber implementiert hast, entsprechend ändern, wenn nicht schau dir die genutzte Bibliothek an.

    Wenn alles nichts hilft, entweder per netcat einen transparenten Proxy bauen oder einfach alles mitsniffen.

  10. Zum Thema, ich würde glaub einfach nicht zum Nachsitzen erscheinen und es so eskalieren lassen. Denn während der Unterrichtszeiten ist zwar der Lehrer dir Weisungsbefugt, aber das hört ja mit dem Unterrichtsende auf.

    Was sind die Optionen des Lehrers und der Schule (wenn sie hinter ihm steht):

    - Dir versuchen schlechtere Noten zu geben (schulisch wie auch in der IHK Prüfung)

    - Eine Eintragung auf dem Zeugnis (Kopfnoten?) -> anfechtbar

    - Direkter Kontakt zu deinem Arbeitgeber

    - Ausschluss vom Unterricht -> anfechtbar

    Während meiner BS Zeit gab es auch einen imho unfähigen Lehrer, habe versucht irgendwas dagegen zu machen... da war keinerlei Interesse da und gleichzeitig bin ich, das Fach wurde zu zweit unterrichtet, einem anderen Lehrer noch auf die Füße getreten. Dieser war netterweise dann in meinem IHK Projekt auch noch Vorsitzender, hat sich allerdings sehr professionell verhalten...

    Steck nicht zu viel Mühe rein, schreib deinem Chef eine E-Mail mit deinem Vorhaben und sichere dich von der Seite aus ab und sonst tu nichts mehr.

  11. Ein Vector wäre hier wahrscheinlich völlig deplaziert... würdest du wissen wie ein vector funktioniert dann würdest du mir zustimmen wenn ich sage vorne einfügen ist der worse-case..

    da er den gesamten vector um ein template des inhalts verschiebt.. ggf. neuen speicher allokiert und das halt sehr sehr langsam ist wenn er alles umkopieren muss etc..

    Was ich dir raten würde wäre eine dequeue empfehlen oder wenn du immer nur auf das letzte eingefügte Element zuerst zugreifen willst einen stack ;)

    Interessantes Paper zu diesem Thema, denn dein Tipp sollte kritisch hinterfragt werden. Die Indirektionen, durch verkettetet Elemente, können dich schnell viel mehr Zeit kosten, als, vor allem wenn die Daten noch im Cache sind.

    schreib dir eine methode in der du auf deine liste zugreifen kannst wie auf eine map :) ist nicht so schwer

    Mit einer eigenen Hashing Funktion, gibt bestimmt leichtere Aufgaben.

  12. Es geht hier nicht um Atomarität eines Zustandes. Es geht um die Übergangsfunktion, denn damit ist impliziert, dass zu einem Zeitpunkt nur ein Zustand vorliegen kann. Ich verweise auf Endlicher Automat in "Das mathematische Modell"

    auf Transitionsrelation

    dann zu http://de.wikipedia.org/wiki/Relation_(Mathematik)

    und dann auf http://de.wikipedia.org/wiki/Funktion_(Mathematik)

    Dies impliziert, dass wenn ich mich in einem Zustand der "Software" / Automaten befinde, genau in einen anderen Zustand bei Ausführung einer Transitionsrelation übergehe. Träfe die Annahme zu, dass mehrere Zustände existieren würden, dann würde dies der Definition der Funktion u. a. widersprechen

    Schade das du den Beitrag von mir nicht mal gelesen hast, bzw. muss ich das durch deine Antwort annehmen. Ich kenne die mathematischen Definitionen. Diese sind doch gar nicht Gegenstand der Diskussion. Es geht um eine SWT Modellierung, die relevante Beschreibung ist nicht der DEA sondern wenn die UML 2 Zustandsübergangsdiagramme und dort der Automat. Mit der Möglichkeit einer Hierachie.

    Hier kurz die Punkte wo ich darauf eingehe, warum leider dein letzter Beitrag nichts relevantes beiträgt.

    Es geht nicht um den Determinismus, bzw. die Eindeutigkeit des Zustands.

    Diese Annahme hast du selber, mit deiner, vielleicht wissentlichen, Fehlinterpretation der Aussage getroffen. Es geht doch gar nicht darum, dass auf einer Modellierungshierachie, zwei Zustände in der gleichen Region tätig sein können. In meinen Augen geht es um die Sichtbarkeit der Attribute in z.b. einem so modellierten DEA.

    Außerdem natürlich beziehe ich mich auf ein Modell. OO ist ein Modell. Die reine Definition von einem DEA bringt hier nichts
  13. Seit wann ist ein Zustand eines Objektes etwas hierarchisches, mir wäre es neu wenn in einem ea in einem Zustand eine Hierarchie existieren würde. Es gibt so etwas in machen Modellierungssystemen, aber von der Definition des ea gibt es keine Hierarchie.

    Softwaretechnik I und weitere...

    Rein von der Definition eines EA spricht aber auch nichts dagegen, da es explizit nur gesagt wird es gibt eine Menge von Knoten, ein Eingabealphabet, eine Übergangsfunktion, einen Startknoten, eine Menge von Zielknoten. Dort wird afaik nicht erwähnt das ein Knoten atomar sein muss. Ich kann also die Komplexität meines Automaten selber steuern. Das heißt ich könnte also eine direkt verbundene Gruppe von Zuständen, durch ihre Übergangstransitionen kapseln. Außerdem natürlich beziehe ich mich auf ein Modell. OO ist ein Modell. Die reine Definition von einem DEA bringt hier nichts :D.

    Das ist kein Zustand, sondern ein View. Der Zustand ist hier gleich, denn ich verändere diesen ja nicht, ich verändere die Sicht auf das Objekt.

    Es gibt einen öffentlichen und privaten Teil des einen Views? Es gibt 2 Teile eines Views?

    Ich finde die Definition es gibt 2 Sichten (Views) und eine Menge der sichtbaren Attribute oder eine Transformationsfunktion verständlich. Für mich als Benutzer eines Objektes, hat dieses einen Zustand. Wenn ich diesen beschreibe, muss der nicht mit dem übereinstimmen wie der Entwickler des Objektes ihn beschreiben würde. Das endet übrigens in Haarspalterei.

    Man kann hierarchische Zustände modellieren, das ist ein Modellaspekt, aber wenn ich das Modell in Code transformiere, compiliere und ausführe, dann kann ein Objekt, was letztendlich durch einen Speicherbereich im realisiert wird, zu einem Zeitpunkt keine zwei Zustände haben, denn letztendlich kann in der Speicherzelle nur eine 1 oder 0 stehen (mal abgesehen von der technischen Umsetzung).

    OOP beschreibt ein Modell der Programmierung, die ganze Diskussion wird überflüssig wenn du auf de Level abdriftest. Denn dann bleiben wir bei, ld, st und paar Rechnereien. Btw. wie würdest du dann TLS beschreiben? Gibt es dann einfach mehrere Ausführungen von einem Objekt?

    Auch das ist eine Modellierung, wenn ich mir einen Knoten des Netzgraphen anschaue, dann ist ein Zustand eindeutig. Denn um zu einem bestimmten Knoten zu gelangen muss ich anhand der Daten und der Übertragsfunktionen die Übergangsfunktion berechnen, damit ich in den Zustand wechseln kann. Es kann auch in einem Petrinetz nicht sein, dass die Übertragungsfunktion für gleiche Eingaben unterschiedliche bzw. widersprüchliche Ausgaben liefert.

    Diese Annahme hast du selber, mit deiner, vielleicht wissentlichen, Fehlinterpretation der Aussage getroffen. Es geht doch gar nicht darum, dass auf einer Modellierungshierachie, zwei Zustände in der gleichen Region tätig sein können. In meinen Augen geht es um die Sichtbarkeit der Attribute in z.b. einem so modellierten DEA.

    Ich kann diese ebenso in neuronalen Netzen sehen, denn wenn ich in das Netz Daten hineingebe und das Netz iteriere, dann hat jede Kante und auch jeder Knoten zu einem Zeitpunkt einen Zustand, d.h. bei einem neuronalen Netz, dass z.B. ein Neuron zu einem Zeitpunkt t genau einen Bias, eine Berechnungsfunktion und einen Gewichtsvektor hat. Es kann nicht vorkommen, dass zu einem Zeitpunkt t, 2 verschiedene Werte für den Bias an ein und dem selben Neuron anliegen, weil in diesem Fall wäre nicht klar, wie damit umzugehen ist.

    Es geht nicht um den Determinismus, bzw. die Eindeutigkeit des Zustands.

    Wenn ich z.B. f(x) = 5*x habe, dann kann ich für die Eingabe f(3) nicht 15 und 20 raus bekommen. Natürlich kann man bei der Abbildungsfunktion Surjektivität zulassen, aber das würde dann f(x)=x^2 entsprechend.

    Öhm, ein Automat der nicht surjektiv ist, ist generell nicht optimal, da er Zustände beinhalten würde die nie erreicht werden. Wenn du die Mächtigkeit der akzeptierenden Zustände auf 1 beschränkst, wirst du sogar sehr häufig den Effekt haben, dass ein Knoten über mehr als eine Transistion erreicht werden kann. Aber ist das wichtig?

    Rein formal nicht zwingend, denn ich Moore in Mealy (vice versa) überführen. Wenn es nach der Definition 2 Zustände geben würde, dann könnte es zu einem Moore Automaten zwei unterschiedliche Mealy Automaten geben (vice versa). Mir ist kein Beweis bekannt, der dieses inhaltlich belegen könnte

    Kannst du, wenn du beide Definitionen kennst ;).

    Aber interessanter ist ja das Verhalten an den Übergängen, afaik wird in UML 2 bei den Zustandsautomaten darauf eingegangen wo die Aktion, durch die Transistion getriggert wird ausgeführt werden soll und mit ihr auch eine Blockierung stattfindet.

  14. Wäre es möglich mehrere Zustände eines Objektes zur gleichen Zeit zu haben, dann könnte man in der OOP keinen deterministischen Algorithmus entwickeln und das widerspricht ja nun mal der Realität. Für den Betrachter kann natürlich das Objekt nach außen anders aussehen aber der Zustand in den Fällen kann gleich sein.

    Er spricht doch erstmal gar nicht von mehreren Zuständen sondern von Unterzuständen und deren Beobachtbarkeit.

    Naja, was sind denn dann bitte zusammengsetzte Zustände (teilweise autark). Damit kannst du genau das beschriebene modellieren. Das Zusammensetzen von Zuständen widerspricht doch gar nicht dieser Modellierung.

    Außerdem was würdest du dann in einem Aktormodel machen das ähnlich einem Petrinetz organisiert ist. Außerdem musst du explizit Mealy und Moore Automaten unterscheiden...

    Deswegen, was er beschreibt mit der Kapselung und dem Information Hiding ist richtig.

    Ja OOP beschreibt sich vor allem durch die explizite Zusammenfassung aller Daten und ihrer Funktionen zum Manipulieren in feste Blöcke mit verständlichen Metaphern. Polymorphie findet auch in der funktionalen Programmierung statt und Vererbung heißt ja erstmal nichts anders als du bildest Obermengen an Funktionalität und Daten.

  15. Du implizierst, dass Programmierer das entsprechend umsetzt.

    Warum sollten sie es sonst mit Assembler umsetzen? Ist irgendwie ein Henne-Ei Problem oder? Aber deine Kernaussage war, es wäre Unsinn das mit Assembler zu schreiben.

    Du hast beim Benchmarking eine Güte, nämlich ist der eine Algo schneller als der andere, das ist ein Gütemaß, denn es impliziert Ti < Tj (Stichwort Cauchy-Schwarzschen Ungleichung bzw Dreiecksungleichung)

    Du hast sogar ne Metrik dadrauf, worum es mir geht ist das er keine Komplexität/Laufzeitklassen Analyse macht!

    Gaußsches Eliminationsverfahren

    Mein Fehler, Gauß ist O(n^3) und LU O(2/3 * n^3). Also nach Deiner Meinung ist das irrelevant !? In diesem Fall würde ich Dich bitten einmal zu überlegen, wenn Du eine DGL mit Hilfe von FEM löst, wie groß die Gleichungssysteme werden können z.B. bei einer Navier-Stokes-Gleichungen.

    Der Faktor spielt real eine erhebliche Rolle und genau dieser soll ja hier bei AES durch eine Messung ermittelt werden

    Naja, es gibt doch hier die Möglichkeit per Konditionierung ein Gleichungssystem vorzubereiten und afaik konntest du doch auch auf LGS das Newton-verfahren anwenden und was weiß ich nicht alles ;). Ich würde ja im Stummel-Hummel Buch reinschauen, aber neee.. ;)

    Ja, also bei n=100 000

    heißt n^3 = 100000 * 100000 * 100000 und ob es jetzt 100000 * 100000 * 10000 heißt macht einen Unterschied. Aber n^2 wäre wohl besser ;).

    In diesem Fall interessiert der oben genannte Faktor und die daraus resultierende Güte

    Natürlich interessiert mich die Geschwindkeitsveränderung. Aber nicht vom Modell sondern von der Realisierung.

    Der theoretische Teil wäre die entsprechende Äquivalenzklasse, die Praxis der konstante Faktor, denn aufgrund dessen kann man dann den Schluss auf die Güte für diesen Testfall ziehen.

    Okay, schon eher, wobei ich nicht davon ausgehe das die Klasse sich durch die Instruktion ändern wird.

    Nein geht es nicht! Es geht darum zu überprüfen ob die AES Befehlssätze einen Performanceboost bringen und wenn ja welchen. Wenn man "nur" einen CPU benchmarken will, dann nehme ich die Dokumentation des Herstellers, denn der macht so etwas.

    Genau du benchmarkst die AES Instruktionen. Vorsicht, liegt zwischen Kernelbenchmark und synthetischen Benchmark. Funktion -> Instruktionssatz...

    Bsc sind 6 Semester, evtl mit 1-2 Veranstaltungen zum Programmieren, aufgrund von vielleicht 2 Veranstaltungen zu sagen "man kann programmieren", ist wohl doch etwas gewagt.

    Abhängig der Hochschule. Aber ich erwarte das jemand in seiner Bachelorarbeit eine Referenzimplementierung runterarbeiten kann. Um ehrlich zu sein, ein guter FIAE sollte das können.

    Man braucht ein Maß, um beurteilen zu können, ansonsten ist das Ergebnis nicht interpretierbar, denn ich kann nicht sagen, nur weil z.B. Implementierung a 4sek braucht und die andere 8sek, dass die eine Implementierung halb so schnell ist wie die andere. Hier wird ein realer Testfall konstruiert und da sollte man dann doch für die Messung die DIN 1319 beachten und vor allem das Normal

    Deswegen wäre der Benchmark wahrscheinlich auch synthetisch, denk ich. Naja, du kannst R nehmen und einfach den Abstand. Metrik und so ;). Du kannst auch R^2 nehmen und den Euklid, weil du Zeit und Speicher nimmst, ... du könntest auch R^3 nehmen und den Energieverbrauch und Manhatten. Was er da macht ist spezifisch und für uns unwichtig.

    Zweitens muss ich aber auch betrachten wie stark sich die Quellcodes unterscheiden z.B.

    
    for i in 1 to 10
    
         x += a(i)
    
    
    unterscheidet sich deutlich von
    
       x = a(1)
    
       x = x+a(2)
    
       ...
    
       x = x+a(10)
    
    

    Wenn ich also zwei Quellcodes benchmarken will, dann muss ich auch in irgendeiner Weise festlegen, wie unterschiedlich diese Codes sind ( Softwaremetrik ).

    .. Ja kannst du, wenn es dir um eine Leistungsbewertung geht musst du es aber auch nicht machen. Es ist immer schön das gesamte Bild im Auge zu haben, aber wenn er nur zeigen soll X schneller als Y braucht er auch keine Softwaremetrik.

    Übrigens ich glaube wir sind weit vom eigentlichen Thema abgekommen :). Wenn du willst führen wir das fort, aber dem TE hilft es nicht wirklich.

  16. Natürlich, da müsste ich mich jetzt bezüglich AES einlesen, wie, was, wo und wie viele Daten er während der Ausführung hat. Denn je nachdem ob ich als Bsp zwei Vektoren per Schleife zu einem Skalar umrechne oder das via Pipelining oder vielleicht sogar in einer Operation machen kann, wäre ja dann durchaus extrem für die Messung.

    Genau mein Punkt, der Compiler optimiert für den allgemeinen Fall, nicht für den speziellen. Daher kann in so einem Fall, Hand erzeugter Assembler sehr wohl schneller sein.

    Das sehe ich nicht so, denn im ersten Posting stand:

    Laufzeit ist unabhängig vom konkreten System.

    Kommt auf deine Betrachtung an, willst du die Laufzeit in Zyklen wissen oder interessiert dich eine Laufzeitklasse, bzw. Güte. Nach seinen Antworten hier zu schließen geht es wohl weniger um die Klasse und Güte als um wirkliches Benchmarking.

    Ich habe dazu gerade ein Paper von Intel (vom letzten Jahr), da wurde Amdahl bezüglich der Performance bei Hyperthreading benutzt. Da wäre ich vorsichtig, denn so wie ich jetzt beim Überfliegen der AES Befehlssätze gesehen habe, sind dieses ja "Funktionen" evtl müsste man dabei berücksichtigen, dass sie intern doch hardwareseitig parallelisieren. Gerade bei Summen- / Multiplikationsketten wird das definitiv gemacht.

    Puh, schwer zu beurteilen, immerhin ist ja HT doch mehr was da aufgesetzt wird, wahrscheinlich mit verschiedenen PSW und so... aber naja, das kann und muss in so einer Arbeit natürlich versucht werden zu beleuchten.

    So würde ich das auch sehen, natürlich könnte man hier auch argumentieren, dass man diesen Unterschied beim Pipelining evtl als "vernachlässigbar klein" setzt, aber ohne da konkrete Infos zu haben, würde ich davon nicht ausgehen.

    Das meinte ich nicht, denn ich glaube gerade bei AES kann durch forwarding und das vermeiden von Stall Zyklen besondere Effekte aufs Pipelining passieren, die wirklich Performanz bringen. Aber das ist ja gewollt.

    Gibt es, gibt es bei den CPU Herstellern Tabellen zu, wenn man es sehr genau machen will (gerade im Embedded Bereich). Ansonsten schätze ich ab, a+b wäre O(1), wobei dann eben sum(a_i) = n*O(1) wäre. Das mit den Skalaren ist aber wirklich zu beachten, ganz klassisch beim Lösen eines LGS: Gauß-Algorithmus ist O(n^3), man bekommt zwar nicht aus dem n^3 raus, aber mit numerischen Verfahren kann man bis zu O(1/6 * n^3) kommen, was ja durchaus schon bemerkbar ist.

    Kommt auf deine n an, würde ich behaupten, Ob etwas 160 Jahre oder 10 Jahre läuft, beides ist nicht i.O. Wobei ich dachte für Gauß gäbe es was besseres, aber Numerik war nicht mein stärkstes Fach.

    Ich denke in Bezug auf den Thread wird genau das der Punkt sein, d.h. AES an sich wird von der Laufzeit fix sein, d.h. der Faktor wird sich durch den Befehlssatz verändern.

    Was ja für Kernel Benchmarking GENAU das ist was du willst.

    AES benutzt einen symmetrischen Key, der letztendlich auf einem Pseudozufallsgenerator basiert

    Symmetric-key algorithm - Wikipedia, the free encyclopedia

    Sollte aber generell aus der Messung heraus genommen werden, gerade Verfahren wie z.B. Mersenne-Twister sind durchaus rechenintensiv.

    Und haben mit der eigentlich Aufgabe der Funktionen, ver- und entschlüsseln nichts zu tun ;).

    Das ist klar. Die Frage ist nur, wenn man jetzt AES selbst in den genannten Varianten implementiert, dann wäre ja direkt die Frage sind diese beiden Codes nachher überhaupt gleich !? Denn nur weil sie das gleiche liefern, müssen sie nicht gleich sein (Stichwort Halteproblem)

    Außerdem halte ich AES zu implementieren für nicht trivial, so dass hier sicherlich ein "großer Ungenauigkeitsfaktor" hinzu kommt.

    Ausreichend viele Tests sollten das verifizieren können, gerne mit Äquivalenzklassen. Meiner Meinung liegt in dieser Arbeit eine Ingenieurleistung vor. Weniger der Versuch eine bestimmte theoretische Eigenheit zu beweisen..

    Die Implementierung von AES ist glaub ich recht trivial (es gab einen Artikel auf heise wie du es embedded machen kannst). Die kryptographischen Bedeutungen da mal rausgelassen.

    Er benchmarket/d "seine" Implementierung auf "einem" System. Worst-case Szenario die AES Implementierung ohne neuen Befehlssatz läuft schneller als mit dem neuen Satz (weil evtl Übergaben / Rückgaben ändern muss). Ich denke nämlich nicht, dass es einfach mit dem Austausch von einzelnen Befehlen getan ist.

    Naja, wenn er alle Faktoren rausnimmt die das "eine" System besonders machen. Es geht darum die Funktion einer CPU zu benchmarken.

    Wenn die Implementierung wirklich langsamer sein sollte ist es nur ein Zeichen, dass er nicht in der Lage war die Dokumentation richtig zu lesen.

    Gerade den letzten Punkt sehe ich da durchaus, denn es ist a) nicht sichergestellt wie der Code aufgebaut ist (gerade einem Programmieranfänger unterlaufen da oft sehr viele Probleme, d.h. die Implementierung ist nicht repräsentativ) und B) welchen fachlichen Schluss kann ich aus den gemessen Daten ziehen!? Die Aussage "es läuft mit dem neuen Befehlssatz schneller" kann man so nicht ziehen, denn neben dem Befehlssatz muss sicher gestellt sein, dass die Codes "hinreichend identisch" sind.

    Er ist kein Anfänger, er ist beim Abschließen seines Studiums und wird sich nicht ohne Grund diese Bachelorarbeit gesucht haben.

    Aus den Daten kannst du sagen: die Referenzimplementierung von AES ist gegenüber einer Implementierung mit den neuen Funktionen von Intel Faktor x langsamer. Dies gilt für den isolierten Versuch und sollte vielleicht unter moderater Last eines Betriebssystems wiederholt werden. Um einen Alltagswert zu erreichen, mehr siehe unten.

    DIe zentralen Fragen, die ich stellen würde, wären:

    - Wie repräsentativ ist der Code z.B. zu gängigen Implementierungen

    - Wie kann sichergestellt werden, dass die Codes gleich sind

    - Wie kann sichergestellt werden, dass die gemessenen Daten korrekt sind

    - Deswegen soll er es ja nicht komplett selbst entwickeln (AES gibt es bestimmt mit ner Referenz)

    - Tests, Daten überprüfen (Software-engineering)

    - Darstellen des Versuchaufbaus mit genauer Beschreibung der Messungen. So können dann andere den Versuch nachstellen oder fundamentale Fehler in der Berechnung finden.

    Natürlich kann man abschließend Messdaten bereinigen, aber dann ist die Frage "wie" man das macht. Wenn die Bsc Arbeit heisst "schreibe einmal AES mit und einmal ohne neuen Befehlssatz", dann ist das kein Problem. Wenn es hier aber um einen Benchmark geht und daraus ein Ergebnis abzuleiten, da sehe ich doch wirklich große Probleme (wobei ich nicht zwingend etwas allgm. gültiges erwarten würde).

    Ich nicht, du suchst einen Korrektheitsbeweis den es bei sowas imho nicht geben kann. Bzw der bei der Betrachtung aller Faktoren den Rahmen sprengt.

    Wie ich schon sagte geht es, unter Umständen mit gewissen Einschränkungen, die von der Leidensfähigkeit des Umsetzenden und gegebenfalls hardwareabhängig sind.

    Natürlich hardwareabhängig, er testet/benchmarkt eine Funktion der CPU. Ich glaube so aufwendig wird diese Arbeit nicht, eine durchschnittliche Bachelorarbeit ist mit 360 Std. angesetzt.

    Was mich daran erinnert, ich sollte noch was tun ;).

    Letztlich muss er aber nicht zwingend ein eigenes OS schreiben, es kommen existierende Betriebssysteme (bzw. -versionen) in Betracht, wenn es zunächst nur darum geht Unterbrechungen durch den Task-Scheduler zu verhindern.

    Er braucht kein Paging und keine komplexe IO und Schedulen will er gar nicht. Bei einem bestehenden OS muss er alle Interrupt Handler austauschen um sicher gehen zu können, das nichts seine Messung kaputt macht.

    Na und? Wenn man jedes Detail betrachten will, kämen noch andere Ursachen für (minimalste) Laufzeitschwankungen in Betracht, von der Schwierigkeit eine kurze Zeitspanne exakt zu messen einmal abgesehen.

    Das muss er natürlich in seinem Testsetup berücksichtigen, z.b. in dem er genügend Runden AES macht. Natürlich soll er jedes Detail betrachten, auch z.B. den Initalaufwand der bei beiden Implementierungen vorhanden ist, (Daten vom Speicher in die Caches bewegen z.B.). Das kann aber durch viele Verzögerungen sich verändern. Außerdem könnten die Verzörgerungen dafür sorgen dass ein komplett anderes Ergebnis rauskommt:

    - AES-NI Funktion lässt sich nicht unterbrechen sondern rechnet die Runde immer fertig

    - Die Variante ohne wird mittendrin unterbrochen vom Scheduler/IO/ der Uhr... was auch immer ;)

    Wenn jetzt die Unterbrechung dafür sorgt das Daten aus den Caches vertrieben werden, könnte die Variante ohne der Zusatzfunktion um mehrere Größenordnungen schlechter sein, obwohl, rein technisch gesehen der Performancevorteil nur minimal wäre.

  17. Definiere "mathematische" Algorithmen? Wenn wir über QR, LU, Cholesky Zerlegung o.ä. reden, dann ja. Aber wenn ich simple arithmetische Operationen ausführe, dann sicherlich nicht.

    Alleine ob du die Substitutionsbox im Cache behälst, berechnest oder teuer per Load zugreifst macht einen riesigen Unterschied. So könnte es abhängig von der Implementierung sinnvoll sein die reinen Daten im Cache zu halten und die S-Box zu berechnen, da du weniger Zeit verschwendest als bei einem richtigen Memory Access. Simple arithmetische Operationen sagen nichts darüber aus wie deine Daten wo liegen.

    Bitte einmal die Gesetze (Formeln) lesen und überlegen, was die einzelnen Komponenten des Gesetzes bedeuten. Die Gesetze von Amdahl, Gustafson und auch von Little sind Gesetze letztendlich um eine Leistungsbeurteilung zu machen. Die Kernaussage in den Gesetzen kann hier angewendet werden. Ich habe aber jetzt ehrlich keine Lust meine ganze Literatur über diesen Themenkomplex hier aufzuführen, denn wenn man eine Leistungsbeurteilung von einem Algorithmus macht, dann sollte man diese Gesetze präsent haben und verstanden haben

    Das ist der fundamentale Fehler, es ist kein Nagel, es ist keine Leistungsbewertung eines Algorithmus, es ist die Leistungsbewertung eines Prozessor(Features), welche man z.B. mit Benchmarks macht (RA uni-siegen Leistungsbewertung).

    Du hast aber recht, ich hab mich nur aus meiner PV Vorlesung an Amdahls Gesetz erinnert (wo explizit nur auf die Parallelisierung mit dem Overhead eingegangen wurde). Aber ja es muss auch da berücksichtigt werden. Aber implizit tut er ja genau das wenn er die alte gegen durch die neue Ausführungszeit teilt.

    Das ist nicht ganz korrekt, denn wenn diese eine Instruktion bezüglich des Datenflusses eine andere Laufzeit hat, dann entscheidet letztendlich der Datenblock ob und wie es angewendet werden kann. Wenn z.B. ein Sprung nicht ausgeführt wird, weil durch den Datenfluss dieses eben nicht statt findet, dann können hier durchaus Unterschiede auftreten.

    Wenn diese Instruktion Einfluss auf den Programmablauf hat ist es eine Änderung des Algorithmus. Aber ja diese Unterschiede könnten, abhängig zur Instruktion, deren Implementierung auftreten.

    Und wer verarbeitet den Interrupt, wenn man von dem theoretischen Fall ausgeht, dass kein Multitasking existiert. Der Interrupt kommt am System an und dann?

    Der hinterlegte Interrupt Handler. BS 1 es ist klar geregelt wie jetzt der Ablauf erfolgt. Wenn die letzte Handlung des IH dann ist unseren Code anzuspringen?

    Nein das ist falsch, denn wie oben gesagt kann sich dadurch der Datenfluss ändern

    Wenn ich es mir richtig vorstelle sieht es irgendwie so aus:

    
    ld .... # zeug in register laden
    
    aes... # führt dann aus
    
    
    vs
    
    ld ... # daten in register laden
    
    mul ..
    
    shl .. # als eigentliche implementierung
    
    xor ..
    
    ...
    
    bne ....
    
    

    Dann sehe ich kein Problem damit eine "Referenz"-Implementierung als Vergleich für diese Hardwarefunktion zu verwenden. Natürlich wird die CPU dann wohl irgendwelche Pipeline out-of-order Magie einsetzen um mehr Performance zu erreichen, dafür ist ja dann gerade der Befehl da. Er soll optimieren. Deswegen würde die ISA angefasst.

    Du weisst wie eine Laufzeitabschätzung (worst-case Abschätzung) per Induktion durchgeführt wird? Mit dem Einsatz eines anderen Befehls verändert sich der Algorithmus, somit sollte sich auch die Abschätzung ändern, zwar nicht die Funktionsklasse aber der Skalar der Abschätzung. Dieses wird z.B. bei der Cholesky versus LU Zerlegung ausgenutzt.

    Mir reichen Komplexitätsklassen in Landau-Notation. Skalare davor interessieren mich dabei nicht wirklich, muss aber auch zugeben das ich mich mit dem Thema nie vertiefend befasst habe. Aber da es hier nicht um eine Analyse sondern ein Benchmarking geht... nur aus Interesse wie legst du für die einzelnen Befehle denn Skalare und Werte fest, vor allem compiler/system/architektur/sprachen unabhängig?

    Nein das ist falsch, rein formal hat er (Laufzeit + Delta_i)*2 als Reaktionszeit zwischen eingehendem Signal und Start des Programms. Und das Delta ist nicht bekannt. Wobei generell anzunehmen ist Delta_i != Delta_j

    Okay, er hat cell(Laufzeit + Zeit von io <-> cpu) + Interrupt Handler Davon sind die Zeit von io <-> cpu schätzbar und der Interrupt Handler definierbar. Das Delta_j lässt sich ähnlich betrachten.

    AES initialisiert ebenso wie andere Algorithmen mit einer Heuristik, d.h. hier können Unterschiede auftreten, sofern man das nicht deaktiviert.

    Quelle bitte, habe danach gesucht, aber die Verbindung AES und Heuristik macht nur zum knacken Sinn.

    Wie oben geschrieben ist dieses nicht korrekt, es fehlt die Reaktionszeit des Systems nach anliegen der Binären 1. Des weiteren wäre die lediglich zu messen, dass Programm a langsamer läuft als b, aber daraus lässt sich nicht der generelle Schluss ableiten, dass der neue AES Befehlssatz generell effizienter ist als der alte, denn hier wurde ein einzelnes explizites System betrachtet. Man kann aus einem Einzelfall nicht auf eine allgemeine Aussage schließen. Das wäre ungefähr das gleiche als würde ich sagen, dass Pi eine transzendente Zahl ist und alle anderen Zahlen sind somit auch transzendent.

    Letztendlich ist die Vorgehensweise hier fachlich nicht haltbar, da ein Einzelfall betrachtet wird (von der Art und Weise der Implementierung und ob diese fehlerfrei ist, sehe ich jetzt mal ab)

    Wir können uns darauf einigen das die zu verschlüsselnden Daten keinen Einfluss auf die Dauer der Verschlüsselung haben? "Hans" zu verschlüsseln dauert genauso lang wie "Karl".

    Gut, wenn er dann zeigen kann das die Verwendung von AES-NI im Vergleich zu der üblichen Implementierung (am besten Ref) einen Speedup von X erreicht...

    Dann hat er damit natürlich nicht gezeigt das es nicht eine noch schneller Lösung in Software gibt.

    Aber es geht wohl auch nicht darum ein lokales oder globales Optimum zu finden, sondern nur die beiden Implementierungen zu benchmarken. In Abhängigkeit zu X kann dann auch der Messaufwand als zu vernachlässigen beschrieben werden.

    Die Interpretation der Daten hast du übrigens vorgenommen. Natürlich darf er nicht allgemein darauf auf Gott und die Welt schließen. Aber hier und heute, auf der Architektur ist die Implementierung mit AES-NI Faktor X schneller. (Kernel-Benchmarking nannte der Dozent es...). Natürlich kann das Verhalten innerhalb eines größeren Kontextes sich noch weiter verschieben. Als Bachelorarbeit vielleicht etwas "einfach", das hängt von den Rahmenbedingungen ab. Aber fachlich unhaltbar, der Untergang vom Abendland oder so halt ich für übertrieben.

  18. Mir wäre nicht bekannt, dass man das Multitaskingsystem deaktivieren kann, denn es ist im Code des OS kompiliert und somit unumgänglich.

    Naja, mit wenigen Anpassungen auf jeden fall. Unter linux könntest du einen kernel Module schreiben, welches einfach alle Interrupt Handler ändert.

    Du kannst ein Echtzeitbetriebssystem wie QNX verwenden, aber selbst dann ist Deine Annahme falsch, denn Du wirst nie 100% Aufmerksamkeit für Deinen Code haben können, das ist real nicht möglich ( Echtzeit ).

    Echtzeit bedeutet, dass Dir für eine Instruktion eine maximale Zeitdauer der Bearbeitung nicht überschritten wird.

    Bin gerade zu faul dies nachzuschlagen, aber afaik bedeutet Echtzeit nur das dein Programm in einem festvorgegebenen Zeitrahmen drangekommen sein muss. Wie lange es arbeitet unter welchen Umständen ist davon noch nicht berührt, es hat nur Auswirkungen auf den Scheduler.

    Aber Echtzeit ist auch nicht was der TE haben will, es klingt eher nach dem Unterschied zwischen präemptiv und nicht präemptiv.

    Zusätzlich hast Du in jedem OS Systemprozesse, die laufen müssen, damit die Infrastruktur des OS überhaupt funktioniert, z.B. wenn Deine Daten an die Hardware des Rechners ankommen, würde Dein Programm, wenn es in Echtzeit liefe, gar nicht mitbekommen, denn die Hardware löst bei eingehenden Signalen einen Interrupt aus, der vom OS dedektiert wird, das dann die Daten holt und an eine definierte Schnittstelle liefert. Dein Programm setzt erst auf OS Seite an, wenn es also 100% CPU Leistung hätte, dann würdest Du gar nicht wissen, dass Daten ankommen, denn die OS Zugriffe würden nicht statt finden.

    Halb, wenn er das OS ersetzt, ersetzt er auch mit deren Interrupt Handler also wird selber informiert das es losgeht. Schwieriger wird es wenn er es nicht tut, denn dann würde afaik auch bei einem nicht-präemptiven OS ein Sprung ins OS erfolgen, aber solche Feinheiten kann man nachschlagen.

    Generell gilt aber, dass meist handgeschriebener Assemblercode oft schlechter läuft als compilierter Code einer Hochsprache, denn die heutigen Compiler erzeugen so optimierten Code, dass dieser in den meisten Fällen besser ist als handgeschriebener. Es ist ein Trugschluss zu glauben, dass man damit eine bessere Performance erreichen kann. Wenn Dein Code "zu langsam" läuft, dann ist es oft ein Problem des Algorithmus und nicht des Systems.

    Können optimierten Code erzeugen, aber gerade bei komplex mathematischen Algorithmen kann das Wissen um die genaue Architektur (Cacheline größe, vector und andere Operationen) da dem Compiler doch ein Schnippchen schlagen.

    Ich würde auch behaupten das man Multitasking nicht abschalten kann, warum hat flashpixx ja schon sehr schön beschrieben.

    Man kann die Priorität von Prozessen erhöhen, zumindest unter Windows bis zur Priorität Echtzeit.

    MLFS war es glaub ich, gibt es auch als Implementierungen unter anderen Betriebssystemen. Aber unter Windows wird das austauschen des Interrupt Handler ein Problem.

    Hallo,

    danke schonmal für die Antworten.

    Ich beschreibe mal die Aufgabenstellung genauer da das ganze doch ziemlich allg. formuliert war.

    Im Rahmen einer Bachelorarbeit, soll AES in Assembler nachprogrammiert werden, einmal mit und einmal ohne den neuen AES-NI Befehlssatz( der beinhaltet ein paar neue Befehle die AES beschleunigen).

    Dann sollen die beiden Versionen auf Geschwindigkeit geprüft werden, um so die Effizienz herauszufinden.

    Das ganz soll so ablaufen dass ein C Programm geschrieben werden soll, das auf ein Signal auf einem I/O Port wartet, also USB Parallel oder Seriell, kann ich mir aussuchen. Das Signal sieht einfach so aus dass bei einem bestimmten Pin eine 1 angelegt wird.

    Solange diese 1 anliegt. Soll AES laufen, und möglichst alles andere gestoppt werden, um die reine AES Laufzeit zu bestimmen, ohne dass der Scheduler dazwischenfunkt.

    Dein Problem ist nicht nur der Scheduler, ich kann mir vorstellen für deine Aufgabe könnte es fast leichter sein einen minimalen Bootloader zu verwenden der dann dein Programm startet (wer braucht schon IO, Paging und sowas ;)).

    So, mein Betreuer will das so unterbrechungsfrei wie möglich.

    Ansätze waren:

    -Das ganze in MSDOS zu schreiben, wo es noch kein Multitasking gibt -> gehts nicht da, da die neuen ASM Befehle anscheinend nicht untersützt werden.

    Quatsch! Welche Bedeutung hat MS-DOS auf das Instruction Set. Du kannst nur ein anderes Problem bekommen, moderne CPUs (x86) müssen in einen speziellen Modus versetzt werden um ihre kompletten Fähigkeiten zu offenbaren.

    -Alles ausser den AES Thread auf einem anderen Prozessorkern laufen lassen. -> wäre der Betreuer nicht so begeistert von

    Ginge, Thread pinning, aber hier hast du das Problem mit dem Interrupt, ab wann läuft dein Programm wirklich?

    -Dem AES Thread eine sehr hohe Priorität geben -> sind ihm immernoch zu viele Unterbrechnungen.

    Joah, dein Programm wird von jedem Pups unterbrochen...

    So, jetzt bräuchte ich ein paar Ideen von euch. OS kann ich mir aussuchen, aber es muss halt ein C Compiler und Assembler der den neuen Befehlssatz versteht, dabei sein.

    Danke schonmal

    Schreib dir selber was

    Effizienz != Laufzeit

    Amdahlsches Gesetz

    Es geht um die Leistungsbewertung einer Instruktion, bzw. einer Realisierung einer Funktion mit dieser Instruktion, da trifft Amdahl wohl nicht wirklich oder?

    Es geht allerdings nicht um eine Paralleliserung, vielleicht ist auch keine gewünscht.

    Das schon mal ein völlig falscher Ansatz, denn Du vergisst z.B. das Prefetching des CPUs.

    Auch die Branch Prediction, hat allerdings keine Auswirkungen, wenn beide Programme sonst gleich sind und sich nur in der Instruktion unterscheiden...

    Das geht nicht, außerdem warum soll es von außen getriggert werden? Weiterhin wenn ich dann z.B. die Eingabe auf 0 lege, wird nicht automatisch die Messung gestoppt. Siehe Abtasttheorem und das Programm muss auch auf die Signaländerung reagieren, d.h. bei so etwas

    
       while true 
    
      { 
    
           check Pin
    
           for 
    
           {
    
           }
    
      }
    
    

    Wäre die Messung falsch, denn die Überprüfung ob das Signal anliegt müsste innerhalb der for Schleife sein, um es zu dedektieren. Aber setzt man nun diese Überprüfung in die for Schleife wird die Messung ungenau, weil bei jeder Iteration die Überprüfung statt findet

    Interrupts... davon gehört?

    Das was gemacht werden soll, ist fachlich Mist, denn weder der Aufbau dieser Messung der Laufzeit, noch der Einsatz von einem speziellen Befehlssatz führt zu einem aussagekräftigen Ergebnis. Ich empfehle zuerst einmal, dass Du Dir die grundlegende Theorie zur Leistungsbeurteilung von Computersystemen anschaust.

    Autsch. Mutig solche Aussagen zu treffen...

    Z.B. wenn ich die Daten des Algorithmus so anlegen, dass der CPU sinnvoll Prefetching einsetzen kann und dann erhalte ich natürlich eine bessere Performance, als wenn der CPU kein Prefetching machen kann. Dies ist aber zum Teil abhängig von den Eingabedaten und deren Organisation.

    Er hat den gleichen Code, einmal mit dieser super coolen Instruktion, einmal ohne... Da ändert sich nichts am Algorithmus, auch am Caching denk ich nicht....

    Wenn es Dir darum geht die Laufzeit eines Algorithmus zu betrachten, dann mache einen ordentlichen Induktionsbeweis für die Laufzeit und berücksichtige den Unterschied der Befehlssätze.

    Ich kenne die Instruktion nicht, aber wie genau willst du die theoretisch vergleichen, falls die Instruktionen, GENAU das gleiche machen? Die Transistoren auf dem Chip zählen ;). Ein Induktionsbeweis oder irgendeine Komplexitätsabschätzung ist nur bei veränderten Algorithmen möglich.

    Dann musst Du das nicht mit irgendeiner komischen Methode das ganze messen.

    Wenn Du dann dieses Ergebnis praktisch überprüfen willst, dann mache ein ordentliches Benchmarking nach den genannten Gesetzen und nimm z.B. nicht die Zeit, sondern die Anzahl der Instruktionen zur Messung, wie ich es schon beschrieben hatte. Denn die Zeit ist nicht hinreichend genau genug und kann von CPU Reihe zu CPU Reihe variieren.

    Sorry, aber in diesem Ansatz sind einige richtig große fachliche Fehler drin

    Glaub ich nicht...

    Das heisst, es wäre möglich wenn ich die Anzahl der Takte, die der ASM Teil braucht, herausfinde und diese Werte als Geschwindigkeit nehme?

    Wäre es auch möglich die Laufzeit zu berechnen wenn ich die Anz. der Takte so wie die Prozessorgeschwindigkeit habe? Wenn ich 1/Prozessortakt * Anzahl der verbrauchten Takte rechne, müsste ich doch die Laufzeit in einem 100%ig Echtzeitsystem ermittelt haben.

    Die Anz. der Takte müsste sich ja sehr leicht mithilfe von Ollydbg oder Visualstudio auslesen lassen nehme ich an.

    Ja die Anzahl der Takte ist schonmal eine gute Idee, du musst dir halt überlegen wie du das ermittelst, wer zählt die Takte, was machst du mit Stall Zyklen? Laufzeit wäre halt die Alternative, du nimmst halt einen anderen PIN der wird auf 1 gesetzt wenn das Programm fertig ist. Die Gegenseite muss halt genau genug messen, dann ziehst du davon die Übertragungsgeschwindigkeit * 2 ab und du hast ein ordentliches Ergebnis.

    Wofür soll der externe Trigger sein !? Das ist doch sinnfrei. Ich kann doch auch die Messung starten, wenn das Programm startet oder bevor eine Funktion ausgeführt wird.

    Nein, der externe Trigger könnte das Messgerät sein.

    Die Parallelisierung ist der Hinweis, dass hinter dem Benchmark entsprechende Gesetze liegen und diese sind hier sogar gleich, denn der CPU parallelisiert intern z.B. via Hyper-Threading

    D.h. wenn Du dieses nicht beachtest, kannst Du Deine Messung nicht interpretieren

    Hyper-Threading musste afaik explizit eingeschaltet werden und hat nicht wirkliche Auswirkungen.

    nicht zwingend, wenn der CPU parallelisiert, also klassisch ein Reduced Instruction Set Computer ist, können pro Takt auch mehr Befehle ausgeführt werden, z.B. weil sie auf zwei Cores verteilt werden.

    So funktioniert das nicht...

    Prefetching ist eine Heuristik und diese wird heute immer angewendet.

    Sorry, aber Dir fehlen massiv fachliche Grundlagen.

    Das ist egal, wenn er 2x den gleichen Code hat, bis auf eine Instruktion...

    Wie flashpixx und Guybrush schrieben ist eine Messung, so wie Du sie Dir vorstellst weder moeglich noch sinnvoll.

    Wenn Du wirklich mit Assemblercode arbeiten und Takte zaehlen willst, wuerde ich an Deiner Stelle auf "echte Messungen" verzichten und mir die Dokumentation der verwendeten CPU anschauen. Dort kannst Du sehen welcher Befehl wieviele Takte benoetigt und auch sehen, ob die Befehle auf verschiedene Pipelines verteilt werden koennen. Dann brauchst Du Dir keine Sorgen um den Compiler und das Betriebssystem machen.

    Ich glaube da werden keine stall Zyklen eingerechnet.

    Der Wert der Ergebnisse waere mehr als Fraglich, aber vielleicht macht es Deinen Betreuer gluecklich...

    Es geht, imho kann man klar sagen, die Instruktion XYZ ist schneller als die Instruktion ABC. Schwieriger wird es wenn die Instruktionen nicht den gleichen Zweck haben (weiß ich nicht). Dann kann man aber sich an der Referenz Impl. von (wenn vorhanden) Intel halten und sagen die neue AES Funktion ist schneller als die alte Ref. Impl. von Intel.

    Eine ungewöhnliche Anforderung, theoretisch (unter Umständen mit gewissen Einschränkungen) machbar, es bedeutet allerdings (viel) Aufwand.

    Es geht, eine Aufgabe aus der Rechnerarchitektur mit starken Bezügen zu den Betriebssystemen.

    Wozu das Ganze? Eine reale Implementierung ist auch den üblichen Unterbrechungen unterworfen, diese völlig zu vermeiden wäre in gewisser Weise sogar unrealistisch.

    Naja, mit den Unterbrechungen müsstest du den Versuch sehr oft wiederholen um Schwankungen im Scheduling ausschließen zu können.

    Das ist Grundvoraussetzung und zusätzlich sollten die Daten iid sein

    Mich würde es wundern wenn die Daten irgendeine Bedeutung bei dieser Aufgabe hätten. Der Algorithmus ist immer der gleiche und ich würde sogar glauben die CPU wird immer gleich lange brauchen...

    Effektiv, lade von einem Bootloader direkt dein Programm.

    Setze in deinem Programm den Interrupt Handler und wenn möglich entferne jegliche Entropy.

    Das Messgerät sollte konfiguriert sein (ähnliche Probleme wie hier):

    Das Messgerät startet die Uhr und setzt den Pin.

    Lass dein Progamm beim Interrupt anlaufen, sobald es fertig ist schickst du auf einem anderen Pin die antwort.

    Als Interrupt auf dem Messgerät stoppst du die Uhr, ziehst Senden und Empfangen ab und hast ein Ergebnis.

  19. Okay, ich stehe ja nicht alleine mit der Meinung um Praxiserfahrung zu sammeln ist eine Ausbildung nach/begleitend zu einem Studium denkbar ungünstig.

    Für so einen Fall sehe ich 3 Optionen:

    1) Werkstudenten Vertrag (Tätigkeit darf zur Vorlesungszeit nicht größer 20 Std sein)

    2) Praktikum (Semester oder zwei Aussetzen, komplett auf das Unternehmen und wenn möglich ein Projekt fokussieren), dabei ist die Reputation des Arbeitgebers nicht unwichtig und auch die Aufgaben, ne Datenbankanwendung mit Access zusammen zu bauen ist da schon eher Quatsch

    3) Festanstellung, Studium erledigst du wie jetzt nebenberuflich. Eine Einarbeitungszeit hast du so oder so.

    Die Bezahlung sehe ich bei allen drei Möglichkeiten sehr viel besser, das gleiche gilt für Reputation und den Lebenslauf.

    Wenn ich deinen Lebenslauf sehen würde als Personaler, dann denk ich mir die Person würde über den Tisch gezogen. Wenn du dann auch noch in einer Bewerbung schreibst: "Praxiserfahrung in der Ausbildung" weiß ich das ich einen gut ausnutzbaren Lemming gefunden habe.

    In diesem Forum ist die gängige Meinung: Ausbildungszeit zählt nicht als Berufserfahrung.

    Ich würde mich auch wundern warum ein BWL Student kurz vor Abschluss eine Banklehre machen würde, mit den wirren Worten: "Ich will Erfahrungen sammeln". Überleg es dir gut und im Notfall zieh die Reißleine, dafür gibt es Probezeit.

    Was ich traurig finde ist warum dein Arbeitgeber/Auszubildendes Unternehmen sowas zulässt. Vor allem was um Himmelswillen willst du in der Berufsschule? Java lernen, Netzwerk Basics? Wenn du dein Studium nicht versaut hast, dann ist alles für dich eine Wiederholung.

    Aus meiner Sicht: TAI -> FISI -> kurz vor dem Bachelor(jetzt im Praktikum) ist das ein Rückschritt und Lebens-/Geld-/Zeitverschwendung.

  20. @Wodar Hospur:

    hmmm... lass mich kurz überlegen:

    Ok, werde heute meinem Arbeitgeber bescheid sagen, dass ich die Ausbildung doch nicht mache. Wird er bestimmt verstehen, weil die ja erst morgen anfängt^^

    Rechtlich kein Problem und es zeigt nur das du dir wirklich keine Gedanken gemacht hast.

    Ich mach dann ein Praktikum -> sieht im Lebenslauf viel besser aus ^^

    Ja sieht es. Es gibt zwei Arten von Praktikum:

    - Unerfahrener Typ der gezeigt bekommt wie der Job aussieht/ bissel Rechner hin- und herschubst, Vergütung bewegt sich auf dem Niveau von max. Ausbildung

    - Fastabsolvent der an einem richtigen Projekt arbeiten darf, Vergütung ~*2x der Ausbildung

    Anders gefragt, was sieht cooler aus:

    Ich habe bei HP an deren Verwaltung für xxx gearbeitet, 6 Monate in einem hochprof. Bereich gearbeitet und wichtige Kontakte geknüpft und danach mach ich den Master oder verdiene Geld.

    Ich hab bei einem lokalen Unternehmen eine Ausbildung zum FIAE gemacht, den Stoffumfang sollte ich zwar nach dem 3 Semester schon bei WEITEM überstiegen haben. Aber ich wollte etwas Praxiserfahrung sammeln...

    Eine Ausbildung ist dafür da das du ausgebildet wirst, nicht dafür das du Praxis sammelst (Praktikum). Nicht umsonst ist diese Unterscheidung sogar in der Sprache codiert ;).

    Achja, zum Thema Zeitverlust -> Neben dem Studium die Ausbildung machen, da geht ja unheimlich viel Zeit flöten ^^

    Ja geht, du hast Pflichtveranstaltungen in der Schule, die dich nur Zeit kostet und du hast die Ausbildungszeit im Unternehmen.

    Übrigens falls das Unternehmen dir nicht ~*1500 € zahlt dann wirst du von diesem wundervoll ********t :).

    Also, ich werde mich mal mit der BS in Verbindung setzen und abklären wie das ganze abläuft. Vorziehen kommt für mich eigtl nicht in Frage sondern nur der Einstieg ins 2. Lehrjahr.

    Lass dich von der BS befreien, um Gottes willen, was eine Lebenszeitverschwendung.

    Der Besser möge gewinnen? Sry, aber ich finde das trotzdem dumm. Besonders als Student sollte man doch wissen was man will und sich früh genug Gedanken machen.

    Wer sagt dass die Stelle nochmal ausgeschrieben wird? Du oder was?

    Zeugt von Arroganz gegenüber den "nicht besseren".

    Nein das Unternehmen wird ihn, wahrscheinlich, ausbeuten. Das Unternehmen müsste mit ihm reden und ihm sagen, hier Ausbildung ist grober Unfug, mach bei uns Werkstudentenvertrag, bekommst nen super Arbeitszeugnis perfekt. Alternativ mach ein Praktikum. Aber 1,5 - 2 Jahre wird er für ein kleines Lehrgeld "ausgebildet". Hat/Sollte allerdings keinen Bedarf mehr haben ausgebildet zu werden, auf diesem Niveau.

  21. Dein Plan ist ganz grober Unsinn. Die Ausbildung ist nicht vergleichbar mit dem was später deine Arbeit werden sollte. Vor allem wenn du deinen Bachelor ordentlich abschließt.

    Wäre ich Arbeitgeber und würde ich deinen Lebenslauf lesen... Ich wüsste nicht ob ich lachen oder heulen soll. Wenn du gerade zuviel Uni und Theorie hast, mach ein Praktikum über ein halbes Jahr. Such dir jemanden wie IBM, HP, Google, TK, das wird ein Arbeitgeber viel eher verstehen als wenn du jetzt noch mal 1 Jahr lang die Schulbank drückst, vor allem wie sieht das im Lebenslauf dann aus:

    2013 Bachelor Informatik

    2014 Fachinformatiker...

    Mach ein Praktikum, werde Werksstudent, aber verschwende nicht x % deiner Zeit in der Berufsschule und 100-x % in einer Ausbildung, mit einer wahrscheinlich geringeren Vergütung als dir zu steht.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...