2017-02-06 5 views
0

Ich versuche Matrixmultiplikation mit OpenCl zu machen. A ist 1000x1000, B ist 1000x1000, also ist mein C = AxB auch 1000x1000. Mein local_size ist zum Beispiel 14.Wie wählt man richtig work_group_size?

size_t local_item_size[2] = { local_size, local_size }; 

ich, dass die Arbeitsgruppe Größe gelesen haben es die Größe ist mein Problem. C hat zwei Dimensionen, so dass ich versuchen würde,

size_t work_group_size[2] = 
    { N, N }; 

err = clEnqueueNDRangeKernel(dev.queue, kernel, 2, 0, 
          global_item_size, work_group_size, 
          0, NULL, &event); 

zu setzen Aber ich bekomme ein CL_INVALID_WORK_GROUP_SIZE. Wie kann ich richtig wählen global_item_size Die maximale Arbeitsgruppengröße meines PCs beträgt 1024. Bedeutet das, dass ich nicht mit größeren Matrizen arbeiten kann? Vielen Dank

Antwort

1

Lokale Größe muss ein genauer Teil der globalen Größe sein.

1000x1000 ist genau teilbar durch 10x10 oder 20x5 und ähnliche

Wenn Sie darauf bestehen, lokale Größe 14, sollten Sie Pad Ihre ganze Reihe so etwas wie 1400x1400 haben, so funktioniert es aber nicht genau an den gepolsterten Patches. Dies hat Zyklen verschwendet, aber zumindest für alle Größen bis (und einschließlich) 1400 × 1400 kompatibel.

Wenn Ihr Gerät eine maximale lokale Größe von 1024 hat, kann es 32x32 lokale Größe verarbeiten. Oder 1024 in 1-D.