Compare commits

...

5 Commits

31 changed files with 1241 additions and 66 deletions

View File

@ -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
View File

@ -0,0 +1 @@
/Debug/

93
hpc-results/main.cpp Normal file
View 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;
}

View 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,

View 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,

View 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,

View 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,

View 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,

View 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,

View 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,

View 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
View 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
1 mtx/belgium_osm.mtx out/hpc_cilkv3 0 19000
2 mtx/belgium_osm.mtx out/hpc_cilkv3 1 26500
3 mtx/belgium_osm.mtx out/hpc_cilkv3 2 17000
4 mtx/belgium_osm.mtx out/hpc_cilkv3 4 12000
5 mtx/belgium_osm.mtx out/hpc_cilkv3 5 11500
6 mtx/belgium_osm.mtx out/hpc_cilkv3 8 8485
7 mtx/belgium_osm.mtx out/hpc_cilkv3 10 6687
8 mtx/belgium_osm.mtx out/hpc_cilkv3 15 5818
9 mtx/belgium_osm.mtx out/hpc_cilkv3 20 6303
10 mtx/belgium_osm.mtx out/hpc_cilkv4 0 48500
11 mtx/belgium_osm.mtx out/hpc_cilkv4 1 56500
12 mtx/belgium_osm.mtx out/hpc_cilkv4 2 35000
13 mtx/belgium_osm.mtx out/hpc_cilkv4 4 21000
14 mtx/belgium_osm.mtx out/hpc_cilkv4 5 25500
15 mtx/belgium_osm.mtx out/hpc_cilkv4 8 11500
16 mtx/belgium_osm.mtx out/hpc_cilkv4 10 10000
17 mtx/belgium_osm.mtx out/hpc_cilkv4 15 8359
18 mtx/belgium_osm.mtx out/hpc_cilkv4 20 6521
19 mtx/belgium_osm.mtx out/hpc_ompv3 0 18000
20 mtx/belgium_osm.mtx out/hpc_ompv3 1 22500
21 mtx/belgium_osm.mtx out/hpc_ompv3 2 25000
22 mtx/belgium_osm.mtx out/hpc_ompv3 4 19000
23 mtx/belgium_osm.mtx out/hpc_ompv3 5 16500
24 mtx/belgium_osm.mtx out/hpc_ompv3 8 11500
25 mtx/belgium_osm.mtx out/hpc_ompv3 10 7521
26 mtx/belgium_osm.mtx out/hpc_ompv3 15 6548
27 mtx/belgium_osm.mtx out/hpc_ompv3 20 8999
28 mtx/belgium_osm.mtx out/hpc_ompv4 0 48000
29 mtx/belgium_osm.mtx out/hpc_ompv4 1 68000
30 mtx/belgium_osm.mtx out/hpc_ompv4 2 62500
31 mtx/belgium_osm.mtx out/hpc_ompv4 4 43000
32 mtx/belgium_osm.mtx out/hpc_ompv4 5 25000
33 mtx/belgium_osm.mtx out/hpc_ompv4 8 18500
34 mtx/belgium_osm.mtx out/hpc_ompv4 10 10500
35 mtx/belgium_osm.mtx out/hpc_ompv4 15 8995
36 mtx/belgium_osm.mtx out/hpc_ompv4 20 6932
37 mtx/belgium_osm.mtx out/hpc_pthv4 0 51000
38 mtx/belgium_osm.mtx out/hpc_pthv4 1 77000
39 mtx/belgium_osm.mtx out/hpc_pthv4 2 47000
40 mtx/belgium_osm.mtx out/hpc_pthv4 4 27500
41 mtx/belgium_osm.mtx out/hpc_pthv4 5 34500
42 mtx/belgium_osm.mtx out/hpc_pthv4 8 19000
43 mtx/belgium_osm.mtx out/hpc_pthv4 10 14500
44 mtx/belgium_osm.mtx out/hpc_pthv4 15 14500
45 mtx/belgium_osm.mtx out/hpc_pthv4 20 10000
46 mtx/com-Youtube.mtx out/hpc_cilkv3 0 2799500
47 mtx/com-Youtube.mtx out/hpc_cilkv3 1 3144000
48 mtx/com-Youtube.mtx out/hpc_cilkv3 2 1592500
49 mtx/com-Youtube.mtx out/hpc_cilkv3 4 923000
50 mtx/com-Youtube.mtx out/hpc_cilkv3 5 1114500
51 mtx/com-Youtube.mtx out/hpc_cilkv3 8 768000
52 mtx/com-Youtube.mtx out/hpc_cilkv3 10 721500
53 mtx/com-Youtube.mtx out/hpc_cilkv3 15 692000
54 mtx/com-Youtube.mtx out/hpc_cilkv3 20 678500
55 mtx/com-Youtube.mtx out/hpc_cilkv4 0 6289000
56 mtx/com-Youtube.mtx out/hpc_cilkv4 1 6631000
57 mtx/com-Youtube.mtx out/hpc_cilkv4 2 3858000
58 mtx/com-Youtube.mtx out/hpc_cilkv4 4 2037500
59 mtx/com-Youtube.mtx out/hpc_cilkv4 5 1783000
60 mtx/com-Youtube.mtx out/hpc_cilkv4 8 1695500
61 mtx/com-Youtube.mtx out/hpc_cilkv4 10 1587000
62 mtx/com-Youtube.mtx out/hpc_cilkv4 15 1524500
63 mtx/com-Youtube.mtx out/hpc_cilkv4 20 1516500
64 mtx/com-Youtube.mtx out/hpc_ompv3 0 2705500
65 mtx/com-Youtube.mtx out/hpc_ompv3 1 2918500
66 mtx/com-Youtube.mtx out/hpc_ompv3 2 2934500
67 mtx/com-Youtube.mtx out/hpc_ompv3 4 2943000
68 mtx/com-Youtube.mtx out/hpc_ompv3 5 1548500
69 mtx/com-Youtube.mtx out/hpc_ompv3 8 704000
70 mtx/com-Youtube.mtx out/hpc_ompv3 10 405500
71 mtx/com-Youtube.mtx out/hpc_ompv3 15 382500
72 mtx/com-Youtube.mtx out/hpc_ompv3 20 301000
73 mtx/com-Youtube.mtx out/hpc_ompv4 0 6307500
74 mtx/com-Youtube.mtx out/hpc_ompv4 1 7077000
75 mtx/com-Youtube.mtx out/hpc_ompv4 2 7008500
76 mtx/com-Youtube.mtx out/hpc_ompv4 4 7141500
77 mtx/com-Youtube.mtx out/hpc_ompv4 5 3643000
78 mtx/com-Youtube.mtx out/hpc_ompv4 8 1598000
79 mtx/com-Youtube.mtx out/hpc_ompv4 10 1100000
80 mtx/com-Youtube.mtx out/hpc_ompv4 15 1122000
81 mtx/com-Youtube.mtx out/hpc_ompv4 20 1010000
82 mtx/com-Youtube.mtx out/hpc_pthv4 0 6370500
83 mtx/com-Youtube.mtx out/hpc_pthv4 1 7516500
84 mtx/com-Youtube.mtx out/hpc_pthv4 2 4209000
85 mtx/com-Youtube.mtx out/hpc_pthv4 4 2706000
86 mtx/com-Youtube.mtx out/hpc_pthv4 5 2686000
87 mtx/com-Youtube.mtx out/hpc_pthv4 8 1907000
88 mtx/com-Youtube.mtx out/hpc_pthv4 10 1562500
89 mtx/com-Youtube.mtx out/hpc_pthv4 15 1457000
90 mtx/com-Youtube.mtx out/hpc_pthv4 20 1369500
91 mtx/dblp-2010.mtx out/hpc_cilkv3 0 68000
92 mtx/dblp-2010.mtx out/hpc_cilkv3 1 89000
93 mtx/dblp-2010.mtx out/hpc_cilkv3 2 52000
94 mtx/dblp-2010.mtx out/hpc_cilkv3 4 26000
95 mtx/dblp-2010.mtx out/hpc_cilkv3 5 50500
96 mtx/dblp-2010.mtx out/hpc_cilkv3 8 18500
97 mtx/dblp-2010.mtx out/hpc_cilkv3 10 16000
98 mtx/dblp-2010.mtx out/hpc_cilkv3 15 14000
99 mtx/dblp-2010.mtx out/hpc_cilkv3 20 11000
100 mtx/dblp-2010.mtx out/hpc_cilkv4 0 162000
101 mtx/dblp-2010.mtx out/hpc_cilkv4 1 185500
102 mtx/dblp-2010.mtx out/hpc_cilkv4 2 105500
103 mtx/dblp-2010.mtx out/hpc_cilkv4 4 52500
104 mtx/dblp-2010.mtx out/hpc_cilkv4 5 44500
105 mtx/dblp-2010.mtx out/hpc_cilkv4 8 29500
106 mtx/dblp-2010.mtx out/hpc_cilkv4 10 25000
107 mtx/dblp-2010.mtx out/hpc_cilkv4 15 19000
108 mtx/dblp-2010.mtx out/hpc_cilkv4 20 16000
109 mtx/dblp-2010.mtx out/hpc_ompv3 0 68000
110 mtx/dblp-2010.mtx out/hpc_ompv3 1 90000
111 mtx/dblp-2010.mtx out/hpc_ompv3 2 98500
112 mtx/dblp-2010.mtx out/hpc_ompv3 4 91000
113 mtx/dblp-2010.mtx out/hpc_ompv3 5 93000
114 mtx/dblp-2010.mtx out/hpc_ompv3 8 32000
115 mtx/dblp-2010.mtx out/hpc_ompv3 10 20000
116 mtx/dblp-2010.mtx out/hpc_ompv3 15 17000
117 mtx/dblp-2010.mtx out/hpc_ompv3 20 15500
118 mtx/dblp-2010.mtx out/hpc_ompv4 0 163500
119 mtx/dblp-2010.mtx out/hpc_ompv4 1 177000
120 mtx/dblp-2010.mtx out/hpc_ompv4 2 178000
121 mtx/dblp-2010.mtx out/hpc_ompv4 4 177500
122 mtx/dblp-2010.mtx out/hpc_ompv4 5 185000
123 mtx/dblp-2010.mtx out/hpc_ompv4 8 53500
124 mtx/dblp-2010.mtx out/hpc_ompv4 10 38000
125 mtx/dblp-2010.mtx out/hpc_ompv4 15 29000
126 mtx/dblp-2010.mtx out/hpc_ompv4 20 21500
127 mtx/dblp-2010.mtx out/hpc_pthv4 0 162500
128 mtx/dblp-2010.mtx out/hpc_pthv4 1 182500
129 mtx/dblp-2010.mtx out/hpc_pthv4 2 97000
130 mtx/dblp-2010.mtx out/hpc_pthv4 4 57000
131 mtx/dblp-2010.mtx out/hpc_pthv4 5 81500
132 mtx/dblp-2010.mtx out/hpc_pthv4 8 37500
133 mtx/dblp-2010.mtx out/hpc_pthv4 10 41000
134 mtx/dblp-2010.mtx out/hpc_pthv4 15 35000
135 mtx/dblp-2010.mtx out/hpc_pthv4 20 36000
136 mtx/mycielskian13.mtx out/hpc_cilkv3 0 1056000
137 mtx/mycielskian13.mtx out/hpc_cilkv3 1 1155500
138 mtx/mycielskian13.mtx out/hpc_cilkv3 2 725500
139 mtx/mycielskian13.mtx out/hpc_cilkv3 4 547000
140 mtx/mycielskian13.mtx out/hpc_cilkv3 5 360500
141 mtx/mycielskian13.mtx out/hpc_cilkv3 8 395000
142 mtx/mycielskian13.mtx out/hpc_cilkv3 10 261500
143 mtx/mycielskian13.mtx out/hpc_cilkv3 15 253000
144 mtx/mycielskian13.mtx out/hpc_cilkv3 20 171500
145 mtx/mycielskian13.mtx out/hpc_cilkv4 0 1743500
146 mtx/mycielskian13.mtx out/hpc_cilkv4 1 1663000
147 mtx/mycielskian13.mtx out/hpc_cilkv4 2 903000
148 mtx/mycielskian13.mtx out/hpc_cilkv4 4 493000
149 mtx/mycielskian13.mtx out/hpc_cilkv4 5 379500
150 mtx/mycielskian13.mtx out/hpc_cilkv4 8 303000
151 mtx/mycielskian13.mtx out/hpc_cilkv4 10 231500
152 mtx/mycielskian13.mtx out/hpc_cilkv4 15 198000
153 mtx/mycielskian13.mtx out/hpc_cilkv4 20 137500
154 mtx/mycielskian13.mtx out/hpc_ompv3 0 1055000
155 mtx/mycielskian13.mtx out/hpc_ompv3 1 1216500
156 mtx/mycielskian13.mtx out/hpc_ompv3 2 1207500
157 mtx/mycielskian13.mtx out/hpc_ompv3 4 1239500
158 mtx/mycielskian13.mtx out/hpc_ompv3 5 1197000
159 mtx/mycielskian13.mtx out/hpc_ompv3 8 276000
160 mtx/mycielskian13.mtx out/hpc_ompv3 10 159000
161 mtx/mycielskian13.mtx out/hpc_ompv3 15 115500
162 mtx/mycielskian13.mtx out/hpc_ompv3 20 76000
163 mtx/mycielskian13.mtx out/hpc_ompv4 0 1899500
164 mtx/mycielskian13.mtx out/hpc_ompv4 1 1867000
165 mtx/mycielskian13.mtx out/hpc_ompv4 2 1872500
166 mtx/mycielskian13.mtx out/hpc_ompv4 4 1855500
167 mtx/mycielskian13.mtx out/hpc_ompv4 5 1851500
168 mtx/mycielskian13.mtx out/hpc_ompv4 8 517000
169 mtx/mycielskian13.mtx out/hpc_ompv4 10 254500
170 mtx/mycielskian13.mtx out/hpc_ompv4 15 190000
171 mtx/mycielskian13.mtx out/hpc_ompv4 20 128500
172 mtx/mycielskian13.mtx out/hpc_pthv4 0 1943000
173 mtx/mycielskian13.mtx out/hpc_pthv4 1 1710500
174 mtx/mycielskian13.mtx out/hpc_pthv4 2 977000
175 mtx/mycielskian13.mtx out/hpc_pthv4 4 514000
176 mtx/mycielskian13.mtx out/hpc_pthv4 5 442500
177 mtx/mycielskian13.mtx out/hpc_pthv4 8 303500
178 mtx/mycielskian13.mtx out/hpc_pthv4 10 253000
179 mtx/mycielskian13.mtx out/hpc_pthv4 15 210500
180 mtx/mycielskian13.mtx out/hpc_pthv4 20 154000
181 mtx/NACA0015.mtx out/hpc_cilkv3 0 175500
182 mtx/NACA0015.mtx out/hpc_cilkv3 1 165000
183 mtx/NACA0015.mtx out/hpc_cilkv3 2 131500
184 mtx/NACA0015.mtx out/hpc_cilkv3 4 55000
185 mtx/NACA0015.mtx out/hpc_cilkv3 5 52500
186 mtx/NACA0015.mtx out/hpc_cilkv3 8 28000
187 mtx/NACA0015.mtx out/hpc_cilkv3 10 22000
188 mtx/NACA0015.mtx out/hpc_cilkv3 15 20000
189 mtx/NACA0015.mtx out/hpc_cilkv3 20 16500
190 mtx/NACA0015.mtx out/hpc_cilkv4 0 633500
191 mtx/NACA0015.mtx out/hpc_cilkv4 1 734000
192 mtx/NACA0015.mtx out/hpc_cilkv4 2 506000
193 mtx/NACA0015.mtx out/hpc_cilkv4 4 243000
194 mtx/NACA0015.mtx out/hpc_cilkv4 5 259500
195 mtx/NACA0015.mtx out/hpc_cilkv4 8 123500
196 mtx/NACA0015.mtx out/hpc_cilkv4 10 87000
197 mtx/NACA0015.mtx out/hpc_cilkv4 15 70000
198 mtx/NACA0015.mtx out/hpc_cilkv4 20 51000
199 mtx/NACA0015.mtx out/hpc_ompv3 0 117000
200 mtx/NACA0015.mtx out/hpc_ompv3 1 159000
201 mtx/NACA0015.mtx out/hpc_ompv3 2 196500
202 mtx/NACA0015.mtx out/hpc_ompv3 4 175500
203 mtx/NACA0015.mtx out/hpc_ompv3 5 227500
204 mtx/NACA0015.mtx out/hpc_ompv3 8 102000
205 mtx/NACA0015.mtx out/hpc_ompv3 10 40000
206 mtx/NACA0015.mtx out/hpc_ompv3 15 33000
207 mtx/NACA0015.mtx out/hpc_ompv3 20 34500
208 mtx/NACA0015.mtx out/hpc_ompv4 0 635000
209 mtx/NACA0015.mtx out/hpc_ompv4 1 702000
210 mtx/NACA0015.mtx out/hpc_ompv4 2 721500
211 mtx/NACA0015.mtx out/hpc_ompv4 4 380500
212 mtx/NACA0015.mtx out/hpc_ompv4 5 408000
213 mtx/NACA0015.mtx out/hpc_ompv4 8 235000
214 mtx/NACA0015.mtx out/hpc_ompv4 10 119000
215 mtx/NACA0015.mtx out/hpc_ompv4 15 95500
216 mtx/NACA0015.mtx out/hpc_ompv4 20 62500
217 mtx/NACA0015.mtx out/hpc_pthv4 0 685000
218 mtx/NACA0015.mtx out/hpc_pthv4 1 708500
219 mtx/NACA0015.mtx out/hpc_pthv4 2 407500
220 mtx/NACA0015.mtx out/hpc_pthv4 4 235000
221 mtx/NACA0015.mtx out/hpc_pthv4 5 373000
222 mtx/NACA0015.mtx out/hpc_pthv4 8 128500
223 mtx/NACA0015.mtx out/hpc_pthv4 10 93000
224 mtx/NACA0015.mtx out/hpc_pthv4 15 93500
225 mtx/NACA0015.mtx out/hpc_pthv4 20 56000

BIN
hpc-results/ntasks_all.ods Normal file

Binary file not shown.

0
hpc-results/ompv3.out Normal file
View File

BIN
hpc-results/post Executable file

Binary file not shown.

View File

@ -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

View File

@ -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();
}

View File

@ -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

Binary file not shown.

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

BIN
report/source/dblp-2010.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

View File

@ -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
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
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;

View File

@ -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];

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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.
*/