int main (int argc, char ** argv) { printf("Call Init\n"); hclib_launch(entrypoint, NULL); printf("Check results: "); assert_done(0, NB_ASYNC); printf("OK\n"); return 0; }
int main (int argc, char ** argv) { printf("Call Init\n"); char const *deps[] = { "system" }; hclib_launch(entrypoint, NULL, deps, 1); printf("Check results: "); assert_done(0, NB_ASYNC); printf("OK\n"); return 0; }
void spawn_async(volatile int * indices, int i) { if (i < NB_ASYNC) { hclib_start_finish(); indices[i] = i; hclib_async(async_fct, (void*) (indices+i), NO_FUTURE, NO_PHASER, ANY_PLACE, NO_PROP); spawn_async(indices, i+1); hclib_end_finish(); assert_done(i, i+1); } }
int main (int argc, char ** argv) { printf("Call Init\n"); int mid = NB_ASYNC/2; hclib::launch([&mid]() { int i = 0; int indices [NB_ASYNC]; hclib::finish([=, &i, &indices]() { // This is ok to have these on stack because this // code is alive until the end of the program. init_ran(ran, NB_ASYNC); printf("Go over [%d:%d]\n", i, mid); while(i < mid) { indices[i] = i; hclib::async([=]() { int index = indices[i]; assert(ran[index] == -1); ran[index] = index; }); i++; } }); printf("Midway\n"); assert_done(0, mid); printf("Go over [%d:%d]\n", i, NB_ASYNC); while(i < NB_ASYNC) { indices[i] = i; //Note: Forcefully pass the address we want to write to as a void ** hclib::async([=]() { int index = indices[i]; assert(ran[index] == -1); ran[index] = index; }); i++; } }); printf("Check results: "); assert_done(mid, NB_ASYNC); printf("OK\n"); return 0; }