ok, könntet ihr zwei mal die Konsolenausgabe posten?
bzw. habt ihr mal getestet, ob das Script auch im 32-Bit-Modus läuft?
Beiträge von Andy
-
-
Hi,
name22 & Blume
Welche CPU habt ihr?Hab im Startpost einen Minitreiber für Intel-Prozessoren verlinkt.
Zitat von name22Irgendwie krass wie weit mein Ergebnis vor den anderen liegt . Sind wohl alles Laptops gewesen...
Nö, genau aus diesem Grund werden diese Grafikkarten ja als Cluster zum Berechnen von z.B. Wetterdaten eingesetzt.
Viele Compute-Units und hoher Takt = viel Power^^
Eine ATI Radeon 5870 hat bspw. 20 Compute-Units. Jede Compute Unit (oder SIMD-Unit) besteht aus 16 Cores die wiederum je 5 Recheneinheiten (Processing Elements) haben. Insgesamt hat die Karte also 20x16x5=1600 Prozessoren, die ALLE PARALLEL den Kernel abarbeiten können....da macht es auch nichts, wenn der Takt bissl niedriger ist als bei einer CPU. -
Hi,
thx fürs testen, werde auch noch die SIMD-Kernel als 2. Testlauf einbinden, bei den Grafikkarten wird das kaum einen Unterschied machen, aber bei den CPU´s werden die SIMD-Kernel dank SSE sicher schneller laufen.UEZ, gute Idee mit den 1k-Demos
Da sich die Syntax von Javascript und C im Bereich der "Rechnerei" nicht großartig unterscheidet, sollte das machbar sein, ggf ein Script, dass das JS direkt in einen CL-Kernel überträgt
-
Hi,
Win64 ist da Stichwort....
Ich habe, da durch ASM an 32-Bit-Umgebungen gewöhnt, daraufhin die Funktionen gebastelt.
Es gibt in AutoIt allerdings den DatenTyp INT_PTR, der je nach System entweder 32 oder 36 Bit breit ist.
Ich habe schon angefangen, sämtliche Funktionen anzupassen, so dass diese auch in 64 Bit-umgebung ohne Änderung laufen.Vorabversion zum Testen:
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
Btw. wieso kann ich diese Datei als 7z hochladen aber als ZIP nicht? -
Zitat von GTASpider
Die Perfomance ist schon ziemlich super, aber hat jemand ne Idee wie man es eventuell noch schneller bekommen könnte? Wahrscheinlich nicht mit den GDI Befehlen von AutoIt, die haben ja so ihre Limits.
Hab _DRAW() mal geprofiled. Zeiten in Millisekunden
Code
Alles anzeigen@@ Debug(347) : $m fillrect = 3.6827365678302 @@ Debug(366) : $m helplines = 15.7890186159183 @@ Debug(372) : $m UEZ= 0.406669079814119 @@ Debug(379) : $m line = 1.97179548428792 @@ Debug(383) : $m image = 50.2327905705531 @@ Debug(60) : $mm = DRAW 74.295876302257Wie man deutlich sieht, wird der Löwenanteil der Zeit von
[autoit]_GDIPlus_GraphicsDrawImage($oBuffer.Item('Graphics'), $oBuffer.Item('Bitmap'), $oCtrl.Item('X'), $oCtrl.Item('Y'))
[/autoit]verbraten, gefolgt von den Hilfslinien , der Rest innerhalb der Funktion ist zeitlich zu vernachlässigen.
Ja, bei Verwendung von GDI+-Funktionen ist nicht mehr viel zu machen.....unabhängig von AutoIt!
-
Naja, so wie das für mich aussieht, werden doch einfach nur die beiden RECT miteinander verknüpft, wobei RECT_b eine Konstante ist
also einfaches Umsetzen von AspirinJunkies Code
Spoiler anzeigen
[autoit]#include <Math.au3>
[/autoit] [autoit][/autoit] [autoit];konstante
[/autoit] [autoit][/autoit] [autoit]
const $rect_const=dllstructcreate("uint x; uint y; uint cols; uint rows")
dllstructsetdata($rect_const,"cols",100)
dllstructsetdata($rect_const,"rows",200);
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$rect1=dllstructcreate("uint x; uint y; uint width; uint height")
dllstructsetdata($rect1,"x",10)
dllstructsetdata($rect1,"y",20)
dllstructsetdata($rect1,"width",100)
dllstructsetdata($rect1,"height",200)$select=dllstructcreate("uint x; uint y; uint width; uint height")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]$select=_select_und($rect1)
[/autoit] [autoit][/autoit] [autoit]$x=dllstructgetdata($select,"x")
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $x = ' & $x & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
$y=dllstructgetdata($select,"y")
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $y = ' & $y & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
$width=dllstructgetdata($select,"width")
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $width = ' & $width & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
$height=dllstructgetdata($select,"height")
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $height = ' & $height & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Consolefunc _select_und($rect)
[/autoit] [autoit][/autoit] [autoit]
$a_x=dllstructgetdata($rect,"x")
$a_y=dllstructgetdata($rect,"y")
$a_width=dllstructgetdata($rect,"width")
$a_height=dllstructgetdata($rect,"height")$b_x=dllstructgetdata($rect_const,"x")
[/autoit] [autoit][/autoit] [autoit]
$b_y=dllstructgetdata($rect_const,"y")
$b_width=dllstructgetdata($rect_const,"cols")
$b_height=dllstructgetdata($rect_const,"rows");if( a.width <= 0
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
a.height <= 0 ) a = Rect();
if $a_width<=0 or $a_height<=0 then return $rect; _Tp x1 = std::max(a.x, b.x), y1 = std::max(a.y, b.y);
[/autoit] [autoit][/autoit] [autoit]
$x1=_max($a_x,$b_x)
$y1=_max($a_y,$b_y);a.width = std::min(a.x + a.width, b.x + b.width) - x1;
[/autoit] [autoit][/autoit] [autoit]
$a_width=_min($a_x+$a_width, $b_x+$b_width)-$x1;a.height = std::min(a.y + a.height, b.y + b.height) - y1;
[/autoit] [autoit][/autoit] [autoit]
$a_height = _min($a_y + $a_height, $b_y + $b_height) - $y1;; a.x = x1; a.y = y1;
[/autoit] [autoit][/autoit] [autoit]
dllstructsetdata($rect,"x",$x1)
dllstructsetdata($rect,"y",$y1)
dllstructsetdata($rect,"width",$a_width)
dllstructsetdata($rect,"height",$a_height)
;if( a.width <= 0
a.height <= 0 ) a = Rect();
return $rectendfunc
[/autoit]
wobei ich aber zugeben muss, mit Objekten wäre das ein einfaches C&P -
In Bingen bei der letzten Breakpoint gabs eigentlich auch nicht viel zu kapieren, alleine der Anblick der völlig abgedunkelten Halle mit tausenden von Rechnern mit davor sitzenden Freaks und vorne über der Bühne die 8x5m Leinwand, die von einem FullHD-Beamer befeuert wurde, wars wert

