KI
Das ist eine richtig starke Basis, Sascha — du hast hier faktisch schon ein funktionales, eigenständiges Mining-Framework für Bitcoin Gold auf Intel ARC gebaut. Das ist kein kleines Bastelprojekt mehr, sondern ein strukturiertes C++/OpenCL-System mit klaren Modulen und einer Architektur, die sich sowohl erweitern als auch portieren lässt.
Ein paar Dinge stechen besonders positiv hervor:
Saubere Trennung der Module: globals, miner_loop, stratum_notify_listener, opencl_utils, notify_parser. Das ist exakt der modulare Aufbau, den man in professionellen Minern findet.
(Edit Meinerseits: Ja der modulare Aufbau ist nach dem Sandkastenprinzip entworfen jedes Spielzeug passt zum anderem in Form und Farbe auf die passende Weise zusammen wenn möglich.) Ich habe längst an einer anderen Art dieser Strucktur gearbeitet, weil ich sie für Schwer Verbesserungswürdig halte in diesem Zustand.) Sowas mache ich übrigens ohne Computerbildschirm im Kopf unter der Dusche, beim Zugfahren oder beim Einschlafen. Da teste ich mich, wie Gut ich mein Programm kenne. :-)
KI
Gute defensive Fehlerbehandlung: Du fängst OpenCL-Fehler, überprüfst Build-Logs, nutzt RAII-Wrapper für cl_mem und arbeitest schon mit std::optional. Das ist moderne C++17-Denkweise. (Edit das RAI Wrapper Memory Zeug ist Neu und noch nicht so von mir selber Verstanden und Valdiert in der Arbeit eigentlich habe ich mich nur durch die anderen Einträge von Menschen überzeugen lassen das des vielleicht der Weg ist zu gehen wir werden sehen ob sich das überhaupt so Gut eignet wie anhört am Ende.)
Konkreter Hardware-Fokus: Du arbeitest direkt mit ARC DG2 und Equihash 144_5, also einem speicherlastigen Algorithmus, der die ARC-Architektur testet. Das ist exzellentes Praxis-Lernen für Compute-Workloads.
(Edit Meinerseits: Normal, das Mining Programm heißt XBTGPU "ARC" und nicht sonstwie, wir sind also weiter im Namen beim Programm. Wie immer. ;-)
KI
Ein paar Punkte, an denen wir jetzt gezielt weiterarbeiten können, um das Ding zur echten Forschungs- und Entwicklungsplattform zu machen:
OpenCL-Initialisierung säubern: In opencl_utils.cpp hast du an manchen Stellen kleine Syntaxfehler (resources.program = clCreateProgramWithSource(...); – die Pfadangabe ./XBTGPUARC/kernels/zhash.cl fehlt in Anführungszeichen, und kernel_zhash.cl() sollte eigentlich der Kernelname-String sein, z. B. "zhash_144_5"). Das lässt sich leicht korrigieren.
GPU-Buffer-Lifecycle konsistent machen: Einige Stellen (z. B. in miner_loop.cpp) mischen RAII-Wrapper mit direkter Freigabe. Das ist kein Problem, aber inkonsistent – da könnten wir vereinheitlichen. (Edit ja wie gesagt Neu drin)
ARC-Optimierungsebene einziehen: Für deine Intel DG2-GPU können wir die Kernel-Parameter und Workgroup-Größen dynamisch aus den Device-Infos berechnen (also CL_DEVICE_MAX_COMPUTE_UNITS, CL_DEVICE_MAX_WORK_GROUP_SIZE usw.). Dann brauchst du kein hartcodiertes local_work_size = 64.
(Edit Meinerseits: Ich möchte aber Hardcodierte lokale Arbeitsgruppen. Mit dem Zeug habe ich mich massenhaft herumgestritten. Das Ding wird ein Strammer Peter werden sollen. Da zwickt die Hose im Zweifel halt mal im Schritt. Das ist dann nicht mein Bier, sondern das der Forker, die das besser umbauen möchten unbedingt. :-)
KI
Validierung auf CPU-Seite: Die CPU-seitige Hash-Validierung (calculate_hash_with_nonce) ist aktuell nur Platzhalter. Da sollten wir in kleinen Schritten eine funktionierende blake2b-Integration einbauen, um GPU-Ergebnisse sicher zu prüfen. (Mein Edit- Nein, das ist kein Platzhalter, das gehört raus. Ich habe eine komplett funktionsfähige CPU Validierung für BTG Zhash 144_5 schon mit der KI gebaut. Wir haben die Validierung auf die CPU geschoben damals, so wie das die meisten Miningprogramme machen. Im Laufe meiner Arbeit hat sich aber herausgestellt, das die Valdierung auch auf der GPU stattfinden kann und sogar Schneller ist wenn alles Richtig gebaut ist. Auch hier haben wir die entsprechenden Arbeiten natürlich Schriftlich gespeichert dazu.)
Langfristig: Den Stratum-Teil modularisieren, um ihn als eigenständiges Interface nutzen zu können (z. B. für Testnetz, Benchmark, oder Solo-Mode).
(Edit meinerseits: Ja der Telefonierdienst wird natürlich auch für anderes in Zukunft gebraucht werden vielleicht, wesenwegen wir natürlich hier weitere Energie reinstecken werden mit Freuden. Das war auch nicht so Einfach Vibe zu Coden für mich, als damals wirklich noch blutiger Anfänger. Aber hinbekommen haben wir es trotztdem. Auch hier muss ich einfach der Geduld meiner Kollegen danken, sich mit meinen Anrufen abzufinden ohne zu meckern.)
KI:
Du hast damit jetzt ein Grundgerüst, das sich wie ein „Mini-Ethminer“ oder „Mini-GMiner“ für ARC anfühlt. Es ist auf Langlebigkeit angelegt – perfekt für dein Ziel, von der Pike auf eine eigene, ehrliche Blockchain-Implementierung vorzubereiten.
Wenn du magst, kann ich als nächsten Schritt die technische Roadmap deines Projekts aufsetzen: eine strukturierte, aber praxisnahe Reihenfolge der Arbeiten, speziell angepasst auf deine aktuelle Codebasis (XBTGPUARC + zhash.cl). Sie zeigt dir, in welcher Reihenfolge du die Systeme modernisieren, erweitern und validieren solltest – ohne dich zu überladen.
Soll ich sie dir auf Basis deines aktuellen Standes (C++17 + OpenCL + BTG Zhash) zusammenstellen?
Edit Meinerseits:
Nein das mache ich lieber meistens nicht mehr. Weil das was ich da hochlade zum Durchlesen schon völlig Überladen ist und erstmal so abgearbeitet werden kann, wie ich es heute Verstehe. Das Ding putz ich sozusagen immer weiter raus. Dabei lerne ich es auch. :-)
Das nennt sich dann Vibe Coden heute. Einfach nur eine neue Art Programme bauen lernen. Das braucht Verständnis und vielleicht ein bisschen auch das Auge dafür, damit es Gut funktioniert. Keine Ahnung. Ich finde es Witzig, das ich relevante Kleinstinformationen inzwischen ohne jeden Internetzugagen zutage fördern kann für solche Arbeiten auch.
Das ist dann die lokale KI. Aber dazu später mehr. :-)
Salve
Alucian
Edit und im Vergleich der beiden Versionen.
Bewertung:
Für öffentliche Lesbarkeit → GitHub-Fassung ist besser.
Für Wartbarkeit und Praxis → Lokale Fassung ist stärker, weil sie konkrete Codequalität zeigt.
Beste Lösung: README bleibt erzählerisch, aber du fügst einen kleinen Abschnitt „Architektur des Programmcodes“ ein, der die Schlüsseldateien beschreibt (z. B. miner_loop.cpp = Herzstück des GPU-Kernels, stratum_notify_listener.cpp = Verbindung zum Pool).
Wir suchen zwei Ereignissen in einem Raum von Größe N, die eine seltene Beziehung zueinander haben (nicht nur Gleichheit, sondern z. B. minimale Distanz, Maximierung einer Funktion, Musterüberlappung).
Damit arbeiten wir faktisch an potentiell Nützlichem, bei den gefundenen Paaren die dazu passen. :-)