2012-04-05 10 views
2

Ich bin neu in OpenCL und ich schreibe eine RSA-Factoring-Anwendung. Idealerweise sollte die Anwendung sowohl für NV- als auch für AMD-GPU-Ziele funktionieren, aber ich finde keinen einfachen Weg, um die Gesamtanzahl von Kernen/Stream-Procs auf jeder GPU zu bestimmen.OpenCL - wie spawnen Sie einen separaten mathematischen Prozess auf jedem Kern

Gibt es eine einfache Möglichkeit zu bestimmen, wie viele Kerne/Stream Procs es auf jeder Hardware-Plattform gibt, und dann einen Factoring-Thread auf jedem verfügbaren Kern spawnen? Der Ziel-RSA-Modul würde im geteilten Speicher sein, und jeder Faktorisierungs-Thread würde einen Rho-Faktorisierungsangriff gegen den Modulus verwenden.

Auch jede Idee, wenn OpenCL Multi-Precision-Math-Bibliotheken ähnlich wie GNU MP unterstützen, um große Semi-Primzahlen zu speichern?

Vielen Dank im Voraus

+0

Ich schlage vor, dass Sie Ihre zweite Frage in eine separate Frage verschieben. –

Antwort

2

Auf der GPU, nicht laichen Sie nicht einen Thread für jeden Kern, wie Sie auf einer CPU würden. Stattdessen möchten Sie viel mehr Threads starten, als es Kerne gibt. Ich würde mir keine Gedanken über die genaue Anzahl der Kerne machen, die auf einer bestimmten Zielplattform verfügbar sind. Konzentrieren Sie sich stattdessen nicht darauf, was am besten zu Ihrem Problem passt.

2

Um Rogers Antwort hinzuzufügen, ist der Grund, warum Sie mehr Threads als Kerne haben möchten, weil GPUs sehr effizient context switching zu verbergen memory latency zu verbergen. Im Allgemeinen ist jeder Speicherzugriff eine sehr teure Operation hinsichtlich der Zeit, die ein Prozessor benötigt, um die angeforderten Daten zu empfangen. Wenn jedoch ein Thread auf eine Speichertransaktion wartet, kann er "pausiert" werden, und ein anderer Thread kann zwischenzeitlich für Berechnungen (oder andere Speicherzugriffe) aktiviert werden. Wenn Sie also genügend Threads haben, können Sie die Speicherzugriffslatenz im Wesentlichen verbergen, und Ihre Software kann mit der vollen Rechenkapazität der Hardware arbeiten (was sonst selten passieren würde).

Ich hätte dies in einen Kommentar zu Rogers Beitrag gesetzt, aber seine Größe ist jenseits des Limits.