Hi Aventinus
lies noch mal was ich schrieb. Es gibt deutliche Unterschiede zwischen 400, 300 (wobei die 319 anders war als die 316), 1200 und 1500.
bei der 400 wird jede Zeile ausgeführt. Wer 1000 mal L MW10 schreibt, der führt auch 1000 mal L MW10 aus entsprechend lang (Zykluszeit) dauert es.
bei der 319 ist das nicht so. Wer dort 1000 mal L MW10 schreibt, der kommt viel schneller weg. Die Ausführungsgeschwindigkeit (Zykluszeit) steht nicht mehr im direkt proportionalen Verhältnis zur Codegröße. Hier scheint die 319 selbst zu optimieren. Ob das auch bei einer 314 so ist weiß ich nicht. Ich vermute mal dass das von der Firmware-Version abhängt. Habe das aber nie nachgeprüft.
bei den 1200 wird durch TIA optimiert. Wer 1000 MOVE boxen mit immer den gleichen Variablen direkt hintereinander schreibt, der bekommt genauso viel Code wie bei einer einzigen MOVE box.
bei der 1500 wird noch viel mehr optimiert. S. verrät aber nicht was und wie. Ich habe bei meinen Spielereien mit RUNTIME folgendes interessante beobachtet.
Ein KOP Programm mit einem OB, einem DB, zwei FC. Der OB ruft die FC auf. DB und OB bleiben unverändert. Das Programm wird sowohl bei einer 1214 als auch bei einer 1516 verwendet. Der erste FC enthält ein paar Netzwerke, die eigentlich nix wichtiges machen. Ein bischen Addieren ein bischen subtrahieren. Ein wenig UND und ODER und ein paar Spulen. So zwanzig mittelgroße Netze. Weil ich ja Zeit messen will waren auch ein paar TON dabei. Die Instanzen dafür waren mit im DB. Eigentlich habe ich irgend was aus einem anderen Programm "geklaut", denn ich wollte wissen wie schnell der eine Baustein läuft. Dann habe ich mir im DB dafür eine Testumgebung geschaffen.
Der zweite FC ist SCL. Der wird nur benutzt um mit RUNTIME die Laufzeit des ersten FC zu vermessen. was ja leider nur mit SCL klappt.
Vermutung: Wenn ich die zu vermessenden Netze doppelt rein kopiere in den FC, dann sollten sich sowohl die Codegröße als auch die Laufzeit verdoppeln.
Überraschung: Nein die Laufzeit bleibt im wesentlichen gleich. Selbst die Codegröße bleibt im wesentlichen gleich.
OK, dann mach ich das halt noch mal. Also eine dritte Kopie und eine vierte Kopie der zwanzig Netzwerke in den FC.
Überraschung: Die Laufzeit bleibt fast gleich. Die Codegröße bleibt fast gleich.
Dann habe ich einen zweiten DB erzeugt, eine Kopie des ersten. Bin wieder auf die 2*20 Netz version zurück und habe in den zweiten zwanzig Netzwerke die DB-Zugriffe auf den zweiten DB gebogen -- suchen und ersetzen
Jetzt wird ja in den kopierten Netzwerken auf was anderes zugegriffen.
Vermutung: sowohl die Codegröße als auch die Laufzeit sollten sich verdoppeln.
Im wesentlichen ja
Aber jetzt zeigen sich Unterschiede bei 1200 und 1500. Bei der 1200 komme ich sowohl für Laufzeit als auch für Codegröße auf den Faktor 1,9. (Meine TON sind nicht verdoppelt)
Bei der 1500 komme ich für die Laufzeit auf den Faktor 1,5 und bei der Codegröße auf den Faktor 1,8.
Wie gesagt, das gilt für die 1200 und die 1500. Nicht für die 400.
Was mir negativ aufgefallen ist, ist jedoch die Compilezeit. Bei den 20 Netzen kaum zu messen. Bei 10*20 Netzen dauert es Minuten -- soweit ich mich erinnere so 5. Bei 20*20 Netzen dauert es nicht 10 Minuten sondern 17 Minuten. Und bei 100*20 Netzen ist es regelmäßig wegen zu wenig Speicher durch Windows zwangsbeendet worden.
Hingegen ein Baustein mit 400 Netzen wo sich nichts wiederholt, wird in 3 Minuten übersetzt ... hm. Der Compiler scheint verbesserungsfähig.
'n schönen Tach auch
HB