Forum: Programmieren allgemein
by Amateurprofi,
7. Dez 2009
@Medium:
ja, aber es ginge auch ohne das.
Nimm an du willst auf 4 Threads verteilen.
Thread 1 rechnet 1/1 + 1/5 + 1/9 ...
Thread 2 rechnet 1/2 + 1/6 + 1/10 ...
Thread 3 rechnet 1/3 + 1/7 + 1/11 ...
Thread 4 rechnet 1/4 + 1/8 + 1/12 ...
Der erste Thread startet also mit dem Divisor 1 und die folgenden Threads starten mit einem um jeweils 1 höheren Divisor und alle Threads erhöhen den...
Forum: Programmieren allgemein
by Amateurprofi,
7. Dez 2009
@Medium:
eigentlich ist das ganz simpel.
Aus dem Zielwert (Summe der Reihe) errechne ich die Anzahl der Elemente der Reihe, also die Anzahl der Durchläufe.
n = Trunc(Exp(Zielwert-0.57721566490153286))
Nehmen wir an ich will in zwei Threads rechnen, dann muß jeder Threat n div 2 Elemente addieren.
also:
h:=n div 2
Erster Threat rechnet 1/1 + 1/2 + ... + 1/h
Zweiter Thread rechnet 1/(h+1)...
Forum: Programmieren allgemein
by Amateurprofi,
7. Dez 2009
@helgew
Innerhalb der Schleife wird folgende Sequenz 16 Mal ausgeführt.
Es ist im Prinzip exakt die von dir vorgeschlagene Sequenz (die sich ja aus dem Problem fast zwingend ergibt)
War für mich auch überrraschend, daß das nichts bringt.
fld st(2) // st0=1
fdiv st,st(1) // st0=1/Divisor
faddp st(4),st // Summe=Summe+1/Divisor
fadd st,st(2) // Divisor=Divisor+1
Forum: Programmieren allgemein
by Amateurprofi,
6. Dez 2009
Der Threadersteller war mit dem Zeitbedarf des in #1 gezeigten Pascal-Codes unzufrieden, vermutete, daß ein Assembler-Code schneller sein könnte und bat um Hilfe bei der Umsetzung.
Einige der Kommentare animierten mich, dieses Thema aufzugreifen. Das Resultat findet ihr im Attachment.
Doch, gerade bei solch trivialen Operationen läßt sich durch einen guten Assembler-Code viel erreichen,...