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.