Skip to content

Commit 41dc66f

Browse files
author
Alexandros Koliousis
committed
Initial commit of Saber v0.1
1 parent 50616a7 commit 41dc66f

File tree

144 files changed

+19977
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

144 files changed

+19977
-0
lines changed

.gitignore

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/target/
2+
.settings/*
3+
.project
4+
.classpath
5+
*.o
6+
*.so
7+
*.out
8+
*.txt
9+
*.log
10+
/lib/

build.sh

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#!/bin/sh
2+
3+
SABER="."
4+
[ ! -d "lib" ] && mkdir lib/
5+
mvn package
6+
cp $SABER/target/saber-0.0.1-SNAPSHOT.jar lib/
7+
8+
exit 0

clib/CPU.c

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#include "uk_ac_imperial_lsds_saber_devices_TheCPU.h"
2+
#include <jni.h>
3+
4+
#include <unistd.h>
5+
#include <sched.h>
6+
7+
/* Thread affinity library calls */
8+
9+
#ifndef __APPLE__
10+
static cpu_set_t fullSet;
11+
12+
static cpu_set_t *getFullSet (void) {
13+
static int init = 0;
14+
if (init == 0) {
15+
int i;
16+
int ncores = sysconf(_SC_NPROCESSORS_ONLN);
17+
CPU_ZERO (&fullSet);
18+
for (i = 0; i < ncores; i++)
19+
CPU_SET (i, &fullSet);
20+
init = 1;
21+
}
22+
return &fullSet;
23+
}
24+
#endif
25+
26+
JNIEXPORT jint JNICALL Java_uk_ac_imperial_lsds_saber_devices_TheCPU_getNumCores
27+
(JNIEnv *env, jobject obj) {
28+
(void) env;
29+
(void) obj;
30+
#ifndef __APPLE__
31+
int ncores = 0;
32+
ncores = sysconf(_SC_NPROCESSORS_ONLN);
33+
return ncores;
34+
#else
35+
return 0;
36+
#endif
37+
}
38+
39+
JNIEXPORT jint JNICALL Java_uk_ac_imperial_lsds_saber_devices_TheCPU_bind
40+
(JNIEnv *env, jobject obj, jint core) {
41+
(void) env;
42+
(void) obj;
43+
#ifndef __APPLE__
44+
cpu_set_t set;
45+
CPU_ZERO (&set);
46+
CPU_SET (core, &set);
47+
return sched_setaffinity (0, sizeof(set), &set);
48+
#else
49+
(void) core;
50+
return 0;
51+
#endif
52+
}
53+
54+
JNIEXPORT jint JNICALL Java_uk_ac_imperial_lsds_saber_devices_TheCPU_unbind
55+
(JNIEnv *env, jobject obj) {
56+
(void) env;
57+
(void) obj;
58+
#ifndef __APPLE__
59+
return sched_setaffinity (0, sizeof (cpu_set_t), getFullSet());
60+
#else
61+
return 0;
62+
#endif
63+
}
64+
65+
JNIEXPORT jint JNICALL Java_uk_ac_imperial_lsds_saber_devices_TheCPU_getCpuId
66+
(JNIEnv *env, jobject obj) {
67+
(void) env;
68+
(void) obj;
69+
#ifndef __APPLE__
70+
int core = -1;
71+
cpu_set_t set;
72+
int error = sched_getaffinity (0, sizeof (set), &set);
73+
if (error < 0)
74+
return core; /* -1 */
75+
for (core = 0; core < CPU_SETSIZE; core++) {
76+
if (CPU_ISSET (core, &set))
77+
break;
78+
}
79+
return core;
80+
#else
81+
return 0;
82+
#endif
83+
}

0 commit comments

Comments
 (0)