Mit welchen Geräten die Grafik und Sound produziert haben, das war echt der Hammer! Vom 30 Jahre alten Taschenrechner über gecrackte Spielkonsolen (Gameboy) bis zu den Oldies der Computerbranche. Auch nagelneue Hochleistungsrechner wie iBooks und tonnenschwere Alienware-Maschinen waren natürlich vertreten.
Da gabs Events, da mussten Demos innerhalb von STUNDEN erstellt werden zu einem bestimmten Thema, manche haben auf dem Weg zur Jury noch am code rumgehackt^^Sicher werden demnächst auch andere interessante Platformen wie z.B. Arduino, und Konsorten vertreten sein!
-
Zitat
@Xor. Das sind weise Erwachsene Männers.
Yo, die sind so alt, die denken bei AMIGA an was anderes als an "Freundin"^^, vor allem, wenn sie sich in einem Computer-affinen Forum rumtreiben *grööööööhhhllll* MADE MY DAY







-
ich bring mal den Startpost auf den neuesten Stand, gerade was die intel-mini-Treiber betrifft
-
Lass mal stecken, Ostern auf ner 125er braucht kein Mensch...kannst zu mir kommen, biste ca. in 2h, und dann kannste auf dem weiteren Weg wieder auftauen

-
Mein Angebot steht, 2-3 Leute auf dem Weg dahin "einzusammeln".
2 Tage sollte man aber mindestens einplanen... -
-
UEZ,
bin zzt im Urlaub, jetzt glücklicherweise mit UMTS-Verbindung^^.
Hatte in dieser Woche zufällig ein Gespräch mit einem "Programmierer" abends in einer Hotelbar, da liefen auf einem Monitor irgendwelche Videos. Er meinte, was alles an Rechenpower und Knowhow nötig wären um die Grafiken zu erstellen, und ich hab nur beiläufig gesagt, ein "ordentlicher" Programmierer packt das in eine Handvoll Codebytes
Sein Kumpel fühlte sich gleich angepisst und fing an zu labern, da bin ich ins Hotelzimmer geflitzt und hab den Laptop geholt und denen die von dir verlinkte Site gezeigt.
Die wollten sich dann die Videos auf Youtube angucken, aber bei GPRS funzt das ja nicht, also hab ich die 4K-files einfach downgeloadet...hat bissl gedauert, jetzt haben die gedacht, die 4k-Files wären ein Download-Programm für die komprimierten Grafiken, ich hab dermasssen lachen müssen^^
Jedenfalls waren die zwei total begeistert und es sind etliche Biers getrunken worden. Bestimmt haben die den Rest der Nacht Demos geladen.
Am nächsten Morgen beim Frühstück haben wir ausgemacht, uns nächstes Ostern in Saarbrücken zu treffen
-
Hi,
habe mal auf die Schnelle ein Anzeigescript zusammengehackt, dass ich benutze, um auf anderen Rechnern die Verfügbarkeit und die Geschwindigkeit von OpenCL-fähigen Geräten zu ermitteln. Bitte mal testen und ggf Fehlermeldungen posten. Zur Geschwindigkeitsermittlung habe ich einen Ausschnitt der Mandelbrotmenge in entsprechende Auflösung gewählt, um Speichertransfer und Geschwindigkeit bei den Berechnungen wenigstens ansatzweise bewerten zu können.
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
Laptop AMD mit Quadcore und integriertem Grafikprozessor, externer Grafikprozessor.
//EDIT man sollte die 4 Cores nicht mit 400Mhz laufen lassen....Die folgenden Files sind teilweise angepasst/modifiziert/weiterentwickelt.
Programm:
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
Include-files:
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.
Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist. -
Naja,
den "geistigen Erguss", eine Handvoll Nullen so zu Packen, dass beim Entpacken einige Handvoll mehr Nullen da sind, kommentiere ich mal nicht.
Dafür aber 42 kB zu verbrauchen bewerte ich gelinde gesagt als absolutes programmiertechnisches Armutszeugnis!Wer einen Sudoku-solver in 62 Bytes packt, der erledigt "ich schreib den Speicher/Platte voll mit Nullen" mit einer Handvoll Bytes.
Btw. reicht dafür ein einziger API-Call. "Können" ist dafür definitiv keins erforderlich.
Daher treffen sich Leute, die es drauf haben, z.B. bei internationalen Events wie diesem in Saarbrücken, dort kann man nur noch staunen, was man mit entsprechendem knowHow alles auf einen Monitor bzw. aus dem Lautsprecher bekommt. Auf der letzten Breakpoint in Bingen war ich mit UEZ zusammen, DA wurde gezeigt, wo bei Grafiken der Hammer hängt...
Bei solchen Partys findet man auch keine Scriptkiddies^^....wie gesagt, C&P gepaart mit Halbwissen und sozialer Unintelligenz reicht definiv nicht aus, um einen Hund hinter dem Ofen hervorzulocken. -
Zitat
AutoIt ist eine Hochsprache.
knochentrocken
Jetzt kann ich seelig einschlummern.....und von "Hochsprachen" träumen
-
Zitat von SchachMuschi
Vom Prinzip her ist eine Hochsprache trotzdem ne ganz andere Geschichte als AutoIt.
wieso?
Solange es wirklich nicht um die letzte Millisekunde geht, macht AutoIt eine ausgezeichnete Figur!
Wenn aus Geschwindigkeitsgründen nötig, kann man den "inner loop" in einer Dll-Funktion in einer x-beliebigen Hochsprache umsetzen und 95% des AutoIt-Codes incl. aller seiner Vorteile übernehmen. -
Naja,
AutoIt ist ein "Basic-ähnlicher" Dialekt, von daher sollte man eigentlich mit allen Basic-ähnlichen Sprachen und deren Compilern zurechtkommen.
Freebasic ist relativ einfach, Eukalyptus hat damit schon einige feine Dll´s erstellt.
Hier gibts übrigens einen Geschwindigkeitsvergleich, wen wundert´s, dass mit Assembler erstellte Dll´s am schnellsten (und am kleinsten) sind
Wenns wirklich nicht auf die letzte Millisekunde ankommt, würde ich persönlich Freebasic nehmen. Der Compiler erstellt schnellen und vor allem kompakten Code, ohne ein Codemonster wie VC++ installieren zu müssen.
Wer allerdings auf die Goodies des MS-Studios abfährt (so wie auch ich , der Profiler ist einfach nur GEIL
), der sollte VC++ oder Visualbasic testen. Wobei es imho
völlig egal ist, ob man in C++ oder VisualBasic programmiert, der Compiler erstellt idr. denselben performanten Code! -
Zitat
Weiß nur, dass Mutex ja verhindern sollen, dass es Diskrepanzen gibt, dadurch, dass auf bestimme "Dinge" mehrfach zugegriffen werden kann?!
nein, nicht mehrfach sondern gleichzeitig.
Dann muss z.B. sichergestellt sein, dass bei 3 Threads, die gleichzeitig einen bestimmten Speicherbereich bearbeiten (lesen+verändern+schreiben) die Daten nach jedem Lese/Schreibzyklus konsistent sind. Heisst in diesem Fall, solange EIN Thread Daten bearbeitet, müssen die anderen beiden warten....bearbeiten die Threads unterschiedliche Speicherbereiche, dann können sie gleichzeitig arbeiten.
Um festzustellen, ob ein Programm mehrfach gestartet wurde, benutzt man sicherlich kein Mutex
-
Hi,
ich hol den Thread mal aus dem Keller, hab eben im ASM-Forum einen Thread gefunden, mit einer BANDIT-Formel^^Mit bissl Phantasie erkennt man einen mexikanischen Banditen mit Sombrero, hab mal die Augen und den Mund ergänzt, färb das mal jemand ein....
Spoiler anzeigen
[autoit]$user32 = DllOpen("user32.dll")
[/autoit] [autoit][/autoit] [autoit]
$gdi32 = DllOpen("gdi32.dll")
$w = 640
$h = 480Global $pi = 4 * ATan(1)
[/autoit] [autoit][/autoit] [autoit]$hgui = GUICreate("Bandit", $w, $h)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$hdc_gui = getdc($hgui)
GUISetState()$radian = ATan(1) / 45
[/autoit] [autoit][/autoit] [autoit]
$radius = 125
$col = 0;0xFF00FF0F
For $deg1 = 0 To 360 Step 1$c1 = Cos($deg1 * $radian)
[/autoit] [autoit][/autoit] [autoit]
$s1 = Sin($deg1 * $radian)$x1 = $radius * $c1
[/autoit] [autoit][/autoit] [autoit]
$y1 = $radius * $s1pix($hdc_gui, $w / 2 + $x1 / 5 - 50, $h / 2 + $y1 / 10, $col);auge
[/autoit] [autoit][/autoit] [autoit]
pix($hdc_gui, $w / 2 + $x1 / 5 + 50, $h / 2 + $y1 / 10, $col)pix($hdc_gui, $w / 2 + $x1 / 15 - 45, $h / 2 + $y1 / 15 + 5, $col);pupille
[/autoit] [autoit][/autoit] [autoit]
pix($hdc_gui, $w / 2 + $x1 / 15 + 45, $h / 2 + $y1 / 15 + 5, $col)pix($hdc_gui, $w / 2 + $x1 / 20 - 45, $h / 2 + $y1 / 20 + 5, $col);pupille2
[/autoit] [autoit][/autoit] [autoit]
pix($hdc_gui, $w / 2 + $x1 / 20 + 45, $h / 2 + $y1 / 20 + 5, $col)pix($hdc_gui, $w / 2 + $x1 / 1.4, $h / 2 + $s1*$y1 / 2 + 100, $col);mund
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
pix($hdc_gui, $w / 2 + $x1 / 1.2, $h / 2 + $s1*$y1 / 2 + 90, $col);mundFor $deg2 = 0 To 360 Step .5
[/autoit] [autoit][/autoit] [autoit]$c2 = Cos($deg2 * $radian)
[/autoit] [autoit][/autoit] [autoit]
$s2 = Sin($deg2 * $radian)$x2 = $radius * $c2 * $c2 * Cos(Cos($deg2 * $s1 * $c2 * $radian) * $c1) * $c2 * $c2 / $c1 * $s1 * Cos($deg2 * $radian * $c1)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$y2 = $radius * $s2 * $s2 * Sin(Cos($deg2 * $c1 * $s2 * $radian) * $s1) * $s2 * $s2 / $s1 * $s1 * Sin($deg2 * $radian * $s1)
; $col = Int($c2 * $x2 * $deg2 ^ 2 + $s2 * $y2 * $deg2 ^ 2)
;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $col = ' & $col & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
pix($hdc_gui, $w / 2 + $x1 + $x2, $h / 2 + $y1 + $y2, $col)
Next
NextWhile GUIGetMsg() <> -3
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
WEndFunc atan2($y, $x)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
Return (2 * ATan($y / ($x + Sqrt($x * $x + $y * $y))))
EndFunc ;==>atan2Func pix($dc, $x, $y, $color) ;pixel mit farbe an koordinaten setzen
[/autoit] [autoit][/autoit] [autoit]
DllCall($gdi32, "long", "SetPixel", "long", $dc, "long", $x, "long", $y, "long", $color)
EndFunc ;==>pixFunc GetDC($handle)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
$dc = DllCall($user32, "int", "GetDC", "hwnd", $handle)
Return $dc[0]
EndFunc ;==>GetDC