Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 919df19a authored by Berenger Bramas's avatar Berenger Bramas
Browse files

Update tutorial

parent e120bbd9
No related merge requests found
......@@ -8,24 +8,32 @@ echo ""
echo "Using granularities:"
echo "$SCALFMM_BS_CPU_SEQ and $SCALFMM_BS_CPU_PAR"
# only in seq with the seq bs
STARPU_NCPUS=1
STARPU_NCUDA=0
logoutput=`./Tests/Release/testBlockedUnifCudaBench -nb $SCALFMM_NB -h $SCALFMM_H -bs $SCALFMM_BS_CPU_SEQ`
if [[ $VERBOSE ]] ; then
echo $logoutput
fi
$SCALFMM_STARPU_DIR/bin/starpu_fxt_tool -i "/tmp/prof_file_"$USER"_0"
rec_name="$SCALFMM_RES_DIR/trace-nb_$SCALFMM_NB-h_$SCALFMM_H-bs_$SCALFMM_BS_CPU_SEQ-CPU_$cpu.rec"
mv trace.rec $rec_name
python $SCALFMM_STARPU_DIR/bin/starpu_trace_state_stats.py -t $rec_name > $rec_name.time
for (( cpu=1 ; cpu<=$SCALFMM_MAX_NB_CPU ; cpu++)) ; do
echo ">> CPU = $cpu"
STARPU_NCPUS=$cpu
STARPU_NCUDA=0
logoutput=`./Tests/Release/testBlockedUnifCudaBench -nb $SCALFMM_NB -h $SCALFMM_H -bs $SCALFMM_BS_CPU_SEQ`
if [[ $VERBOSE ]] ; then
echo $logoutput
fi
rec_name="$SCALFMM_RES_DIR/trace-nb_$SCALFMM_NB-h_$SCALFMM_H-bs_$SCALFMM_CPU_SEQ-CPU_$cpu.rec"
mv trace.rec $rec_name
python $SCALFMM_STARPU_DIR/bin/starpu_trace_state_stats.py -t $rec_name > $rec_name.time
logoutput=`./Tests/Release/testBlockedUnifCudaBench -nb $SCALFMM_NB -h $SCALFMM_H -bs $SCALFMM_BS_CPU_PAR`
if [[ $VERBOSE ]] ; then
echo $logoutput
fi
rec_name="$SCALFMM_RES_DIR/trace-nb_$SCALFMM_NB-h_$SCALFMM_H-bs_$SCALFMM_CPU_PAR-CPU_$cpu.rec"
$SCALFMM_STARPU_DIR/bin/starpu_fxt_tool -i "/tmp/prof_file_"$USER"_0"
rec_name="$SCALFMM_RES_DIR/trace-nb_$SCALFMM_NB-h_$SCALFMM_H-bs_$SCALFMM_BS_CPU_PAR-CPU_$cpu.rec"
mv trace.rec $rec_name
python $SCALFMM_STARPU_DIR/bin/starpu_trace_state_stats.py -t $rec_name > $rec_name.time
done
......
0 granularity-eff tasks-eff runtime-eff pipeline-eff
1 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00
2 9.588832e-01 9.588832e-01 9.972215e-01 9.999844e-01
3 9.984195e-01 9.984195e-01 9.992539e-01 9.999840e-01
4 9.936055e-01 9.936055e-01 9.992505e-01 9.999843e-01
5 9.859209e-01 9.859209e-01 9.991938e-01 9.999840e-01
6 9.913540e-01 9.913540e-01 9.992224e-01 9.999848e-01
7 9.980442e-01 9.980442e-01 9.993216e-01 9.999841e-01
8 9.932070e-01 9.932070e-01 9.993356e-01 9.999844e-01
9 9.953908e-01 9.953908e-01 9.993136e-01 9.999852e-01
10 9.930517e-01 9.930517e-01 9.991280e-01 9.999848e-01
11 9.937148e-01 9.937148e-01 9.992802e-01 9.999838e-01
12 9.895039e-01 9.895039e-01 9.992958e-01 9.999842e-01
13 9.934571e-01 9.934571e-01 9.992770e-01 9.999845e-01
14 9.939346e-01 9.939346e-01 9.993242e-01 9.999845e-01
15 9.929928e-01 9.929928e-01 9.993077e-01 9.999849e-01
16 9.946804e-01 9.946804e-01 9.993051e-01 9.999838e-01
17 9.959137e-01 9.959137e-01 9.992893e-01 9.999839e-01
18 9.652375e-01 9.652375e-01 9.961152e-01 9.999832e-01
19 9.937258e-01 9.937258e-01 9.992987e-01 9.999845e-01
20 9.949256e-01 9.949256e-01 9.992757e-01 9.999843e-01
21 9.886613e-01 9.886613e-01 9.992616e-01 9.999838e-01
22 9.921982e-01 9.921982e-01 9.992499e-01 9.999842e-01
23 1.001717e+00 1.001717e+00 9.992881e-01 9.999846e-01
24 9.957642e-01 9.957642e-01 9.992461e-01 9.999836e-01
Addons/BenchEfficiency/global-eff.png

