Gears OS のモジュール化と並列 API

Mitsuki Miyagi, Yu Tobaru, Shinji Kono 琉球大学

Gears OS

API と実装の分離

Gears OS での形式化とInterfaceの導入

Gears OS の Interface

並列API

スライドの流れ

CbC

CbC

CbC の構文

__code cg0(int a, int b) {
    goto cg1(a+b);
}
__code cg1(int c) {
    goto cg2(c);
}

スライドの流れ

Gears における並列実行

Meta Data Gear と Meta Code Gear

Gears OS の構造

Gears OS の構造

Context

par goto

1つの Code Gear の実行は他の Code Gear に割り込まれない

__exit

__code code1(Integer *integer1, Integer * integer2, Integer *output) {
    par goto add(integer1, integer2, output, __exit);
    goto code2();
}

Perl スクリプトによる Meta Data Gear の生成

__code code1(struct Context *context, Integer *integer1, Integer *integer2, Integer *output) {
    // create context
    context->task = NEW(struct Context);
    initContext(context->task);

    // set task parameter
    context->task->next = C_add;
    context->task->idgCount = 2;
    context->task->idg = context->task->dataNum;
    context->task->maxIdg = context->task->idg + 2;
    context->task->odg = context->task->maxIdg;
    context->task->maxOdg = context->task->odg + 1;

    // create Data Gear Queue
    GET_META(integer1)->wait = createSynchronizedQueue(context);
    GET_META(integer2)->wait = createSynchronizedQueue(context);
    GET_META(integer3)->wait = createSynchronizedQueue(context);

    // set Input Data Gear
    context->task->data[context->task->idg+0] = (union Data*)integer1;
    context->task->data[context->task->idg+1] = (union Data*)integer2;

    // set Output Data Gear
    context->task->data[context->task->odg+0] = (union Data*)integer3;

   
    // set TaskManager->spawns parameter
    Gearef(context, TaskManager)->taskList = context->taskList;
    Gearef(context, TaskManager)->next1 = C_code2;
    goto parGotoMeta(context, C_code2);
}

スライドの流れ

Gears OS の評価(目的)

Gears OS の評価(環境)

Twice

Processor Time(ms)
1 CPU 1181.215
2 CPUs 627.914
4 CPUs 324.059
8 CPUs 159.932
16 CPUs 85.518
32 CPUs 43.496
GPU 127.018
GPU(kernel only) 6.018

評価の考察

Go 言語との比較

Goとの比較

スライドの流れ

今後の課題