summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--all_pairs/Makefile74
-rw-r--r--all_pairs/source/adpcm_dec/adpcm_dec.c2
-rw-r--r--all_pairs/source/adpcm_enc/adpcm_enc.c2
-rw-r--r--all_pairs/source/ammunition/ammunition.c2
-rw-r--r--all_pairs/source/anagram/anagram.c2
-rw-r--r--all_pairs/source/audiobeam/audiobeam.c2
-rw-r--r--all_pairs/source/cjpeg_transupp/cjpeg_transupp.c2
-rw-r--r--all_pairs/source/cjpeg_wrbmp/cjpeg_wrbmp.c2
-rw-r--r--all_pairs/source/cleanupSemaphores.c6
-rw-r--r--all_pairs/source/dijkstra/dijkstra.c2
-rw-r--r--all_pairs/source/empty.c2
-rw-r--r--all_pairs/source/epic/epic.c2
-rw-r--r--all_pairs/source/extra.h211
-rw-r--r--all_pairs/source/fmref/fmref.c2
-rw-r--r--all_pairs/source/g723_enc/g723_enc.c2
-rw-r--r--all_pairs/source/gsm_dec/gsm_dec.c2
-rw-r--r--all_pairs/source/gsm_enc/gsm_enc.c2
-rw-r--r--all_pairs/source/h264_dec/h264_dec.c2
-rw-r--r--all_pairs/source/huff_dec/huff_dec.c2
-rw-r--r--all_pairs/source/huff_enc/huff_enc.c2
-rw-r--r--all_pairs/source/mpeg2/mpeg2.c2
-rw-r--r--all_pairs/source/ndes/ndes.c2
-rw-r--r--all_pairs/source/petrinet/petrinet.c2
-rw-r--r--all_pairs/source/rijndael_dec/rijndael_dec.c2
-rw-r--r--all_pairs/source/rijndael_enc/rijndael_enc.c2
-rw-r--r--all_pairs/source/statemate/statemate.c2
-rw-r--r--all_pairs/source/susan/susan.c2
-rw-r--r--baseline/Makefile13
-rw-r--r--baseline/source/adpcm_dec/adpcm_dec.c2
-rw-r--r--baseline/source/adpcm_enc/adpcm_enc.c2
-rw-r--r--baseline/source/ammunition/ammunition.c2
-rw-r--r--baseline/source/anagram/anagram.c2
-rw-r--r--baseline/source/audiobeam/audiobeam.c2
-rw-r--r--baseline/source/cjpeg_transupp/cjpeg_transupp.c2
-rw-r--r--baseline/source/cjpeg_wrbmp/cjpeg_wrbmp.c2
-rw-r--r--baseline/source/dijkstra/dijkstra.c2
-rw-r--r--baseline/source/epic/epic.c2
-rw-r--r--baseline/source/fmref/fmref.c2
-rw-r--r--baseline/source/g723_enc/g723_enc.c2
-rw-r--r--baseline/source/gsm_dec/gsm_dec.c2
-rw-r--r--baseline/source/gsm_enc/gsm_enc.c2
-rw-r--r--baseline/source/h264_dec/h264_dec.c2
-rw-r--r--baseline/source/huff_dec/huff_dec.c2
-rw-r--r--baseline/source/huff_enc/huff_enc.c2
-rw-r--r--baseline/source/litmusStuff.h80
-rw-r--r--baseline/source/mpeg2/mpeg2.c2
-rw-r--r--baseline/source/ndes/ndes.c2
-rw-r--r--baseline/source/petrinet/petrinet.c2
-rw-r--r--baseline/source/rijndael_dec/rijndael_dec.c2
-rw-r--r--baseline/source/rijndael_enc/rijndael_enc.c2
-rw-r--r--baseline/source/statemate/statemate.c2
-rw-r--r--baseline/source/susan/susan.c2
-rwxr-xr-xdis/Makefile33
-rw-r--r--extra.h (renamed from baseline/source/extra.h)252
54 files changed, 317 insertions, 446 deletions
diff --git a/all_pairs/Makefile b/all_pairs/Makefile
index 36cf55a..0042372 100644
--- a/all_pairs/Makefile
+++ b/all_pairs/Makefile
@@ -1,57 +1,73 @@
1CC = gcc 1LIBLITMUS ?= /media/speedy/litmus/liblitmus
2CFLAGS = -pthread -O2 2CC ?= gcc
3CFLAGS = -pthread -O2 -I.. -DPAIRED
3LDFLAGS = -lrt 4LDFLAGS = -lrt
4all: bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec bin/cleanupSemaphores 5COMMON = ../extra.h
6
7# Handle cases where we're also profiling with the MMDC on the i.MX6Q
8ifneq ($(shell grep "define MMDC 1" ../extra.h),)
9 COMMON += /media/speedy/litmus/tools/mmdc/mmdc.c
10endif
11
12# Include all the LITMUS^RT headers if we're using it
13ifneq ($(shell grep "define LITMUS 1" ../extra.h),)
14 CFLAGS += -I${LIBLITMUS}/include -I${LIBLITMUS}/arch/arm/include
15 LDFLAGS += -L${LIBLITMUS} -llitmus
16endif
17
18all: bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec
19
20debug: all
21debug: CFLAGS += -ggdb3
5 22
6.PHONY: clean 23.PHONY: clean
7clean: 24clean:
8 rm bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec bin/cleanupSemaphores 25 rm -f bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec
9 26
10bin/cleanupSemaphores: ./source/extra.h ./source/cleanupSemaphores.c 27bin/cjpeg_wrbmp: ${COMMON} ./source/cjpeg_wrbmp/cjpeg_wrbmp.c ./source/cjpeg_wrbmp/input.c
11 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
12bin/cjpeg_wrbmp: ./source/extra.h ./source/cjpeg_wrbmp/cjpeg_wrbmp.c ./source/cjpeg_wrbmp/input.c
13 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 28 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
14bin/huff_enc: ./source/extra.h ./source/huff_enc/huff_enc.c 29bin/huff_enc: ${COMMON} ./source/huff_enc/huff_enc.c
15 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 30 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
16bin/gsm_enc: ./source/extra.h ./source/gsm_enc/gsm_enc.c 31bin/gsm_enc: ${COMMON} ./source/gsm_enc/gsm_enc.c
17 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 32 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
18bin/dijkstra: ./source/extra.h ./source/dijkstra/dijkstra.c ./source/dijkstra/input.c 33bin/dijkstra: ${COMMON} ./source/dijkstra/dijkstra.c ./source/dijkstra/input.c
19 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 34 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
20bin/h264_dec: ./source/extra.h ./source/h264_dec/h264_dec.c ./source/h264_dec/h264_decinput.c 35bin/h264_dec: ${COMMON} ./source/h264_dec/h264_dec.c ./source/h264_dec/h264_decinput.c
21 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 36 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
22bin/susan: ./source/extra.h ./source/susan/input.c ./source/susan/susan.c ./source/susan/wccfile.c ./source/susan/wcclibm.c ./source/susan/wccmalloc.c 37bin/susan: ${COMMON} ./source/susan/input.c ./source/susan/susan.c ./source/susan/wccfile.c ./source/susan/wcclibm.c ./source/susan/wccmalloc.c
23 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 38 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
24bin/adpcm_enc: ./source/extra.h ./source/adpcm_enc/adpcm_enc.c 39bin/adpcm_enc: ${COMMON} ./source/adpcm_enc/adpcm_enc.c
25 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 40 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
26bin/rijndael_dec: ./source/extra.h ./source/rijndael_dec/aes.c ./source/rijndael_dec/input_small_enc.c ./source/rijndael_dec/rijndael_dec.c ./source/rijndael_dec/rijndael_dec_libc.c 41bin/rijndael_dec: ${COMMON} ./source/rijndael_dec/aes.c ./source/rijndael_dec/input_small_enc.c ./source/rijndael_dec/rijndael_dec.c ./source/rijndael_dec/rijndael_dec_libc.c
27 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 42 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
28bin/huff_dec: ./source/extra.h ./source/huff_dec/huff_dec.c 43bin/huff_dec: ${COMMON} ./source/huff_dec/huff_dec.c
29 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 44 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
30bin/rijndael_enc: ./source/extra.h ./source/rijndael_enc/aes.c ./source/rijndael_enc/input_small.c ./source/rijndael_enc/rijndael_enc.c ./source/rijndael_enc/rijndael_enc_libc.c 45bin/rijndael_enc: ${COMMON} ./source/rijndael_enc/aes.c ./source/rijndael_enc/input_small.c ./source/rijndael_enc/rijndael_enc.c ./source/rijndael_enc/rijndael_enc_libc.c
31 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 46 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
32bin/gsm_dec: ./source/extra.h ./source/gsm_dec/gsm_dec.c 47bin/gsm_dec: ${COMMON} ./source/gsm_dec/gsm_dec.c
33 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 48 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
34bin/anagram: ./source/extra.h ./source/anagram/anagram.c ./source/anagram/anagram_input.c ./source/anagram/anagram_stdlib.c 49bin/anagram: ${COMMON} ./source/anagram/anagram.c ./source/anagram/anagram_input.c ./source/anagram/anagram_stdlib.c
35 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 50 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
36bin/epic: ./source/extra.h ./source/epic/epic.c 51bin/epic: ${COMMON} ./source/epic/epic.c
37 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 52 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
38bin/ammunition: ./source/extra.h ./source/ammunition/ammunition.c ./source/ammunition/ammunition_libc.c ./source/ammunition/arithm.c ./source/ammunition/bits.c 53bin/ammunition: ${COMMON} ./source/ammunition/ammunition.c ./source/ammunition/ammunition_libc.c ./source/ammunition/arithm.c ./source/ammunition/bits.c
39 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 54 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
40bin/g723_enc: ./source/extra.h ./source/g723_enc/g723_enc.c 55bin/g723_enc: ${COMMON} ./source/g723_enc/g723_enc.c
41 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 56 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
42bin/ndes: ./source/extra.h ./source/ndes/ndes.c 57bin/ndes: ${COMMON} ./source/ndes/ndes.c
43 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 58 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
44bin/petrinet: ./source/extra.h ./source/petrinet/petrinet.c 59bin/petrinet: ${COMMON} ./source/petrinet/petrinet.c
45 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 60 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
46bin/statemate: ./source/extra.h ./source/statemate/statemate.c 61bin/statemate: ${COMMON} ./source/statemate/statemate.c
47 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 62 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
48bin/cjpeg_transupp: ./source/extra.h ./source/cjpeg_transupp/cjpeg_transupp.c 63bin/cjpeg_transupp: ${COMMON} ./source/cjpeg_transupp/cjpeg_transupp.c
49 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 64 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
50bin/mpeg2: ./source/extra.h ./source/mpeg2/mpeg2.c 65bin/mpeg2: ${COMMON} ./source/mpeg2/mpeg2.c
51 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 66 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
52bin/fmref: ./source/extra.h ./source/fmref/fmref.c ./source/fmref/wcclibm.c 67bin/fmref: ${COMMON} ./source/fmref/fmref.c ./source/fmref/wcclibm.c
53 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 68 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
54bin/audiobeam: ./source/extra.h ./source/audiobeam/audiobeam.c ./source/audiobeam/audiobeaminput.c ./source/audiobeam/audiobeamlibmalloc.c ./source/audiobeam/audiobeamlibm.c 69bin/audiobeam: ${COMMON} ./source/audiobeam/audiobeam.c ./source/audiobeam/audiobeaminput.c ./source/audiobeam/audiobeamlibmalloc.c ./source/audiobeam/audiobeamlibm.c
55 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 70 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
56bin/adpcm_dec: ./source/extra.h ./source/adpcm_dec/adpcm_dec.c 71bin/adpcm_dec: ${COMMON} ./source/adpcm_dec/adpcm_dec.c
57 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 72 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
73
diff --git a/all_pairs/source/adpcm_dec/adpcm_dec.c b/all_pairs/source/adpcm_dec/adpcm_dec.c
index 04a5746..368e98d 100644
--- a/all_pairs/source/adpcm_dec/adpcm_dec.c
+++ b/all_pairs/source/adpcm_dec/adpcm_dec.c
@@ -35,7 +35,7 @@
35 Forward declaration of functions 35 Forward declaration of functions
36*/ 36*/
37 37
38#include "../extra.h" 38#include "extra.h"
39 39
40void adpcm_dec_decode( int ); 40void adpcm_dec_decode( int );
41int adpcm_dec_filtez( int *bpl, int *dlt ); 41int adpcm_dec_filtez( int *bpl, int *dlt );
diff --git a/all_pairs/source/adpcm_enc/adpcm_enc.c b/all_pairs/source/adpcm_enc/adpcm_enc.c
index 464768f..777aaf5 100644
--- a/all_pairs/source/adpcm_enc/adpcm_enc.c
+++ b/all_pairs/source/adpcm_enc/adpcm_enc.c
@@ -29,7 +29,7 @@
29 29
30/* common sampling rate for sound cards on IBM/PC */ 30/* common sampling rate for sound cards on IBM/PC */
31 31
32#include "../extra.h" 32#include "extra.h"
33#define SAMPLE_RATE 11025 33#define SAMPLE_RATE 11025
34 34
35#define PI 3141 35#define PI 3141
diff --git a/all_pairs/source/ammunition/ammunition.c b/all_pairs/source/ammunition/ammunition.c
index 269f4c0..052520e 100644
--- a/all_pairs/source/ammunition/ammunition.c
+++ b/all_pairs/source/ammunition/ammunition.c
@@ -24,7 +24,7 @@
24 24
25*/ 25*/
26 26
27#include "../extra.h" 27#include "extra.h"
28#include "bits.h" 28#include "bits.h"
29#include "arithm.h" 29#include "arithm.h"
30#include "ammunition_stdlib.h" 30#include "ammunition_stdlib.h"
diff --git a/all_pairs/source/anagram/anagram.c b/all_pairs/source/anagram/anagram.c
index b458fd2..5c1f29a 100644
--- a/all_pairs/source/anagram/anagram.c
+++ b/all_pairs/source/anagram/anagram.c
@@ -157,7 +157,7 @@
157 steps to FindAnagram. 157 steps to FindAnagram.
158*/ 158*/
159 159
160#include "../extra.h" 160#include "extra.h"
161#include "anagram_ctype.h" 161#include "anagram_ctype.h"
162#include "anagram_stdlib.h" 162#include "anagram_stdlib.h"
163#include "anagram_strings.h" 163#include "anagram_strings.h"
diff --git a/all_pairs/source/audiobeam/audiobeam.c b/all_pairs/source/audiobeam/audiobeam.c
index 208de80..50ebfff 100644
--- a/all_pairs/source/audiobeam/audiobeam.c
+++ b/all_pairs/source/audiobeam/audiobeam.c
@@ -23,7 +23,7 @@
23 Include section 23 Include section
24*/ 24*/
25 25
26#include "../extra.h" 26#include "extra.h"
27#include "audiobeamlibm.h" 27#include "audiobeamlibm.h"
28#include "audiobeamlibmalloc.h" 28#include "audiobeamlibmalloc.h"
29#include "audiobeam.h" 29#include "audiobeam.h"
diff --git a/all_pairs/source/cjpeg_transupp/cjpeg_transupp.c b/all_pairs/source/cjpeg_transupp/cjpeg_transupp.c
index 3f48539..5ec7e5e 100644
--- a/all_pairs/source/cjpeg_transupp/cjpeg_transupp.c
+++ b/all_pairs/source/cjpeg_transupp/cjpeg_transupp.c
@@ -29,7 +29,7 @@
29 Include section 29 Include section
30*/ 30*/
31 31
32#include "../extra.h" 32#include "extra.h"
33#include "jpeglib.h" 33#include "jpeglib.h"
34 34
35 35
diff --git a/all_pairs/source/cjpeg_wrbmp/cjpeg_wrbmp.c b/all_pairs/source/cjpeg_wrbmp/cjpeg_wrbmp.c
index 278725c..3c8d7ec 100644
--- a/all_pairs/source/cjpeg_wrbmp/cjpeg_wrbmp.c
+++ b/all_pairs/source/cjpeg_wrbmp/cjpeg_wrbmp.c
@@ -24,7 +24,7 @@
24 24
25*/ 25*/
26 26
27#include "../extra.h" 27#include "extra.h"
28#include "cdjpeg.h" 28#include "cdjpeg.h"
29 29
30#ifdef CJPEG_WRBMP_BMP_SUPPORTED 30#ifdef CJPEG_WRBMP_BMP_SUPPORTED
diff --git a/all_pairs/source/cleanupSemaphores.c b/all_pairs/source/cleanupSemaphores.c
deleted file mode 100644
index dde2bb3..0000000
--- a/all_pairs/source/cleanupSemaphores.c
+++ /dev/null
@@ -1,6 +0,0 @@
1#include <semaphore.h>
2
3int main(){
4 sem_unlink("/firstTacleSem");
5 sem_unlink("/secondTacleSem");
6}
diff --git a/all_pairs/source/dijkstra/dijkstra.c b/all_pairs/source/dijkstra/dijkstra.c
index 1b6a52f..333fd43 100644
--- a/all_pairs/source/dijkstra/dijkstra.c
+++ b/all_pairs/source/dijkstra/dijkstra.c
@@ -17,7 +17,7 @@
17 17
18*/ 18*/
19 19
20#include "../extra.h" 20#include "extra.h"
21#include "input.h" 21#include "input.h"
22 22
23/* 23/*
diff --git a/all_pairs/source/empty.c b/all_pairs/source/empty.c
index c7c5f5d..6681ba7 100644
--- a/all_pairs/source/empty.c
+++ b/all_pairs/source/empty.c
@@ -1,4 +1,4 @@
1#include "../extra.h" 1#include "extra.h"
2 2
3int main(int argc, char **argv) 3int main(int argc, char **argv)
4{ 4{
diff --git a/all_pairs/source/epic/epic.c b/all_pairs/source/epic/epic.c
index e258a4a..a1e344c 100644
--- a/all_pairs/source/epic/epic.c
+++ b/all_pairs/source/epic/epic.c
@@ -35,7 +35,7 @@
35*/ 35*/
36 36
37 37
38#include "../extra.h" 38#include "extra.h"
39#include "epic.h" 39#include "epic.h"
40 40
41#define X_SIZE 64 41#define X_SIZE 64
diff --git a/all_pairs/source/extra.h b/all_pairs/source/extra.h
deleted file mode 100644
index 0681250..0000000
--- a/all_pairs/source/extra.h
+++ /dev/null
@@ -1,211 +0,0 @@
1/**
2 * Copyright 2019 Sims Hill Osborne and Joshua Bakita
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20 * SOFTWARE.
21 **/
22#define _GNU_SOURCE
23#include <fcntl.h>
24#include <limits.h>
25#include <semaphore.h>
26#include <signal.h>
27#include <stdlib.h>
28#include <stdio.h>
29#include <string.h>
30#include <sys/mman.h>
31#include <sys/stat.h>
32#include <time.h>
33#include <unistd.h>
34#include <sched.h>
35
36// This is only visible if _GNU_SOURCE is defined, and that define does not
37// come along to places where this file is included. Address this by manually
38// forcing it into the global namespace.
39extern int sched_getcpu();
40
41// Benchmarks use SET_UP, START_LOOP, STOP_LOOP, and WRITE_TO_FILE
42// These are macros so that we can declare and maintain additional state inside
43// the benchmark.
44#define SET_UP if (argc != 8) {\
45 printf("Usage: %s <name> <runs> <my core> <other core> <other program> <runID> <lockID>", argv[0]);\
46 exit(1);\
47 }\
48 char * thisProgram = argv[1];\
49 int maxJobs = atoi(argv[2]);\
50 unsigned int thisCore = atoi(argv[3]);\
51 unsigned int otherCore = atoi(argv[4]);\
52 thisCore = sched_getcpu();\
53 char * otherProgram = argv[5];\
54 char * runID = argv[6];\
55 int lockID = atoi(argv[7]);\
56 struct timespec _start, _end;\
57 int jobsComplete;\
58 int jobs_complete = -1;\
59 long * startS = malloc(sizeof(long) *maxJobs);\
60 long * startN = malloc(sizeof(long) *maxJobs);\
61 long * endS = malloc(sizeof(long) *maxJobs);\
62 long * endN = malloc(sizeof(long) *maxJobs);\
63 char * bigArray;\
64 char fileName[strlen(runID) + 5];\
65 strcpy(fileName, runID);\
66 strcat(fileName, ".txt");\
67 mlockall(MCL_CURRENT || MCL_FUTURE);\
68 sem_t *firstSem=sem_open("/firstTacleSem", O_CREAT, 644, 0);\
69 if (firstSem == SEM_FAILED) {\
70 perror("Error opening/creating first semaphore");\
71 exit(1);\
72 }\
73 sem_t *secondSem=sem_open("/secondTacleSem", O_CREAT, 644, 0);\
74 if (secondSem == SEM_FAILED) {\
75 perror("Error opening/creating second semaphore");\
76 exit(1);\
77 }\
78 int barrier_file = shm_open("/TacleBarrier", O_CREAT | O_RDWR, 644);\
79 if (barrier_file == -1) {\
80 perror("Error creating shared memory");\
81 exit(1);\
82 }\
83 /* This sets our shared file to be one byte of '\0'*/ \
84 if (ftruncate(barrier_file, 1) == -1) {\
85 perror("Error setting size of shared memory");\
86 exit(1);\
87 }\
88 char * barrier = mmap(NULL, 1, PROT_WRITE, MAP_SHARED, barrier_file, 0);\
89 if (barrier == MAP_FAILED) {\
90 perror("Error mapping shared memory");\
91 exit(1);\
92 }\
93 int val;
94
95#define SAVE_RESULTS \
96 if(jobs_complete >= maxJobs) {\
97 fprintf(stderr, "Max jobs setting too small! Trying to record job #%d when we only have space for %d jobs. Exiting...\n", jobs_complete, maxJobs);\
98 exit(1);\
99 }\
100 if (jobs_complete > -1){\
101 startS[jobs_complete]=_start.tv_sec;\
102 startN[jobs_complete]=_start.tv_nsec;\
103 endS[jobs_complete]=_end.tv_sec;\
104 endN[jobs_complete]=_end.tv_nsec;\
105 }
106
107#define WRITE_TO_FILE {\
108 munlockall();\
109 FILE *fp = fopen(fileName, "a");\
110 if (fp == NULL) {\
111 perror("Error opening file. \n");\
112 exit(1);\
113 }\
114 for(int i = 0; i <= jobs_complete; i++){\
115 fprintf(fp, "%s %s %u %u %d %ld %ld %ld %ld %s %d \n",\
116 thisProgram, otherProgram, thisCore, otherCore, maxJobs,\
117 startS[i], startN[i], endS[i], endN[i],\
118 runID, i);\
119 }\
120 fclose(fp);\
121 /* Clean up the barrier synchronization shared memory */\
122 munmap(barrier, 1);\
123 shm_unlink("/TacleBarrier");\
124 free(startS);\
125 free(startN);\
126 free(endS);\
127 free(endN);\
128}
129
130// Call the wbinvld instruction (it's in a kernel module due to it being ring-0)
131#define FLUSH_CACHES FILE *fp = fopen("/proc/wbinvd", "r");\
132 if (fp == NULL) {\
133 perror("Cache flush module interface cannot be opened");\
134 exit(1);\
135 }\
136 char dummy;\
137 if (fread(&dummy, 1, 1, fp) == 0) {\
138 perror("Unable to access cache flush module interface");\
139 exit(1);\
140 }\
141 fclose(fp);
142
143// These timers should just be aliases to the hardware counters w/ some small adjustments
144#define START_TIMER clock_gettime(CLOCK_MONOTONIC, &_start);
145#define STOP_TIMER clock_gettime(CLOCK_MONOTONIC, &_end);
146
147//check value of sem
148//if sem=0, unlock
149//if sem=1, spin
150
151#define SLEEP nanosleep((const struct timespec[]){{0, 1000000}}, NULL);
152
153#define FIRST_UNLOCK if (lockID == 1) {\
154 if (sem_post(secondSem) != 0) {\
155 perror("Unable to unlock second semaphore");\
156 exit(1);\
157 }\
158 } \
159 else {\
160 if (sem_post(firstSem) != 0) {\
161 perror("Unable to unlock first semaphore");\
162 exit(1);\
163 }\
164 } \
165
166#define FIRST_LOCK if (lockID == 1) {\
167 if (sem_wait(firstSem) != 0) {\
168 perror("Unable to wait on first semaphore");\
169 exit(1);\
170 }\
171 }\
172 else {\
173 if (sem_wait(secondSem) != 0) {\
174 perror("Unable to wait on second semaphore");\
175 exit(1);\
176 }\
177 }
178
179
180#define SECOND_UNLOCK if (lockID==1){sem_post(fourthSem) ; }\
181 else {sem_post(thirdSem) ; }
182
183#define SECOND_LOCK if (lockID==1){sem_wait(thirdSem); }\
184 else {sem_wait(fourthSem); }
185
186#define BARRIER_SYNC if (__sync_bool_compare_and_swap(barrier, 0, 1)) {\
187 while (!__sync_bool_compare_and_swap(barrier, 0, 0)) {};\
188 }\
189 else {\
190 __sync_bool_compare_and_swap(barrier, 1, 0);\
191 }
192
193#define START_LOOP FIRST_UNLOCK FIRST_LOCK sched_yield(); FLUSH_CACHES BARRIER_SYNC START_TIMER
194#define STOP_LOOP STOP_TIMER jobs_complete++; SAVE_RESULTS
195
196
197/*
198Intended structure
199
200main
201SET_UP
202notice that STOP LOOP negates the ++ if outout=0
203for (jobsComplete=0; jobsComplete<maxJobs; jobsComplete++){
204 START_LOOP
205 tacleInit();
206 tacleMain();
207 STOP_LOOP
208}
209WRITE_TO_FILE
210tacleReturn
211*/
diff --git a/all_pairs/source/fmref/fmref.c b/all_pairs/source/fmref/fmref.c
index bcc7ce6..e4c9aaa 100644
--- a/all_pairs/source/fmref/fmref.c
+++ b/all_pairs/source/fmref/fmref.c
@@ -5,7 +5,7 @@
5*/ 5*/
6 6
7 7
8#include "../extra.h" 8#include "extra.h"
9#include "wcclibm.h" 9#include "wcclibm.h"
10#ifndef M_PI 10#ifndef M_PI
11#define M_PI 3.1415926535897932384626433832795 11#define M_PI 3.1415926535897932384626433832795
diff --git a/all_pairs/source/g723_enc/g723_enc.c b/all_pairs/source/g723_enc/g723_enc.c
index 331c821..209e3ce 100644
--- a/all_pairs/source/g723_enc/g723_enc.c
+++ b/all_pairs/source/g723_enc/g723_enc.c
@@ -31,7 +31,7 @@
31 included in this Recommendation. 31 included in this Recommendation.
32*/ 32*/
33 33
34#include "../extra.h" 34#include "extra.h"
35struct g723_enc_state_t { 35struct g723_enc_state_t {
36 long yl; /* Locked or steady state step size multiplier. */ 36 long yl; /* Locked or steady state step size multiplier. */
37 short yu; /* Unlocked or non-steady state step size multiplier. */ 37 short yu; /* Unlocked or non-steady state step size multiplier. */
diff --git a/all_pairs/source/gsm_dec/gsm_dec.c b/all_pairs/source/gsm_dec/gsm_dec.c
index 06d24d5..ba9a9e9 100644
--- a/all_pairs/source/gsm_dec/gsm_dec.c
+++ b/all_pairs/source/gsm_dec/gsm_dec.c
@@ -21,7 +21,7 @@
21*/ 21*/
22 22
23 23
24#include "../extra.h" 24#include "extra.h"
25#include "gsm.h" 25#include "gsm.h"
26#include "add.h" 26#include "add.h"
27#include "data.h" 27#include "data.h"
diff --git a/all_pairs/source/gsm_enc/gsm_enc.c b/all_pairs/source/gsm_enc/gsm_enc.c
index 3f051ec..e8154bb 100644
--- a/all_pairs/source/gsm_enc/gsm_enc.c
+++ b/all_pairs/source/gsm_enc/gsm_enc.c
@@ -5,7 +5,7 @@
5 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. 5 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
6 */ 6 */
7 7
8#include "../extra.h" 8#include "extra.h"
9#include "private.h" 9#include "private.h"
10 10
11/* 11/*
diff --git a/all_pairs/source/h264_dec/h264_dec.c b/all_pairs/source/h264_dec/h264_dec.c
index 1fed68b..e74bec9 100644
--- a/all_pairs/source/h264_dec/h264_dec.c
+++ b/all_pairs/source/h264_dec/h264_dec.c
@@ -25,7 +25,7 @@
25 Include section 25 Include section
26*/ 26*/
27 27
28#include "../extra.h" 28#include "extra.h"
29#include "h264_dec.h" 29#include "h264_dec.h"
30 30
31 31
diff --git a/all_pairs/source/huff_dec/huff_dec.c b/all_pairs/source/huff_dec/huff_dec.c
index b83b99d..58b40d3 100644
--- a/all_pairs/source/huff_dec/huff_dec.c
+++ b/all_pairs/source/huff_dec/huff_dec.c
@@ -49,7 +49,7 @@ new schemes (this item is not a must)
49*/ 49*/
50 50
51 51
52#include "../extra.h" 52#include "extra.h"
53typedef struct s_tree { 53typedef struct s_tree {
54 unsigned int byte; /* A byte has to be coded as an unsigned integer to 54 unsigned int byte; /* A byte has to be coded as an unsigned integer to
55 allow a node to have a value over 255 */ 55 allow a node to have a value over 255 */
diff --git a/all_pairs/source/huff_enc/huff_enc.c b/all_pairs/source/huff_enc/huff_enc.c
index 133fe95..0d74916 100644
--- a/all_pairs/source/huff_enc/huff_enc.c
+++ b/all_pairs/source/huff_enc/huff_enc.c
@@ -50,7 +50,7 @@ new schemes (this item is not a must)
50*/ 50*/
51 51
52 52
53#include "../extra.h" 53#include "extra.h"
54typedef struct huff_enc_s_tree { 54typedef struct huff_enc_s_tree {
55 unsigned int byte; /* A byte has to be coded as an unsigned integer to 55 unsigned int byte; /* A byte has to be coded as an unsigned integer to
56 allow a node to have a value over 255 */ 56 allow a node to have a value over 255 */
diff --git a/all_pairs/source/mpeg2/mpeg2.c b/all_pairs/source/mpeg2/mpeg2.c
index a810744..0567225 100644
--- a/all_pairs/source/mpeg2/mpeg2.c
+++ b/all_pairs/source/mpeg2/mpeg2.c
@@ -48,7 +48,7 @@
48/* 48/*
49 Forward declaration of data types 49 Forward declaration of data types
50*/ 50*/
51#include "../extra.h" 51#include "extra.h"
52struct mbinfo; 52struct mbinfo;
53 53
54 54
diff --git a/all_pairs/source/ndes/ndes.c b/all_pairs/source/ndes/ndes.c
index b0f494c..f169c62 100644
--- a/all_pairs/source/ndes/ndes.c
+++ b/all_pairs/source/ndes/ndes.c
@@ -17,7 +17,7 @@
17*/ 17*/
18 18
19/* A read from this address will result in an known value of 1 */ 19/* A read from this address will result in an known value of 1 */
20#include "../extra.h" 20#include "extra.h"
21#define KNOWN_VALUE 1 21#define KNOWN_VALUE 1
22#define NDES_WORSTCASE 1 22#define NDES_WORSTCASE 1
23/* 23/*
diff --git a/all_pairs/source/petrinet/petrinet.c b/all_pairs/source/petrinet/petrinet.c
index cabb40d..6ef3392 100644
--- a/all_pairs/source/petrinet/petrinet.c
+++ b/all_pairs/source/petrinet/petrinet.c
@@ -25,7 +25,7 @@
25*/ 25*/
26 26
27 27
28#include "../extra.h" 28#include "extra.h"
29 29
30#ifdef PROFILING 30#ifdef PROFILING
31#include <stdio.h> 31#include <stdio.h>
diff --git a/all_pairs/source/rijndael_dec/rijndael_dec.c b/all_pairs/source/rijndael_dec/rijndael_dec.c
index 93bb424..61db767 100644
--- a/all_pairs/source/rijndael_dec/rijndael_dec.c
+++ b/all_pairs/source/rijndael_dec/rijndael_dec.c
@@ -38,7 +38,7 @@
38 ----------------------------------------------------------------------- 38 -----------------------------------------------------------------------
39*/ 39*/
40 40
41#include "../extra.h" 41#include "extra.h"
42#include "aes.h" 42#include "aes.h"
43#include "rijndael_dec_libc.h" 43#include "rijndael_dec_libc.h"
44 44
diff --git a/all_pairs/source/rijndael_enc/rijndael_enc.c b/all_pairs/source/rijndael_enc/rijndael_enc.c
index 0c10353..6c85eee 100644
--- a/all_pairs/source/rijndael_enc/rijndael_enc.c
+++ b/all_pairs/source/rijndael_enc/rijndael_enc.c
@@ -38,7 +38,7 @@
38 ----------------------------------------------------------------------- 38 -----------------------------------------------------------------------
39*/ 39*/
40 40
41#include "../extra.h" 41#include "extra.h"
42#include "aes.h" 42#include "aes.h"
43#include "rijndael_enc_libc.h" 43#include "rijndael_enc_libc.h"
44 44
diff --git a/all_pairs/source/statemate/statemate.c b/all_pairs/source/statemate/statemate.c
index 00491e5..888d0fa 100644
--- a/all_pairs/source/statemate/statemate.c
+++ b/all_pairs/source/statemate/statemate.c
@@ -27,7 +27,7 @@
27 Macro definitions 27 Macro definitions
28*/ 28*/
29 29
30#include "../extra.h" 30#include "extra.h"
31 31
32#define SYS_bit_get(a,b) (a)[(b)] 32#define SYS_bit_get(a,b) (a)[(b)]
33#define SYS_bit_clr(a,b) (a)[(b)] = 0 33#define SYS_bit_clr(a,b) (a)[(b)] = 0
diff --git a/all_pairs/source/susan/susan.c b/all_pairs/source/susan/susan.c
index 4bc4cb8..dc27fb1 100644
--- a/all_pairs/source/susan/susan.c
+++ b/all_pairs/source/susan/susan.c
@@ -269,7 +269,7 @@
269 269
270\**********************************************************************/ 270\**********************************************************************/
271 271
272#include "../extra.h" 272#include "extra.h"
273#include "wcclibm.h" 273#include "wcclibm.h"
274#include "wccfile.h" 274#include "wccfile.h"
275#include "wccmalloc.h" 275#include "wccmalloc.h"
diff --git a/baseline/Makefile b/baseline/Makefile
index ef39b7d..40b57f4 100644
--- a/baseline/Makefile
+++ b/baseline/Makefile
@@ -1,25 +1,28 @@
1LIBLITMUS ?= /media/speedy/litmus/liblitmus 1LIBLITMUS ?= /media/speedy/litmus/liblitmus
2CC ?= gcc 2CC ?= gcc
3CFLAGS = -pthread -O2 3CFLAGS = -pthread -O2 -I..
4LDFLAGS = -lrt 4LDFLAGS = -lrt
5COMMON = ./source/extra.h 5COMMON = ../extra.h
6 6
7# Handle cases where we're also profiling with the MMDC on the i.MX6Q 7# Handle cases where we're also profiling with the MMDC on the i.MX6Q
8ifneq ($(shell grep "define MMDC 1" source/extra.h),) 8ifneq ($(shell grep "define MMDC 1" ../extra.h),)
9 COMMON += /media/speedy/litmus/tools/mmdc/mmdc.c 9 COMMON += /media/speedy/litmus/tools/mmdc/mmdc.c
10endif 10endif
11 11
12# Include all the LITMUS^RT headers if we're using it 12# Include all the LITMUS^RT headers if we're using it
13ifneq ($(shell grep "define LITMUS 1" source/extra.h),) 13ifneq ($(shell grep "define LITMUS 1" ../extra.h),)
14 CFLAGS += -I${LIBLITMUS}/include -I${LIBLITMUS}/arch/arm/include 14 CFLAGS += -I${LIBLITMUS}/include -I${LIBLITMUS}/arch/arm/include
15 LDFLAGS += -L${LIBLITMUS} -llitmus 15 LDFLAGS += -L${LIBLITMUS} -llitmus
16endif 16endif
17 17
18all: bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec 18all: bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec
19 19
20debug: all
21debug: CFLAGS += -ggdb3
22
20.PHONY: clean 23.PHONY: clean
21clean: 24clean:
22 rm bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec 25 rm -f bin/cjpeg_wrbmp bin/huff_enc bin/gsm_enc bin/dijkstra bin/h264_dec bin/susan bin/adpcm_enc bin/rijndael_dec bin/huff_dec bin/rijndael_enc bin/gsm_dec bin/anagram bin/epic bin/ammunition bin/g723_enc bin/ndes bin/petrinet bin/statemate bin/cjpeg_transupp bin/mpeg2 bin/fmref bin/audiobeam bin/adpcm_dec
23 26
24bin/cjpeg_wrbmp: ${COMMON} ./source/cjpeg_wrbmp/cjpeg_wrbmp.c ./source/cjpeg_wrbmp/input.c 27bin/cjpeg_wrbmp: ${COMMON} ./source/cjpeg_wrbmp/cjpeg_wrbmp.c ./source/cjpeg_wrbmp/input.c
25 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 28 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
diff --git a/baseline/source/adpcm_dec/adpcm_dec.c b/baseline/source/adpcm_dec/adpcm_dec.c
index 04a5746..368e98d 100644
--- a/baseline/source/adpcm_dec/adpcm_dec.c
+++ b/baseline/source/adpcm_dec/adpcm_dec.c
@@ -35,7 +35,7 @@
35 Forward declaration of functions 35 Forward declaration of functions
36*/ 36*/
37 37
38#include "../extra.h" 38#include "extra.h"
39 39
40void adpcm_dec_decode( int ); 40void adpcm_dec_decode( int );
41int adpcm_dec_filtez( int *bpl, int *dlt ); 41int adpcm_dec_filtez( int *bpl, int *dlt );
diff --git a/baseline/source/adpcm_enc/adpcm_enc.c b/baseline/source/adpcm_enc/adpcm_enc.c
index 464768f..777aaf5 100644
--- a/baseline/source/adpcm_enc/adpcm_enc.c
+++ b/baseline/source/adpcm_enc/adpcm_enc.c
@@ -29,7 +29,7 @@
29 29
30/* common sampling rate for sound cards on IBM/PC */ 30/* common sampling rate for sound cards on IBM/PC */
31 31
32#include "../extra.h" 32#include "extra.h"
33#define SAMPLE_RATE 11025 33#define SAMPLE_RATE 11025
34 34
35#define PI 3141 35#define PI 3141
diff --git a/baseline/source/ammunition/ammunition.c b/baseline/source/ammunition/ammunition.c
index 269f4c0..052520e 100644
--- a/baseline/source/ammunition/ammunition.c
+++ b/baseline/source/ammunition/ammunition.c
@@ -24,7 +24,7 @@
24 24
25*/ 25*/
26 26
27#include "../extra.h" 27#include "extra.h"
28#include "bits.h" 28#include "bits.h"
29#include "arithm.h" 29#include "arithm.h"
30#include "ammunition_stdlib.h" 30#include "ammunition_stdlib.h"
diff --git a/baseline/source/anagram/anagram.c b/baseline/source/anagram/anagram.c
index b458fd2..5c1f29a 100644
--- a/baseline/source/anagram/anagram.c
+++ b/baseline/source/anagram/anagram.c
@@ -157,7 +157,7 @@
157 steps to FindAnagram. 157 steps to FindAnagram.
158*/ 158*/
159 159
160#include "../extra.h" 160#include "extra.h"
161#include "anagram_ctype.h" 161#include "anagram_ctype.h"
162#include "anagram_stdlib.h" 162#include "anagram_stdlib.h"
163#include "anagram_strings.h" 163#include "anagram_strings.h"
diff --git a/baseline/source/audiobeam/audiobeam.c b/baseline/source/audiobeam/audiobeam.c
index 208de80..50ebfff 100644
--- a/baseline/source/audiobeam/audiobeam.c
+++ b/baseline/source/audiobeam/audiobeam.c
@@ -23,7 +23,7 @@
23 Include section 23 Include section
24*/ 24*/
25 25
26#include "../extra.h" 26#include "extra.h"
27#include "audiobeamlibm.h" 27#include "audiobeamlibm.h"
28#include "audiobeamlibmalloc.h" 28#include "audiobeamlibmalloc.h"
29#include "audiobeam.h" 29#include "audiobeam.h"
diff --git a/baseline/source/cjpeg_transupp/cjpeg_transupp.c b/baseline/source/cjpeg_transupp/cjpeg_transupp.c
index 3f48539..5ec7e5e 100644
--- a/baseline/source/cjpeg_transupp/cjpeg_transupp.c
+++ b/baseline/source/cjpeg_transupp/cjpeg_transupp.c
@@ -29,7 +29,7 @@
29 Include section 29 Include section
30*/ 30*/
31 31
32#include "../extra.h" 32#include "extra.h"
33#include "jpeglib.h" 33#include "jpeglib.h"
34 34
35 35
diff --git a/baseline/source/cjpeg_wrbmp/cjpeg_wrbmp.c b/baseline/source/cjpeg_wrbmp/cjpeg_wrbmp.c
index 278725c..3c8d7ec 100644
--- a/baseline/source/cjpeg_wrbmp/cjpeg_wrbmp.c
+++ b/baseline/source/cjpeg_wrbmp/cjpeg_wrbmp.c
@@ -24,7 +24,7 @@
24 24
25*/ 25*/
26 26
27#include "../extra.h" 27#include "extra.h"
28#include "cdjpeg.h" 28#include "cdjpeg.h"
29 29
30#ifdef CJPEG_WRBMP_BMP_SUPPORTED 30#ifdef CJPEG_WRBMP_BMP_SUPPORTED
diff --git a/baseline/source/dijkstra/dijkstra.c b/baseline/source/dijkstra/dijkstra.c
index 1b6a52f..333fd43 100644
--- a/baseline/source/dijkstra/dijkstra.c
+++ b/baseline/source/dijkstra/dijkstra.c
@@ -17,7 +17,7 @@
17 17
18*/ 18*/
19 19
20#include "../extra.h" 20#include "extra.h"
21#include "input.h" 21#include "input.h"
22 22
23/* 23/*
diff --git a/baseline/source/epic/epic.c b/baseline/source/epic/epic.c
index e258a4a..a1e344c 100644
--- a/baseline/source/epic/epic.c
+++ b/baseline/source/epic/epic.c
@@ -35,7 +35,7 @@
35*/ 35*/
36 36
37 37
38#include "../extra.h" 38#include "extra.h"
39#include "epic.h" 39#include "epic.h"
40 40
41#define X_SIZE 64 41#define X_SIZE 64
diff --git a/baseline/source/fmref/fmref.c b/baseline/source/fmref/fmref.c
index bcc7ce6..e4c9aaa 100644
--- a/baseline/source/fmref/fmref.c
+++ b/baseline/source/fmref/fmref.c
@@ -5,7 +5,7 @@
5*/ 5*/
6 6
7 7
8#include "../extra.h" 8#include "extra.h"
9#include "wcclibm.h" 9#include "wcclibm.h"
10#ifndef M_PI 10#ifndef M_PI
11#define M_PI 3.1415926535897932384626433832795 11#define M_PI 3.1415926535897932384626433832795
diff --git a/baseline/source/g723_enc/g723_enc.c b/baseline/source/g723_enc/g723_enc.c
index 331c821..209e3ce 100644
--- a/baseline/source/g723_enc/g723_enc.c
+++ b/baseline/source/g723_enc/g723_enc.c
@@ -31,7 +31,7 @@
31 included in this Recommendation. 31 included in this Recommendation.
32*/ 32*/
33 33
34#include "../extra.h" 34#include "extra.h"
35struct g723_enc_state_t { 35struct g723_enc_state_t {
36 long yl; /* Locked or steady state step size multiplier. */ 36 long yl; /* Locked or steady state step size multiplier. */
37 short yu; /* Unlocked or non-steady state step size multiplier. */ 37 short yu; /* Unlocked or non-steady state step size multiplier. */
diff --git a/baseline/source/gsm_dec/gsm_dec.c b/baseline/source/gsm_dec/gsm_dec.c
index 06d24d5..ba9a9e9 100644
--- a/baseline/source/gsm_dec/gsm_dec.c
+++ b/baseline/source/gsm_dec/gsm_dec.c
@@ -21,7 +21,7 @@
21*/ 21*/
22 22
23 23
24#include "../extra.h" 24#include "extra.h"
25#include "gsm.h" 25#include "gsm.h"
26#include "add.h" 26#include "add.h"
27#include "data.h" 27#include "data.h"
diff --git a/baseline/source/gsm_enc/gsm_enc.c b/baseline/source/gsm_enc/gsm_enc.c
index 3f051ec..e8154bb 100644
--- a/baseline/source/gsm_enc/gsm_enc.c
+++ b/baseline/source/gsm_enc/gsm_enc.c
@@ -5,7 +5,7 @@
5 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. 5 * details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
6 */ 6 */
7 7
8#include "../extra.h" 8#include "extra.h"
9#include "private.h" 9#include "private.h"
10 10
11/* 11/*
diff --git a/baseline/source/h264_dec/h264_dec.c b/baseline/source/h264_dec/h264_dec.c
index 1fed68b..e74bec9 100644
--- a/baseline/source/h264_dec/h264_dec.c
+++ b/baseline/source/h264_dec/h264_dec.c
@@ -25,7 +25,7 @@
25 Include section 25 Include section
26*/ 26*/
27 27
28#include "../extra.h" 28#include "extra.h"
29#include "h264_dec.h" 29#include "h264_dec.h"
30 30
31 31
diff --git a/baseline/source/huff_dec/huff_dec.c b/baseline/source/huff_dec/huff_dec.c
index b83b99d..58b40d3 100644
--- a/baseline/source/huff_dec/huff_dec.c
+++ b/baseline/source/huff_dec/huff_dec.c
@@ -49,7 +49,7 @@ new schemes (this item is not a must)
49*/ 49*/
50 50
51 51
52#include "../extra.h" 52#include "extra.h"
53typedef struct s_tree { 53typedef struct s_tree {
54 unsigned int byte; /* A byte has to be coded as an unsigned integer to 54 unsigned int byte; /* A byte has to be coded as an unsigned integer to
55 allow a node to have a value over 255 */ 55 allow a node to have a value over 255 */
diff --git a/baseline/source/huff_enc/huff_enc.c b/baseline/source/huff_enc/huff_enc.c
index 133fe95..0d74916 100644
--- a/baseline/source/huff_enc/huff_enc.c
+++ b/baseline/source/huff_enc/huff_enc.c
@@ -50,7 +50,7 @@ new schemes (this item is not a must)
50*/ 50*/
51 51
52 52
53#include "../extra.h" 53#include "extra.h"
54typedef struct huff_enc_s_tree { 54typedef struct huff_enc_s_tree {
55 unsigned int byte; /* A byte has to be coded as an unsigned integer to 55 unsigned int byte; /* A byte has to be coded as an unsigned integer to
56 allow a node to have a value over 255 */ 56 allow a node to have a value over 255 */
diff --git a/baseline/source/litmusStuff.h b/baseline/source/litmusStuff.h
deleted file mode 100644
index dca2360..0000000
--- a/baseline/source/litmusStuff.h
+++ /dev/null
@@ -1,80 +0,0 @@
1#include <time.h>
2#include <sys/mman.h>
3#include <stdlib.h>
4#include <stdio.h>
5#include <string.h>
6#include <signal.h>
7#include <limits.h>
8#include <../litmus.h>
9
10#define L3_CACHE_SIZE (11264*1024)
11
12#define SAVE_RESULTS if(jobsComplete>-1) progTime[jobsComplete]=(end.tv_nsec-start.tv_nsec)+(1000000000*(end.tv_sec-start.tv_sec));
13
14
15#define SET_UP char *thisProgram=argv[1];\
16 int maxJobs=atoi(argv[2]);\
17 char *thisCore=argv[3];\
18 char *otherCore=argv[4];\
19 char *otherProgram=argv[5];\
20 char *runID=argv[6];\
21 int output=atoi(argv[7]);\
22 struct timespec start, end;\
23 int jobsComplete;\
24 long progTime[maxJobs*output];\
25 char fileName[50];\
26 char *bigArray;\
27 strcpy(fileName, runID);\
28 strcat(fileName, ".txt");\
29 mlockall(MCL_CURRENT || MCL_FUTURE);
30
31#define WRITE_TO_FILE if (output){\
32 munlockall();\
33 FILE *fp=fopen(fileName, "a");\
34 for(jobsComplete=0; jobsComplete<maxJobs; jobsComplete++){\
35 fprintf(fp, "%s %s %s %s %d %ld %s %d \n",\
36 thisProgram, otherProgram, thisCore, otherCore, maxJobs,\
37 progTime[jobsComplete], runID, jobsComplete);\
38 }\
39 fclose(fp);\
40 }
41
42#define KILL_CACHE bigArray=(char *)malloc(L3_CACHE_SIZE);\
43if (bigArray==NULL) perror("Malloc failed.\n");\
44memset(bigArray, 1, L3_CACHE_SIZE);\
45munlock(bigArray, L3_CACHE_SIZE);\
46free(bigArray);\
47bigArray=NULL;
48
49
50
51//invoke start timer twice, stop timer to make sure timer and vars are in cache
52#define START_TIMER clock_gettime(CLOCK_MONOTONIC, &start);\
53 clock_gettime(CLOCK_MONOTONIC, &end);\
54 clock_gettime(CLOCK_MONOTONIC, &start);\
55
56#define STOP_TIMER clock_gettime(CLOCK_MONOTONIC, &end);
57
58
59#define START_LOOP START_TIMER
60
61#define STOP_LOOP if (output) {STOP_TIMER SAVE_RESULTS} sleep_next_period();
62
63
64/*
65Intended structure
66
67main
68SET_UP
69notice that STOP LOOP negates the ++ if outout=0
70for (jobsComplete=-1; jobsComplete<maxJobs; jobsComplete++){
71 KILL_CACHE
72 START_TIMER
73 tacleInit();
74 tacleMain();
75 STOP_TIMER
76 SAVE_RESULTS
77}
78WRITE_TO_FILE
79tacleReturn
80*/
diff --git a/baseline/source/mpeg2/mpeg2.c b/baseline/source/mpeg2/mpeg2.c
index a810744..0567225 100644
--- a/baseline/source/mpeg2/mpeg2.c
+++ b/baseline/source/mpeg2/mpeg2.c
@@ -48,7 +48,7 @@
48/* 48/*
49 Forward declaration of data types 49 Forward declaration of data types
50*/ 50*/
51#include "../extra.h" 51#include "extra.h"
52struct mbinfo; 52struct mbinfo;
53 53
54 54
diff --git a/baseline/source/ndes/ndes.c b/baseline/source/ndes/ndes.c
index b0f494c..f169c62 100644
--- a/baseline/source/ndes/ndes.c
+++ b/baseline/source/ndes/ndes.c
@@ -17,7 +17,7 @@
17*/ 17*/
18 18
19/* A read from this address will result in an known value of 1 */ 19/* A read from this address will result in an known value of 1 */
20#include "../extra.h" 20#include "extra.h"
21#define KNOWN_VALUE 1 21#define KNOWN_VALUE 1
22#define NDES_WORSTCASE 1 22#define NDES_WORSTCASE 1
23/* 23/*
diff --git a/baseline/source/petrinet/petrinet.c b/baseline/source/petrinet/petrinet.c
index cabb40d..6ef3392 100644
--- a/baseline/source/petrinet/petrinet.c
+++ b/baseline/source/petrinet/petrinet.c
@@ -25,7 +25,7 @@
25*/ 25*/
26 26
27 27
28#include "../extra.h" 28#include "extra.h"
29 29
30#ifdef PROFILING 30#ifdef PROFILING
31#include <stdio.h> 31#include <stdio.h>
diff --git a/baseline/source/rijndael_dec/rijndael_dec.c b/baseline/source/rijndael_dec/rijndael_dec.c
index 93bb424..61db767 100644
--- a/baseline/source/rijndael_dec/rijndael_dec.c
+++ b/baseline/source/rijndael_dec/rijndael_dec.c
@@ -38,7 +38,7 @@
38 ----------------------------------------------------------------------- 38 -----------------------------------------------------------------------
39*/ 39*/
40 40
41#include "../extra.h" 41#include "extra.h"
42#include "aes.h" 42#include "aes.h"
43#include "rijndael_dec_libc.h" 43#include "rijndael_dec_libc.h"
44 44
diff --git a/baseline/source/rijndael_enc/rijndael_enc.c b/baseline/source/rijndael_enc/rijndael_enc.c
index 0c10353..6c85eee 100644
--- a/baseline/source/rijndael_enc/rijndael_enc.c
+++ b/baseline/source/rijndael_enc/rijndael_enc.c
@@ -38,7 +38,7 @@
38 ----------------------------------------------------------------------- 38 -----------------------------------------------------------------------
39*/ 39*/
40 40
41#include "../extra.h" 41#include "extra.h"
42#include "aes.h" 42#include "aes.h"
43#include "rijndael_enc_libc.h" 43#include "rijndael_enc_libc.h"
44 44
diff --git a/baseline/source/statemate/statemate.c b/baseline/source/statemate/statemate.c
index 00491e5..888d0fa 100644
--- a/baseline/source/statemate/statemate.c
+++ b/baseline/source/statemate/statemate.c
@@ -27,7 +27,7 @@
27 Macro definitions 27 Macro definitions
28*/ 28*/
29 29
30#include "../extra.h" 30#include "extra.h"
31 31
32#define SYS_bit_get(a,b) (a)[(b)] 32#define SYS_bit_get(a,b) (a)[(b)]
33#define SYS_bit_clr(a,b) (a)[(b)] = 0 33#define SYS_bit_clr(a,b) (a)[(b)] = 0
diff --git a/baseline/source/susan/susan.c b/baseline/source/susan/susan.c
index 4bc4cb8..dc27fb1 100644
--- a/baseline/source/susan/susan.c
+++ b/baseline/source/susan/susan.c
@@ -269,7 +269,7 @@
269 269
270\**********************************************************************/ 270\**********************************************************************/
271 271
272#include "../extra.h" 272#include "extra.h"
273#include "wcclibm.h" 273#include "wcclibm.h"
274#include "wccfile.h" 274#include "wccfile.h"
275#include "wccmalloc.h" 275#include "wccmalloc.h"
diff --git a/dis/Makefile b/dis/Makefile
index 2c1ff89..df93116 100755
--- a/dis/Makefile
+++ b/dis/Makefile
@@ -4,34 +4,33 @@
4# that a good Makefile should follow. Sorry - at least I have one.) 4# that a good Makefile should follow. Sorry - at least I have one.)
5LIBLITMUS ?= /media/speedy/litmus/liblitmus 5LIBLITMUS ?= /media/speedy/litmus/liblitmus
6CC ?= gcc 6CC ?= gcc
7override CFLAGS += -pthread -O2 7CFLAGS += -pthread -O2 -I..
8LDFLAGS = -lrt -lm 8LDFLAGS = -lrt -lm
9 9COMMON = ../extra.h
10# We need a different include path depending on the target, so use a
11# target-specific variable
12field matrix neighborhood pointer transitive update random_walk: override CFLAGS += -I../baseline/source
13field matrix neighborhood pointer transitive update random_walk: COMMON = ../baseline/source/extra.h
14field_all matrix_all neighborhood_all pointer_all transitive_all update_all: override CFLAGS += -I../all_pairs/source
15field_all matrix_all neighborhood_all pointer_all transitive_all update_all: COMMON = ../all_pairs/source/extra.h
16 10
17# Handle cases where we're also profiling with the MMDC on the i.MX6Q 11# Handle cases where we're also profiling with the MMDC on the i.MX6Q
18ifneq ($(shell grep "define MMDC 1" ../baseline/source/extra.h),) 12ifneq ($(shell grep "define MMDC 1" ../extra.h),)
19 COMMON += /media/speedy/litmus/tools/mmdc/mmdc.c 13 COMMON += /media/speedy/litmus/tools/mmdc/mmdc.c
20endif 14endif
21 15
22# Include all the LITMUS^RT headers if we're using it 16# Include all the LITMUS^RT headers if we're using it
23ifneq ($(shell grep "define LITMUS 1" ../baseline/source/extra.h),) 17ifneq ($(shell grep "define LITMUS 1" ../extra.h),)
24 CFLAGS += -I${LIBLITMUS}/include -I${LIBLITMUS}/arch/arm/include 18 CFLAGS += -I${LIBLITMUS}/include -I${LIBLITMUS}/arch/arm/include
25 LDFLAGS += -L${LIBLITMUS} -llitmus 19 LDFLAGS += -L${LIBLITMUS} -llitmus
26endif 20endif
27 21
28all: baseline 22all: baseline
23debug: baseline
24debug_pairs: pairs
25debug debug_pairs: CFLAGS += -ggdb3
29baseline: field matrix neighborhood pointer transitive update random_walk 26baseline: field matrix neighborhood pointer transitive update random_walk
30pairs: field_all matrix_all neighborhood_all pointer_all transitive_all update_all 27pairs: field_all matrix_all neighborhood_all pointer_all transitive_all update_all
31 28
32.PHONY: clean 29.PHONY: clean
33clean: 30clean:
34 rm field_all matrix_all neighborhood_all pointer_all transitive_all update_all field matrix neighborhood pointer transitive update random_walk 31 rm -f field_all matrix_all neighborhood_all pointer_all \
32 transitive_all update_all field matrix neighborhood \
33 pointer transitive update random_walk
35 34
36field: ${COMMON} ./Field/field.c 35field: ${COMMON} ./Field/field.c
37 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 36 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
@@ -49,14 +48,14 @@ random_walk: ${COMMON} random_walk.c
49 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 48 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS)
50 49
51field_all: ${COMMON} ./Field/field.c 50field_all: ${COMMON} ./Field/field.c
52 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 51 $(CC) $(CFLAGS) -DPAIRED $^ -o $@ $(LDFLAGS)
53matrix_all: ${COMMON} ./Matrix/ver2/matrix.c 52matrix_all: ${COMMON} ./Matrix/ver2/matrix.c
54 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 53 $(CC) $(CFLAGS) -DPAIRED $^ -o $@ $(LDFLAGS)
55neighborhood_all: ${COMMON} ./Neighborhood/neighborhood.c 54neighborhood_all: ${COMMON} ./Neighborhood/neighborhood.c
56 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 55 $(CC) $(CFLAGS) -DPAIRED $^ -o $@ $(LDFLAGS)
57pointer_all: ${COMMON} ./Pointer/pointer.c 56pointer_all: ${COMMON} ./Pointer/pointer.c
58 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 57 $(CC) $(CFLAGS) -DPAIRED $^ -o $@ $(LDFLAGS)
59transitive_all: ${COMMON} ./Transitive/transitive.c 58transitive_all: ${COMMON} ./Transitive/transitive.c
60 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 59 $(CC) $(CFLAGS) -DPAIRED $^ -o $@ $(LDFLAGS)
61update_all: ${COMMON} ./Update/update.c 60update_all: ${COMMON} ./Update/update.c
62 $(CC) $(CFLAGS) $^ -o $@ $(LDFLAGS) 61 $(CC) $(CFLAGS) -DPAIRED $^ -o $@ $(LDFLAGS)
diff --git a/baseline/source/extra.h b/extra.h
index e8f3d18..3215951 100644
--- a/baseline/source/extra.h
+++ b/extra.h
@@ -2,18 +2,18 @@
2 * Copyright 2019 Sims Hill Osborne and Joshua Bakita 2 * Copyright 2019 Sims Hill Osborne and Joshua Bakita
3 * 3 *
4 * This header provides facilities by which to separably run and time TACLeBench 4 * This header provides facilities by which to separably run and time TACLeBench
5 * To use this for paired task timing, define PAIRED (pass CFLAGS=-DPAIRED to make)
5 **/ 6 **/
6#define _GNU_SOURCE 7#define _GNU_SOURCE
7#include <time.h> 8#include <fcntl.h> // For O_CREAT and O_RDWR
8#include <sys/mman.h> 9#include <sched.h> // For sched_yield()
9#include <stdlib.h> 10#include <semaphore.h> // For sem_{open, post, wait}()
10#include <stdio.h> 11#include <stdio.h>
11#include <string.h> 12#include <stdlib.h> // For exit()
12#include <signal.h> 13#include <string.h> // For strlen()
13#include <limits.h> 14#include <sys/mman.h> // For mlockall()
14#include <fcntl.h> 15#include <unistd.h> // For ftruncate()
15#include <stdint.h> 16#include <time.h>
16#include <sched.h>
17 17
18// This is only visible if _GNU_SOURCE is defined, and that define does not 18// This is only visible if _GNU_SOURCE is defined, and that define does not
19// come along to places where this file is included. Address this by manually 19// come along to places where this file is included. Address this by manually
@@ -55,7 +55,13 @@ extern int sched_getcpu();
55 55
56// Store state globally so that the job can be outside main() 56// Store state globally so that the job can be outside main()
57// Arrays use float as a comprimise between overflow and size 57// Arrays use float as a comprimise between overflow and size
58// Paired arrays use long longs as precision is more important for those times
59#ifdef PAIRED
60long long *_rt_start_time;
61long long *_rt_end_time;
62#else
58float *_rt_exec_time; 63float *_rt_exec_time;
64#endif
59#if MMDC_PERF 65#if MMDC_PERF
60float *_rt_mmdc_read; 66float *_rt_mmdc_read;
61float *_rt_mmdc_write; 67float *_rt_mmdc_write;
@@ -68,36 +74,103 @@ struct timespec _rt_start, _rt_end;
68 74
69char *_rt_run_id; 75char *_rt_run_id;
70char *_rt_our_prog_name; 76char *_rt_our_prog_name;
77char *_rt_other_prog_name;
78char *_rt_other_core;
71#define _RT_FILENAME_LEN 64 79#define _RT_FILENAME_LEN 64
80#define _BILLION (1000*1000*1000)
81#ifdef PAIRED
82char *_rt_barrier;
83sem_t *_rt_first_sem, *_rt_second_sem;
84int _rt_lock_id;
85#endif
72 86
73#define LOAD_PARAMS_ITRL \ 87static void _rt_load_params_itrl(int argc, char **argv) {
74 if (argc != 6) { \ 88#ifdef PAIRED
75 fprintf(stderr, "Usage: %s <name> <loops> <my core> <runID> <save results?>\n", argv[0]);\ 89 if (argc != 8) {
76 fprintf(stderr, " <loops> integer number of iterations. -1 for infitite.\n");\ 90 fprintf(stderr, "Usage: %s <name> <loops> <my core> <other core> <other name> <runID> <lockID>", argv[0]);
77 fprintf(stderr, " <save results?> 1 to save results, 0 to discard.\n");\ 91 fprintf(stderr, " <name> string for logging. Name of this task.\n");
78 fprintf(stderr, " <my core> UNUSED. Core is now auto-detected.\n");\ 92 fprintf(stderr, " <loops> integer number of iterations. -1 for infinite.\n");
79 exit(1);\ 93 fprintf(stderr, " <my core> UNUSED. Core is now auto-detected.\n");
80 }\ 94 fprintf(stderr, " <other core> integer for logging. Core of paired task.\n");
81 _rt_our_prog_name = argv[1];\ 95 fprintf(stderr, " <other name> string for logging. Name of paired task.\n");
82 _rt_max_jobs = atol(argv[2]);\ 96 fprintf(stderr, " <runID> string to append with .txt to yield output file name.\n");
83 _rt_core = sched_getcpu();\ 97 fprintf(stderr, " <lockID> 1 to indicate this is pair member 1, otherwise pair member 2.\n");
84 _rt_run_id = argv[4];\ 98 exit(1);
85 _rt_will_output = atoi(argv[5]);\ 99 }
86 if (_rt_max_jobs < 0 && _rt_will_output != 0) {\ 100#else
87 fprintf(stderr, "Infinite loops only supported when _rt_will_output is disabled!\n");\ 101 if (argc != 6) {
88 exit(1);\ 102 fprintf(stderr, "Usage: %s <name> <loops> <my core> <runID> <save results?>\n", argv[0]);
89 }\ 103 fprintf(stderr, " <name> string for logging. Name of this task.\n");
90 if (strlen(_rt_run_id) + 5 > _RT_FILENAME_LEN) {\ 104 fprintf(stderr, " <loops> integer number of iterations. -1 for infinite.\n");
91 fprintf(stderr, "Run ID is too large! Keep it to less than %d characters.\n", _RT_FILENAME_LEN);\ 105 fprintf(stderr, " <my core> UNUSED. Core is now auto-detected.\n");
92 exit(1);\ 106 fprintf(stderr, " <runID> string to append with .txt to yield output file name.\n");
93 }\ 107 fprintf(stderr, " <save results?> 1 to save results, 0 to discard.\n");
94 _rt_exec_time = calloc(_rt_max_jobs * _rt_will_output, sizeof(float));\ 108 exit(1);
95 if (!_rt_exec_time) {\ 109 }
96 perror("Unable to allocate buffer for execution times");\ 110#endif
97 exit(1);\ 111 _rt_our_prog_name = argv[1];
98 }\ 112 _rt_max_jobs = atol(argv[2]);
99 _rt_jobs_complete = 0;\ 113 _rt_core = sched_getcpu();
114#ifdef PAIRED
115 _rt_other_core = argv[4];
116 _rt_other_prog_name = argv[5];
117 _rt_run_id = argv[6];
118 _rt_lock_id = atoi(argv[7]);
119 // The paired version doesn't support disabling output (legacy compatibility)
120 _rt_will_output = 1;
121#else
122 _rt_other_core = "none";
123 _rt_other_prog_name = "none";
124 _rt_run_id = argv[4];
125 _rt_will_output = atoi(argv[5]);
126#endif /* PAIRED */
127 if (_rt_max_jobs < 0 && _rt_will_output != 0) {
128 fprintf(stderr, "Infinite loops only supported when _rt_will_output is disabled!\n");
129 exit(1);
130 }
131 if (strlen(_rt_run_id) + 5 > _RT_FILENAME_LEN) {
132 fprintf(stderr, "Run ID is too large! Keep it to less than %d characters.\n", _RT_FILENAME_LEN);
133 exit(1);
134 }
135#ifdef PAIRED
136 _rt_start_time = calloc(_rt_max_jobs * _rt_will_output, sizeof(long long));
137 _rt_end_time = calloc(_rt_max_jobs * _rt_will_output, sizeof(long long));
138 if (!_rt_end_time || !_rt_start_time) {
139 perror("Unable to allocate buffers for execution times");
140 exit(1);
141 }
142 _rt_first_sem = sem_open("/_libextra_first_sem", O_CREAT, 644, 0);
143 _rt_second_sem = sem_open("/_libextra_second_sem", O_CREAT, 644, 0);
144 if (_rt_first_sem == SEM_FAILED || _rt_second_sem == SEM_FAILED) {
145 perror("Error while creating semaphores");
146 exit(1);
147 }
148 int barrier_file = shm_open("/_libextra_barrier", O_CREAT | O_RDWR, 644);
149 if (barrier_file == -1) {
150 perror("Error while creating shared memory for barrier synchronization");
151 exit(1);
152 }
153 if (ftruncate(barrier_file, 1) == -1) {
154 perror("Error while setting size of shared memory for barrier synchronization");
155 exit(1);
156 }
157 _rt_barrier = mmap(NULL, 1, PROT_WRITE, MAP_SHARED, barrier_file, 0);
158 if (_rt_barrier == MAP_FAILED) {
159 perror("Error while mapping shared memory for barrier synchronization");
160 exit(1);
161 }
162 *_rt_barrier = 0;
163#else
164 _rt_exec_time = calloc(_rt_max_jobs * _rt_will_output, sizeof(float));
165 if (!_rt_exec_time) {
166 perror("Unable to allocate buffer for execution times");
167 exit(1);
168 }
169#endif /* PAIRED */
170 _rt_jobs_complete = 0;
100 mlockall(MCL_CURRENT || MCL_FUTURE); 171 mlockall(MCL_CURRENT || MCL_FUTURE);
172}
173#define LOAD_PARAMS_ITRL _rt_load_params_itrl(argc, argv);
101 174
102#define SETUP_MMDC \ 175#define SETUP_MMDC \
103 _rt_mmdc_read = calloc(_rt_max_jobs * _rt_will_output, sizeof(float));\ 176 _rt_mmdc_read = calloc(_rt_max_jobs * _rt_will_output, sizeof(float));\
@@ -213,6 +286,44 @@ char *_rt_our_prog_name;
213 fclose(fp); 286 fclose(fp);
214#endif 287#endif
215 288
289// This semaphore-based synchronization is from Sims
290#define FIRST_UNLOCK \
291 if (_rt_lock_id == 1) {\
292 if (sem_post(_rt_second_sem) != 0) {\
293 perror("Unable to unlock second semaphore");\
294 exit(1);\
295 }\
296 } \
297 else {\
298 if (sem_post(_rt_first_sem) != 0) {\
299 perror("Unable to unlock first semaphore");\
300 exit(1);\
301 }\
302 } \
303
304#define FIRST_LOCK \
305 if (_rt_lock_id == 1) {\
306 if (sem_wait(_rt_first_sem) != 0) {\
307 perror("Unable to wait on first semaphore");\
308 exit(1);\
309 }\
310 }\
311 else {\
312 if (sem_wait(_rt_second_sem) != 0) {\
313 perror("Unable to wait on second semaphore");\
314 exit(1);\
315 }\
316 }
317
318// This ensures a very low difference between pair member start times
319#define BARRIER_SYNC \
320 if (__sync_bool_compare_and_swap(_rt_barrier, 0, 1)) {\
321 while (!__sync_bool_compare_and_swap(_rt_barrier, 0, 0)) {};\
322 }\
323 else {\
324 __sync_bool_compare_and_swap(_rt_barrier, 1, 0);\
325 }
326
216// Buffer timing result from a single job 327// Buffer timing result from a single job
217static void _rt_save_job_result() { 328static void _rt_save_job_result() {
218 if (_rt_jobs_complete >= _rt_max_jobs) { 329 if (_rt_jobs_complete >= _rt_max_jobs) {
@@ -220,9 +331,18 @@ static void _rt_save_job_result() {
220 exit(1); 331 exit(1);
221 } 332 }
222 if (_rt_jobs_complete > -1 && _rt_will_output) { 333 if (_rt_jobs_complete > -1 && _rt_will_output) {
334#ifdef PAIRED
335 _rt_start_time[_rt_jobs_complete] = _rt_start.tv_sec;
336 _rt_start_time[_rt_jobs_complete] *= _BILLION;
337 _rt_start_time[_rt_jobs_complete] += _rt_start.tv_nsec;
338 _rt_end_time[_rt_jobs_complete] = _rt_end.tv_sec;
339 _rt_end_time[_rt_jobs_complete] *= _BILLION;
340 _rt_end_time[_rt_jobs_complete] += _rt_end.tv_nsec;
341#else
223 _rt_exec_time[_rt_jobs_complete] = _rt_end.tv_sec - _rt_start.tv_sec; 342 _rt_exec_time[_rt_jobs_complete] = _rt_end.tv_sec - _rt_start.tv_sec;
224 _rt_exec_time[_rt_jobs_complete] *= 1e9; 343 _rt_exec_time[_rt_jobs_complete] *= _BILLION;
225 _rt_exec_time[_rt_jobs_complete] += _rt_end.tv_nsec - _rt_start.tv_nsec; 344 _rt_exec_time[_rt_jobs_complete] += _rt_end.tv_nsec - _rt_start.tv_nsec;
345#endif /* PAIRED */
226#if MMDC_PROF 346#if MMDC_PROF
227 _rt_mmdc_read[_rt_jobs_complete] = mmdc_res.read_bytes; 347 _rt_mmdc_read[_rt_jobs_complete] = mmdc_res.read_bytes;
228 _rt_mmdc_write[_rt_jobs_complete] = mmdc_res.write_bytes; 348 _rt_mmdc_write[_rt_jobs_complete] = mmdc_res.write_bytes;
@@ -234,31 +354,54 @@ static void _rt_save_job_result() {
234static void _rt_write_to_file() { 354static void _rt_write_to_file() {
235 char fileName[_RT_FILENAME_LEN]; 355 char fileName[_RT_FILENAME_LEN];
236 FILE *fp; 356 FILE *fp;
237 if (!_rt_will_output)
238 return;
239 munlockall(); 357 munlockall();
358 if (!_rt_will_output)
359 goto out;
240 strcpy(fileName, _rt_run_id); 360 strcpy(fileName, _rt_run_id);
241 strcat(fileName, ".txt"); 361 strcat(fileName, ".txt");
242 fp = fopen(fileName, "a"); 362 fp = fopen(fileName, "a");
243 if (fp == NULL) { 363 if (fp == NULL) {
244 perror("Unable to open _rt_will_output file"); 364 perror("Unable to open output file");
245 exit(1); 365 exit(1);
246 } 366 }
247 // Same format as the paired results with "none" for unused fields 367 // Baseline output uses a similar format with "none" for unused fields
248 for (int i = 0; i < _rt_jobs_complete; i++){ 368 for (int i = 0; i < _rt_jobs_complete; i++){
249 fprintf(fp, "%s none %u none %ld %.f %s %d %.f %.f \n", 369 fprintf(fp, "%s %s %u %s %ld", _rt_our_prog_name, _rt_other_prog_name,
250 _rt_our_prog_name, _rt_core, _rt_max_jobs, 370 _rt_core, _rt_other_core, _rt_max_jobs);
251 _rt_exec_time[i], _rt_run_id, i, 371#ifdef PAIRED
372 // For unclear legacy reasons, paired tasks emit sec and ns separately
373 fprintf(fp, " %lld %lld %lld %lld",
374 _rt_start_time[i] / _BILLION, _rt_start_time[i] % _BILLION,
375 _rt_end_time[i] / _BILLION, _rt_end_time[i] % _BILLION);
376#else
377 fprintf(fp, " %.f", _rt_exec_time[i]);
378#endif /* PAIRED */
379 fprintf(fp, " %s %d %.f %.f\n", _rt_run_id, i,
252#if MMDC_PROF 380#if MMDC_PROF
253 _rt_mmdc_read[i], _rt_mmdc_write[i]); 381 _rt_mmdc_read[i], _rt_mmdc_write[i]);
254#else 382#else
255 0.0, 0.0); 383 0.0, 0.0);
256#endif 384#endif /* MMDC_PROF */
257 } 385 }
258 fclose(fp); 386 fclose(fp);
387out:
259#if LITMUS 388#if LITMUS
260 CLEANUP_LITMUS 389 CLEANUP_LITMUS
261#endif 390#endif /* LITMUS */
391#ifdef PAIRED
392 munmap(_rt_barrier, 1);
393 shm_unlink("/_libextra_barrier");
394 sem_unlink("/_libextra_first_sem");
395 sem_unlink("/_libextra_second_sem");
396 free(_rt_start_time);
397 free(_rt_end_time);
398#else
399 free(_rt_exec_time);
400#endif /* PAIRED */
401#if MMDC_PROF
402 free(_rt_mmdc_read);
403 free(_rt_mmdc_write);
404#endif /* MMDC_PROF */
262} 405}
263 406
264// Start a job 407// Start a job
@@ -269,12 +412,19 @@ static void _rt_start_loop() {
269 } 412 }
270#else 413#else
271 sched_yield(); 414 sched_yield();
272#endif 415#endif /* LITMUS */
416#ifdef PAIRED
417 FIRST_UNLOCK
418 FIRST_LOCK
419#endif /* PAIRED */
273 FLUSH_CACHES 420 FLUSH_CACHES
421#ifdef PAIRED
422 BARRIER_SYNC
423#endif /* PAIRED */
274#if MMDC_PROF 424#if MMDC_PROF
275 /* This disables profiling, resets the counters, clears the overflow bit, and enables profiling */ 425 /* This disables profiling, resets the counters, clears the overflow bit, and enables profiling */
276 start_mmdc_profiling(mmdc); 426 start_mmdc_profiling(mmdc);
277#endif 427#endif /* MMDC_PROF */
278 clock_gettime(CLOCK_MONOTONIC, &_rt_start); 428 clock_gettime(CLOCK_MONOTONIC, &_rt_start);
279} 429}
280 430
@@ -285,7 +435,7 @@ static void _rt_stop_loop() {
285 /* This freezes the profiling and makes results available */ 435 /* This freezes the profiling and makes results available */
286 pause_mmdc_profiling(mmdc); 436 pause_mmdc_profiling(mmdc);
287 get_mmdc_profiling_results(mmdc, &mmdc_res); 437 get_mmdc_profiling_results(mmdc, &mmdc_res);
288#endif 438#endif /* MMDC_PROF */
289 _rt_save_job_result(); 439 _rt_save_job_result();
290 _rt_jobs_complete++; 440 _rt_jobs_complete++;
291} 441}