diff options
| author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-05-26 17:19:39 -0400 |
|---|---|---|
| committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-05-26 17:19:39 -0400 |
| commit | a298df4f5c08023b8447e53aba14e062e551e10c (patch) | |
| tree | 66f2a8a2f2c2e3f8949de9d26b44ca6592797201 /src | |
| parent | ab4d9b18499d87cc63d2dd06999b364e5c809eb9 (diff) | |
GPUSync RTSS12 liblitmuswip-gpu-rtss12
Diffstat (limited to 'src')
| -rw-r--r-- | src/litmus.c | 71 | ||||
| -rw-r--r-- | src/syscalls.c | 10 |
2 files changed, 81 insertions, 0 deletions
diff --git a/src/litmus.c b/src/litmus.c index d3cc6bb..4f404e2 100644 --- a/src/litmus.c +++ b/src/litmus.c | |||
| @@ -100,3 +100,74 @@ void exit_litmus(void) | |||
| 100 | { | 100 | { |
| 101 | /* nothing to do in current version */ | 101 | /* nothing to do in current version */ |
| 102 | } | 102 | } |
| 103 | |||
| 104 | int open_kfmlp_gpu_sem(int fd, int name, int num_gpus, int gpu_offset, int num_simult_users, int affinity_aware) | ||
| 105 | { | ||
| 106 | int lock_od; | ||
| 107 | int affinity_od; | ||
| 108 | int num_replicas; | ||
| 109 | struct gpu_affinity_observer_args aff_args; | ||
| 110 | int aff_type; | ||
| 111 | |||
| 112 | // number of GPU tokens | ||
| 113 | num_replicas = num_gpus * num_simult_users; | ||
| 114 | |||
| 115 | // create the GPU token lock | ||
| 116 | lock_od = open_kfmlp_sem(fd, name, (void*)&num_replicas); | ||
| 117 | if(lock_od < 0) { | ||
| 118 | perror("open_kfmlp_sem"); | ||
| 119 | return -1; | ||
| 120 | } | ||
| 121 | |||
| 122 | // create the affinity method to use. | ||
| 123 | // "no affinity" -> KFMLP_SIMPLE_GPU_AFF_OBS | ||
| 124 | aff_args.obs.lock_od = lock_od; | ||
| 125 | aff_args.replica_to_gpu_offset = gpu_offset; | ||
| 126 | aff_args.nr_simult_users = num_simult_users; | ||
| 127 | |||
| 128 | aff_type = (affinity_aware) ? KFMLP_GPU_AFF_OBS : KFMLP_SIMPLE_GPU_AFF_OBS; | ||
| 129 | affinity_od = od_openx(fd, aff_type, name+1, &aff_args); | ||
| 130 | if(affinity_od < 0) { | ||
| 131 | perror("open_kfmlp_aff"); | ||
| 132 | return -1; | ||
| 133 | } | ||
| 134 | |||
| 135 | return lock_od; | ||
| 136 | } | ||
| 137 | |||
| 138 | |||
| 139 | |||
| 140 | int open_ikglp_gpu_sem(int fd, int name, int num_gpus, int gpu_offset, int num_simult_users, int affinity_aware, int relax_max_fifo_len) | ||
| 141 | { | ||
| 142 | int lock_od; | ||
| 143 | int affinity_od; | ||
| 144 | int num_replicas; | ||
| 145 | struct gpu_affinity_observer_args aff_args; | ||
| 146 | int aff_type; | ||
| 147 | |||
| 148 | // number of GPU tokens | ||
| 149 | num_replicas = num_gpus * num_simult_users; | ||
| 150 | |||
| 151 | // create the GPU token lock | ||
| 152 | lock_od = open_ikglp_sem(fd, name, (void*)&num_replicas); | ||
| 153 | if(lock_od < 0) { | ||
| 154 | perror("open_ikglp_sem"); | ||
| 155 | return -1; | ||
| 156 | } | ||
| 157 | |||
| 158 | // create the affinity method to use. | ||
| 159 | // "no affinity" -> KFMLP_SIMPLE_GPU_AFF_OBS | ||
| 160 | aff_args.obs.lock_od = lock_od; | ||
| 161 | aff_args.replica_to_gpu_offset = gpu_offset; | ||
| 162 | aff_args.nr_simult_users = num_simult_users; | ||
| 163 | aff_args.relaxed_rules = (relax_max_fifo_len) ? 1 : 0; | ||
| 164 | |||
| 165 | aff_type = (affinity_aware) ? IKGLP_GPU_AFF_OBS : IKGLP_SIMPLE_GPU_AFF_OBS; | ||
| 166 | affinity_od = od_openx(fd, aff_type, name+1, &aff_args); | ||
| 167 | if(affinity_od < 0) { | ||
| 168 | perror("open_ikglp_aff"); | ||
| 169 | return -1; | ||
| 170 | } | ||
| 171 | |||
| 172 | return lock_od; | ||
| 173 | } | ||
diff --git a/src/syscalls.c b/src/syscalls.c index e0ce941..97d1ebd 100644 --- a/src/syscalls.c +++ b/src/syscalls.c | |||
| @@ -96,3 +96,13 @@ int null_call(cycles_t *timestamp) | |||
| 96 | { | 96 | { |
| 97 | return syscall(__NR_null_call, timestamp); | 97 | return syscall(__NR_null_call, timestamp); |
| 98 | } | 98 | } |
| 99 | |||
| 100 | int register_nv_device(int nv_device_id) | ||
| 101 | { | ||
| 102 | return syscall(__NR_register_nv_device, nv_device_id, 1); | ||
| 103 | } | ||
| 104 | |||
| 105 | int unregister_nv_device(int nv_device_id) | ||
| 106 | { | ||
| 107 | return syscall(__NR_register_nv_device, nv_device_id, 0); | ||
| 108 | } | ||
