int main(int argc, const char * argv[]) { ocrConfig_t ocrConfig; ocrParseArgs(argc, argv, &ocrConfig); ocrInit(&ocrConfig); ocrGuid_t terminateEdtGuid; ocrGuid_t terminateEdtTemplateGuid; ocrEdtTemplateCreate(&terminateEdtTemplateGuid, terminateEdt, 0 /*paramc*/, 1 /*depc*/); ocrEdtCreate(&terminateEdtGuid, terminateEdtTemplateGuid, EDT_PARAM_DEF, /*paramv=*/NULL, EDT_PARAM_DEF, /*depv=*/NULL, /*properties=*/0, NULL_GUID, /*outEvent=*/NULL); ocrGuid_t outputEventGuid; ocrGuid_t rootEdtGuid; ocrGuid_t rootEdtTemplateGuid; ocrEdtTemplateCreate(&rootEdtTemplateGuid, rootEdt, 0 /*paramc*/, 0 /*depc*/); ocrEdtCreate(&rootEdtGuid, rootEdtTemplateGuid, EDT_PARAM_DEF, /*paramv=*/NULL, EDT_PARAM_DEF, /*depv=*/NULL, /*properties=*/EDT_PROP_FINISH, NULL_GUID, /*outEvent=*/&outputEventGuid); // When output-event will be satisfied, the whole task sub-tree // spawned by rootEdt will be done, and shutdownEdt is called. ocrAddDependence(outputEventGuid, terminateEdtGuid, 0, DB_MODE_RO); ocrFinalize(); return 0; }
int main (int argc, char ** argv) { ocrEdt_t fctPtrArray [1]; fctPtrArray[0] = &task_for_edt; ocrInit(&argc, argv, 1, fctPtrArray); // Current thread is '0' and goes on with user code. ocrGuid_t event_guid; ocrEventCreate(&event_guid, OCR_EVENT_STICKY_T, true); // Creates the EDT ocrGuid_t edt_guid; ocrEdtCreate(&edt_guid, task_for_edt, /*paramc=*/0, /*params=*/ NULL, /*paramv=*/NULL, /*properties=*/0, /*depc=*/1, /*depv=*/NULL); // Register a dependence between an event and an edt ocrAddDependence(event_guid, edt_guid, 0); // Schedule the EDT (will run when dependences satisfied) ocrEdtSchedule(edt_guid); int *k; ocrGuid_t db_guid; ocrDbCreate(&db_guid, (void **) &k, sizeof(int), /*flags=*/FLAGS, /*location=*/NULL, NO_ALLOC); *k = 42; ocrEventSatisfy(event_guid, db_guid); ocrCleanup(); return 0; }
int main (int argc, char ** argv) { ocrEdt_t fctPtrArray [1]; fctPtrArray[0] = &task_for_edt; ocrInit(&argc, argv, 1, fctPtrArray); // Current thread is '0' and goes on with user code. ocrGuid_t event_guid; ocrEventCreate(&event_guid, OCR_EVENT_STICKY_T, true); // Creates the EDT u32 paramc = 1; u64 params[1]; params[0] = sizeof(int); int * paramv = (int *) malloc(sizeof(int)); paramv[0] = 32; ocrGuid_t edt_guid; ocrEdtCreate(&edt_guid, task_for_edt, paramc, params, (void**) ¶mv, 0, 1, NULL); // Register a dependence between an event and an edt ocrAddDependence(event_guid, edt_guid, 0); int *k; ocrGuid_t db_guid; ocrDbCreate(&db_guid,(void **) &k, sizeof(int), /*flags=*/FLAGS, /*location=*/NULL, NO_ALLOC); *k = 42; ocrEventSatisfy(event_guid, db_guid); ocrEdtSchedule(edt_guid); ocrCleanup(); return 0; }
int main (int argc, char ** argv) { ocrEdt_t fctPtrArray[2] = {summer, autumn}; ocrInit(&argc, argv, 2, fctPtrArray); /* No machine description */ if(argc != 3) { printf("Usage %s <num1> <num2>\n", argv[0]); return -1; } /* Create 2 data-blocks */ ocrGuid_t dbs[2]; int *data[2]; int i; for(i = 0; i < 2; ++i) { ocrDbCreate(&dbs[i], (void**)&data[i], sizeof(int), /*flags=*/0, /*location=*/NULL, NO_ALLOC); *(data[i]) = atoi(argv[i+1]); printf("Created a data-block with value %d (GUID: 0x%lx)\n", i, (u64)dbs[i]); } ocrGuid_t summerEdt, autumnEdt; ocrGuid_t autumnEvt, summerEvt[3]; ocrGuid_t summerEvtDbGuid; ocrGuid_t *summerEvtDb; /* Create final EDT (autumn) */ ocrEdtCreate(&autumnEdt, autumn, /*paramc=*/0, /*params=*/NULL, /*paramv=*/NULL, /*properties=*/0, /*depc=*/1, /*depv=*/NULL); /* Create event */ ocrEventCreate(&autumnEvt, OCR_EVENT_STICKY_T, true); /* Create summer */ ocrEdtCreate(&summerEdt, summer, /*paramc=*/0, /*params=*/NULL, /*paramv=*/NULL, /*properties=*/0, /*depc=*/3, /*depv=*/NULL); /* Create events for summer */ for(i = 0; i < 3; ++i) { ocrEventCreate(&summerEvt[i], OCR_EVENT_STICKY_T, true); } /* Create data-block containing event */ ocrDbCreate(&summerEvtDbGuid, (void**)&summerEvtDb, sizeof(ocrGuid_t), /*flags=*/0, /*location=*/NULL, NO_ALLOC); *summerEvtDb = autumnEvt; /* Link up dependencees */ for(i = 0; i < 3; ++i) { ocrAddDependence(summerEvt[i], summerEdt, i); } ocrAddDependence(autumnEvt, autumnEdt, 0); /* "Schedule" EDTs (order does not matter) */ ocrEdtSchedule(autumnEdt); ocrEdtSchedule(summerEdt); printf("Done all scheduling, now going to satisfy\n"); /* Satisfy dependences passing data */ ocrEventSatisfy(summerEvt[0], dbs[0]); ocrEventSatisfy(summerEvt[1], dbs[1]); ocrEventSatisfy(summerEvt[2], summerEvtDbGuid); /* Finalize */ ocrCleanup(); return 0; }