2010-07-12 2 views
6

Okay, ich habe die meisten ati und nvidia Guides zu OpenCL bereits durchgemacht, es gibt einige Sachen, von denen ich nur sicher sein möchte, und einige brauche Klärung. Nichts in der Dokumentation gibt eine klare Antwort. JetztWorkitems, Workgroups und Command Queues Organisation und Speicherlimit in OpenCL

ich habe ein radeon 4650, jetzt ist mein Gerät abfragen, ich habe

CL_DEVICE_MAX_COMPUTE_UNITS: 8 
    CL_DEVICE_ADDRESS_BITS: 32 
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3 
    CL_DEVICE_MAX_WORK_ITEM_SIZES: 128/128/128 
    CL_DEVICE_MAX_WORK_GROUP_SIZE: 128 
    CL_DEVICE_MAX_MEM_ALLOC_SIZE: 256 MByte 
    CL_DEVICE_GLOBAL_MEM_SIZE: 256 MByte 

ok erste, meine Karte 1 GB Speicher, warum bin ich nur zu 256 MB erlaubt?

2. Ich verstehe den Work-Item-Dimensionsteil nicht, bedeutet das, dass ich bis zu 128 * 3 oder 128^3 Work-Items haben kann?

wenn ich dies berechnet habe, bevor ich die Abfrage ausführen, habe ich 8 Kerne * 16 Stream-Prozessoren * 4 Arbeitsaufgaben = 512 Warum ist das falsch?

auch ich habe die gleichen 3-dimensionale Work-Item Zeug für meine inte core 2 duo CPU, gelten die gleichen Berechnungen?

Wie bei den Befehlswarteschlangen, als ich versuchte, auf meine Core Duo CPU als ein Gerät mit OpenCL zuzugreifen, wurde nur auf einem Kern verarbeitet, ich versuchte mehrere Warteschlangen und mehrere Einträge in Warteschlange, wurde aber nur auf einem Kern verarbeitet Ich habe eine global_work_size von 128 * 128 * 128 * 8 für ein einfaches Schreibprogramm verwendet, wobei jedes Arbeitselement seine eigene globale ID in den Puffer schreibt und ich nur Nullen habe.

und was ist mit Nvidia-Karten? Auf einer Nvidia 9500 GT mit 32 Cuda-Kernen berechnen sich die Work-Items ähnlich?

Vielen Dank, ich war wirklich überall auf der Suche nach Antworten.

Antwort

5

ok zuerst, meine karte hat 1GB speicher, warum bin ich erlaubt, nur 256MB?

Dies ist ein ATI-Treiber Fehler/Einschränkung AFAIK. Ich werde auf meiner 5850 nachsehen, ob ich Repro machen kann.

http://devforums.amd.com/devforum/messageview.cfm?catid=390&threadid=124142&messid=1069111&parentid=0&FTVAR_FORUMVIEWTMP=Branch

2. Ich verstehe nicht, die Arbeits Artikel Dimension Teil, bedeutet das, ich kann haben bis zu 128 * 3 oder 128^3 Arbeit Einzelteile?

Nein, das bedeutet, dass Sie max 128 auf einer dim da CL_DEVICE_MAX_WORK_ITEM_SIZES haben kann, ist 128/128/128. Und da CL_DEVICE_MAX_WORK_GROUP_SIZE 128 ist, können Sie z. B. work_group_size(128, 1, 1) oder work_group_size(1, 128, 1) oder work_group_size(64, 1, 2) oder work_group_size(8, 4, 4) etc haben, solange das Produkt von jedem dim ist <= 128 wird es in Ordnung sein.

, wenn ich diese berechnet, bevor ich die Abfrage ausführen, ich erhielt 8 Kerne * 16 Stream-Prozessoren * 4 Werk Artikel = 512 warum ist das falsch?

auch ich habe die gleichen 3 Dimension Work-Item Zeug für meine inte core 2 Duo CPU, gelten die gleichen Berechnungen?

Verstehen Sie nicht, was Sie hier zu berechnen versuchen.

+0

zuerst aus Vielen Dank. um nvm der 512 teil, verwechselte ich verarbeitungselemente mit arbeitsgegenständen. Was die CPU anbetrifft, frage ich mich, ob die gleichen Berechnungen auch dafür gelten. Wenn ja, hat meine CPU 1024 Arbeitsgruppendimensionen angezeigt, bedeutet das, dass 1024 Arbeitseinheiten gleichzeitig verarbeitet werden können? – omarzouk

+0

Wenn CPU 1024 für maximale Arbeitsgruppengröße anzeigt, gilt die gleiche Regel. du kannst z.B. 128 * 8 * 1 wie für eine work_group_size. Nun, wenn Arbeitseinheiten gleichzeitig bearbeitet werden, wird dies durch die Laufzeit abstrahiert, so dass Sie nicht wirklich wissen. – Stringer

+0

Sie verwenden wahrscheinlich die OpenCL-Implementierung von ATI (sie meldet 1024 als maximale Arbeitsgruppengröße). Natürlich kann eine CPU nicht gleichzeitig 1024 Work-Items bearbeiten. Soweit ich weiß, führt die ATI-Software OpenCL Arbeitsaufgaben einer Arbeitsgruppe sequenziell so weit wie möglich aus. Wenn Sie auf Shared Memory zugreifen, ist der Kernel in mehrere Teile aufgeteilt. Seltsamerweise funktionierte eine Arbeitsgruppensumme von 1 (die * auf einer CPU * gut funktionieren sollte) schlecht mit ATIs Implementierung und meinem Code. – dietr

Verwandte Themen