Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
225837ed0e | |||
450b73e8d9 | |||
70917bed3d | |||
377d37d512 | |||
a93414b105 |
53
Makefile
53
Makefile
@ -151,6 +151,13 @@ release: $(BUILD_DIR)/$(TARGET)
|
||||
|
||||
all: release
|
||||
|
||||
hpc-results/post:
|
||||
$(CXX) $(CFLAGS) -o $@ hpc-results/main.cpp
|
||||
|
||||
hpc-clean:
|
||||
rm hpc-results/post
|
||||
|
||||
|
||||
local_v3: CFLAGS := $(DEB_CFLAGS) -DCODE_VERSION=3
|
||||
local_v3: TARGET := local_v3
|
||||
local_v3: $(BUILD_DIR)/$(TARGET)
|
||||
@ -220,6 +227,52 @@ v4_pthreads: TARGET := tcount_pthv4
|
||||
v4_pthreads: $(BUILD_DIR)/$(TARGET)
|
||||
cp $(BUILD_DIR)/$(TARGET) out/$(TARGET)
|
||||
|
||||
#
|
||||
# ========= Inside CSAL Image build rules ===========
|
||||
#
|
||||
# 1) first jump into image (make sure you are in the directory where Makefile is):
|
||||
# > docker run -it -v ${PWD}:/usr/src/exercise_1 -w /usr/src/exercise_1/ hpcimage
|
||||
# 2) Clean binaries first **important**
|
||||
# > make clean
|
||||
# 3) for v4 cilk for example:
|
||||
# > make csal_v4_cilk
|
||||
# 4) run executables from `bin/`. Examples:
|
||||
# > ./bin/tcount_ompv3 -i mtx/NACA0015.mtx --timing -r 3 -o /dev/null
|
||||
# > ./bin/tcount_pthv4 -i mtx/com_Youtube.mtx --timing --dynamic --print_count
|
||||
|
||||
csal_v3: CFLAGS := $(REL_CFLAGS) -DCODE_VERSION=3
|
||||
csal_v3: TARGET := tcount_v3
|
||||
csal_v3: $(BUILD_DIR)/$(TARGET)
|
||||
|
||||
csal_v3_cilk: CXX := /usr/local/OpenCilk-9.0.1-Linux/bin/clang++
|
||||
csal_v3_cilk: CFLAGS := $(REL_CFLAGS) -fcilkplus -DCODE_VERSION=3 -DCILK
|
||||
csal_v3_cilk: LDFLAGS += -fcilkplus
|
||||
csal_v3_cilk: TARGET := tcount_cilkv3
|
||||
csal_v3_cilk: $(BUILD_DIR)/$(TARGET)
|
||||
|
||||
csal_v3_omp: CFLAGS := $(REL_CFLAGS) -fopenmp -DCODE_VERSION=3 -DOMP
|
||||
csal_v3_omp: LDFLAGS += -fopenmp
|
||||
csal_v3_omp: TARGET := tcount_ompv3
|
||||
csal_v3_omp: $(BUILD_DIR)/$(TARGET)
|
||||
|
||||
csal_v4: CFLAGS := $(REL_CFLAGS) -DCODE_VERSION=4
|
||||
csal_v4: TARGET := tcount_v4
|
||||
csal_v4: $(BUILD_DIR)/$(TARGET)
|
||||
|
||||
csal_v4_cilk: CXX := /usr/local/OpenCilk-9.0.1-Linux/bin/clang++
|
||||
csal_v4_cilk: CFLAGS := $(REL_CFLAGS) -fcilkplus -DCODE_VERSION=V4 -DCILK
|
||||
csal_v4_cilk: LDFLAGS += -fcilkplus
|
||||
csal_v4_cilk: TARGET := tcount_cilkv4
|
||||
csal_v4_cilk: $(BUILD_DIR)/$(TARGET)
|
||||
|
||||
csal_v4_omp: CFLAGS := $(REL_CFLAGS) -fopenmp -DCODE_VERSION=4 -DOMP
|
||||
csal_v4_omp: LDFLAGS += -fopenmp
|
||||
csal_v4_omp: TARGET := tcount_ompv4
|
||||
csal_v4_omp: $(BUILD_DIR)/$(TARGET)
|
||||
|
||||
csal_v4_pthreads: CFLAGS := $(REL_CFLAGS) -DCODE_VERSION=4 -DTHREADS
|
||||
csal_v4_pthreads: TARGET := tcount_pthv4
|
||||
csal_v4_pthreads: $(BUILD_DIR)/$(TARGET)
|
||||
|
||||
#
|
||||
# ================ hpc build rules =================
|
||||
|
1
hpc-results/.gitignore
vendored
Normal file
1
hpc-results/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/Debug/
|
93
hpc-results/main.cpp
Normal file
93
hpc-results/main.cpp
Normal file
@ -0,0 +1,93 @@
|
||||
/*
|
||||
* main.cpp
|
||||
*
|
||||
* Created on: Dec 4, 2020
|
||||
* Author: hoo2
|
||||
*/
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
|
||||
#define SIZE 20
|
||||
|
||||
std::ifstream file;
|
||||
|
||||
/*!
|
||||
* Calculates and return the median of an array of measurements
|
||||
* \param t Pointer to measurements
|
||||
* \param n Size of measurements array
|
||||
* \return The average
|
||||
*/
|
||||
int median (int *t, int n) {
|
||||
std::sort (t, &t[n]);
|
||||
return (n % 2) ? t[n/2] : (t[n/2] + t[n/2 -1]) /2;
|
||||
}
|
||||
|
||||
/*
|
||||
* A small post processing...
|
||||
*/
|
||||
int main(int argc, char* argv[]) {
|
||||
file = std::ifstream(argv[1]);
|
||||
std::string line, token, exec, mtx, times, dt, units, dyn1, dyn2;
|
||||
std::string t1, t2, t3, t4;
|
||||
enum state_en {RUNNING, LOAD, DATA, SUM} state = RUNNING;
|
||||
int cnt =0, med =0;
|
||||
int delta_t[SIZE];
|
||||
|
||||
while (std::getline (file, line, '\n')) {
|
||||
std::stringstream ss(line);
|
||||
|
||||
switch (state) {
|
||||
case RUNNING:
|
||||
ss >> token;
|
||||
if (token == "running") {
|
||||
ss >> exec >> t1 >> mtx >> t2 >> times >> t3 >> t4 >> dyn1 >> dyn2;
|
||||
cnt =0;
|
||||
state = LOAD;
|
||||
}
|
||||
break;
|
||||
|
||||
case LOAD: state = DATA; break;
|
||||
|
||||
case DATA:
|
||||
ss >> t1 >> t2 >> t3 >> dt >> units;
|
||||
if (units == "[usec]") delta_t[cnt] = std::atoi(dt.c_str());
|
||||
else if (units == "[msec]") delta_t[cnt] = std::atoi(dt.c_str()) * 1000;
|
||||
else if (units == "[sec]") delta_t[cnt] = std::atoi(dt.c_str()) * 1000000;
|
||||
if (++cnt == std::atoi(times.c_str())) {
|
||||
med = median (delta_t, cnt);
|
||||
cnt =0;
|
||||
state = SUM;
|
||||
}
|
||||
break;
|
||||
|
||||
case SUM:
|
||||
ss >> token;
|
||||
if (token == "running") {
|
||||
std::cout << exec << ',' << mtx << ',' << med << ", ," <<
|
||||
(((dyn1 == "--dynamic") || (dyn2 == "--dynamic")) ? "dyn\n" : " \n");
|
||||
dyn1 = "";
|
||||
dyn2 = "";
|
||||
ss >> exec >> t1 >> mtx >> t2 >> times >> t3 >> t4 >> dyn1 >> dyn2;
|
||||
cnt =0;
|
||||
state = LOAD;
|
||||
}
|
||||
else if (token == "[Timing]:") {
|
||||
ss >> t1 >> t2 >> dt >> units;
|
||||
if (units == "[usec]") med += std::atoi(dt.c_str());
|
||||
else if (units == "[msec]") med += std::atoi(dt.c_str()) * 1000;
|
||||
else if (units == "[sec]") med += std::atoi(dt.c_str()) * 1000000;
|
||||
state = RUNNING;
|
||||
std::cout << exec << ',' << mtx << ',' << med << ",sum," <<
|
||||
(((dyn1 == "--dynamic") || (dyn2 == "--dynamic")) ? "dyn\n" : " \n");
|
||||
dyn1 = "";
|
||||
dyn2 = "";
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
70
hpc-results/ntasks1.out.post
Normal file
70
hpc-results/ntasks1.out.post
Normal file
@ -0,0 +1,70 @@
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,26500, ,
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,25537,sum,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,56500, ,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,22534,sum,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,22500, ,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,22219,sum,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,68000, ,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,21223,sum,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,77000, ,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,40308,sum,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,19000, ,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,17903,sum,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,66500, ,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,28259,sum,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,3144000, ,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,3427034,sum,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,6631000, ,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,2388503,sum,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,2918500, ,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,2930703,sum,
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,7077000, ,
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,2846392,sum,
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,7516500, ,
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,2769814,sum,
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2799500, ,
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2758832,sum,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,7050500, ,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,2943710,sum,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,89000, ,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,89630,sum,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,185500, ,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,37130,sum,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,90000, ,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,90062,sum,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,177000, ,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,37060,sum,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,182500, ,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,45605,sum,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,73000, ,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,72072,sum,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,183000, ,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,36548,sum,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,1155500, ,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,1204510,sum,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,1663000, ,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,509509,sum,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1216500, ,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1214048,sum,
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,1867000, ,
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,570042,sum,
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,1710500, ,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,553878,sum,dyn
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1065500, ,
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1059500,sum,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,1743500, ,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,561501,sum,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,165000, ,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,168385,sum,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,734000, ,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,145433,sum,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,159000, ,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,159164,sum,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,702000, ,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,136257,sum,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,708500, ,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,154003,sum,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,127000, ,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,126170,sum,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,686000, ,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,135196,sum,
|
70
hpc-results/ntasks10.out.post
Normal file
70
hpc-results/ntasks10.out.post
Normal file
@ -0,0 +1,70 @@
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,6687, ,
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,7026,sum,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,10000, ,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,5187,sum,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,7521, ,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,7518,sum,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,10500, ,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,5545,sum,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,14500, ,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,10285,sum,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,15000, ,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,18691,sum,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,48500, ,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,17178,sum,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,721500, ,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,720886,sum,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1587000, ,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1328352,sum,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,405500, ,dyn
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,379584,sum,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,1100000, ,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,907637,sum,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1562500, ,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1046997,sum,dyn
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2570000, ,
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2570242,sum,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,6289000, ,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,2513721,sum,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,16000, ,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,15187,sum,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,25000, ,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,7497,sum,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,20000, ,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,20027,sum,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,38000, ,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,9201,sum,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,41000, ,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,10383,sum,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,68000, ,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,68041,sum,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,162000, ,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,34540,sum,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,261500, ,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,262504,sum,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,231500, ,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,138019,sum,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,159000, ,dyn
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,159025,sum,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,254500, ,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,83026,sum,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,253000, ,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,113054,sum,dyn
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1054000, ,
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1056000,sum,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,1752500, ,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,567001,sum,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,22000, ,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,22268,sum,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,87000, ,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,19632,sum,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,40000, ,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,40084,sum,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,119000, ,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,32126,sum,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,93000, ,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,23567,sum,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,117000, ,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,118174,sum,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,633500, ,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,125691,sum,
|
70
hpc-results/ntasks15.out.post
Normal file
70
hpc-results/ntasks15.out.post
Normal file
@ -0,0 +1,70 @@
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,5818, ,
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,6550,sum,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,8359, ,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,4373,sum,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,6548, ,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,9778,sum,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,8995, ,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,11833,sum,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,14500, ,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,11827,sum,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,15000, ,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,15193,sum,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,48000, ,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,18182,sum,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,692000, ,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,692936,sum,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1524500, ,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1324775,sum,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,382500, ,dyn
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,308712,sum,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,1122000, ,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,925666,sum,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1457000, ,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1088557,sum,dyn
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2537000, ,
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2538293,sum,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,6307500, ,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,2511731,sum,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,14000, ,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,13210,sum,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,19000, ,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,5547,sum,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,17000, ,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,16547,sum,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,29000, ,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,9211,sum,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,35000, ,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,9051,sum,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,68000, ,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,68042,sum,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,163500, ,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,33041,sum,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,253000, ,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,250004,sum,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,198000, ,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,132043,sum,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,115500, ,dyn
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,116021,sum,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,190000, ,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,61086,sum,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,210500, ,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,91430,sum,dyn
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1056000, ,
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1061000,sum,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,1756000, ,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,566001,sum,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,20000, ,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,19836,sum,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,70000, ,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,17198,sum,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,33000, ,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,33138,sum,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,95500, ,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,25132,sum,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,93500, ,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,25158,sum,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,119500, ,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,119662,sum,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,635000, ,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,130696,sum,
|
70
hpc-results/ntasks2.out.post
Normal file
70
hpc-results/ntasks2.out.post
Normal file
@ -0,0 +1,70 @@
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,17000, ,
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,16859,sum,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,35000, ,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,15377,sum,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,25000, ,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,25243,sum,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,62500, ,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,29470,sum,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,47000, ,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,23382,sum,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,18000, ,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,21475,sum,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,57000, ,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,23247,sum,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,1592500, ,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,1708838,sum,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,3858000, ,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1397498,sum,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,2934500, ,dyn
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,2965201,sum,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,7008500, ,
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,2749905,sum,
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,4209000, ,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1808107,sum,dyn
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2705500, ,
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2721897,sum,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,7174500, ,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,2843260,sum,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,52000, ,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,52104,sum,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,105500, ,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,22082,sum,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,98500, ,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,95072,sum,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,178000, ,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,37060,sum,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,97000, ,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,24501,sum,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,72000, ,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,72045,sum,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,177000, ,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,37060,sum,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,725500, ,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,744026,sum,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,903000, ,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,353023,sum,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1207500, ,dyn
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1217553,sum,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,1872500, ,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,610035,sum,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,977000, ,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,352002,sum,dyn
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1162500, ,
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1158502,sum,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,1899500, ,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,609501,sum,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,131500, ,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,92768,sum,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,506000, ,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,84790,sum,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,196500, ,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,177187,sum,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,721500, ,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,143306,sum,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,407500, ,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,88733,sum,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,130000, ,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,133199,sum,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,748000, ,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,143241,sum,
|
70
hpc-results/ntasks20.out.post
Normal file
70
hpc-results/ntasks20.out.post
Normal file
@ -0,0 +1,70 @@
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,6303, ,
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,6767,sum,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,6521, ,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,3872,sum,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,8999, ,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,7005,sum,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,6932, ,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,3931,sum,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,10000, ,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,8424,sum,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,18500, ,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,18708,sum,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,51000, ,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,19188,sum,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,678500, ,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,675455,sum,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1516500, ,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1287996,sum,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,301000, ,dyn
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,221202,sum,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,1010000, ,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,883004,sum,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1369500, ,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,980566,sum,dyn
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2541000, ,
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2519239,sum,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,6370500, ,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,2522198,sum,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,11000, ,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,12245,sum,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,16000, ,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,5710,sum,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,15500, ,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,15054,sum,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,21500, ,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,7761,sum,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,36000, ,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,9370,sum,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,68000, ,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,68540,sum,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,162500, ,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,33041,sum,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,171500, ,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,168505,sum,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,137500, ,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,95007,sum,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,76000, ,dyn
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,76023,sum,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,128500, ,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,43031,sum,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,154000, ,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,89957,sum,dyn
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1055000, ,
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1055000,sum,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,1739000, ,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,574000,sum,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,16500, ,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,16359,sum,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,51000, ,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,13166,sum,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,34500, ,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,32736,sum,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,62500, ,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,23856,sum,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,56000, ,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,25950,sum,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,128500, ,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,127175,sum,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,685000, ,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,134705,sum,
|
70
hpc-results/ntasks4.out.post
Normal file
70
hpc-results/ntasks4.out.post
Normal file
@ -0,0 +1,70 @@
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,12000, ,
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,12316,sum,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,21000, ,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,10237,sum,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,19000, ,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,16641,sum,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,43000, ,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,15244,sum,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,27500, ,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,16585,sum,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,20000, ,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,21397,sum,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,65500, ,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,27888,sum,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,923000, ,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,949250,sum,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,2037500, ,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1507358,sum,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,2943000, ,dyn
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,2938693,sum,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,7141500, ,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,2788393,sum,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,2706000, ,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1464570,sum,dyn
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2782500, ,
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2719852,sum,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,7123500, ,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,2803272,sum,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,26000, ,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,27143,sum,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,52500, ,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,13574,sum,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,91000, ,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,92084,sum,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,177500, ,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,40064,sum,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,57000, ,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,15933,sum,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,73000, ,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,72551,sum,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,179000, ,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,37043,sum,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,547000, ,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,552507,sum,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,493000, ,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,257519,sum,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1239500, ,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1239035,sum,
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,1855500, ,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,607036,sum,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,514000, ,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,183973,sum,dyn
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1158000, ,
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1162002,sum,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,1943000, ,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,624001,sum,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,55000, ,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,56733,sum,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,243000, ,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,44164,sum,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,175500, ,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,177173,sum,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,774000, ,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,151281,sum,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,235000, ,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,51471,sum,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,155500, ,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,139297,sum,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,814500, ,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,163336,sum,
|
100
hpc-results/ntasks5.out.post
Normal file
100
hpc-results/ntasks5.out.post
Normal file
@ -0,0 +1,100 @@
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,11500, ,
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,14266,sum,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,25500, ,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,10831,sum,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,16500, ,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,16296,sum,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,89000, ,dyn
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,131341,sum,dyn
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,25000, ,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,11637,sum,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,201000, ,dyn
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,145311,sum,dyn
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,34500, ,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,27363,sum,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,123000, ,dyn
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,96481,sum,dyn
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,22000, ,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,23473,sum,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,71500, ,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,26935,sum,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,1114500, ,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,868766,sum,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1783000, ,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1548890,sum,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,2902000, ,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,2894245,sum,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,1548500, ,dyn
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,1541156,sum,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,6357500, ,
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,2700337,sum,
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,3643000, ,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,2779929,sum,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,4525500, ,
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,2541127,sum,
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,2686000, ,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1271835,sum,dyn
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2704500, ,
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2724805,sum,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,7090500, ,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,2749317,sum,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,50500, ,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,37155,sum,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,44500, ,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,23616,sum,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,93000, ,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,93090,sum,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,97500, ,dyn
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,98084,sum,dyn
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,185000, ,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,37086,sum,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,187000, ,dyn
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,42110,sum,dyn
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,96000, ,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,15731,sum,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,81500, ,dyn
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,39512,sum,dyn
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,74000, ,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,74090,sum,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,183000, ,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,38068,sum,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,360500, ,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,534027,sum,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,379500, ,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,290512,sum,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1197000, ,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1198045,sum,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1200000, ,dyn
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,1197548,sum,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,1858000, ,
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,599587,sum,
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,1851500, ,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,598046,sum,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,684000, ,
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,383448,sum,
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,442500, ,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,160597,sum,dyn
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1140500, ,
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1139002,sum,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,1876500, ,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,604501,sum,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,52500, ,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,54250,sum,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,259500, ,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,84789,sum,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,227500, ,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,224189,sum,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,248000, ,dyn
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,233677,sum,dyn
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,808000, ,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,170856,sum,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,876500, ,dyn
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,253854,sum,dyn
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,373000, ,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,102168,sum,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,445500, ,dyn
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,133809,sum,dyn
|
||||
out/hpc_v3,mtx/NACA0015.mtx,158500, ,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,156298,sum,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,864000, ,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,182324,sum,
|
70
hpc-results/ntasks8.out.post
Normal file
70
hpc-results/ntasks8.out.post
Normal file
@ -0,0 +1,70 @@
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,8485, ,
|
||||
out/hpc_cilkv3,mtx/belgium_osm.mtx,8729,sum,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,11500, ,
|
||||
out/hpc_cilkv4,mtx/belgium_osm.mtx,6546,sum,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,11500, ,
|
||||
out/hpc_ompv3,mtx/belgium_osm.mtx,11100,sum,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,18500, ,
|
||||
out/hpc_ompv4,mtx/belgium_osm.mtx,9888,sum,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,19000, ,
|
||||
out/hpc_pthv4,mtx/belgium_osm.mtx,13872,sum,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,21500, ,
|
||||
out/hpc_v3,mtx/belgium_osm.mtx,21502,sum,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,67000, ,
|
||||
out/hpc_v4,mtx/belgium_osm.mtx,25411,sum,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,768000, ,
|
||||
out/hpc_cilkv3,mtx/com-Youtube.mtx,767339,sum,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1695500, ,
|
||||
out/hpc_cilkv4,mtx/com-Youtube.mtx,1437948,sum,
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,704000, ,dyn
|
||||
out/hpc_ompv3,mtx/com-Youtube.mtx,701135,sum,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,1598000, ,dyn
|
||||
out/hpc_ompv4,mtx/com-Youtube.mtx,1054208,sum,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1907000, ,dyn
|
||||
out/hpc_pthv4,mtx/com-Youtube.mtx,1167025,sum,dyn
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2736000, ,
|
||||
out/hpc_v3,mtx/com-Youtube.mtx,2734914,sum,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,7123000, ,
|
||||
out/hpc_v4,mtx/com-Youtube.mtx,2775836,sum,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,18500, ,
|
||||
out/hpc_cilkv3,mtx/dblp-2010.mtx,17669,sum,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,29500, ,
|
||||
out/hpc_cilkv4,mtx/dblp-2010.mtx,8610,sum,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,32000, ,
|
||||
out/hpc_ompv3,mtx/dblp-2010.mtx,32061,sum,
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,53500, ,dyn
|
||||
out/hpc_ompv4,mtx/dblp-2010.mtx,23066,sum,dyn
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,37500, ,
|
||||
out/hpc_pthv4,mtx/dblp-2010.mtx,10636,sum,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,76000, ,
|
||||
out/hpc_v3,mtx/dblp-2010.mtx,74074,sum,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,188000, ,
|
||||
out/hpc_v4,mtx/dblp-2010.mtx,39076,sum,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,395000, ,
|
||||
out/hpc_cilkv3,mtx/mycielskian13.mtx,396520,sum,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,303000, ,
|
||||
out/hpc_cilkv4,mtx/mycielskian13.mtx,194007,sum,
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,276000, ,dyn
|
||||
out/hpc_ompv3,mtx/mycielskian13.mtx,278057,sum,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,517000, ,dyn
|
||||
out/hpc_ompv4,mtx/mycielskian13.mtx,182559,sum,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,303500, ,dyn
|
||||
out/hpc_pthv4,mtx/mycielskian13.mtx,117786,sum,dyn
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1148500, ,
|
||||
out/hpc_v3,mtx/mycielskian13.mtx,1157001,sum,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,1892000, ,
|
||||
out/hpc_v4,mtx/mycielskian13.mtx,609001,sum,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,28000, ,
|
||||
out/hpc_cilkv3,mtx/NACA0015.mtx,29757,sum,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,123500, ,
|
||||
out/hpc_cilkv4,mtx/NACA0015.mtx,25157,sum,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,102000, ,
|
||||
out/hpc_ompv3,mtx/NACA0015.mtx,102619,sum,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,235000, ,
|
||||
out/hpc_ompv4,mtx/NACA0015.mtx,84688,sum,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,128500, ,
|
||||
out/hpc_pthv4,mtx/NACA0015.mtx,31076,sum,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,175500, ,
|
||||
out/hpc_v3,mtx/NACA0015.mtx,174353,sum,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,879000, ,
|
||||
out/hpc_v4,mtx/NACA0015.mtx,189315,sum,
|
225
hpc-results/ntasks_all.csv
Normal file
225
hpc-results/ntasks_all.csv
Normal file
@ -0,0 +1,225 @@
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv3,0,19000
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv3,1,26500
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv3,2,17000
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv3,4,12000
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv3,5,11500
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv3,8,8485
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv3,10,6687
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv3,15,5818
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv3,20,6303
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv4,0,48500
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv4,1,56500
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv4,2,35000
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv4,4,21000
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv4,5,25500
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv4,8,11500
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv4,10,10000
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv4,15,8359
|
||||
mtx/belgium_osm.mtx,out/hpc_cilkv4,20,6521
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv3,0,18000
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv3,1,22500
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv3,2,25000
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv3,4,19000
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv3,5,16500
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv3,8,11500
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv3,10,7521
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv3,15,6548
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv3,20,8999
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv4,0,48000
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv4,1,68000
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv4,2,62500
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv4,4,43000
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv4,5,25000
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv4,8,18500
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv4,10,10500
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv4,15,8995
|
||||
mtx/belgium_osm.mtx,out/hpc_ompv4,20,6932
|
||||
mtx/belgium_osm.mtx,out/hpc_pthv4,0,51000
|
||||
mtx/belgium_osm.mtx,out/hpc_pthv4,1,77000
|
||||
mtx/belgium_osm.mtx,out/hpc_pthv4,2,47000
|
||||
mtx/belgium_osm.mtx,out/hpc_pthv4,4,27500
|
||||
mtx/belgium_osm.mtx,out/hpc_pthv4,5,34500
|
||||
mtx/belgium_osm.mtx,out/hpc_pthv4,8,19000
|
||||
mtx/belgium_osm.mtx,out/hpc_pthv4,10,14500
|
||||
mtx/belgium_osm.mtx,out/hpc_pthv4,15,14500
|
||||
mtx/belgium_osm.mtx,out/hpc_pthv4,20,10000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv3,0,2799500
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv3,1,3144000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv3,2,1592500
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv3,4,923000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv3,5,1114500
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv3,8,768000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv3,10,721500
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv3,15,692000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv3,20,678500
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv4,0,6289000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv4,1,6631000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv4,2,3858000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv4,4,2037500
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv4,5,1783000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv4,8,1695500
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv4,10,1587000
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv4,15,1524500
|
||||
mtx/com-Youtube.mtx,out/hpc_cilkv4,20,1516500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv3,0,2705500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv3,1,2918500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv3,2,2934500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv3,4,2943000
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv3,5,1548500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv3,8,704000
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv3,10,405500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv3,15,382500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv3,20,301000
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv4,0,6307500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv4,1,7077000
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv4,2,7008500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv4,4,7141500
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv4,5,3643000
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv4,8,1598000
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv4,10,1100000
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv4,15,1122000
|
||||
mtx/com-Youtube.mtx,out/hpc_ompv4,20,1010000
|
||||
mtx/com-Youtube.mtx,out/hpc_pthv4,0,6370500
|
||||
mtx/com-Youtube.mtx,out/hpc_pthv4,1,7516500
|
||||
mtx/com-Youtube.mtx,out/hpc_pthv4,2,4209000
|
||||
mtx/com-Youtube.mtx,out/hpc_pthv4,4,2706000
|
||||
mtx/com-Youtube.mtx,out/hpc_pthv4,5,2686000
|
||||
mtx/com-Youtube.mtx,out/hpc_pthv4,8,1907000
|
||||
mtx/com-Youtube.mtx,out/hpc_pthv4,10,1562500
|
||||
mtx/com-Youtube.mtx,out/hpc_pthv4,15,1457000
|
||||
mtx/com-Youtube.mtx,out/hpc_pthv4,20,1369500
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv3,0,68000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv3,1,89000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv3,2,52000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv3,4,26000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv3,5,50500
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv3,8,18500
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv3,10,16000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv3,15,14000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv3,20,11000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv4,0,162000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv4,1,185500
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv4,2,105500
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv4,4,52500
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv4,5,44500
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv4,8,29500
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv4,10,25000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv4,15,19000
|
||||
mtx/dblp-2010.mtx,out/hpc_cilkv4,20,16000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv3,0,68000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv3,1,90000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv3,2,98500
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv3,4,91000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv3,5,93000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv3,8,32000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv3,10,20000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv3,15,17000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv3,20,15500
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv4,0,163500
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv4,1,177000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv4,2,178000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv4,4,177500
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv4,5,185000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv4,8,53500
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv4,10,38000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv4,15,29000
|
||||
mtx/dblp-2010.mtx,out/hpc_ompv4,20,21500
|
||||
mtx/dblp-2010.mtx,out/hpc_pthv4,0,162500
|
||||
mtx/dblp-2010.mtx,out/hpc_pthv4,1,182500
|
||||
mtx/dblp-2010.mtx,out/hpc_pthv4,2,97000
|
||||
mtx/dblp-2010.mtx,out/hpc_pthv4,4,57000
|
||||
mtx/dblp-2010.mtx,out/hpc_pthv4,5,81500
|
||||
mtx/dblp-2010.mtx,out/hpc_pthv4,8,37500
|
||||
mtx/dblp-2010.mtx,out/hpc_pthv4,10,41000
|
||||
mtx/dblp-2010.mtx,out/hpc_pthv4,15,35000
|
||||
mtx/dblp-2010.mtx,out/hpc_pthv4,20,36000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv3,0,1056000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv3,1,1155500
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv3,2,725500
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv3,4,547000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv3,5,360500
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv3,8,395000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv3,10,261500
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv3,15,253000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv3,20,171500
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv4,0,1743500
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv4,1,1663000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv4,2,903000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv4,4,493000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv4,5,379500
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv4,8,303000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv4,10,231500
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv4,15,198000
|
||||
mtx/mycielskian13.mtx,out/hpc_cilkv4,20,137500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv3,0,1055000
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv3,1,1216500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv3,2,1207500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv3,4,1239500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv3,5,1197000
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv3,8,276000
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv3,10,159000
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv3,15,115500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv3,20,76000
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv4,0,1899500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv4,1,1867000
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv4,2,1872500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv4,4,1855500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv4,5,1851500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv4,8,517000
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv4,10,254500
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv4,15,190000
|
||||
mtx/mycielskian13.mtx,out/hpc_ompv4,20,128500
|
||||
mtx/mycielskian13.mtx,out/hpc_pthv4,0,1943000
|
||||
mtx/mycielskian13.mtx,out/hpc_pthv4,1,1710500
|
||||
mtx/mycielskian13.mtx,out/hpc_pthv4,2,977000
|
||||
mtx/mycielskian13.mtx,out/hpc_pthv4,4,514000
|
||||
mtx/mycielskian13.mtx,out/hpc_pthv4,5,442500
|
||||
mtx/mycielskian13.mtx,out/hpc_pthv4,8,303500
|
||||
mtx/mycielskian13.mtx,out/hpc_pthv4,10,253000
|
||||
mtx/mycielskian13.mtx,out/hpc_pthv4,15,210500
|
||||
mtx/mycielskian13.mtx,out/hpc_pthv4,20,154000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv3,0,175500
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv3,1,165000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv3,2,131500
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv3,4,55000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv3,5,52500
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv3,8,28000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv3,10,22000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv3,15,20000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv3,20,16500
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv4,0,633500
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv4,1,734000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv4,2,506000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv4,4,243000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv4,5,259500
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv4,8,123500
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv4,10,87000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv4,15,70000
|
||||
mtx/NACA0015.mtx,out/hpc_cilkv4,20,51000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv3,0,117000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv3,1,159000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv3,2,196500
|
||||
mtx/NACA0015.mtx,out/hpc_ompv3,4,175500
|
||||
mtx/NACA0015.mtx,out/hpc_ompv3,5,227500
|
||||
mtx/NACA0015.mtx,out/hpc_ompv3,8,102000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv3,10,40000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv3,15,33000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv3,20,34500
|
||||
mtx/NACA0015.mtx,out/hpc_ompv4,0,635000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv4,1,702000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv4,2,721500
|
||||
mtx/NACA0015.mtx,out/hpc_ompv4,4,380500
|
||||
mtx/NACA0015.mtx,out/hpc_ompv4,5,408000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv4,8,235000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv4,10,119000
|
||||
mtx/NACA0015.mtx,out/hpc_ompv4,15,95500
|
||||
mtx/NACA0015.mtx,out/hpc_ompv4,20,62500
|
||||
mtx/NACA0015.mtx,out/hpc_pthv4,0,685000
|
||||
mtx/NACA0015.mtx,out/hpc_pthv4,1,708500
|
||||
mtx/NACA0015.mtx,out/hpc_pthv4,2,407500
|
||||
mtx/NACA0015.mtx,out/hpc_pthv4,4,235000
|
||||
mtx/NACA0015.mtx,out/hpc_pthv4,5,373000
|
||||
mtx/NACA0015.mtx,out/hpc_pthv4,8,128500
|
||||
mtx/NACA0015.mtx,out/hpc_pthv4,10,93000
|
||||
mtx/NACA0015.mtx,out/hpc_pthv4,15,93500
|
||||
mtx/NACA0015.mtx,out/hpc_pthv4,20,56000
|
|
BIN
hpc-results/ntasks_all.ods
Normal file
BIN
hpc-results/ntasks_all.ods
Normal file
Binary file not shown.
0
hpc-results/ompv3.out
Normal file
0
hpc-results/ompv3.out
Normal file
BIN
hpc-results/post
Executable file
BIN
hpc-results/post
Executable file
Binary file not shown.
@ -22,7 +22,7 @@
|
||||
#define V3 3
|
||||
#define V4 4
|
||||
|
||||
// Fail-safe verision selection
|
||||
// Fail-safe version selection
|
||||
#if !defined CODE_VERSION
|
||||
#define CODE_VERSION V4
|
||||
#endif
|
||||
|
58
inc/impl.hpp
58
inc/impl.hpp
@ -39,7 +39,7 @@ enum class MatrixType {
|
||||
};
|
||||
|
||||
/*
|
||||
* Forward type declerations
|
||||
* Forward type declarations
|
||||
*/
|
||||
template<typename DataType, typename IndexType, MatrixType Type = MatrixType::SYMMETRIC> struct Matrix;
|
||||
template<typename DataType, typename IndexType, MatrixType Type = MatrixType::SYMMETRIC> struct SpMat;
|
||||
@ -48,7 +48,7 @@ template<typename DataType, typename IndexType> struct SpMatRow;
|
||||
template<typename DataType, typename IndexType> struct SpMatVal;
|
||||
|
||||
/*!
|
||||
* 2D-array wrapper for v1 and v2 part of the exercise t use as RAII
|
||||
* 2D-array wrapper for v1 and v2 part of the exercise used as RAII
|
||||
* and copy-prevention.
|
||||
*
|
||||
* This is a very thin abstraction layer over a native array.
|
||||
@ -180,7 +180,7 @@ Matrix<DataType, IndexType, Type> make_Matrix(IndexType s) {
|
||||
* A(3, 4) = 7;
|
||||
* \endcode
|
||||
*
|
||||
* We also provide getCol() and getRow() functions witch return a viwer/iterator to rows and
|
||||
* We also provide getCol() and getRow() functions witch return a viewer/iterator to rows and
|
||||
* columns of the matrix. In the case of a symmetric matrix instead of a row we return the
|
||||
* equivalent column. This way we gain speed due to CSC format nature.
|
||||
*
|
||||
@ -290,15 +290,15 @@ struct SpMat {
|
||||
}
|
||||
|
||||
/*!
|
||||
* A read item functionality using binary search to find the correct row
|
||||
* A read item functionality using linear search to find the correct row
|
||||
*
|
||||
* @param i The row number
|
||||
* @param j The column number
|
||||
* @return The value of the item or DataType{} if is not present.
|
||||
*/
|
||||
DataType get2(IndexType i, IndexType j) {
|
||||
DataType get_lin(IndexType i, IndexType j) {
|
||||
IndexType idx; bool found;
|
||||
std::tie(idx, found) =find2_idx(rows, col_ptr[j], col_ptr[j+1], i);
|
||||
std::tie(idx, found) =find_place_idx(rows, col_ptr[j], col_ptr[j+1], i);
|
||||
return (found) ? values[idx] : 0;
|
||||
}
|
||||
|
||||
@ -309,8 +309,9 @@ struct SpMat {
|
||||
* If so we just change it to a new value. If not we add the item on the matrix.
|
||||
*
|
||||
* @note
|
||||
* We don't increase the NNZ value of the struct. We expect the user has already
|
||||
* change the NNZ value to the right one using @see capacity() function.
|
||||
* When change a value, we don't increase the NNZ value of the struct. We expect the user has already
|
||||
* change the NNZ value to the right one using @see capacity() function. When adding a value we
|
||||
* increase the NNZ.
|
||||
*
|
||||
* @param i The row number
|
||||
* @param j The column number
|
||||
@ -318,7 +319,7 @@ struct SpMat {
|
||||
*/
|
||||
DataType set(DataType v, IndexType i, IndexType j) {
|
||||
IndexType idx; bool found;
|
||||
std::tie(idx, found) = find2_idx(rows, col_ptr[j], col_ptr[j+1], i);
|
||||
std::tie(idx, found) = find_place_idx(rows, col_ptr[j], col_ptr[j+1], i);
|
||||
if (found)
|
||||
return values[idx] = v; // we don't change NNZ even if we write "0"
|
||||
else {
|
||||
@ -392,20 +393,22 @@ private:
|
||||
* \param begin The vector's index to begin
|
||||
* \param end The vector's index to end
|
||||
* \param match What to search
|
||||
* @return The index of the item or end on failure.
|
||||
* \return An <index, status> pair.
|
||||
* index is the index of the item or end if not found
|
||||
* status is true if found, false otherwise
|
||||
*/
|
||||
std::pair<IndexType, bool> find_idx(const std::vector<IndexType>& v, IndexType begin, IndexType end, IndexType match) {
|
||||
IndexType b = begin, e = end-1;
|
||||
while (true) {
|
||||
while (b <= e) {
|
||||
IndexType m = (b+e)/2;
|
||||
if (v[m] == match) return std::make_pair(m, true);
|
||||
else if (b >= e) return std::make_pair(end, false);
|
||||
else {
|
||||
if (v[m] < match) b = m +1;
|
||||
else e = m -1;
|
||||
else e = m -1;
|
||||
}
|
||||
}
|
||||
return std::make_pair(end, false);;
|
||||
return std::make_pair(end, false);
|
||||
}
|
||||
/*!
|
||||
* find helper for set using index for begin-end instead of iterators.
|
||||
@ -417,8 +420,11 @@ private:
|
||||
* \param begin The vector's index to begin
|
||||
* \param end The vector's index to end
|
||||
* \param match What to search
|
||||
* \return An <index, status> pair.
|
||||
* index is the index of the item or end if not found
|
||||
* status is true if found, false otherwise
|
||||
*/
|
||||
std::pair<IndexType, bool> find2_idx(const std::vector<IndexType>& v, IndexType begin, IndexType end, IndexType match) {
|
||||
std::pair<IndexType, bool> find_place_idx(const std::vector<IndexType>& v, IndexType begin, IndexType end, IndexType match) {
|
||||
for ( ; begin < end ; ++begin) {
|
||||
if (match == v[begin]) return std::make_pair(begin, true);
|
||||
else if (match < v[begin]) return std::make_pair(begin, false);
|
||||
@ -437,7 +443,7 @@ private:
|
||||
//! @{
|
||||
std::vector<DataType> values {}; //!< vector to store the values of the matrix
|
||||
std::vector<IndexType> rows{}; //!< vector to store the row information
|
||||
std::vector<IndexType> col_ptr{1,0}; //!< vector to stor the column pointers
|
||||
std::vector<IndexType> col_ptr{1,0}; //!< vector to store the column pointers
|
||||
IndexType N{0}; //!< The dimension of the matrix (square)
|
||||
IndexType NNZ{0}; //!< The NNZ (capacity of the matrix)
|
||||
//! @}
|
||||
@ -496,20 +502,25 @@ struct SpMatCol {
|
||||
|
||||
/*!
|
||||
* Multiplication operator
|
||||
*
|
||||
* We follow only the non-zero values and multiply only the common indexes.
|
||||
*
|
||||
* @tparam C Universal reference for the type right half site column
|
||||
*
|
||||
* @param c The right hand site matrix
|
||||
* @return The value of the inner product of two vectors
|
||||
* @note The time complexity is \$ O(nnz1+nnz2) \$.
|
||||
* Where the nnz is the max NNZ elements of the column of the matrix
|
||||
*/
|
||||
template <typename C>
|
||||
DataType operator* (C&& c) {
|
||||
static_assert(std::is_same<remove_cvref_t<C>, SpMatCol<DataType, IndexType>>(), "");
|
||||
DataType v{};
|
||||
while (index() != end() && c.index() != c.end()) {
|
||||
if (index() < c.index()) advance();
|
||||
else if (index() > c.index()) ++c;
|
||||
if (index() < c.index()) advance(); // advance me
|
||||
else if (index() > c.index()) ++c; // advance other
|
||||
else { //index() == c.index()
|
||||
v += get() * *c;
|
||||
v += get() * *c; // multiply and advance both
|
||||
++c;
|
||||
advance();
|
||||
}
|
||||
@ -597,20 +608,25 @@ struct SpMatRow {
|
||||
|
||||
/*!
|
||||
* Multiplication operator
|
||||
*
|
||||
* We follow only the non-zero values and multiply only the common indexes.
|
||||
*
|
||||
* @tparam C Universal reference for the type right half site column
|
||||
*
|
||||
* @param c The right hand site matrix
|
||||
* @return The value of the inner product of two vectors
|
||||
* @note The time complexity is \$ O(N+nnz2) \$ and way heavier the ColxCol multiplication.
|
||||
* Where the nnz is the max NNZ elements of the column of the matrix
|
||||
*/
|
||||
template <typename C>
|
||||
DataType operator* (C&& c) {
|
||||
static_assert(std::is_same<remove_cvref_t<C>, SpMatCol<DataType, IndexType>>(), "");
|
||||
DataType v{};
|
||||
while (index() != end() && c.index() != c.end()) {
|
||||
if (index() < c.index()) advance();
|
||||
else if (index() > c.index()) ++c;
|
||||
if (index() < c.index()) advance(); // advance me
|
||||
else if (index() > c.index()) ++c; // advance other
|
||||
else { //index() == c.index()
|
||||
v += get()* *c;
|
||||
v += get() * *c; // multiply and advance both
|
||||
++c;
|
||||
advance();
|
||||
}
|
||||
|
@ -223,10 +223,10 @@ private:
|
||||
};
|
||||
|
||||
/*!
|
||||
* A Logger for entire programm.
|
||||
* A Logger for entire program.
|
||||
*/
|
||||
struct Log {
|
||||
struct Endl {} endl; //!< a tag objec to to use it as a new line request.
|
||||
struct Endl {} endl; //!< a tag object to to use it as a new line request.
|
||||
|
||||
//! We provide logging via << operator
|
||||
template<typename T>
|
||||
|
Binary file not shown.
BIN
report/report.synctex.gz
Normal file
BIN
report/report.synctex.gz
Normal file
Binary file not shown.
@ -17,7 +17,7 @@
|
||||
%\newcommand{\CoAuthorMail}{Co-author'smail}
|
||||
%\newcommand{\CoAuthorAEM}{Co-author's AEM}
|
||||
|
||||
\newcommand{\DocTitle}{Εργασία 1: \eng{Vertexwise triangle counting}}
|
||||
\newcommand{\DocTitle}{Εργασία 1: \eng{vertexwise triangle counting}}
|
||||
\newcommand{\Department}{Τμημα ΗΜΜΥ. Τομεάς Ηλεκτρονικής}
|
||||
\newcommand{\ClassName}{Παράλληλα και Διανεμημένα Συστήματα}
|
||||
|
||||
@ -32,6 +32,11 @@
|
||||
%\setFancyHeadLERO{\ClassName}{\DocTitle}
|
||||
%\BottomTitleSpace{8em}
|
||||
|
||||
\usepackage{subcaption}
|
||||
\usepackage{float}
|
||||
\usepackage{appendix}
|
||||
|
||||
|
||||
% Document
|
||||
% =============================
|
||||
\begin{document}
|
||||
@ -44,6 +49,180 @@
|
||||
%\listoftables
|
||||
|
||||
\section{Εισαγωγή}
|
||||
Μια δεξιότητα ενός μηχανικού λογισμικού, που πάντα αποτελεί πρόκληση, είναι ο παράλληλος προγραμματισμός.
|
||||
Με αυτόν θα ασχοληθούμε στην παρούσα εργασία.
|
||||
Για το σκοπό αυτό θα υλοποιήσουμε ένα πρόγραμμα που θα εντοπίζει τις ακμές που δημιουργούν τρίγωνα σε ένα μη κατευθυντικό γράφο.
|
||||
Και αν αυτό είναι το τι, ο πραγματικός μας σκοπός είναι να καταφέρουμε να παραλληλοποιήσουμε την διαδικασία.
|
||||
Να βρούμε δηλαδή τα κομμάτια που μπορούν να εκτελεστούν ταυτόχρονα και που δεν επηρεάζουν το ένα το άλλο.
|
||||
\par
|
||||
Στην παρούσα εργασία υλοποιούμε δύο αλγόριθμους, έναν που αναζητά μέσα στον πίνακα όλους τους δυνατούς συνδυασμούς και έναν που κάνει χρήση λίγης γραμμικής άλγεβρας.
|
||||
Όπως θα δούμε παρακάτω ο δεύτερος μας δίνει καλύτερες δυνατότητες παραλληλοποίησης.
|
||||
Για να ελέγξουμε την ορθότητα και να πάρουμε μετρήσεις τα εκτελέσιμα που παράξαμε τα τρέξαμε στη υπολογιστική συστοιχία του ΑΠΘ.
|
||||
|
||||
\section{Παραδοτέα}
|
||||
Τα παραδοτέα της εργασίας αποτελούνται από:
|
||||
\begin{itemize}
|
||||
\item Την παρούσα αναφορά.
|
||||
\item Το \href{https://git.hoo2.net/hoo2/PDS_TriangleCount}{σύνδεσμο με το αποθετήριο} που περιέχει τον κώδικα για την παραγωγή των εκτελέσιμων, της αναφοράς και τις μετρήσεις από τη συστοιχία του πανεπιστημίου.
|
||||
\end{itemize}
|
||||
|
||||
\section {Υλοποίηση}
|
||||
Πριν ξεκινήσουμε να αναλύουμε τον παραλληλισμό και τις μετρήσεις καλό θα ήταν να αναφερθούμε στην υλοποίηση.
|
||||
Για την παρούσα εργασία χρησιμοποιήσαμε τη γλώσσα \eng{C++} και βοηθητικά έγινε χρήση του \eng{bash} και της \eng{matlab}.
|
||||
Στην εργασία γίνεται χρήση αραιών πινάκων με το \eng{format \textbf{CSC}}, καθώς βολεύει πολύ για πολλαπλασιασμούς.
|
||||
|
||||
\subsection{\eng{SpMat - SpMatCol - SpMatRow}}
|
||||
Πρώτα έπρεπε να δημιουργήσουμε τις κατάλληλες αφαιρέσεις ώστε ο κώδικάς μας να είναι πιο ευανάγνωστος και καλύτερα δομημένος.
|
||||
Για τον πίνακα δημιουργήσαμε το \eng{template \textbf{SpMat}}.
|
||||
Πρόκειται για μια δομή που περιέχει εργαλεία για ανάγνωση-εγγραφή στοιχείων, γραμμών, στηλών κτλ, δίνοντάς μας την ψευδαίσθηση ότι κινούμαστε σε πλήρη πίνακα.
|
||||
Αντίθετα όμως εσωτερικά γίνεται εκτενής χρήση του \eng{format CSC}.
|
||||
Το \eng{template} μας δίνει τη δυνατότητα επιλογής βελτιστοποίησης, όταν ο πίνακας είναι συμμετρικός, κάτι που συμβαίνει και στην περίπτωσή μας, ώστε όταν ζητάμε να προσπελάσουμε μια γραμμή, στην ουσία να προσπελνούμε την αντίστοιχη συμμετρική στήλη, καθώς αυτό σε ένα πίνακα \eng{CSC} είναι βελτιστοποιημένο.
|
||||
\par
|
||||
Οι δομές \eng{\textbf{SpMatCol}} και \eng{\textbf{SpMatRow}} αποτελούν κάτι που στην \eng{C++} ονομάζουμε \eng{views}\footnote{όπως πχ το: \href{https://en.cppreference.com/w/cpp/header/string_view}{\eng{string view}}} και αποτελούν \eng{non-owning objects} που δείχνουν στον πίνακα \eng{SpMat}.
|
||||
Επίσης ταυτόχρονα αποτελούν ένα είδος \eng{iterator} που μας επιτρέπει να συμπεριφερόμαστε στη στήλη(ή στη γραμμή) σαν να ήταν \eng{range}.
|
||||
Αντί όμως να χρησιμοποιούμε για δείκτες \eng{pointers}, χρησιμοποιούμε ακεραίους, καθώς έτσι μπορούμε να αναφερόμαστε στην αντίστοιχη θέση ενός άλλου πίνακα πολύ εύκολα.
|
||||
Έτσι μπορούμε για παράδειγμα να γράψουμε:
|
||||
\setEnglish
|
||||
\begin{verbatim}
|
||||
for (int i=0 ; i<A.size() ; ++i)
|
||||
for (auto j = A.getRow(i); j.index() != j.end() ; ++j)
|
||||
C(i, j.index()) = A.getRow(i)*A.getCol(j.index());
|
||||
\end{verbatim}
|
||||
\setGreek
|
||||
και να πάρουμε στον \eng{\textbf{SpMat C}} το $A\odot (A \cdot A)$ και μάλιστα αφού ο Α είναι συμμετρικός ο πολλαπλασιασμός να γίνει με \eng{CSC} στήλες μόνο.
|
||||
Στην υλοποίησή μας εδώ κάνουμε μια ακόμα βελτιστοποίηση .
|
||||
|
||||
\section{Βελτιστοποίηση για το συνολικό αριθμό τριγώνων}
|
||||
Η υλοποίηση του 2ου αλγόριθμου\eng{(V4)} βασίζεται στις ιδιότητες των συμμετρικών πινάκων και δημιουργεί ένα διάνυσμα $\vec{c_3}$ του οποίου το κάθε στοιχείο είναι ίσο με τον αριθμό των τριγώνων στους οποίους συμμετέχει ο κάθε κόμβος.
|
||||
Το διάνυσμα δίνεται από την σχέση $\vec{c_3} = \dfrac{1}{2} A \odot (A \cdot A)\cdot \vec{1}$.
|
||||
Γνωρίζοντας όμως ότι ο πίνακας γειτονίασης Α είναι συμμετρικός, κάποιος μπαίνει στη σκέψη ότι όλη η πληροφορία για τον αριθμό τριγώνων θα μπορούσε να βρίσκεται στο μισό του πίνακα.
|
||||
Πράγματι, όπως αποδεικνύεται και στην παράγραφο \ref{proof}, για τον κάτω τριγωνικό ενός συμμετρικού γράφου $L=(l_{ij}) \neq 0 \quad \forall i > j$ έχουμε $\vec{c_1} = \sum_{j=0}^{N-1} \sum_{k=0}^{N-1} l_{ij} \cdot l_{ki} \cdot l_{kj} $, όπου το $\vec{c_1}$ είναι ένα διάνυσμα που σε κάθε θέση έχει τον αριθμό των \textit{μή διατεταγμένων τριγώνων} του κάθε κόμβου.
|
||||
\par
|
||||
Αυτό μας δίνει την δυνατότητα να παρακάμψουμε τη δημιουργία του συμμετρικού πίνακα και να δουλέψουμε με τον κάτω τριγωνικό, όπως ακριβώς μας έρχεται από το \eng{MatrixMarket format}.
|
||||
Αν και αυτό μπορεί να εφαρμοστεί στον αλγόριθμο της έκδοσης \eng{V3}, αυτό δεν μπορεί να γίνει στην έκδοση \eng{V4}, στην οποία πρέπει να κάνουμε ολόκληρο τον πολλαπλασιασμό για το διάνυσμα $\vec{c_3}$.
|
||||
Αν όμως επιθυμούσαμε μόνο το συνολικό αριθμό τριγώνων τότε θα μπορούσαμε και εδώ να κάνουμε χρήση της βελτιστοποίησης.
|
||||
Τα αποτελέσματα αυτά είναι σημειωμένα στον πίνακα \ref{ar:timing} ως \eng{\textit{sum}}.
|
||||
|
||||
\section{Παραλληλισμός}
|
||||
Η στρατηγική μας για τον παραλληλισμό, τόσο για την έκδοση \eng{V3}, όσο και για την \eng{V4}, αρχικά ήταν να χωρίσουμε όλες τις πράξεις που μπορούν να γίνουν ταυτόχρονα.
|
||||
Αυτό οδηγεί σε πολύ μεγάλο αριθμό πιθανών ταυτόχρονων νημάτων τα οποία:
|
||||
\begin{itemize}
|
||||
\item Στην περίπτωση του \eng{V3}: Για κάθε νήμα, αφού έχουμε σε Ο(1) τις δύο πρώτες ακμές του κάθε τριγώνου, κάνουμε αναζήτηση την τρίτη ακμή, πίσω στην στήλη αναφοράς.
|
||||
\item Στην περίπτωση του \eng{V4}: Για κάθε νήμα, αφού έχουμε σε O(1) τη κάθε μή μηδενική θέση του πίνακα, υπολογίζουμε το εσωτερικό γινόμενο της αντίστοιχης γραμμής και στήλης.
|
||||
\end{itemize}
|
||||
Αυτή η προσέγγιση δυστυχώς έχει ένα μεγάλο μειονέκτημα, κάτι που επιβεβαιώσαμε και πειραματικά \footnote{Χρησιμοποιήσαμε τα \eng{valgrind} και \eng{gprof}}.
|
||||
Κάθε χρονική στιγμή πολλά νήματα προσπαθούν να αναγνώσουν από τη μνήμη, μία ένα αντικείμενο από τη στήλη αναφοράς και μία από τη στήλη κάποιας άλλης ακμής.
|
||||
Επίσης προσπαθούν να γράψουν στην θέση του διανύσματος εξόδου στη θέση που αντιστοιχεί στη στήλη αναφοράς.
|
||||
Αυτό εκτός από το μεγάλο \eng{race}, αυξάνει δραματικά τις αποτυχίες της \eng{cache}, με αποτέλεσμα να χάνεται οποιαδήποτε επιτάχυνση μπορούσαμε να αποκτήσουμε.
|
||||
\par
|
||||
Για να υπερκεράσουμε αυτό το πρόβλημα αποφασίσαμε να \textbf{“δώσουμε” σε κάθε νήμα μία και μόνο στήλη}.
|
||||
Αυτό μειώνει τον αριθμό των νημάτων πάρα πολύ και σχεδόν εξαλείφει τα κομμάτια που πρέπει να προστατευτούν για \eng{race}.
|
||||
Σε αυτή την προσέγγιση το κάθε νήμα εκτελεί ότι περιγράψαμε παραπάνω, μόνο που τώρα το εκτελεί \textit{για κάθε μη μηδενικό αντικείμενο της κάθε στήλης}.
|
||||
Με αυτό τον τρόπο εκμεταλλευόμαστε την \eng{cache} του κάθε πυρήνα και τα άλματα στη μνήμη γίνονται από μια(ίδια στήλη ανά πυρήνα), σε μια διαφορετική κάθε φορά.
|
||||
Το μειονέκτημα σε αυτή την περίπτωση προκύπτει από τη σειρά με την οποία δημιουργούνται τα νήματα.
|
||||
Σε ένα πίνακα που τα μη μηδενικά στοιχεία είναι ομοιόμορφα κατανεμημένα τα νήματα χρειάζονται περίπου τον ίδιο χρόνο για να εκτελεστούν.
|
||||
Αν όμως κάποιες στήλες είναι πολύ \textit{“βαρύτερες”} από κάποιες άλλες τότε τα νήματα σε αυτές καθυστερούν περισσότερο και μαζί τους καθυστερούν όλη τη διαδικασία.
|
||||
\par
|
||||
Σε αυτό το σημείο έρχονται να βοηθήσουν τα εργαλεία διαχείρισης του χρονοπρογραμματισμού(\eng{scheduling}) των νημάτων.
|
||||
Στην περίπτωση της \eng{cilk} δεν έχουμε κάποια πρόσβαση.
|
||||
Από την άλλη όμως η \eng{cilk} έχει ένα αρκετά ευέλικτο μοντέλο που στηρίζεται στο \eng{work stealing}\footnote{\eng{\url{https://en.wikipedia.org/wiki/Work_stealing}}} με αποτέλεσμα να διαχειρίζεται αρκετά ομαλά τις ανομοιομορφίες.
|
||||
\par
|
||||
Στην \eng{openMP} από την άλλη έχουμε τη δυνατότητα να ελέγξουμε το \eng{scheduling}, κάτι που για την υλοποίησή μας, μπορεί να γίνει με την παράμετρο “\eng{-{}-dynamic}” από τη γραμμή εντολών.
|
||||
Έτσι για τους πίνακες που είναι αρκετά ανομοιόμορφοι μπορούμε να επιλέξουμε δυναμικό, ενώ για τους ποιο ομοιόμορφους στατικό.
|
||||
Με το δυναμικό το αποτέλεσμα είναι τα νήματα που εκτελούνται κάθε χρονική στιγμή να έρχονται από “τυχαίες” στήλες του πίνακα.
|
||||
Αυτή η τυχαιότητα έχει ως αποτέλεσμα να εξαλείφει τις ανομοιομορφίες επιβαρύνοντας λιγάκι την \eng{cache}.
|
||||
Συνολικά όμως σε ένα ανομοιόμορφο πίνακα αξίζει τον κόπο.
|
||||
Για παράδειγμα στον πίνακα \eng{com\_Youtube} στην έκδοση \eng{V4}, για 8 πυρήνες με στατικό \eng{scheduling} είχαμε 2780 \eng{msec} ενώ με δυναμικό 1598 \eng{msec}.
|
||||
\par
|
||||
Τέλος στην περίπτωση των \eng{pthreads}, δεν έχουμε κανένα αυτοματισμό έτοιμο.
|
||||
Παρόλα αυτά προσπαθήσαμε να κάνουμε κάτι αντίστοιχο της υλοποίησης του \eng{openMP} για το \eng{static} και \eng{dynamic scheduling}.
|
||||
Αντί να προσπελάσουμε τον πίνακα ανά στήλη με τη σειρά, τον προσπελνάμε με βάση τις τιμές μια ακολουθίας.
|
||||
Όταν θέλουμε \eng{static scheduling} την ακολουθία αυτή τη έχουμε σε αύξουσα σειρά, όταν όμως θέλουμε “\eng{dynamic}”, τότε την ανακατεύουμε με τυχαίο τρόπο.
|
||||
Έτσι πάλι έχουμε το κέρδος της εξάλειψης της ανομοιομορφίας όταν αυτό είναι απαραίτητο.
|
||||
\par
|
||||
Παρακάτω παραθέτουμε ένα δείγμα από τις μετρήσεις που έγιναν στη συστοιχία.
|
||||
Σε αυτές η πρώτη μέτρηση (0 \eng{cores}) αφορά τη σειριακή υλοποίηση και η δεύτερη (1 \eng{core}) ένα και μόνο νήμα.
|
||||
Από τα γραφήματα μπορούμε να δούμε και την αύξηση του χρόνου στο ένα νήμα, καθώς και την αργή πτώση των χρόνων στα λίγα νήματα.
|
||||
Αυτά οφείλονται στον έξτρα φόρτο που προσθέτει στο πρόγραμμα μας η διαχείριση των νημάτων.
|
||||
\par
|
||||
%Οι μετρήσεις με το αλγόριθμο της έκδοσης \eng{(V3)} και \eng{(V4)} συνοψίζονται:\\
|
||||
\setEnglish
|
||||
\begin{tabular}{rrrrrr} \label{ar:timing}
|
||||
Algo/Matrix & belgium\_osm & com\_Youtube & dblp-2010 & mycielskian13 & NACA0015 \\
|
||||
Serial v3 & 19.5 [ms]& 2705.0 [ms] & 68.0 [ms] & 1056.0 [ms] & 175.5 [ms] \\
|
||||
OpenMP v3 (x8) & 11.5 [ms]& 704.0 [ms] & 32.0 [ms] & 276.0 [ms] & 102.0 [ms] \\
|
||||
OpenMP v3 (x20) & 8.9 [ms]& 301.0 [ms] & 15.5 [ms] & 76.0 [ms] & 34.5 [ms] \\
|
||||
Cilk v3 (x8) & 8.5 [ms]& 768.0 [ms] & 18.5 [ms] & 395.0 [ms] & 28.0 [ms] \\
|
||||
Cilk v3 (x20) & 6.3 [ms]& 678.5 [ms] & 11.0 [ms] & 171.5 [ms] & 16.5 [ms] \\
|
||||
------------ & ------------ & ------------ &------------& ------------ &------------ \\
|
||||
Serial v4 & 48.5 [ms] & 6289 [ms] & 162.0 [ms] & 1743 [ms] & 633.5 [ms] \\
|
||||
OpenMP v4 (x8) & 18.5 [ms] & 1598 [ms] & 53.5 [ms] & 517.0 [ms] & 235.0 [ms] \\
|
||||
OpenMP v4 (x20) & 6932 [us] & 1010 [ms] & 21.5 [ms] & 128.5 [ms] & 62.5 [ms] \\
|
||||
Cilk v4 (x8) & 11.5 [ms] & 1695 [ms] & 29.5 [ms] & 303.0 [ms] & 123.5 [ms] \\
|
||||
Cilk v4 (x20) & 6521 [us] & 1516 [ms] & 16.0 [ms] & 137.5 [ms] & 51.0 [ms] \\
|
||||
pthreads v4 (x8) & 19.0 [ms] & 1907 [ms] & 37.5 [ms] & 303.5 [ms] & 128.5 [ms] \\
|
||||
pthreads v4 (x20) & 10.0 [ms] & 1369 [ms] & 36.0 [ms] & 154.0 [ms] & 56.0 [ms] \\
|
||||
Serial v4 (sum) & 28.3 [ms] & 2943 [ms] & 36.5 [ms] & 561.5 [ms] & 135.2 [ms] \\
|
||||
OpenMP v4 (sum) & 3931 [us] & 883 [ms] & 7761 [us] & 43.0 [ms] & 23.9 [ms] \\
|
||||
Cilk v4 (sum) & 3872 [us] & 1288 [ms] & 5710 [us] & 95.0 [ms] & 13.2 [ms] \\
|
||||
pthreads v4 (sum) & 8424 [us] & 980.6 [ms] & 9370 [us] & 89.9 [ms] & 25.9 [ms] \\
|
||||
\end{tabular}
|
||||
\setGreek
|
||||
|
||||
\begin{figure}[h!]
|
||||
\begin{subfigure}[h]{0.52\textwidth}
|
||||
\includegraphics[width=\textwidth]{source/belgium_osm.jpg}
|
||||
\caption{Πίνακας \eng{belgium\_osm}}
|
||||
\label{fig:belgium_osm}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[h]{0.52\textwidth}
|
||||
\includegraphics[width=\textwidth]{source/com_Youtube.jpg}
|
||||
\caption{Πίνακας \eng{com\_Youtube}}
|
||||
\label{fig:com_Youtube}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[h]{0.52\textwidth}
|
||||
\includegraphics[width=\textwidth]{source/dblp-2010.jpg}
|
||||
\caption{Πίνακας \eng{dblp-2010}}
|
||||
\label{fig:dblp-2010}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[h]{0.52\textwidth}
|
||||
\includegraphics[width=\textwidth]{source/mycielskian13.jpg}
|
||||
\caption{Πίνακας \eng{mycielskian13}}
|
||||
\label{fig:mycielskian13}
|
||||
\end{subfigure}
|
||||
\begin{subfigure}[h]{0.52\textwidth}
|
||||
\includegraphics[width=\textwidth]{source/NACA0015.jpg}
|
||||
\caption{Πίνακας \eng{NACA0015}}
|
||||
\label{fig:NACA0015}
|
||||
\end{subfigure}
|
||||
\end{figure}
|
||||
|
||||
|
||||
\appendix
|
||||
\section{Παράρτημα}
|
||||
\subsection{Μέτρηση τριγώνων με κάτω τριγωνικό πίνακα} \label{proof}
|
||||
Έστω \eng{\textbf{L}} ο κάτω τριγωνικός πίνακας ενός συμμετρικού γράφου \eng{\textbf{G}}, όπου $L=(l_{ij}) \neq 0 \quad \forall i > j$.
|
||||
Τότε:
|
||||
|
||||
\begin{equation}\label{eq:Lproduct}
|
||||
(L^T \cdot L)_{(i,j)} = \sum_{k=0}^{N-1}l_{ik}^T \cdot l_{kj} = \sum_{k=0}^{N-1}l_{ki} \cdot l_{kj} \quad \forall k>i, k>j
|
||||
\end{equation}
|
||||
Έτσι από την \eqref{eq:Lproduct} προκύπτει:
|
||||
\begin{equation}
|
||||
(L^T \cdot L)_{(i,j)} = \sum_{k=0}^{N-1}l_{ki} \cdot l_{kj} \Rightarrow \
|
||||
(L \odot (L^T \cdot L))_{(i,j)} = l_{ij}\cdot \sum_{k=0}^{N-1} l_{ki} \cdot l_{kj} = \sum_{k=0}^{N-1} l_{ij}\cdot l_{ki} \cdot l_{kj}
|
||||
\end{equation}
|
||||
\begin{equation} \label{eq:Cmat}
|
||||
\Rightarrow C_{(i,j)} = \sum_{k=0}^{N-1} l_{ij}\cdot l_{ki} \cdot l_{kj} \quad \forall k>i>j
|
||||
\end{equation}
|
||||
Όπου φαίνεται πως ο \eng{\textbf{C}} είναι ένας κάτω τριγωνικός πίνακας με μη μηδενικά στοιχεία μόνο στις θέσεις \eng{(i,j)} για τις οποίες υπάρχουν στον \eng{\textbf{G}} τα τρίγωνα \eng{(i,j,k)} για κάθε \eng{i,j,k} τ.ω: $k>i>j$.
|
||||
Δηλαδή \textbf{μόνο μία φορά}.
|
||||
Και τελικά:
|
||||
\begin{equation} \label{eq:Tcount}
|
||||
\vec{c_1} = (L \odot (L^T \cdot L)) \cdot \vec{1} \Rightarrow \vec{c_1}_{(i)} = \sum_{j=0}^{N-1} \sum_{k=0}^{N-1} l_{ij} \cdot l_{ki} \cdot l_{kj} \quad \forall k>i>j
|
||||
\end{equation}
|
||||
Απ' όπου φαίνεται πως το $\vec{c_1}$ είναι διάνυσμα που στη κάθε γραμμή έχει το άθροισμα των τριγώνων μετρημένο μόνο σε μία ακμή(την $l_{ix}, \forall x>i$ του αρχικού γράφου), όχι και στις τρεις.
|
||||
Το άθροισμα αυτού του διανύσματος, προφανώς, ισοδυναμεί με το συνολικό αριθμό των \textit{\textbf{μη διατεταγμένων τριγώνων}} του γράφου.
|
||||
|
||||
% References
|
||||
% =============================
|
||||
|
BIN
report/source/NACA0015.jpg
Normal file
BIN
report/source/NACA0015.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
BIN
report/source/belgium_osm.jpg
Normal file
BIN
report/source/belgium_osm.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
BIN
report/source/com_Youtube.jpg
Normal file
BIN
report/source/com_Youtube.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
BIN
report/source/dblp-2010.jpg
Normal file
BIN
report/source/dblp-2010.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
BIN
report/source/mycielskian13.jpg
Normal file
BIN
report/source/mycielskian13.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
31
runall.sh
31
runall.sh
@ -2,7 +2,7 @@
|
||||
|
||||
if [[ $# -lt 2 ]]; then
|
||||
echo "Error: You must pass the matrix files and the number of iterations"
|
||||
echo "example $ runnall.sh mtx/s12.mtx 5"
|
||||
echo "example $ runnall.sh mtx/s12.mtx 5"
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
@ -11,21 +11,22 @@ dynamics=("out/hpc_ompv3" "out/hpc_ompv4" "out/hpc_pthv4")
|
||||
for ex in out/*; do
|
||||
echo "-------------------------------------------"
|
||||
echo "executable: $ex"
|
||||
for file in "$@"; do
|
||||
if [[ $file == ${@: -1} ]];then
|
||||
continue
|
||||
fi
|
||||
for file in "$@"; do
|
||||
if [[ $file == ${@: -1} ]];then
|
||||
continue
|
||||
fi
|
||||
echo "running $ex -i $file -r ${@: -1} --timing -o /dev/null"
|
||||
eval $ex -i $file -r ${@: -1} --timing -o /dev/null
|
||||
eval $ex -i $file -r ${@: -1} --timing -o /dev/null
|
||||
echo "running $ex -i $file -r ${@: -1} --timing --print_count"
|
||||
eval $ex -i $file -r ${@: -1} --timing --print_count
|
||||
|
||||
if [[ $ex == ${dynamics[0]} || $ex == ${dynamics[1]} || $ex == ${dynamics[2]} ]]; then
|
||||
echo "running $ex -i $file -r ${@: -1} --timing -o /dev/null --dynamic"
|
||||
eval $ex -i $file -r ${@: -1} --timing -o /dev/null --dynamic
|
||||
echo "running $ex -i $file -r ${@: -1} --timing --print_count --dynamic"
|
||||
eval $ex -i $file -r ${@: -1} --timing --print_count --dynamic
|
||||
fi
|
||||
done
|
||||
eval $ex -i $file -r ${@: -1} --timing --print_count
|
||||
|
||||
if [[ $ex == ${dynamics[0]} || $ex == ${dynamics[1]} || $ex == ${dynamics[2]} ]]; then
|
||||
echo "running $ex -i $file -r ${@: -1} --timing -o /dev/null --dynamic"
|
||||
eval $ex -i $file -r ${@: -1} --timing -o /dev/null --dynamic
|
||||
echo "running $ex -i $file -r ${@: -1} --timing --print_count --dynamic"
|
||||
eval $ex -i $file -r ${@: -1} --timing --print_count --dynamic
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
exit 0;
|
@ -51,7 +51,7 @@ static void coo2csc_e(
|
||||
*/
|
||||
uint32_t find_idx(const uint32_t* v, uint32_t begin, uint32_t end, uint32_t match) {
|
||||
uint32_t b = begin, e = end-1;
|
||||
while (1) {
|
||||
while (b <= e) {
|
||||
uint32_t m = (b+e)/2;
|
||||
if (v[m] == match) return m;
|
||||
else if (b >= e) return end;
|
||||
@ -86,6 +86,7 @@ uint32_t* vertexWiseTriangleCounts (uint32_t *coo_row, uint32_t *coo_col, uint32
|
||||
// convert input
|
||||
coo2csc_e (R, C, coo_row, coo_col, nz, n, 1);
|
||||
|
||||
// we use the lower triangular optimization just because ;)
|
||||
for (uint32_t i=0 ; i<n ; ++i) {
|
||||
for (uint32_t j = C[i]; j<C[i+1] ; ++j) {
|
||||
uint32_t j_idx = R[j];
|
||||
|
15
src/main.cpp
15
src/main.cpp
@ -116,18 +116,25 @@ bool get_options(int argc, char* argv[]){
|
||||
std::cout << " --print_graph <size>\n";
|
||||
std::cout << " Prints the first <size> x <size> part of the matrix to stdout.\n\n";
|
||||
std::cout << " -h | --help <size>\n";
|
||||
std::cout << " Prints this and exit.\n";
|
||||
std::cout << " Prints this and exit.\n\n";
|
||||
std::cout << "Examples:\n\n";
|
||||
std::cout << " Get the total count of matrix in <MFILE> and calculate the time for vector creation 5 times:\n";
|
||||
std::cout << " > ./tcount -i <MFILE> --timing --print_count -r 5\n\n";
|
||||
std::cout << " Get the vector to <OUTFILE> of matrix in <MFILE> and print the time to stdout using dynamic scheduling\n";
|
||||
std::cout << " > ./tcount -i <MFILE> -o <OUTFILE> --timing --dynamic\n\n";
|
||||
std::cout << " Get the total count of matrix in <MFILE> using <N> workers only\n";
|
||||
std::cout << " > ./tcount -i <MFILE> -n <N> --print_count\n";
|
||||
exit(0);
|
||||
}
|
||||
else { // parse error
|
||||
std::cout << "Invokation error. Try -h for details.\n";
|
||||
std::cout << "Invocation error. Try -h for details.\n";
|
||||
status = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Input checkers
|
||||
if (session.inputMatrix == InputMatrix::UNSPECIFIED) {
|
||||
std::cout << "Error message\n";
|
||||
std::cout << "Invocation error. Try -h for details.\n";
|
||||
status = false;
|
||||
}
|
||||
#if CODE_VERSION == V4
|
||||
@ -166,7 +173,7 @@ void prepare_matrix (matrix& A, Timing& timer) {
|
||||
timer.print_dt("load matrix");
|
||||
}
|
||||
|
||||
if (session.verbose && session.mtx_print) {
|
||||
if (session.mtx_print) {
|
||||
logger << "\nMatrix:" << logger.endl;
|
||||
print_graph (A);
|
||||
}
|
||||
|
18
src/v3.cpp
18
src/v3.cpp
@ -41,8 +41,8 @@ int nworkers() {
|
||||
* - A lower triangular matrix which update c[i], c[j], c[k]. This is wayyy faster.
|
||||
*/
|
||||
std::vector<value_t> triang_v(matrix& A) {
|
||||
std::vector<std::atomic<value_t>> c(A.size());
|
||||
std::vector<value_t> ret(A.size());
|
||||
std::vector<std::atomic<value_t>> c(A.size()); // atomic for c[j], c[k] only
|
||||
std::vector<value_t> ret(A.size()); // unrestricted c[i] access
|
||||
|
||||
cilk_for (int i=0 ; i<A.size() ; ++i) {
|
||||
for (auto j = A.getCol(i); j.index() != j.end() ; ++j) {
|
||||
@ -61,6 +61,7 @@ std::vector<value_t> triang_v(matrix& A) {
|
||||
c[i] = c[i]/2;
|
||||
}
|
||||
}
|
||||
// merge c to ret and return it
|
||||
for (index_t i =0 ; i<A.size() ; ++i) ret[i] += c[i];
|
||||
return ret;
|
||||
}
|
||||
@ -80,7 +81,7 @@ void do_sum (value_t& out_sum, std::vector<value_t>& v, index_t begin, index_t e
|
||||
*/
|
||||
value_t sum (std::vector<value_t>& v) {
|
||||
int n = nworkers();
|
||||
std::vector<value_t> sum_v(n, 0); // result of each do_sum invokation.
|
||||
std::vector<value_t> sum_v(n, 0); // result of each do_sum invocation.
|
||||
|
||||
// We spawn workers in a more statically way.
|
||||
for (index_t i =0 ; i < n ; ++i) {
|
||||
@ -138,11 +139,11 @@ int nworkers() {
|
||||
* \note
|
||||
* We use two methods of calculation based on \c --make_symmetric or \c --triangular_only
|
||||
* - A full matrix calculation which update only c[i]
|
||||
* - A lower triangular matrix which update c[i], c[j], c[k]. This is wayyy faster.
|
||||
* - A lower triangular matrix which update c[i], c[j], c[k]. This is waaayyy faster.
|
||||
*/
|
||||
std::vector<value_t> triang_v(matrix& A) {
|
||||
std::vector<std::atomic<value_t>> c(A.size());
|
||||
std::vector<value_t> ret(A.size());
|
||||
std::vector<std::atomic<value_t>> c(A.size()); // atomic for c[j], c[k] only
|
||||
std::vector<value_t> ret(A.size()); // unrestricted c[i] access
|
||||
|
||||
// OMP schedule selection
|
||||
if (session.dynamic) omp_set_schedule (omp_sched_dynamic, 0);
|
||||
@ -165,6 +166,7 @@ std::vector<value_t> triang_v(matrix& A) {
|
||||
c[i] = c[i]/2;
|
||||
}
|
||||
}
|
||||
// merge c to ret and return it
|
||||
for (index_t i =0 ; i<A.size() ; ++i) ret[i] += c[i];
|
||||
return ret;
|
||||
}
|
||||
@ -196,7 +198,7 @@ int nworkers() { return 1; }
|
||||
* \note
|
||||
* We use two methods of calculation based on \c --make_symmetric or \c --triangular_only
|
||||
* - A full matrix calculation which update only c[i]
|
||||
* - A lower triangular matrix which update c[i], c[j], c[k]. This is wayyy faster.
|
||||
* - A lower triangular matrix which update c[i], c[j], c[k]. This is waaayyy faster.
|
||||
*/
|
||||
std::vector<value_t> triang_v(matrix& A) {
|
||||
std::vector<value_t> c(A.size());
|
||||
@ -210,10 +212,12 @@ std::vector<value_t> triang_v(matrix& A) {
|
||||
++c[i];
|
||||
c[j.index()] += (!session.makeSymmetric)? 1:0;
|
||||
c[k.index()] += (!session.makeSymmetric)? 1:0;
|
||||
//^ We set other nodes in case of lower triangular
|
||||
}
|
||||
}
|
||||
}
|
||||
if (session.makeSymmetric) c[i] /= 2;
|
||||
//^ We don't have to divide by 2 in case of lower triangular
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
33
src/v4.cpp
33
src/v4.cpp
@ -37,15 +37,16 @@ int nworkers() {
|
||||
* vector = --- * (A.* (A*B))*ones_N
|
||||
* 2
|
||||
* We squeezed all that to one function for performance. The row*column multiplication
|
||||
* uses the inner CSC structure of sparse matrix and follows only non-zero members.
|
||||
* uses the inner CSC structure of sparse matrix and follows only non-zero members
|
||||
* with a time complexity of \$ O(nnz1 + nnz2) \$
|
||||
*
|
||||
* \param A The first matrix to use.
|
||||
* \param B The second matrix to use (they can be the same).
|
||||
* \return The count vector. RVO is used here.
|
||||
* \note
|
||||
* We use two methods of calculation based on \c --make_symmetric or \c --triangular_only
|
||||
* - A full matrix calculation which update only c[i]
|
||||
* - A lower triangular matrix which update c[i], c[j], c[k]. This is wayyy faster.
|
||||
* - A full matrix calculation
|
||||
* - A lower triangular matrix
|
||||
* \warning
|
||||
* The later(--triangular_only) produce correct results ONLY if we are after the total count.
|
||||
*/
|
||||
@ -76,7 +77,7 @@ void do_sum (value_t& out_sum, std::vector<value_t>& v, index_t begin, index_t e
|
||||
*/
|
||||
value_t sum (std::vector<value_t>& v) {
|
||||
int n = nworkers();
|
||||
std::vector<value_t> sum_v(n, 0); // result of each do_sum invokation.
|
||||
std::vector<value_t> sum_v(n, 0); // result of each do_sum invocation.
|
||||
|
||||
// We spawn workers in a more statically way.
|
||||
for (index_t i =0 ; i < n ; ++i) {
|
||||
@ -120,15 +121,16 @@ int nworkers() {
|
||||
* vector = --- * (A.* (A*B))*ones_N
|
||||
* 2
|
||||
* We squeezed all that to one function for performance. The row*column multiplication
|
||||
* uses the inner CSC structure of sparse matrix and follows only non-zero members.
|
||||
* uses the inner CSC structure of sparse matrix and follows only non-zero members
|
||||
* with a time complexity of \$ O(nnz1 + nnz2) \$
|
||||
*
|
||||
* \param A The first matrix to use.
|
||||
* \param B The second matrix to use (they can be the same).
|
||||
* \return The count vector. RVO is used here.
|
||||
* \note
|
||||
* We use two methods of calculation based on \c --make_symmetric or \c --triangular_only
|
||||
* - A full matrix calculation which update only c[i]
|
||||
* - A lower triangular matrix which update c[i], c[j], c[k]. This is wayyy faster.
|
||||
* - A full matrix calculation
|
||||
* - A lower triangular matrix
|
||||
* \warning
|
||||
* The later(--triangular_only) produce correct results ONLY if we are after the total count.
|
||||
*/
|
||||
@ -189,7 +191,8 @@ int nworkers() {
|
||||
* 2
|
||||
*
|
||||
* We squeezed all that to one function for performance. The row*column multiplication
|
||||
* uses the inner CSC structure of sparse matrix and follows only non-zero members.
|
||||
* uses the inner CSC structure of sparse matrix and follows only non-zero members
|
||||
* with a time complexity of \$ O(nnz1 + nnz2) \$
|
||||
*
|
||||
* \param out Reference to output vector
|
||||
* \param A The first matrix to use.
|
||||
@ -198,8 +201,8 @@ int nworkers() {
|
||||
* \return The count vector. RVO is used here.
|
||||
* \note
|
||||
* We use two methods of calculation based on \c --make_symmetric or \c --triangular_only
|
||||
* - A full matrix calculation which update only c[i]
|
||||
* - A lower triangular matrix which update c[i], c[j], c[k]. This is wayyy faster.
|
||||
* - A full matrix calculation
|
||||
* - A lower triangular matrix
|
||||
* \warning
|
||||
* The later(--triangular_only) produce correct results ONLY if we are after the total count.
|
||||
*/
|
||||
@ -260,7 +263,7 @@ void do_sum (value_t& out_sum, std::vector<value_t>& v, index_t begin, index_t e
|
||||
*/
|
||||
value_t sum (std::vector<value_t>& v) {
|
||||
int n = nworkers();
|
||||
std::vector<value_t> sum_v(n, 0); // result of each do_sum invokation.
|
||||
std::vector<value_t> sum_v(n, 0); // result of each do_sum invocation.
|
||||
std::vector<std::thread> workers;
|
||||
|
||||
// We spawn workers in a more statically way.
|
||||
@ -288,16 +291,18 @@ int nworkers() { return 1; }
|
||||
* 1
|
||||
* vector = --- * (A.* (A*B))*ones_N
|
||||
* 2
|
||||
*
|
||||
* We squeezed all that to one function for performance. The row*column multiplication
|
||||
* uses the inner CSC structure of sparse matrix and follows only non-zero members.
|
||||
* uses the inner CSC structure of sparse matrix and follows only non-zero members
|
||||
* with a time complexity of \$ O(nnz1 + nnz2) \$
|
||||
*
|
||||
* \param A The first matrix to use.
|
||||
* \param B The second matrix to use (they can be the same).
|
||||
* \return The count vector. RVO is used here.
|
||||
* \note
|
||||
* We use two methods of calculation based on \c --make_symmetric or \c --triangular_only
|
||||
* - A full matrix calculation which update only c[i]
|
||||
* - A lower triangular matrix which update c[i], c[j], c[k]. This is wayyy faster.
|
||||
* - A full matrix calculation
|
||||
* - A lower triangular matrix
|
||||
* \warning
|
||||
* The later(--triangular_only) produce correct results ONLY if we are after the total count.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user