7.52 KiB

#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <string>
#include <cassert>
#include <sstream>
#include <cstring>
template <class VariableType>
inline VariableType StrToOther(const std::string& str, const VariableType& defaultValue = VariableType(), bool* hasWorked = nullptr){
std::istringstream iss(str,std::istringstream::in);
VariableType value = defaultValue;
iss >> value;
if(hasWorked){
if(!iss.eof()){
char c;
iss >> c;
(*hasWorked) = (c == '\n' || c == '\0');
}
else{
(*hasWorked) = true;
}
}
if( /*iss.tellg()*/ iss.eof() ) return value;
return defaultValue;
}
std::string ReduceName(const std::string name){
const std::vector<std::pair<std::string,std::string>> mapping=
{ {"M2M-level", "M2M"} , {"M2L-level", "M2L"} , {"M2L-out-level", "M2L-out"} ,
{"L2L-level", "L2L"} };
for(const std::pair<std::string,std::string> mp : mapping){
if(name.substr(0, mp.first.length()) == mp.first){
return mp.second;
}
}
return name;
}
struct LineData{
std::string name;
int nb;
std::string type;
double duration;
LineData(const char line[]){
std::vector<std::string> words;
{
int start = 0;
int end = 1;
while(line[end] != '\0'){
while(line[end] != '\0'
&& line[end] != ','){
end += 1;
}
if(line[end] != '\0'){
words.push_back(std::string(&line[start], end-start));
end += 1;
start = end;
}
}
if(start != end){
words.push_back(std::string(&line[start], end-start));
}
}
if(words.size() != 4){
printf("Error line is no composed of 4 words\n");
exit(111);
}
name = ReduceName(words[0].substr(1, words[0].size() - 2));
bool hasWorked = false;
nb = StrToOther<int>(words[1], -1, &hasWorked);
if(hasWorked == false){
printf("Error cannot get nb val\n");
exit(112);
}
type = words[2].substr(1, words[2].size() - 2);
duration = StrToOther<double>(words[3], 0, &hasWorked);
if(hasWorked == false){
printf("Error cannot get duration val\n");
exit(112);
}
}
};
struct TimeData{
TimeData()
: tt(0), tr(0), ti(0){
}
double tt; // time in task
double tr; // time in runtime
double ti; // time idle
};
/*
"Name","Count","Type","Duration"
"Initializing",24,"Runtime",1.259594
"Overhead",6304,"Runtime",150.667381
"Idle",1635,"Other",2.964436
"Scheduling",3285,"Runtime",50.173307
"Sleeping",330,"Other",10978.895357
"FetchingInput",1611,"Runtime",2.834788
"execute_on_all_wrapper",48,"Task",60.98058
"PushingOutput",1611,"Runtime",49.857017
"P2P-out",403,"Task",3840.070231
"Callback",1447,"Runtime",0.459004
"P2M",49,"Task",7759.555381
"M2M-level-5",49,"Task",916.867961
"M2L-level-5",7,"Task",3866.40312
"M2M-level-4",7,"Task",90.183757
"M2L-out-level-5",32,"Task",809.783766
"P2P",49,"Task",28378.015095
"L2L-level-5",49,"Task",749.115965
"M2L-level-6",49,"Task",33069.582498
"M2L-out-level-6",806,"Task",10014.65321
"L2P",49,"Task",10532.198512
"Deinitializing",24,"Runtime",0.600177
"M2L-level-3",1,"Task",45.115451
"M2L-level-2",1,"Task",2.638928
"L2L-level-2",1,"Task",1.343462
"L2L-level-4",7,"Task",87.756298
"L2L-level-3",1,"Task",10.658414
"M2M-level-3",1,"Task",11.480571
"M2M-level-2",1,"Task",1.41104
"M2L-level-4",1,"Task",511.345345
*/
int main(int argc, char** argv){
if(argc != 4){
printf("Error usage is:\n"
"%s seq_file parallel_file%%d nb_threads\n",
argv[0]);
return 200;
}
printf("seq file is %s\n", argv[1]);
printf("parallel file are %s\n", argv[2]);
const int nbThreads = StrToOther<int>(argv[3], -1);
if(nbThreads == 1){
printf("Error cannot convert nb threads\n");
return 201;
}
printf("up to %d threads\n", nbThreads);
std::vector<std::unordered_map<std::string,double>> timeTasks;
std::unordered_set<std::string> allTaskNames;
std::vector<TimeData> times;
for(int idxFile = 0 ; idxFile <= nbThreads ; ++idxFile){
char filename[1024];
if(idxFile == 0){
strncpy(filename, argv[1], 1024);
}
else{
sprintf(filename, argv[2], idxFile);
}
timeTasks.emplace_back();
times.emplace_back();
printf("Open file : %s\n", filename);
FILE* timeFile = fopen(filename, "r");
if(timeFile == NULL){
printf("Cannot open file %s\n", filename);
return 99;
}
size_t sizeLine = 1024;
char* line = (char*)malloc(sizeLine);
{// Read header
if((sizeLine = getline((char**)&line, &sizeLine, timeFile)) == -1){
printf("Cannot read header\n");
return 1;
}
// Should be: "Name","Count","Type","Duration"
if(strcmp("\"Name\",\"Count\",\"Type\",\"Duration\"\n",
line) != 0){
printf("Header is incorrect\n");
return 2;
}
}
while((sizeLine = getline((char**)&line, &sizeLine, timeFile)) != -1){
LineData dt(line);
// Task, Runtime, Other
if(dt.type == "Task"){
if(dt.name != "execute_on_all_wrapper"){
timeTasks[idxFile][dt.name] += dt.duration;
allTaskNames.insert(dt.name);
times[idxFile].tt += dt.duration;
}
}
else if(dt.type == "Runtime"){
if(dt.name == "Scheduling"
|| dt.name == "FetchingInput"
|| dt.name == "PushingOutput"){
times[idxFile].tr += dt.duration;
}
}
else if(dt.type == "Other"){
if(dt.name == "Idle"){
times[idxFile].ti += dt.duration;
}
}
else {
printf("Arg do not know type %s\n", dt.type.c_str());
return 3;
}
}
fclose(timeFile);
}
// Global efficiencies
{
// Manually set seq idel and runtime
times[0].ti = 0;
times[0].tr = 0;
times[1].ti = 0;
times[1].tr = 0;
printf("Create global-eff.data\n");
FILE* resFile = fopen("global-eff.data", "w");
assert(resFile);
fprintf(resFile, "0 \tgranularity-eff \ttasks-eff \truntime-eff \tpipeline-eff\n");
for(int idx = 1; idx <= nbThreads ; ++idx){
fprintf(resFile, "%d \t%e \t%e \t%e \t%e\n",
idx,
times[0].tt/times[idx].tt,
times[1].tt/times[idx].tt,
times[idx].tt/(times[idx].tt+times[idx].tr),
(times[idx].tt+times[idx].tr)/(times[idx].tt+times[idx].tr+times[idx].ti));
}
fclose(resFile);
}
// Global efficiencies
{
printf("Create task-eff.data\n");
FILE* resFile = fopen("task-eff.data", "w");
assert(resFile);
fprintf(resFile, "0 ");
for(const std::string tsk : allTaskNames){
fprintf(resFile, "\t%s ", tsk.c_str());
}
fprintf(resFile, "\n");
for(int idx = 1; idx <= nbThreads ; ++idx){
fprintf(resFile, "%d", idx);
for(const std::string tsk : allTaskNames){
fprintf(resFile, "\t%e ", timeTasks[1][tsk]/timeTasks[idx][tsk]);
}
fprintf(resFile, "\n");
}
fclose(resFile);
}
{
printf("Create task-gr-eff.data\n");
FILE* resFile = fopen("task-gr-eff.data", "w");
assert(resFile);
fprintf(resFile, "0 ");
for(const std::string tsk : allTaskNames){
fprintf(resFile, "\t%s ", tsk.c_str());
}
fprintf(resFile, "\n");
for(int idx = 1; idx <= nbThreads ; ++idx){
fprintf(resFile, "%d", idx);
for(const std::string tsk : allTaskNames){
fprintf(resFile, "\t%e ", timeTasks[0][tsk]/timeTasks[idx][tsk]);
}
fprintf(resFile, "\n");
}
fclose(resFile);
}
return 0;
}
This diff is collapsed.
......@@ -26,6 +26,7 @@ In order to follow this tutorial, it is needed to have the following application
* CUDA (>= 7) and `CUDA_PATH` must be set. In our case, `CUDA_PATH=/usr/local/cuda-7.5/`
* __Optional__ Vite (from `sudo apt-get install vite` or see [http://vite.gforge.inria.fr/download.php](http://vite.gforge.inria.fr/download.php))
* __Optional__ Qt5 library to be able to change the colors of the execution traces in order to visualize the different FMM operators
* gnuplot to generate the figures
> [Remark] Some installations of CUDA does not have libcuda file.
> In this case, one needs to create a link : `sudo ln /usr/local/cuda-7.5/lib64/libcudart.so /usr/local/cuda-7.5/lib64/libcuda.so`
......@@ -50,8 +51,9 @@ cd $SCALFMM_TEST_DIR
In order to be able to stop the tutorial in the middle and restart later, we will register the variables in a file that should be source to restart later:
```bash
function scalfmmRegisterVariable() { echo "export $1=${!1}" >> "$SCALFMM_TEST_DIR/environment.source"; }
echo "function scalfmmRegisterVariable() { echo \"export $1=${!1}\" >> \"$SCALFMM_TEST_DIR/environment.source\"; }" > "$SCALFMM_TEST_DIR/environment.source"
# function scalfmmRegisterVariable() { echo "export $1=${!1}" >> "$SCALFMM_TEST_DIR/environment.source"; }
echo "function scalfmmRegisterVariable() { echo \"export \$1=\${!1}\" >> \"$SCALFMM_TEST_DIR/environment.source\"; }" > "$SCALFMM_TEST_DIR/environment.source"
source "$SCALFMM_TEST_DIR/environment.source"
```
*Output variables:* `scalfmmRegisterVariable SCALFMM_TEST_DIR`
......@@ -75,7 +77,7 @@ cd $SCALFMM_TEST_DIR
source "$SCALFMM_TEST_DIR/environment.source"
```
### Downloading Packages
### Downloading the Packages (in Advance)
If the computational node does not have access to internet, we provide a command to download the needed packages (otherwise the next commands still include just in time download):
```bash
......@@ -285,7 +287,8 @@ Then visualize the output with `vite`
vite ./paje.trace
```
Should be like: // IMAGE HERE
Should be like:
![Trace](trace-example.png)
We can convert the color of the trace by (requiere Qt5 library):
......@@ -294,7 +297,8 @@ $SCALFMM_SOURCE_DIR/Addons/BenchEfficiency/pajecolor paje.trace $SCALFMM_SOURCE_
vite ./paje.trace.painted
```
Should be like: // IMAGE HERE
Should be like:
![Trace](trace-example-colors.png)
+ Get execution times
......@@ -386,39 +390,65 @@ In our case we get 9710 and 5385.
*Output variable:* `scalfmmRegisterVariable SCALFMM_BS_CPU_SEQ` `scalfmmRegisterVariable SCALFMM_BS_CPU_PAR`
We can look to the work that has been done to find the best granularity:
![In sequential](seq-bs-search.png)
![In parallel](par-bs-search.png)
Then we compute the efficiency using both granulirities and keep the .rec files:
```bash
export SCALFMM_MAX_NB_CPU=24
export STARPU_NCUDA=0
source $SCALFMM_AB/execAllHomogeneous.sh
source "$SCALFMM_AB/execAllHomogeneous.sh"
```
We should end with all the .rec files and their corresponding time files
We should end with all the .rec files and their corresponding time files and `ls "$SCALFMM_RES_DIR"` should return something like:
```bash
ls $SCALFMM_RES_DIR
trace-nb_10000000-h_7-bs_5385-CPU_1.rec trace-nb_10000000-h_7-bs_9710-CPU_15.rec.time trace-nb_10000000-h_7-bs_9710-CPU_21.rec trace-nb_10000000-h_7-bs_9710-CPU_4.rec.time
trace-nb_10000000-h_7-bs_5385-CPU_1.rec.time trace-nb_10000000-h_7-bs_9710-CPU_16.rec trace-nb_10000000-h_7-bs_9710-CPU_21.rec.time trace-nb_10000000-h_7-bs_9710-CPU_5.rec
trace-nb_10000000-h_7-bs_9710-CPU_10.rec trace-nb_10000000-h_7-bs_9710-CPU_16.rec.time trace-nb_10000000-h_7-bs_9710-CPU_22.rec trace-nb_10000000-h_7-bs_9710-CPU_5.rec.time
trace-nb_10000000-h_7-bs_9710-CPU_10.rec.time trace-nb_10000000-h_7-bs_9710-CPU_17.rec trace-nb_10000000-h_7-bs_9710-CPU_22.rec.time trace-nb_10000000-h_7-bs_9710-CPU_6.rec
trace-nb_10000000-h_7-bs_9710-CPU_11.rec trace-nb_10000000-h_7-bs_9710-CPU_17.rec.time trace-nb_10000000-h_7-bs_9710-CPU_23.rec trace-nb_10000000-h_7-bs_9710-CPU_6.rec.time
trace-nb_10000000-h_7-bs_9710-CPU_11.rec.time trace-nb_10000000-h_7-bs_9710-CPU_18.rec trace-nb_10000000-h_7-bs_9710-CPU_23.rec.time trace-nb_10000000-h_7-bs_9710-CPU_7.rec
trace-nb_10000000-h_7-bs_9710-CPU_12.rec trace-nb_10000000-h_7-bs_9710-CPU_18.rec.time trace-nb_10000000-h_7-bs_9710-CPU_24.rec trace-nb_10000000-h_7-bs_9710-CPU_7.rec.time
trace-nb_10000000-h_7-bs_9710-CPU_12.rec.time trace-nb_10000000-h_7-bs_9710-CPU_19.rec trace-nb_10000000-h_7-bs_9710-CPU_24.rec.time trace-nb_10000000-h_7-bs_9710-CPU_8.rec
trace-nb_10000000-h_7-bs_9710-CPU_13.rec trace-nb_10000000-h_7-bs_9710-CPU_19.rec.time trace-nb_10000000-h_7-bs_9710-CPU_2.rec trace-nb_10000000-h_7-bs_9710-CPU_8.rec.time
trace-nb_10000000-h_7-bs_9710-CPU_13.rec.time trace-nb_10000000-h_7-bs_9710-CPU_1.rec trace-nb_10000000-h_7-bs_9710-CPU_2.rec.time trace-nb_10000000-h_7-bs_9710-CPU_9.rec
trace-nb_10000000-h_7-bs_9710-CPU_14.rec trace-nb_10000000-h_7-bs_9710-CPU_1.rec.time trace-nb_10000000-h_7-bs_9710-CPU_3.rec trace-nb_10000000-h_7-bs_9710-CPU_9.rec.time
trace-nb_10000000-h_7-bs_9710-CPU_14.rec.time trace-nb_10000000-h_7-bs_9710-CPU_20.rec trace-nb_10000000-h_7-bs_9710-CPU_3.rec.time
trace-nb_10000000-h_7-bs_9710-CPU_15.rec trace-nb_10000000-h_7-bs_9710-CPU_20.rec.time trace-nb_10000000-h_7-bs_9710-CPU_4.rec
```
We compute the efficiencies
We now compute the efficiencies from these files
```bash
source $SCALFMM_AB/computeHomogeneousEfficiencies
g++ -std=c++11 $SCALFMM_AB/mergetimefile.cpp -o $SCALFMM_AB/mergetimefile.exe
$SCALFMM_AB/mergetimefile.exe "$SCALFMM_RES_DIR/trace-nb_$SCALFMM_NB-h_$SCALFMM_H-bs_$SCALFMM_BS_CPU_SEQ-CPU_1.rec" "$SCALFMM_RES_DIR/trace-nb_$SCALFMM_NB-h_$SCALFMM_H-bs_$SCALFMM_BS_CPU_SEQ-CPU_%d.rec" $SCALFMM_MAX_NB_CPU
```
We end with efficiency for the application and for the operators.
```bash
cat $SCALFMM_RES_DIR/efficiencies.txt
Create global-eff.data
Create task-eff.data
Create task-gr-eff.dat
```
We can plot each of them
```bash
source $SCALFMM_AB/plotEfficiencies.sh $SCALFMM_RES_DIR/efficiencies.txt
gnuplot -e "filename='global-eff'" $SCALFMM_AB/scalfmmPlotAll.gplot
gnuplot -e "filename='task-eff'" $SCALFMM_AB/scalfmmPlotAll.gplot
gnuplot -e "filename='task-gr-eff'" $SCALFMM_AB/scalfmmPlotAll.gplot
```
Sould give: // IMAGE HERE
In our case it gives:
![global-eff](global-eff.png)
![task-eff](task-eff.png)
![task-gr-eff](task-gr-eff.png)
## Heterogeneous
__NOT FINISHED!!!!__
For test case `-nb 10000000` (10 million) and `-h 6` (height of the tree equal to 6),
we first want to know the best granularity `-bs`.
......
#!/usr/bin/gnuplot
reset
set terminal png
set output filename . '.png'
set xlabel "Nb Threads"
set ylabel "Efficiency"
set grid
set style data linespoints
N = system("awk 'NR==1{print NF}' " . filename . ".data")
set key outside;
set key right top;
set key autotitle columnhead
do for [col=2:N:1] {
set style line col lw 3
}
plot for [col=2:N:1] filename . '.data' using 1:col with lp
0 L2L M2M P2M L2P M2L-out M2L P2P-out P2P
1 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00
2 9.565659e-01 9.665736e-01 1.031103e+00 1.004286e+00 9.715094e-01 9.208541e-01 9.697996e-01 9.763831e-01
3 9.263068e-01 1.024516e+00 1.029574e+00 9.889095e-01 9.937418e-01 9.954310e-01 1.001689e+00 1.000994e+00
4 1.005226e+00 1.006333e+00 1.033745e+00 1.010624e+00 9.534195e-01 9.864280e-01 9.895790e-01 9.995851e-01
5 8.615300e-01 9.844517e-01 9.938413e-01 1.009990e+00 9.569465e-01 9.791331e-01 9.887700e-01 9.975625e-01
6 8.535893e-01 9.410083e-01 1.014109e+00 1.018876e+00 9.739749e-01 9.860534e-01 9.782539e-01 9.964238e-01
7 1.046813e+00 9.975072e-01 1.037954e+00 1.003486e+00 9.786087e-01 9.933857e-01 1.004895e+00 9.965736e-01
8 9.995985e-01 1.013025e+00 9.895591e-01 1.013030e+00 9.652670e-01 9.907845e-01 1.000561e+00 9.971405e-01
9 1.039365e+00 1.013929e+00 1.047827e+00 9.852421e-01 9.711139e-01 9.898517e-01 9.980679e-01 9.993222e-01
10 9.181035e-01 9.952685e-01 1.031850e+00 1.012496e+00 9.670203e-01 9.852214e-01 9.859215e-01 9.985014e-01
11 8.717502e-01 9.889525e-01 1.028373e+00 1.011922e+00 9.699808e-01 9.888136e-01 9.826419e-01 9.981512e-01
12 9.452144e-01 1.040015e+00 1.013514e+00 9.762884e-01 9.389195e-01 9.915452e-01 9.996240e-01 9.998256e-01
13 1.022490e+00 1.021529e+00 1.014210e+00 9.896566e-01 9.668669e-01 9.898209e-01 1.011145e+00 9.991000e-01
14 9.383201e-01 9.923898e-01 1.030084e+00 1.009296e+00 9.748870e-01 9.858361e-01 1.005721e+00 9.971995e-01
15 9.387378e-01 9.986737e-01 1.032522e+00 9.967096e-01 9.675984e-01 9.877332e-01 1.003181e+00 9.974178e-01
16 9.377196e-01 9.853747e-01 1.043778e+00 1.003874e+00 9.786853e-01 9.873092e-01 1.003464e+00 9.958178e-01
17 9.293735e-01 1.034251e+00 1.038271e+00 1.003177e+00 9.700248e-01 9.915540e-01 9.899480e-01 9.984129e-01
18 9.081814e-01 9.992797e-01 1.018655e+00 9.982681e-01 9.627375e-01 9.752319e-01 9.739917e-01 9.297086e-01
19 9.471672e-01 9.763513e-01 1.026148e+00 1.013503e+00 9.656781e-01 9.868543e-01 9.891711e-01 9.992051e-01
20 9.376034e-01 1.008523e+00 1.015422e+00 9.988900e-01 9.763451e-01 9.917410e-01 1.016855e+00 9.974959e-01
21 9.649789e-01 9.941223e-01 1.023371e+00 9.720318e-01 9.427889e-01 9.864717e-01 1.011408e+00 1.001528e+00
22 8.085859e-01 1.003002e+00 1.024132e+00 1.015483e+00 9.586926e-01 9.888563e-01 9.829068e-01 9.982469e-01
23 9.843031e-01 1.009513e+00 1.041257e+00 1.012564e+00 1.009160e+00 9.949415e-01 9.970272e-01 9.964763e-01
24 9.408696e-01 9.847445e-01 1.030481e+00 9.726508e-01 9.691133e-01 9.975819e-01 1.022271e+00 1.000680e+00
Addons/BenchEfficiency/task-eff.png

12.8 KiB

0 L2L M2M P2M L2P M2L-out M2L P2P-out P2P
1 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00 1.000000e+00
2 9.565659e-01 9.665736e-01 1.031103e+00 1.004286e+00 9.715094e-01 9.208541e-01 9.697996e-01 9.763831e-01
3 9.263068e-01 1.024516e+00 1.029574e+00 9.889095e-01 9.937418e-01 9.954310e-01 1.001689e+00 1.000994e+00
4 1.005226e+00 1.006333e+00 1.033745e+00 1.010624e+00 9.534195e-01 9.864280e-01 9.895790e-01 9.995851e-01
5 8.615300e-01 9.844517e-01 9.938413e-01 1.009990e+00 9.569465e-01 9.791331e-01 9.887700e-01 9.975625e-01
6 8.535893e-01 9.410083e-01 1.014109e+00 1.018876e+00 9.739749e-01 9.860534e-01 9.782539e-01 9.964238e-01
7 1.046813e+00 9.975072e-01 1.037954e+00 1.003486e+00 9.786087e-01 9.933857e-01 1.004895e+00 9.965736e-01
8 9.995985e-01 1.013025e+00 9.895591e-01 1.013030e+00 9.652670e-01 9.907845e-01 1.000561e+00 9.971405e-01
9 1.039365e+00 1.013929e+00 1.047827e+00 9.852421e-01 9.711139e-01 9.898517e-01 9.980679e-01 9.993222e-01
10 9.181035e-01 9.952685e-01 1.031850e+00 1.012496e+00 9.670203e-01 9.852214e-01 9.859215e-01 9.985014e-01
11 8.717502e-01 9.889525e-01 1.028373e+00 1.011922e+00 9.699808e-01 9.888136e-01 9.826419e-01 9.981512e-01
12 9.452144e-01 1.040015e+00 1.013514e+00 9.762884e-01 9.389195e-01 9.915452e-01 9.996240e-01 9.998256e-01
13 1.022490e+00 1.021529e+00 1.014210e+00 9.896566e-01 9.668669e-01 9.898209e-01 1.011145e+00 9.991000e-01
14 9.383201e-01 9.923898e-01 1.030084e+00 1.009296e+00 9.748870e-01 9.858361e-01 1.005721e+00 9.971995e-01
15 9.387378e-01 9.986737e-01 1.032522e+00 9.967096e-01 9.675984e-01 9.877332e-01 1.003181e+00 9.974178e-01
16 9.377196e-01 9.853747e-01 1.043778e+00 1.003874e+00 9.786853e-01 9.873092e-01 1.003464e+00 9.958178e-01
17 9.293735e-01 1.034251e+00 1.038271e+00 1.003177e+00 9.700248e-01 9.915540e-01 9.899480e-01 9.984129e-01
18 9.081814e-01 9.992797e-01 1.018655e+00 9.982681e-01 9.627375e-01 9.752319e-01 9.739917e-01 9.297086e-01
19 9.471672e-01 9.763513e-01 1.026148e+00 1.013503e+00 9.656781e-01 9.868543e-01 9.891711e-01 9.992051e-01
20 9.376034e-01 1.008523e+00 1.015422e+00 9.988900e-01 9.763451e-01 9.917410e-01 1.016855e+00 9.974959e-01
21 9.649789e-01 9.941223e-01 1.023371e+00 9.720318e-01 9.427889e-01 9.864717e-01 1.011408e+00 1.001528e+00
22 8.085859e-01 1.003002e+00 1.024132e+00 1.015483e+00 9.586926e-01 9.888563e-01 9.829068e-01 9.982469e-01
23 9.843031e-01 1.009513e+00 1.041257e+00 1.012564e+00 1.009160e+00 9.949415e-01 9.970272e-01 9.964763e-01
24 9.408696e-01 9.847445e-01 1.030481e+00 9.726508e-01 9.691133e-01 9.975819e-01 1.022271e+00 1.000680e+00
Addons/BenchEfficiency/task-gr-eff.png

12.8 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment