[176] | 1 | /* |
---|
| 2 | * swift_context.c |
---|
| 3 | * |
---|
| 4 | * (c) 2009 Ionut Rosoiu <ionut.rosoiu@gmail.com> |
---|
| 5 | * |
---|
| 6 | */ |
---|
| 7 | |
---|
| 8 | #include "swift_context.h" |
---|
| 9 | #include <stdlib.h> |
---|
| 10 | #include <string.h> |
---|
| 11 | |
---|
| 12 | void swift_context_init(swift_context_t *context, swift_size_t nprocs) { |
---|
| 13 | //TODO: check |
---|
| 14 | swift_thread_t *thread; |
---|
| 15 | int i; |
---|
| 16 | #ifdef SWIFT_USE_CUSTOM_ALLOCATOR |
---|
| 17 | int j; |
---|
| 18 | #endif |
---|
| 19 | |
---|
| 20 | context->thread_num = nprocs; |
---|
| 21 | context->parallel_finished = 0; |
---|
| 22 | |
---|
| 23 | context->threads = (swift_thread_t*) swift_malloc_system(nprocs * sizeof(swift_thread_t)); |
---|
| 24 | |
---|
| 25 | //TODO: check |
---|
| 26 | for (i=0; i<nprocs; i++) { |
---|
| 27 | thread = &context->threads[i]; |
---|
| 28 | |
---|
| 29 | #ifdef SWIFT_USE_CUSTOM_ALLOCATOR |
---|
| 30 | thread->heap = swift_malloc_system(SWIFT_HEAP_SIZE); |
---|
| 31 | thread->buckets = (swift_allocator_list_t**) swift_malloc_system(SWIFT_BUCKET_COUNT * sizeof(void*)); |
---|
| 32 | swift_assert(thread->heap && thread->buckets); |
---|
| 33 | |
---|
| 34 | thread->heap_top = thread->heap; |
---|
| 35 | thread->heap_limit = ((char*)thread->heap + SWIFT_HEAP_SIZE); |
---|
| 36 | |
---|
| 37 | for (j=0; j<SWIFT_BUCKET_COUNT; j++) { |
---|
| 38 | thread->buckets[j] = NULL; |
---|
| 39 | } |
---|
| 40 | #endif |
---|
| 41 | |
---|
| 42 | swift_deque_init(thread, |
---|
| 43 | &thread->workque, |
---|
| 44 | SWIFT_DEQUE_SIZE); |
---|
| 45 | |
---|
| 46 | //TODO: check |
---|
| 47 | thread->context = context; |
---|
| 48 | thread->id = i; |
---|
| 49 | thread->stats = 0; |
---|
| 50 | thread->stop = 0; |
---|
| 51 | thread->round_robin_id = i; |
---|
| 52 | thread->last_sleep_time = i * 10 + 1; |
---|
| 53 | thread->frame_no = 0; |
---|
| 54 | } |
---|
| 55 | } |
---|
| 56 | |
---|
| 57 | void swift_context_destroy(swift_context_t *context) { |
---|
| 58 | int i; |
---|
| 59 | #ifdef SWIFT_USE_CUSTOM_ALLOCATOR |
---|
| 60 | int j; |
---|
| 61 | #endif |
---|
| 62 | |
---|
| 63 | for (i=0; i<context->thread_num; i++) { |
---|
| 64 | swift_deque_destroy(&context->threads[i], &context->threads[i].workque); |
---|
| 65 | |
---|
| 66 | #ifdef SWIFT_USE_CUSTOM_ALLOCATOR |
---|
| 67 | for (j=0; j<SWIFT_BUCKET_COUNT; j++) { |
---|
| 68 | context->threads[i].buckets[j] = NULL; |
---|
| 69 | } |
---|
| 70 | swift_free_system(context->threads[i].buckets); |
---|
| 71 | #endif |
---|
| 72 | |
---|
| 73 | } |
---|
| 74 | |
---|
| 75 | swift_free_system(context->threads); |
---|
| 76 | } |
---|
| 77 | |
---|