( uid_6201 | 2015. 05. 26., k – 21:12 )

A közelmúltban egy aritmetikai feladat kapcsán próbáltam ki, hogy mit lehet kezdeni. Igaz C++ helyett C-ben.

- 4 szállal (4 magos CPU)
- folytatás lett volna 1024 szállal (OpenCL GPU-ra)

Ami kellett hozzá:
- thread használata --> pthread.h (és az alábbi szemaforozáshoz semaphore.h)
- input queue + thread szemaforozása (rész)feladat leemeléskor
- output queue + thread szemaforozása (rész)eredmény beírásakor

Eddig nem nehéz, szépen leprogramozható. A valódi nehézséget a kitűzött feladat megfelelő ideig futó részekre való elvi felbontása okozta. Ugyanis

- ha túl apró a részfeladat, akkor nagy a járulékos költsége a queue kezelésnek
- ha túl hosszúra nyúlhat egy-egy a részfeladat, akkor adott esetben elképzelhető hogy ez az extra hosszúra nyúlt részfeladat számítása még fut, míg a több száz másik részfeladat már el is készült és a vár a további feldolgozó erre az egy részeredményre. Illetve felesleges késleltetést (latency) okoz.

Erre az elvi szétbontásra fel kell készülni és sok feladatnál nem is olyan egyszerű.
Viszont a jó hír, hogy sok feladat szépen felosztható, így adja magát a többszálusításhoz.