├── results ├── mkl-knl-ddr4.txt ├── mkl-phi.txt ├── mkl-knl-mcdram.txt ├── mkl-xeon.txt ├── LICENSE.txt ├── plot.R └── spgemm.eps ├── LICENSE.txt ├── run_mkl_xeon.sh ├── README.md ├── benchmark-utils.hpp ├── run_mkl_knc.sh ├── run_mkl_knl.sh ├── init.sh ├── mkl.cpp ├── common.hpp └── matrix_market.hpp /results/mkl-knl-ddr4.txt: -------------------------------------------------------------------------------- 1 | 62451 0.114433 4.71018 2 | 206500 0.021943 0.683589 3 | 525825 0.020034 0.848557 4 | 46835 0.09483 3.30064 5 | 36417 0.356993 0.240901 6 | 49152 0.053799 2.78816 7 | 140874 0.160851 5.60146 8 | 83334 0.204359 4.53613 9 | 217918 0.186918 6.69812 10 | 11 | 121192 0.173845 0.92036 12 | 400727 0.085415 0.66733 13 | 23133 0.059602 0.134224 14 | 3774768 1.23047 0.133282 15 | 170998 0.030696 0.553818 16 | 36692 1.75938 0.0585432 17 | 62586 0.005525 0.180995 18 | 1971281 0.070251 0.498214 19 | 1000005 0.753194 0.184547 20 | 916428 0.252425 0.47935 21 | 8297 0.050405 0.178554 22 | -------------------------------------------------------------------------------- /results/mkl-phi.txt: -------------------------------------------------------------------------------- 1 | 2 | 62451 0.190848 2.82424 3 | 206500 0.036518 0.410756 4 | 525825 0.056634 0.300173 5 | 46835 0.20192 1.55012 6 | 36417 0.584287 0.147188 7 | 49152 0.086447 1.73517 8 | 140874 0.337061 2.67311 9 | 83334 0.389548 2.37968 10 | 217918 0.462797 2.70529 11 | 12 | 121192 0.229054 0.698525 13 | 400727 0.104387 0.546045 14 | 23133 0.090692 0.0882106 15 | 3774768 1.84654 0.0888149 16 | 170998 0.056169 0.302658 17 | 36692 3.1024 0.0332001 18 | 62586 0.008384 0.119275 19 | 1971281 0.207981 0.168285 20 | 1000005 2.2871 0.0607758 21 | 916428 0.364946 0.331556 22 | 8297 0.072987 0.12331 23 | -------------------------------------------------------------------------------- /results/mkl-knl-mcdram.txt: -------------------------------------------------------------------------------- 1 | 62451 0.109088 4.94097 2 | 206500 0.022596 0.663834 3 | 525825 0.017791 0.955539 4 | 46835 0.095392 3.2812 5 | 36417 0.356435 0.241278 6 | 49152 0.055483 2.70353 7 | 140874 0.158161 5.69673 8 | 83334 0.223191 4.15339 9 | 217918 0.186241 6.72247 10 | 11 | 121192 0.171616 0.932314 12 | 400727 0.092392 0.616937 13 | 23133 0.059862 0.133641 14 | 3774768 1.20331 0.136291 15 | 170998 0.029973 0.567177 16 | 36692 1.75947 0.0585404 17 | 62586 0.005005 0.1998 18 | 1971281 0.069271 0.505262 19 | 1000005 0.752412 0.184739 20 | 916428 0.303428 0.398777 21 | 8297 0.050296 0.178941 22 | 23 | -------------------------------------------------------------------------------- /results/mkl-xeon.txt: -------------------------------------------------------------------------------- 1 | 2 | 62451 0.073441 7.33922 3 | 206500 0.018784 0.798552 4 | 525825 0.014542 1.16903 5 | 46835 0.058407 5.35895 6 | 36417 0.22293 0.385771 7 | 49152 0.040048 3.74551 8 | 140874 0.09956 9.04982 9 | 83334 0.132056 7.01975 10 | 217918 0.120937 10.3525 11 | 12 | 121192 0.128547 1.24468 13 | 400727 0.065878 0.865236 14 | 23133 0.027632 0.289519 15 | 3774768 0.838194 0.195659 16 | 170998 0.02013 0.844511 17 | 36692 1.112 0.0926258 18 | 62586 0.002057 0.486145 19 | 1971281 0.06517 0.537057 20 | 1000005 0.296298 0.469122 21 | 916428 0.254734 0.475005 22 | 8297 0.028475 0.316067 23 | 24 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016, Karl Rupp 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /run_mkl_xeon.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Compile: 4 | icc mkl.cpp -fopenmp -O3 -I${MKLROOT}/include -L${MKLROOT}/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -lpthread -lm -o mkl_xeon 5 | 6 | # Run: 7 | progname=mkl_xeon 8 | 9 | ./$progname matrices/cant.mtx 539 10 | ./$progname matrices/mac_econ_fwd500.mtx 15 11 | ./$progname matrices/mc2depi.mtx 17 12 | ./$progname matrices/rma10.mtx 313 13 | ./$progname matrices/pdb1HYS.mtx 86 14 | ./$progname matrices/conf5_4-8x8-05.mtx 150 #complex arithmetic 15 | ./$progname matrices/shipsec1.mtx 901 16 | ./$progname matrices/consph.mtx 927 17 | ./$progname matrices/pwtk.mtx 1252 18 | 19 | echo " " 20 | 21 | ./$progname matrices/cop20k_A.mtx 160 22 | ./$progname matrices/amazon0312.mtx 57 23 | ./$progname matrices/ca-CondMat.mtx 8 24 | ./$progname matrices/cit-Patents.mtx 164 25 | ./$progname matrices/scircuit.mtx 17 26 | ./$progname matrices/email-Enron.mtx 103 27 | ./$progname matrices/p2p-Gnutella31.mtx 1 28 | ./$progname matrices/roadNet-CA.mtx 35 29 | ./$progname matrices/webbase-1M.mtx 139 30 | ./$progname matrices/web-Google.mtx 121 31 | ./$progname matrices/wiki-Vote.mtx 9 32 | 33 | -------------------------------------------------------------------------------- /results/LICENSE.txt: -------------------------------------------------------------------------------- 1 | All data in this archive is available under the following creative commons license: 2 | 3 | Attribution 4.0 International (CC BY 4.0) 4 | http://creativecommons.org/licenses/by/4.0/ 5 | 6 | You are free to: 7 | 8 | Share — copy and redistribute the material in any medium or format 9 | Adapt — remix, transform, and build upon the material 10 | for any purpose, even commercially. 11 | 12 | The licensor cannot revoke these freedoms as long as you follow the license terms. 13 | 14 | Under the following terms: 15 | 16 | Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use. 17 | 18 | No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits. 19 | 20 | Notices: 21 | 22 | You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation. 23 | No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material. 24 | 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Sparse Matrix-Matrix Multiplication Benchmark Code for Intel Xeon and Xeon Phi 3 | 4 | This repository contains the benchmark code supplementing my [blog post on a matrix-matrix multiplication benchmark on Intel Xeon and Xeon Phi](https://www.karlrupp.net/2016/09/sparse-matrix-matrix-multiplication-on-intel-xeon-and-xeon-phi-knc-knl/). 5 | 6 | 7 | ## Build and Run 8 | 9 | The following instructions are for *nix-based systems. 10 | The code should also work on Windows, but is not tested. 11 | 12 | First run the script 13 | 14 | $> ./init.sh 15 | 16 | to download and extract the sparse matrices. 17 | This will pull about 350MB of data and thus may take a while. 18 | 19 | Second, run the executables via 20 | 21 | $> ./run_mkl_xeon 22 | $> ./run_mkl_knl 0 # for DDR4 23 | $> ./run_mkl_knl 1 # for MCDRAM 24 | $> ./run_mkl_knc 25 | 26 | This assumes that your Intel compiler variables are set accordingly. 27 | Note that for the Xeon Phi KNC you have to cross-compile on the host and run the script on the device. 28 | 29 | The folder results/ contains the results I obtained on different systems. 30 | Feel free to paste your results in there in replot the graphs via 31 | 32 | $> Rscript plot.R 33 | 34 | The free open source statistics package R is required for the plots. 35 | 36 | ## License 37 | 38 | The code is provided under a permissive MIT/X11-style license. 39 | See file LICENSE.txt for details. 40 | 41 | -------------------------------------------------------------------------------- /benchmark-utils.hpp: -------------------------------------------------------------------------------- 1 | #ifndef BENCHMARK_UTILS_HPP_ 2 | #define BENCHMARK_UTILS_HPP_ 3 | 4 | /* 5 | * Copyright (c) 2016, Karl Rupp 6 | * 7 | * License: MIT/X11, see file LICENSE.txt 8 | */ 9 | 10 | #include 11 | 12 | #ifdef _WIN32 13 | 14 | #define WINDOWS_LEAN_AND_MEAN 15 | #include 16 | #undef min 17 | #undef max 18 | 19 | class Timer 20 | { 21 | public: 22 | 23 | Timer() { QueryPerformanceFrequency(&freq); } 24 | 25 | void start() { QueryPerformanceCounter((LARGE_INTEGER*) &start_time); } 26 | 27 | double get() const 28 | { 29 | LARGE_INTEGER end_time; 30 | QueryPerformanceCounter((LARGE_INTEGER*) &end_time); 31 | return (static_cast(end_time.QuadPart) - static_cast(start_time.QuadPart)) / static_cast(freq.QuadPart); 32 | } 33 | 34 | private: 35 | LARGE_INTEGER freq; 36 | LARGE_INTEGER start_time; 37 | }; 38 | 39 | #else 40 | 41 | #include 42 | 43 | class Timer 44 | { 45 | public: 46 | 47 | Timer() : ts(0) 48 | {} 49 | 50 | void start() 51 | { 52 | struct timeval tval; 53 | gettimeofday(&tval, NULL); 54 | ts = tval.tv_sec * 1000000 + tval.tv_usec; 55 | } 56 | 57 | double get() const 58 | { 59 | struct timeval tval; 60 | gettimeofday(&tval, NULL); 61 | double end_time = tval.tv_sec * 1000000 + tval.tv_usec; 62 | 63 | return static_cast(end_time-ts) / 1000000.0; 64 | } 65 | 66 | private: 67 | double ts; 68 | }; 69 | 70 | 71 | #endif 72 | 73 | #endif 74 | -------------------------------------------------------------------------------- /run_mkl_knc.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Compile on host: 4 | echo "# compilation command on host:" 5 | echo "# icc mkl.cpp -fopenmp -O3 -I${MKLROOT}/include -mmic -Wl,--start-group ${MKLROOT}/lib/mic/libmkl_intel_lp64.a ${MKLROOT}/lib/mic/libmkl_core.a ${MKLROOT}/lib/mic/libmkl_intel_thread.a -Wl,--end-group -lpthread -lm -o mkl_knc" 6 | echo "# After compilation, run this script on the Xeon Phi" 7 | 8 | # Run: 9 | progname=mkl_knc 10 | 11 | ./$progname matrices/cant.mtx 539 12 | ./$progname matrices/mac_econ_fwd500.mtx 15 13 | ./$progname matrices/mc2depi.mtx 17 14 | ./$progname matrices/rma10.mtx 313 15 | ./$progname matrices/pdb1HYS.mtx 86 16 | ./$progname matrices/conf5_4-8x8-05.mtx 150 #complex arithmetic 17 | ./$progname matrices/shipsec1.mtx 901 18 | ./$progname matrices/consph.mtx 927 19 | ./$progname matrices/pwtk.mtx 1252 20 | 21 | echo " " 22 | 23 | ./$progname matrices/cop20k_A.mtx 160 24 | ./$progname matrices/amazon0312.mtx 57 25 | ./$progname matrices/ca-CondMat.mtx 8 26 | ./$progname matrices/cit-Patents.mtx 164 27 | ./$progname matrices/scircuit.mtx 17 28 | ./$progname matrices/email-Enron.mtx 103 29 | ./$progname matrices/p2p-Gnutella31.mtx 1 30 | ./$progname matrices/roadNet-CA.mtx 35 31 | ./$progname matrices/webbase-1M.mtx 139 32 | ./$progname matrices/web-Google.mtx 121 33 | ./$progname matrices/wiki-Vote.mtx 9 34 | 35 | 36 | -------------------------------------------------------------------------------- /run_mkl_knl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Compile: 4 | icc mkl.cpp -fopenmp -O3 -I${MKLROOT}/include -L${MKLROOT}/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -lpthread -lm -o mkl_knl 5 | 6 | # Run (pass argument 0 for DDR4, argument 1 for MCDRAM): 7 | progname=mkl_knl 8 | 9 | numactl --membind $1 ./$progname matrices/cant.mtx 539 10 | numactl --membind $1 ./$progname matrices/mac_econ_fwd500.mtx 15 11 | numactl --membind $1 ./$progname matrices/mc2depi.mtx 17 12 | numactl --membind $1 ./$progname matrices/rma10.mtx 313 13 | numactl --membind $1 ./$progname matrices/pdb1HYS.mtx 86 14 | numactl --membind $1 ./$progname matrices/conf5_4-8x8-05.mtx 150 #complex arithmetic 15 | numactl --membind $1 ./$progname matrices/shipsec1.mtx 901 16 | numactl --membind $1 ./$progname matrices/consph.mtx 927 17 | numactl --membind $1 ./$progname matrices/pwtk.mtx 1252 18 | 19 | echo " " 20 | 21 | numactl --membind $1 ./$progname matrices/cop20k_A.mtx 160 22 | numactl --membind $1 ./$progname matrices/amazon0312.mtx 57 23 | numactl --membind $1 ./$progname matrices/ca-CondMat.mtx 8 24 | numactl --membind $1 ./$progname matrices/cit-Patents.mtx 164 25 | numactl --membind $1 ./$progname matrices/scircuit.mtx 17 26 | numactl --membind $1 ./$progname matrices/email-Enron.mtx 103 27 | numactl --membind $1 ./$progname matrices/p2p-Gnutella31.mtx 1 28 | numactl --membind $1 ./$progname matrices/roadNet-CA.mtx 35 29 | numactl --membind $1 ./$progname matrices/webbase-1M.mtx 139 30 | numactl --membind $1 ./$progname matrices/web-Google.mtx 121 31 | numactl --membind $1 ./$progname matrices/wiki-Vote.mtx 9 32 | 33 | 34 | -------------------------------------------------------------------------------- /init.sh: -------------------------------------------------------------------------------- 1 | 2 | mkdir -p matrices/ 3 | cd matrices/ 4 | 5 | ## more regular matrices: 6 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Williams/cant.tar.gz 7 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Williams/mac_econ_fwd500.tar.gz 8 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Williams/mc2depi.tar.gz 9 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Bova/rma10.tar.gz 10 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Williams/pdb1HYS.tar.gz 11 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/QCD/conf5_4-8x8-05.tar.gz 12 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/DNVS/shipsec1.tar.gz 13 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Williams/consph.tar.gz 14 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Boeing/pwtk.tar.gz 15 | 16 | ## more irregular matrices: 17 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Williams/cop20k_A.tar.gz 18 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/SNAP/amazon0312.tar.gz 19 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/SNAP/ca-CondMat.tar.gz 20 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/SNAP/cit-Patents.tar.gz 21 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Hamm/scircuit.tar.gz 22 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/SNAP/email-Enron.tar.gz 23 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/SNAP/p2p-Gnutella31.tar.gz 24 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/SNAP/roadNet-CA.tar.gz 25 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/Williams/webbase-1M.tar.gz 26 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/SNAP/web-Google.tar.gz 27 | wget -nc http://www.cise.ufl.edu/research/sparse/MM/SNAP/wiki-Vote.tar.gz 28 | 29 | 30 | ## Extract: 31 | for f in `ls *.gz` 32 | do 33 | tar -xzf $f --strip-components 1 # strips subdirectory structure 34 | done 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /results/plot.R: -------------------------------------------------------------------------------- 1 | 2 | # Read data: 3 | data_mkl_xeon = read.table("mkl-xeon.txt", col.names=c("Unknowns", "ExecTime", "GFLOPs")); 4 | data_mkl_phi = read.table("mkl-phi.txt", col.names=c("Unknowns", "ExecTime", "GFLOPs")); 5 | data_mkl_knl_ddr4 = read.table("mkl-knl-ddr4.txt", col.names=c("Unknowns", "ExecTime", "GFLOPs")); 6 | data_mkl_knl_mcdram = read.table("mkl-knl-mcdram.txt", col.names=c("Unknowns", "ExecTime", "GFLOPs")); 7 | 8 | set1 <- c(1:9) # matrices 1-9 9 | plotdata1 <- rbind(data_mkl_xeon$GFLOPs[set1], data_mkl_phi$GFLOPs[set1], data_mkl_knl_ddr4$GFLOPs[set1], data_mkl_knl_mcdram$GFLOPs[set1]) 10 | set2 <- c(10:20) # matrices 10-20 11 | plotdata2 <- rbind(data_mkl_xeon$GFLOPs[set2], data_mkl_phi$GFLOPs[set2], data_mkl_knl_ddr4$GFLOPs[set2], data_mkl_knl_mcdram$GFLOPs[set2]) 12 | 13 | setEPS() 14 | postscript(paste("spgemm.eps", sep=""), width=14, height=9) 15 | 16 | legenditems = c("MKL 11.2.1, Xeon E5-2670 v3 x2 (Haswell)", 17 | "MKL 11.2.1, Xeon Phi 7120 (KNC)", 18 | "MKL 11.3.3, Xeon Phi 7250 (KNL, DDR4)", 19 | "MKL 11.3.3, Xeon Phi 7250 (KNL, MCDRAM)" 20 | ) 21 | coloritems = c("darkblue", "steelblue1", "orange", "black") 22 | 23 | ## Plot at top: 24 | par(fig=c(0, 0.99, 0.45, 1.0)) 25 | mp <- barplot(plotdata1, beside=TRUE, density=1, col=coloritems, ylim=c(0, 12), axes = FALSE) 26 | grid(NA, 3, col="black", lty=3) 27 | box(bty="c") 28 | box(lty=3) 29 | mp <- barplot(plotdata1, beside=TRUE, col=coloritems, ylim=c(0, 12), axes = FALSE, add=T) 30 | axis(4, at=c(0, 4, 8, 12), las=1, cex.axis=1.2) 31 | axis(2, at=c(0, 4, 8, 12), las=1, cex.axis=1.2) 32 | mtext(side = 2, "GFLOPs", line = 2.2, cex=1.2) 33 | text(5*(1:9)-1, par("usr")[3] - 0.75, srt = 30, adj = 1, labels = c("cantilever", "economics", "epidemiology", "harbor", "protein", "qcd", "ship", "spheres", "windtunnel"), xpd = TRUE) 34 | text(mp + 0.2, 10.9, format(round(plotdata1, 1), nsmall=1),cex=1.1,pos=3, col="black", srt=90, adj=1) 35 | 36 | ## Plot at bottom: 37 | par(fig=c(0, 0.99, 0.0, 0.55), new=TRUE) 38 | mp <- barplot(plotdata2, beside=TRUE, density=1, col=coloritems, ylim=c(0, 2), axes = FALSE) 39 | grid(NA, 4, col="black", lty=3) 40 | box(bty="c") 41 | box(lty=3) 42 | mp <- barplot(plotdata2, beside=TRUE, col=coloritems, ylim=c(0, 2), axes = FALSE, add=T) 43 | axis(4, at=c(0, 0.5, 1, 1.5, 2), las=1, cex.axis=1.2) 44 | axis(2, at=c(0, 0.5, 1, 1.5, 2), las=1, cex.axis=1.2) 45 | mtext(side = 2, "GFLOPs", line = 2.2, cex=1.2) 46 | text(5*(1:11)-1, par("usr")[3]- 0.15, srt = 30, adj = 1, labels = c("accelerator", "amazon0312", "ca-CondMat", "cit-Patents", "circuit", "email-Enron", "p2p-Gnutella31", "roadNet-CA", "webbase1m", "web-Google", "wiki-Vote"), xpd = TRUE) 47 | text(mp + 0.2, 1.8, format(round(plotdata2, 2), nsmall=1),cex=1.1,pos=3, col="black", srt=90, adj=1) 48 | 49 | # Legend: 50 | par(fig=c(0.0,1.0,0,1), new=TRUE, xpd=TRUE) 51 | legend(legend = legenditems[c(1:2)], x = 2, y = 2.5, 52 | text.width=c(23, 23), 53 | bty = "n", lwd=12, cex=1.1, horiz=T, col=coloritems[c(1:2)]) 54 | legend(legend = legenditems[c(3:4)], x = 2, y = 2.4, 55 | text.width=c(23, 23), 56 | bty = "n", lwd=12, cex=1.1, horiz=T, col=coloritems[c(3:4)]) 57 | 58 | dev.off() 59 | 60 | 61 | -------------------------------------------------------------------------------- /mkl.cpp: -------------------------------------------------------------------------------- 1 | 2 | #include 3 | #include 4 | #include 5 | 6 | #include "mkl.h" 7 | #include "mkl_types.h" 8 | #include "mkl_spblas.h" 9 | 10 | #include "matrix_market.hpp" 11 | #include "benchmark-utils.hpp" 12 | #include "common.hpp" 13 | 14 | void set_1based_ind(int *rowptr, int *colidx, int n, int nnz) 15 | { 16 | int i; 17 | for(i=0; i <= n; i++) 18 | rowptr[i]++; 19 | for(i=0; i < nnz; i++) 20 | colidx[i]++; 21 | } 22 | 23 | int main(int argc, char **argv) 24 | { 25 | if (argc < 3) 26 | { 27 | std::cerr << "Argument missing: [Matrix Market file] [flops]" << std::endl; 28 | return EXIT_FAILURE; 29 | } 30 | 31 | std::size_t runs = 10; 32 | std::vector timings(runs); 33 | 34 | double flops = atoi(argv[2]); 35 | 36 | std::vector > stl_A; 37 | 38 | // Read matrix 39 | if (!read_matrix_market_file(stl_A, argv[1])) 40 | { 41 | std::cout << "Error reading Matrix file" << std::endl; 42 | return EXIT_FAILURE; 43 | } 44 | 45 | // convert to plain CSR arrays: 46 | MKL_INT nnz = 0; 47 | for (std::size_t row=0; row::const_iterator it = stl_A[row].begin(); it != stl_A[row].end(); ++it) 63 | { 64 | col_handle_A[current_index] = it->first; 65 | values_A[current_index] = it->second; 66 | ++current_index; 67 | } 68 | } 69 | row_handle_A[stl_A.size()] = current_index; 70 | 71 | set_1based_ind(row_handle_A, col_handle_A, stl_A.size(), nnz); 72 | 73 | Timer timer; 74 | 75 | MKL_INT sort = 0; 76 | MKL_INT N = stl_A.size(); 77 | MKL_INT info = 0; 78 | MKL_INT request; 79 | //std::cout << "Starting benchmark... " << std::endl; 80 | for (std::size_t i=0; i 4 | #include 5 | #include 6 | 7 | template 8 | NumericT get_median(std::vector & timings) 9 | { 10 | std::sort(timings.begin(), timings.end()); 11 | return timings[timings.size()/2]; 12 | } 13 | 14 | template 15 | void reference_prod(std::vector > const & stl_A, 16 | std::vector > const & stl_B, 17 | std::vector > & stl_C) 18 | { 19 | for (std::size_t i=0; i::const_iterator it_A = stl_A[i].begin(); it_A != stl_A[i].end(); ++it_A) 21 | { 22 | IndexT row_B = it_A->first; 23 | for (typename std::map::const_iterator it_B = stl_B[row_B].begin(); it_B != stl_B[row_B].end(); ++it_B) 24 | if (std::fabs(it_A->second * it_B->second) > 0) // write only nonzero contributions 25 | stl_C[i][it_B->first] += it_A->second * it_B->second; 26 | } 27 | } 28 | 29 | // verifies that A and B are identical (same nonzero pattern, same entries up to round-off) 30 | template 31 | void check(std::vector > const & C, 32 | std::vector > const & C_ref, 33 | std::vector > const & A, 34 | std::vector > const & B) 35 | { 36 | // check number of nonzeros per row: 37 | for (std::size_t i=0; i::const_iterator it_C = C[i].begin(); it_C != C[i].end(); ++it_C) 50 | std::cout << it_C->first << " "; 51 | std::cout << std::endl; 52 | 53 | std::cout << "Result in C_ref: "; 54 | for (typename std::map::const_iterator it_C_ref = C_ref[i].begin(); it_C_ref != C_ref[i].end(); ++it_C_ref) 55 | std::cout << it_C_ref->first << " "; 56 | std::cout << std::endl; 57 | 58 | for (typename std::map::const_iterator it_A = A[i].begin(); it_A != A[i].end(); ++it_A) 59 | { 60 | std::cout << "B, line " << it_A->first << ": "; 61 | for (typename std::map::const_iterator it_B = B[it_A->first].begin(); it_B != B[it_A->first].end(); ++it_B) 62 | std::cout << it_B->first << " "; 63 | std::cout << std::endl; 64 | } 65 | } 66 | exit(EXIT_FAILURE); 67 | } 68 | } 69 | 70 | // check sparsity pattern and numerical values: 71 | NumericT ref_value = 0; 72 | for (std::size_t i=0; i::const_iterator it_C = C[i].begin(); 75 | typename std::map::const_iterator it_C_ref = C_ref[i].begin(); 76 | 77 | for (; it_C != C[i].end(); ++it_C, ++it_C_ref) 78 | { 79 | if (it_C->first != it_C_ref->first) 80 | { 81 | std::cerr << "Nonzero pattern mismatch in row " << i << std::endl; 82 | std::cerr << "Index in C: " << it_C->first << std::endl; 83 | std::cerr << "Index in C_ref: " << it_C_ref->first << std::endl; 84 | } 85 | 86 | ref_value = std::max(ref_value, std::fabs(it_C_ref->second)); 87 | NumericT rel_diff = std::fabs(it_C->second - it_C_ref->second) / std::max(std::fabs(it_C->second), std::fabs(it_C_ref->second)); 88 | if (rel_diff > NumericT(0.01) && std::max(std::fabs(it_C->second), std::fabs(it_C_ref->second)) > ref_value * NumericT(1e-6)) 89 | { 90 | std::cerr << "Numerical value mismatch in row " << i << std::endl; 91 | std::cerr << "Index in C: " << it_C->first << " with value " << it_C->second << std::endl; 92 | std::cerr << "Index in C_ref: " << it_C_ref->first << " with value " << it_C_ref->second << std::endl; 93 | } 94 | } 95 | } 96 | 97 | std::cout << "Check passed!" << std::endl; 98 | 99 | } 100 | 101 | 102 | -------------------------------------------------------------------------------- /matrix_market.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | /** Trims whitespace from the beginning and the end of the string. */ 11 | inline void my_trim(char * buffer, long max_size) 12 | { 13 | //trim at beginning of string 14 | long start = 0; 15 | for (long i=0; i (std::tolower)); 49 | return s; 50 | } 51 | 52 | 53 | /** Reads a matrix from file. Returns the number of lines read, or 0 in case of an error. */ 54 | template 55 | long read_matrix_market_file(std::vector > & mat, const char * file) 56 | { 57 | char buffer[2049]; 58 | std::ifstream reader(file); 59 | std::string token; 60 | long linenum = 0; 61 | bool symmetric = false; 62 | bool dense_format = false; 63 | bool is_header = true; 64 | bool pattern_matrix = false; 65 | long cur_row = 0; 66 | long cur_col = 0; 67 | long valid_entries = 0; 68 | long nnz = 0; 69 | 70 | 71 | if (!reader) 72 | { 73 | std::cerr << "Matrix Market Reader: Cannot open file " << file << std::endl; 74 | return EXIT_FAILURE; 75 | } 76 | 77 | while (reader.good()) 78 | { 79 | // get a non-empty line 80 | do 81 | { 82 | reader.getline(buffer, 2048); 83 | ++linenum; 84 | my_trim(buffer, 2048); 85 | } 86 | while (reader.good() && buffer[0] == 0); 87 | 88 | if (buffer[0] == '%') 89 | { 90 | if (buffer[1] == '%') 91 | { 92 | //parse header: 93 | std::stringstream line(std::string(buffer + 2)); 94 | line >> token; 95 | if (my_tolower(token) != "matrixmarket") 96 | { 97 | std::cerr << "Error in file " << file << " at line " << linenum << " in file " << file << ": Expected 'MatrixMarket', got '" << token << "'" << std::endl; 98 | return 0; 99 | } 100 | 101 | line >> token; 102 | if (my_tolower(token) != "matrix") 103 | { 104 | std::cerr << "Error in file " << file << " at line " << linenum << " in file " << file << ": Expected 'matrix', got '" << token << "'" << std::endl; 105 | return 0; 106 | } 107 | 108 | line >> token; 109 | if (my_tolower(token) != "coordinate") 110 | { 111 | if (my_tolower(token) == "array") 112 | { 113 | dense_format = true; 114 | std::cerr << "Error in file " << file << " at line " << linenum << " in file " << file << ": 'array' type is not supported yet!" << std::endl; 115 | return 0; 116 | } 117 | else 118 | { 119 | std::cerr << "Error in file " << file << " at line " << linenum << " in file " << file << ": Expected 'array' or 'coordinate', got '" << token << "'" << std::endl; 120 | return 0; 121 | } 122 | } 123 | 124 | line >> token; 125 | if (my_tolower(token) == "pattern") 126 | { 127 | pattern_matrix = true; 128 | } 129 | else if (my_tolower(token) == "complex") 130 | { 131 | //is_complex = true; 132 | } 133 | else if (my_tolower(token) != "real" && my_tolower(token) != "integer") 134 | { 135 | std::cerr << "Error in file " << file << ": The MatrixMarket reader supports only real valued floating point arithmetic or pattern type matrices." << std::endl; 136 | return 0; 137 | } 138 | 139 | line >> token; 140 | if (my_tolower(token) == "general"){ } 141 | else if (my_tolower(token) == "symmetric"){ symmetric = true; } 142 | else 143 | { 144 | std::cerr << "Error in file " << file << ": The MatrixMarket reader supports only general or symmetric matrices." << std::endl; 145 | return 0; 146 | } 147 | 148 | } 149 | } 150 | else 151 | { 152 | std::stringstream line(std::stringstream::in | std::stringstream::out); 153 | line << std::string(buffer); 154 | 155 | if (is_header) 156 | { 157 | //read header line 158 | std::size_t rows; 159 | IndexT cols; 160 | 161 | if (line.good()) 162 | line >> rows; 163 | else 164 | { 165 | std::cerr << "Error in file " << file << ": Could not get matrix dimensions (rows) in line " << linenum << std::endl; 166 | return 0; 167 | } 168 | 169 | if (line.good()) 170 | line >> cols; 171 | else 172 | { 173 | std::cerr << "Error in file " << file << ": Could not get matrix dimensions (columns) in line " << linenum << std::endl; 174 | return 0; 175 | } 176 | if (!dense_format) 177 | { 178 | if (line.good()) 179 | line >> nnz; 180 | else 181 | { 182 | std::cerr << "Error in file " << file << ": Could not get matrix dimensions (columns) in line " << linenum << std::endl; 183 | return 0; 184 | } 185 | } 186 | 187 | if (rows > 0 && cols > 0) 188 | mat.resize(rows); 189 | 190 | is_header = false; 191 | } 192 | else 193 | { 194 | //read data 195 | if (dense_format) 196 | { 197 | NumericT value; 198 | line >> value; 199 | mat[cur_row][cur_col] = value; 200 | 201 | if (++cur_row == mat.size()) 202 | { 203 | //next column 204 | ++cur_col; 205 | cur_row = 0; 206 | } 207 | } 208 | else //sparse format 209 | { 210 | long row; 211 | long col; 212 | NumericT value = NumericT(1); 213 | 214 | //parse data: 215 | if (line.good()) 216 | line >> row; 217 | else 218 | { 219 | std::cerr << "Error in file " << file << ": Parse error for matrix row entry in line " << linenum << std::endl; 220 | return 0; 221 | } 222 | 223 | if (line.good()) 224 | line >> col; 225 | else 226 | { 227 | std::cerr << "Error in file " << file << ": Parse error for matrix col entry in line " << linenum << std::endl; 228 | return 0; 229 | } 230 | 231 | //take index base 1 into account: 232 | row -= 1; 233 | col -= 1; 234 | 235 | if (!pattern_matrix) // value for pattern matrix is implicitly 1, so we only need to read data for 'normal' matrices 236 | { 237 | if (line.good()) 238 | { 239 | line >> value; 240 | } 241 | else 242 | { 243 | std::cerr << "Error in file " << file << ": Parse error for matrix entry in line " << linenum << std::endl; 244 | return 0; 245 | } 246 | } 247 | 248 | if (row >= mat.size() || row < 0) 249 | { 250 | std::cerr << "Error in file " << file << " at line " << linenum << ": Row index out of bounds: " << row << " (matrix dim: " << mat.size() << " x " << mat.size() << ")" << std::endl; 251 | return 0; 252 | } 253 | 254 | if (col >= mat.size() || col < 0) 255 | { 256 | std::cerr << "Error in file " << file << " at line " << linenum << ": Column index out of bounds: " << col << " (matrix dim: " << mat.size() << " x " << mat.size() << ")" << std::endl; 257 | return 0; 258 | } 259 | 260 | mat[row][col] = value; 261 | if (symmetric) 262 | mat[col][row] = value; 263 | 264 | if (++valid_entries == nnz) 265 | break; 266 | 267 | } //else dense_format 268 | } 269 | } 270 | } 271 | 272 | reader.close(); 273 | return linenum; 274 | } 275 | 276 | 277 | -------------------------------------------------------------------------------- /results/spgemm.eps: -------------------------------------------------------------------------------- 1 | %!PS-Adobe-3.0 EPSF-3.0 2 | %%DocumentNeededResources: font Helvetica 3 | %%+ font Helvetica-Bold 4 | %%+ font Helvetica-Oblique 5 | %%+ font Helvetica-BoldOblique 6 | %%+ font Symbol 7 | %%Title: R Graphics Output 8 | %%Creator: R Software 9 | %%Pages: (atend) 10 | %%BoundingBox: 0 0 1008 648 11 | %%EndComments 12 | %%BeginProlog 13 | /bp { gs sRGB gs } def 14 | % begin .ps.prolog 15 | /gs { gsave } bind def 16 | /gr { grestore } bind def 17 | /ep { showpage gr gr } bind def 18 | /m { moveto } bind def 19 | /l { rlineto } bind def 20 | /np { newpath } bind def 21 | /cp { closepath } bind def 22 | /f { fill } bind def 23 | /o { stroke } bind def 24 | /c { newpath 0 360 arc } bind def 25 | /r { 4 2 roll moveto 1 copy 3 -1 roll exch 0 exch rlineto 0 rlineto -1 mul 0 exch rlineto closepath } bind def 26 | /p1 { stroke } bind def 27 | /p2 { gsave bg fill grestore newpath } bind def 28 | /p3 { gsave bg fill grestore stroke } bind def 29 | /p6 { gsave bg eofill grestore newpath } bind def 30 | /p7 { gsave bg eofill grestore stroke } bind def 31 | /t { 5 -2 roll moveto gsave rotate 32 | 1 index stringwidth pop 33 | mul neg 0 rmoveto show grestore } bind def 34 | /ta { 4 -2 roll moveto gsave rotate show } bind def 35 | /tb { 2 -1 roll 0 rmoveto show } bind def 36 | /cl { grestore gsave newpath 3 index 3 index moveto 1 index 37 | 4 -1 roll lineto exch 1 index lineto lineto 38 | closepath clip newpath } bind def 39 | /rgb { setrgbcolor } bind def 40 | /s { scalefont setfont } bind def 41 | % end .ps.prolog 42 | /sRGB { [ /CIEBasedABC 43 | << /DecodeLMN 44 | [ { dup 0.03928 le 45 | {12.92321 div} 46 | {0.055 add 1.055 div 2.4 exp } 47 | ifelse 48 | } bind dup dup 49 | ] 50 | /MatrixLMN [0.412457 0.212673 0.019334 51 | 0.357576 0.715152 0.119192 52 | 0.180437 0.072175 0.950301] 53 | /WhitePoint [0.9505 1.0 1.0890] 54 | >> 55 | ] setcolorspace } bind def 56 | /srgb { setcolor } bind def 57 | %%IncludeResource: font Helvetica 58 | /Helvetica findfont 59 | dup length dict begin 60 | {1 index /FID ne {def} {pop pop} ifelse} forall 61 | /Encoding ISOLatin1Encoding def 62 | currentdict 63 | end 64 | /Font1 exch definefont pop 65 | %%IncludeResource: font Helvetica-Bold 66 | /Helvetica-Bold findfont 67 | dup length dict begin 68 | {1 index /FID ne {def} {pop pop} ifelse} forall 69 | /Encoding ISOLatin1Encoding def 70 | currentdict 71 | end 72 | /Font2 exch definefont pop 73 | %%IncludeResource: font Helvetica-Oblique 74 | /Helvetica-Oblique findfont 75 | dup length dict begin 76 | {1 index /FID ne {def} {pop pop} ifelse} forall 77 | /Encoding ISOLatin1Encoding def 78 | currentdict 79 | end 80 | /Font3 exch definefont pop 81 | %%IncludeResource: font Helvetica-BoldOblique 82 | /Helvetica-BoldOblique findfont 83 | dup length dict begin 84 | {1 index /FID ne {def} {pop pop} ifelse} forall 85 | /Encoding ISOLatin1Encoding def 86 | currentdict 87 | end 88 | /Font4 exch definefont pop 89 | %%IncludeResource: font Symbol 90 | /Symbol findfont 91 | dup length dict begin 92 | {1 index /FID ne {def} {pop pop} ifelse} forall 93 | currentdict 94 | end 95 | /Font5 exch definefont pop 96 | %%EndProlog 97 | %%Page: 1 1 98 | bp 99 | 0.00 291.60 997.92 648.00 cl 100 | 0 0 0.5451 srgb 101 | 0.75 setlinewidth 102 | [] 0 setdash 103 | 1 setlinecap 104 | 1 setlinejoin 105 | 10.00 setmiterlimit 106 | np 107 | 92.69 485.98 m 108 | 16.01 16.01 l 109 | o 110 | np 111 | 92.69 384.16 m 112 | 19.12 19.12 l 113 | o 114 | 0.3882 0.7216 1 srgb 115 | np 116 | 111.81 403.28 m 117 | 14.46 14.46 l 118 | o 119 | 1 0.6471 0 srgb 120 | np 121 | 130.94 422.40 m 122 | 19.12 19.12 l 123 | o 124 | 0 0 0 srgb 125 | np 126 | 150.06 441.52 m 127 | 15.71 15.72 l 128 | o 129 | 0 0 0.5451 srgb 130 | np 131 | 188.30 377.94 m 132 | 2.00 2.00 l 133 | o 134 | np 135 | 283.91 371.73 m 136 | 15.12 15.12 l 137 | o 138 | np 139 | 379.51 365.51 m 140 | 19.12 19.12 l 141 | o 142 | 0.3882 0.7216 1 srgb 143 | np 144 | 398.63 384.63 m 145 | 9.34 9.34 l 146 | o 147 | 1 0.6471 0 srgb 148 | np 149 | 417.75 403.75 m 150 | 19.13 19.12 l 151 | o 152 | 0 0 0 srgb 153 | np 154 | 436.88 422.87 m 155 | 3.39 3.40 l 156 | o 157 | 0 0 0.5451 srgb 158 | np 159 | 480.87 365.04 m 160 | 7.19 7.20 l 161 | o 162 | np 163 | 582.69 365.04 m 164 | 7.15 7.16 l 165 | o 166 | 0.3882 0.7216 1 srgb 167 | np 168 | 589.84 372.20 m 169 | 19.13 19.12 l 170 | o 171 | 1 0.6471 0 srgb 172 | np 173 | 608.97 391.32 m 174 | 19.12 19.12 l 175 | o 176 | 0 0 0 srgb 177 | np 178 | 628.09 410.44 m 179 | 5.05 5.05 l 180 | o 181 | 0 0 0.5451 srgb 182 | np 183 | 666.33 448.68 m 184 | 19.12 19.12 l 185 | o 186 | np 187 | 684.51 365.04 m 188 | 0.94 0.94 l 189 | o 190 | 0.3882 0.7216 1 srgb 191 | np 192 | 685.45 365.98 m 193 | 19.12 19.12 l 194 | o 195 | 1 0.6471 0 srgb 196 | np 197 | 704.57 385.10 m 198 | 19.12 19.12 l 199 | o 200 | 0 0 0 srgb 201 | np 202 | 723.69 404.22 m 203 | 19.12 19.12 l 204 | o 205 | 0 0 0.5451 srgb 206 | np 207 | 761.94 442.46 m 208 | 19.12 19.12 l 209 | o 210 | 0.3882 0.7216 1 srgb 211 | np 212 | 786.34 365.04 m 213 | 13.84 13.84 l 214 | o 215 | 1 0.6471 0 srgb 216 | np 217 | 800.18 378.88 m 218 | 19.12 19.12 l 219 | o 220 | 0 0 0 srgb 221 | np 222 | 819.30 398.00 m 223 | 19.12 19.12 l 224 | o 225 | 0 0 0.5451 srgb 226 | np 227 | 857.54 538.07 m 228 | 19.12 19.12 l 229 | o 230 | np 231 | 857.54 436.25 m 232 | 19.12 19.12 l 233 | o 234 | 0.3882 0.7216 1 srgb 235 | np 236 | 888.16 365.04 m 237 | 7.62 7.63 l 238 | o 239 | 1 0.6471 0 srgb 240 | np 241 | 895.78 474.49 m 242 | 15.54 15.54 l 243 | o 244 | np 245 | 895.78 372.67 m 246 | 19.13 19.12 l 247 | o 248 | 0 0 0 srgb 249 | np 250 | 914.91 391.79 m 251 | 19.12 19.12 l 252 | o 253 | np 254 | 92.69 365.04 m 255 | 19.12 0 l 256 | 0 136.95 l 257 | -19.12 0 l 258 | 0 -136.95 l 259 | o 260 | np 261 | 111.81 365.04 m 262 | 19.13 0 l 263 | 0 52.70 l 264 | -19.13 0 l 265 | 0 -52.70 l 266 | o 267 | np 268 | 130.94 365.04 m 269 | 19.12 0 l 270 | 0 87.89 l 271 | -19.12 0 l 272 | 0 -87.89 l 273 | o 274 | np 275 | 150.06 365.04 m 276 | 19.12 0 l 277 | 0 92.20 l 278 | -19.12 0 l 279 | 0 -92.20 l 280 | o 281 | np 282 | 188.30 365.04 m 283 | 19.12 0 l 284 | 0 14.90 l 285 | -19.12 0 l 286 | 0 -14.90 l 287 | o 288 | np 289 | 207.42 365.04 m 290 | 19.12 0 l 291 | 0 7.66 l 292 | -19.12 0 l 293 | 0 -7.66 l 294 | o 295 | np 296 | 226.54 365.04 m 297 | 19.12 0 l 298 | 0 12.76 l 299 | -19.12 0 l 300 | 0 -12.76 l 301 | o 302 | np 303 | 245.66 365.04 m 304 | 19.12 0 l 305 | 0 12.39 l 306 | -19.12 0 l 307 | 0 -12.39 l 308 | o 309 | np 310 | 283.91 365.04 m 311 | 19.12 0 l 312 | 0 21.81 l 313 | -19.12 0 l 314 | 0 -21.81 l 315 | o 316 | np 317 | 303.03 365.04 m 318 | 19.12 0 l 319 | 0 5.60 l 320 | -19.12 0 l 321 | 0 -5.60 l 322 | o 323 | np 324 | 322.15 365.04 m 325 | 19.12 0 l 326 | 0 15.83 l 327 | -19.12 0 l 328 | 0 -15.83 l 329 | o 330 | np 331 | 341.27 365.04 m 332 | 19.12 0 l 333 | 0 17.83 l 334 | -19.12 0 l 335 | 0 -17.83 l 336 | o 337 | np 338 | 379.51 365.04 m 339 | 19.12 0 l 340 | 0 100.00 l 341 | -19.12 0 l 342 | 0 -100.00 l 343 | o 344 | np 345 | 398.63 365.04 m 346 | 19.12 0 l 347 | 0 28.93 l 348 | -19.12 0 l 349 | 0 -28.93 l 350 | o 351 | np 352 | 417.75 365.04 m 353 | 19.13 0 l 354 | 0 61.59 l 355 | -19.13 0 l 356 | 0 -61.59 l 357 | o 358 | np 359 | 436.88 365.04 m 360 | 19.12 0 l 361 | 0 61.23 l 362 | -19.12 0 l 363 | 0 -61.23 l 364 | o 365 | np 366 | 475.12 365.04 m 367 | 19.12 0 l 368 | 0 7.20 l 369 | -19.12 0 l 370 | 0 -7.20 l 371 | o 372 | np 373 | 494.24 365.04 m 374 | 19.12 0 l 375 | 0 2.75 l 376 | -19.12 0 l 377 | 0 -2.75 l 378 | o 379 | np 380 | 513.36 365.04 m 381 | 19.12 0 l 382 | 0 4.50 l 383 | -19.12 0 l 384 | 0 -4.50 l 385 | o 386 | np 387 | 532.48 365.04 m 388 | 19.12 0 l 389 | 0 4.50 l 390 | -19.12 0 l 391 | 0 -4.50 l 392 | o 393 | np 394 | 570.72 365.04 m 395 | 19.12 0 l 396 | 0 69.89 l 397 | -19.12 0 l 398 | 0 -69.89 l 399 | o 400 | np 401 | 589.84 365.04 m 402 | 19.13 0 l 403 | 0 32.38 l 404 | -19.13 0 l 405 | 0 -32.38 l 406 | o 407 | np 408 | 608.97 365.04 m 409 | 19.12 0 l 410 | 0 52.03 l 411 | -19.12 0 l 412 | 0 -52.03 l 413 | o 414 | np 415 | 628.09 365.04 m 416 | 19.12 0 l 417 | 0 50.45 l 418 | -19.12 0 l 419 | 0 -50.45 l 420 | o 421 | np 422 | 666.33 365.04 m 423 | 19.12 0 l 424 | 0 168.87 l 425 | -19.12 0 l 426 | 0 -168.87 l 427 | o 428 | np 429 | 685.45 365.04 m 430 | 19.12 0 l 431 | 0 49.88 l 432 | -19.12 0 l 433 | 0 -49.88 l 434 | o 435 | np 436 | 704.57 365.04 m 437 | 19.12 0 l 438 | 0 104.52 l 439 | -19.12 0 l 440 | 0 -104.52 l 441 | o 442 | np 443 | 723.69 365.04 m 444 | 19.12 0 l 445 | 0 106.30 l 446 | -19.12 0 l 447 | 0 -106.30 l 448 | o 449 | np 450 | 761.94 365.04 m 451 | 19.12 0 l 452 | 0 130.99 l 453 | -19.12 0 l 454 | 0 -130.99 l 455 | o 456 | np 457 | 781.06 365.04 m 458 | 19.12 0 l 459 | 0 44.40 l 460 | -19.12 0 l 461 | 0 -44.40 l 462 | o 463 | np 464 | 800.18 365.04 m 465 | 19.12 0 l 466 | 0 84.64 l 467 | -19.12 0 l 468 | 0 -84.64 l 469 | o 470 | np 471 | 819.30 365.04 m 472 | 19.12 0 l 473 | 0 77.50 l 474 | -19.12 0 l 475 | 0 -77.50 l 476 | o 477 | np 478 | 857.54 365.04 m 479 | 19.12 0 l 480 | 0 193.18 l 481 | -19.12 0 l 482 | 0 -193.18 l 483 | o 484 | np 485 | 876.66 365.04 m 486 | 19.12 0 l 487 | 0 50.48 l 488 | -19.12 0 l 489 | 0 -50.48 l 490 | o 491 | np 492 | 895.78 365.04 m 493 | 19.13 0 l 494 | 0 124.99 l 495 | -19.13 0 l 496 | 0 -124.99 l 497 | o 498 | np 499 | 914.91 365.04 m 500 | 19.12 0 l 501 | 0 125.44 l 502 | -19.12 0 l 503 | 0 -125.44 l 504 | o 505 | 59.04 365.04 967.68 588.96 cl 506 | 0 0 0 srgb 507 | 0.75 setlinewidth 508 | [ 0.00 3.00] 0 setdash 509 | 1 setlinecap 510 | 1 setlinejoin 511 | 10.00 setmiterlimit 512 | np 513 | 59.04 439.68 m 514 | 908.64 0 l 515 | o 516 | np 517 | 59.04 514.32 m 518 | 908.64 0 l 519 | o 520 | 0.00 0.00 1008.00 648.00 cl 521 | 0 0 0 srgb 522 | 0.75 setlinewidth 523 | [] 0 setdash 524 | 1 setlinecap 525 | 1 setlinejoin 526 | 10.00 setmiterlimit 527 | np 528 | 967.68 588.96 m 529 | -908.64 0 l 530 | 0 -223.92 l 531 | 908.64 0 l 532 | o 533 | 0.75 setlinewidth 534 | [ 0.00 3.00] 0 setdash 535 | np 536 | 59.04 365.04 m 537 | 908.64 0 l 538 | 0 223.92 l 539 | -908.64 0 l 540 | 0 -223.92 l 541 | o 542 | 0.00 291.60 997.92 648.00 cl 543 | /bg { 0 0 0.5451 srgb } def 544 | 0 0 0 srgb 545 | 0.75 setlinewidth 546 | [] 0 setdash 547 | 1 setlinecap 548 | 1 setlinejoin 549 | 10.00 setmiterlimit 550 | 92.69 365.04 19.12 136.95 r p3 551 | /bg { 0.3882 0.7216 1 srgb } def 552 | 111.81 365.04 19.12 52.70 r p3 553 | /bg { 1 0.6471 0 srgb } def 554 | 130.94 365.04 19.12 87.89 r p3 555 | /bg { 0 0 0 srgb } def 556 | 150.06 365.04 19.12 92.20 r p3 557 | /bg { 0 0 0.5451 srgb } def 558 | 188.30 365.04 19.12 14.90 r p3 559 | /bg { 0.3882 0.7216 1 srgb } def 560 | 207.42 365.04 19.12 7.66 r p3 561 | /bg { 1 0.6471 0 srgb } def 562 | 226.54 365.04 19.12 12.76 r p3 563 | /bg { 0 0 0 srgb } def 564 | 245.66 365.04 19.12 12.39 r p3 565 | /bg { 0 0 0.5451 srgb } def 566 | 283.91 365.04 19.12 21.81 r p3 567 | /bg { 0.3882 0.7216 1 srgb } def 568 | 303.03 365.04 19.12 5.60 r p3 569 | /bg { 1 0.6471 0 srgb } def 570 | 322.15 365.04 19.12 15.83 r p3 571 | /bg { 0 0 0 srgb } def 572 | 341.27 365.04 19.12 17.83 r p3 573 | /bg { 0 0 0.5451 srgb } def 574 | 379.51 365.04 19.12 100.00 r p3 575 | /bg { 0.3882 0.7216 1 srgb } def 576 | 398.63 365.04 19.12 28.93 r p3 577 | /bg { 1 0.6471 0 srgb } def 578 | 417.75 365.04 19.12 61.59 r p3 579 | /bg { 0 0 0 srgb } def 580 | 436.88 365.04 19.12 61.23 r p3 581 | /bg { 0 0 0.5451 srgb } def 582 | 475.12 365.04 19.12 7.20 r p3 583 | /bg { 0.3882 0.7216 1 srgb } def 584 | 494.24 365.04 19.12 2.75 r p3 585 | /bg { 1 0.6471 0 srgb } def 586 | 513.36 365.04 19.12 4.50 r p3 587 | /bg { 0 0 0 srgb } def 588 | 532.48 365.04 19.12 4.50 r p3 589 | /bg { 0 0 0.5451 srgb } def 590 | 570.72 365.04 19.12 69.89 r p3 591 | /bg { 0.3882 0.7216 1 srgb } def 592 | 589.84 365.04 19.12 32.38 r p3 593 | /bg { 1 0.6471 0 srgb } def 594 | 608.97 365.04 19.12 52.03 r p3 595 | /bg { 0 0 0 srgb } def 596 | 628.09 365.04 19.12 50.45 r p3 597 | /bg { 0 0 0.5451 srgb } def 598 | 666.33 365.04 19.12 168.87 r p3 599 | /bg { 0.3882 0.7216 1 srgb } def 600 | 685.45 365.04 19.12 49.88 r p3 601 | /bg { 1 0.6471 0 srgb } def 602 | 704.57 365.04 19.12 104.52 r p3 603 | /bg { 0 0 0 srgb } def 604 | 723.69 365.04 19.12 106.30 r p3 605 | /bg { 0 0 0.5451 srgb } def 606 | 761.94 365.04 19.12 130.99 r p3 607 | /bg { 0.3882 0.7216 1 srgb } def 608 | 781.06 365.04 19.12 44.40 r p3 609 | /bg { 1 0.6471 0 srgb } def 610 | 800.18 365.04 19.12 84.64 r p3 611 | /bg { 0 0 0 srgb } def 612 | 819.30 365.04 19.12 77.50 r p3 613 | /bg { 0 0 0.5451 srgb } def 614 | 857.54 365.04 19.12 193.18 r p3 615 | /bg { 0.3882 0.7216 1 srgb } def 616 | 876.66 365.04 19.12 50.48 r p3 617 | /bg { 1 0.6471 0 srgb } def 618 | 895.78 365.04 19.12 124.99 r p3 619 | /bg { 0 0 0 srgb } def 620 | 914.91 365.04 19.12 125.44 r p3 621 | 0.00 0.00 1008.00 648.00 cl 622 | 0 0 0 srgb 623 | 0.75 setlinewidth 624 | [] 0 setdash 625 | 1 setlinecap 626 | 1 setlinejoin 627 | 10.00 setmiterlimit 628 | np 629 | 967.68 365.04 m 630 | 0 223.92 l 631 | o 632 | np 633 | 967.68 365.04 m 634 | 7.20 0 l 635 | o 636 | np 637 | 967.68 439.68 m 638 | 7.20 0 l 639 | o 640 | np 641 | 967.68 514.32 m 642 | 7.20 0 l 643 | o 644 | np 645 | 967.68 588.96 m 646 | 7.20 0 l 647 | o 648 | /Font1 findfont 14 s 649 | 982.08 360.01 (0) 0 0 t 650 | 982.08 434.65 (4) 0 0 t 651 | 982.08 509.29 (8) 0 0 t 652 | 982.08 583.93 (12) 0 0 t 653 | np 654 | 59.04 365.04 m 655 | 0 223.92 l 656 | o 657 | np 658 | 59.04 365.04 m 659 | -7.20 0 l 660 | o 661 | np 662 | 59.04 439.68 m 663 | -7.20 0 l 664 | o 665 | np 666 | 59.04 514.32 m 667 | -7.20 0 l 668 | o 669 | np 670 | 59.04 588.96 m 671 | -7.20 0 l 672 | o 673 | 44.64 360.01 (0) 1 0 t 674 | 44.64 434.65 (4) 1 0 t 675 | 44.64 509.29 (8) 1 0 t 676 | 44.64 583.93 (12) 1 0 t 677 | 24.48 477.00 (GFLOPs) .5 90 t 678 | 0.00 291.60 997.92 648.00 cl 679 | /Font1 findfont 12 s 680 | 0 0 0 srgb 681 | 107.70 321.72 (cantile) 30.00 ta 682 | -0.360 (v) tb 683 | -0.300 (er) tb gr 684 | 247.77 347.39 (economics) 1 30.00 t 685 | 342.76 348.46 (epidemiology) 1 30.00 t 686 | 438.98 347.39 (harbor) 1 30.00 t 687 | 534.01 348.39 (protein) 1 30.00 t 688 | 629.62 348.39 (qcd) 1 30.00 t 689 | 725.23 348.39 (ship) 1 30.00 t 690 | 820.83 348.39 (spheres) 1 30.00 t 691 | 917.01 347.39 (windtunnel) 1 30.00 t 692 | 59.04 365.04 967.68 588.96 cl 693 | /Font1 findfont 13 s 694 | 0 0 0 srgb 695 | 106.08 575.63 ( 7.3) .5 90 t 696 | 125.20 575.63 ( 2.8) .5 90 t 697 | 144.32 575.63 ( 4.7) .5 90 t 698 | 163.44 575.63 ( 4.9) .5 90 t 699 | 201.68 575.63 ( 0.8) .5 90 t 700 | 220.81 575.63 ( 0.4) .5 90 t 701 | 239.93 575.63 ( 0.7) .5 90 t 702 | 259.05 575.63 ( 0.7) .5 90 t 703 | 297.29 575.63 ( 1.2) .5 90 t 704 | 316.41 575.63 ( 0.3) .5 90 t 705 | 335.53 575.63 ( 0.8) .5 90 t 706 | 354.65 575.63 ( 1.0) .5 90 t 707 | 392.90 575.63 ( 5.4) .5 90 t 708 | 412.02 575.63 ( 1.6) .5 90 t 709 | 431.14 575.63 ( 3.3) .5 90 t 710 | 450.26 575.63 ( 3.3) .5 90 t 711 | 488.50 575.63 ( 0.4) .5 90 t 712 | 507.62 575.63 ( 0.1) .5 90 t 713 | 526.74 575.63 ( 0.2) .5 90 t 714 | 545.87 575.63 ( 0.2) .5 90 t 715 | 584.11 575.63 ( 3.7) .5 90 t 716 | 603.23 575.63 ( 1.7) .5 90 t 717 | 622.35 575.63 ( 2.8) .5 90 t 718 | 641.47 575.63 ( 2.7) .5 90 t 719 | 679.71 575.63 ( 9.0) .5 90 t 720 | 698.84 575.63 ( 2.7) .5 90 t 721 | 717.96 575.63 ( 5.6) .5 90 t 722 | 737.08 575.63 ( 5.7) .5 90 t 723 | 775.32 575.63 ( 7.0) .5 90 t 724 | 794.44 575.63 ( 2.4) .5 90 t 725 | 813.56 575.63 ( 4.5) .5 90 t 726 | 832.68 575.63 ( 4.2) .5 90 t 727 | 870.93 575.63 (10.4) .5 90 t 728 | 890.05 575.63 ( 2.7) .5 90 t 729 | 909.17 575.63 ( 6.7) .5 90 t 730 | 928.29 575.63 ( 6.7) .5 90 t 731 | 0.00 0.00 997.92 356.40 cl 732 | 0 0 0.5451 srgb 733 | 0.75 setlinewidth 734 | [] 0 setdash 735 | 1 setlinecap 736 | 1 setlinejoin 737 | 10.00 setmiterlimit 738 | np 739 | 92.69 190.84 m 740 | 15.58 15.58 l 741 | o 742 | np 743 | 92.69 89.02 m 744 | 15.58 15.58 l 745 | o 746 | 0.3882 0.7216 1 srgb 747 | np 748 | 108.27 104.60 m 749 | 15.58 15.58 l 750 | o 751 | 1 0.6471 0 srgb 752 | np 753 | 123.85 120.18 m 754 | 15.58 15.58 l 755 | o 756 | 0 0 0 srgb 757 | np 758 | 139.43 135.76 m 759 | 15.58 15.58 l 760 | o 761 | 0 0 0.5451 srgb 762 | np 763 | 170.59 166.92 m 764 | 3.39 3.39 l 765 | o 766 | np 767 | 178.94 73.44 m 768 | 7.23 7.24 l 769 | o 770 | 0.3882 0.7216 1 srgb 771 | np 772 | 186.17 80.68 m 773 | 15.59 15.58 l 774 | o 775 | 1 0.6471 0 srgb 776 | np 777 | 201.76 96.26 m 778 | 15.58 15.58 l 779 | o 780 | 0 0 0 srgb 781 | np 782 | 217.34 111.84 m 783 | 15.58 15.58 l 784 | o 785 | 1 0.6471 0 srgb 786 | np 787 | 280.76 73.44 m 788 | 14.48 14.48 l 789 | o 790 | 0 0 0 srgb 791 | np 792 | 295.24 87.92 m 793 | 0.48 0.48 l 794 | o 795 | np 796 | 382.58 73.44 m 797 | 6.14 6.13 l 798 | o 799 | 0 0 0.5451 srgb 800 | np 801 | 404.30 95.16 m 802 | 15.58 15.58 l 803 | o 804 | 1 0.6471 0 srgb 805 | np 806 | 435.46 126.32 m 807 | 9.13 9.13 l 808 | o 809 | 0 0 0.5451 srgb 810 | np 811 | 484.41 73.44 m 812 | 10.37 10.37 l 813 | o 814 | 0.3882 0.7216 1 srgb 815 | np 816 | 586.23 73.44 m 817 | 5.03 5.03 l 818 | o 819 | 1 0.6471 0 srgb 820 | np 821 | 591.26 78.47 m 822 | 15.23 15.23 l 823 | o 824 | 0 0 0 srgb 825 | np 826 | 606.84 94.05 m 827 | 1.76 1.76 l 828 | o 829 | 0 0 0.5451 srgb 830 | np 831 | 638.00 125.21 m 832 | 8.36 8.36 l 833 | o 834 | 0 0 0 srgb 835 | np 836 | 688.05 73.44 m 837 | 12.27 12.27 l 838 | o 839 | 0 0 0.5451 srgb 840 | np 841 | 715.90 101.29 m 842 | 15.58 15.58 l 843 | o 844 | np 845 | 793.80 77.37 m 846 | 15.58 15.58 l 847 | o 848 | 0.3882 0.7216 1 srgb 849 | np 850 | 809.38 92.95 m 851 | 15.58 15.58 l 852 | o 853 | 1 0.6471 0 srgb 854 | np 855 | 824.96 108.53 m 856 | 15.59 15.58 l 857 | o 858 | 0.3882 0.7216 1 srgb 859 | np 860 | 891.70 73.44 m 861 | 11.17 11.17 l 862 | o 863 | 1 0.6471 0 srgb 864 | np 865 | 902.87 84.61 m 866 | 8.82 8.82 l 867 | o 868 | 0 0 0 srgb 869 | np 870 | 92.69 73.44 m 871 | 15.58 0 l 872 | 0 139.35 l 873 | -15.58 0 l 874 | 0 -139.35 l 875 | o 876 | np 877 | 108.27 73.44 m 878 | 15.58 0 l 879 | 0 78.21 l 880 | -15.58 0 l 881 | 0 -78.21 l 882 | o 883 | np 884 | 123.85 73.44 m 885 | 15.58 0 l 886 | 0 103.04 l 887 | -15.58 0 l 888 | 0 -103.04 l 889 | o 890 | np 891 | 139.43 73.44 m 892 | 15.58 0 l 893 | 0 104.38 l 894 | -15.58 0 l 895 | 0 -104.38 l 896 | o 897 | np 898 | 170.59 73.44 m 899 | 15.58 0 l 900 | 0 96.87 l 901 | -15.58 0 l 902 | 0 -96.87 l 903 | o 904 | np 905 | 186.17 73.44 m 906 | 15.59 0 l 907 | 0 61.14 l 908 | -15.59 0 l 909 | 0 -61.14 l 910 | o 911 | np 912 | 201.76 73.44 m 913 | 15.58 0 l 914 | 0 74.71 l 915 | -15.58 0 l 916 | 0 -74.71 l 917 | o 918 | np 919 | 217.34 73.44 m 920 | 15.58 0 l 921 | 0 69.07 l 922 | -15.58 0 l 923 | 0 -69.07 l 924 | o 925 | np 926 | 248.50 73.44 m 927 | 15.58 0 l 928 | 0 32.41 l 929 | -15.58 0 l 930 | 0 -32.41 l 931 | o 932 | np 933 | 264.08 73.44 m 934 | 15.58 0 l 935 | 0 9.88 l 936 | -15.58 0 l 937 | 0 -9.88 l 938 | o 939 | np 940 | 279.66 73.44 m 941 | 15.58 0 l 942 | 0 15.03 l 943 | -15.58 0 l 944 | 0 -15.03 l 945 | o 946 | np 947 | 295.24 73.44 m 948 | 15.58 0 l 949 | 0 14.96 l 950 | -15.58 0 l 951 | 0 -14.96 l 952 | o 953 | np 954 | 326.40 73.44 m 955 | 15.58 0 l 956 | 0 21.91 l 957 | -15.58 0 l 958 | 0 -21.91 l 959 | o 960 | np 961 | 341.98 73.44 m 962 | 15.58 0 l 963 | 0 9.94 l 964 | -15.58 0 l 965 | 0 -9.94 l 966 | o 967 | np 968 | 357.56 73.44 m 969 | 15.58 0 l 970 | 0 14.92 l 971 | -15.58 0 l 972 | 0 -14.92 l 973 | o 974 | np 975 | 373.14 73.44 m 976 | 15.58 0 l 977 | 0 15.26 l 978 | -15.58 0 l 979 | 0 -15.26 l 980 | o 981 | np 982 | 404.30 73.44 m 983 | 15.58 0 l 984 | 0 94.55 l 985 | -15.58 0 l 986 | 0 -94.55 l 987 | o 988 | np 989 | 419.88 73.44 m 990 | 15.58 0 l 991 | 0 33.89 l 992 | -15.58 0 l 993 | 0 -33.89 l 994 | o 995 | np 996 | 435.46 73.44 m 997 | 15.58 0 l 998 | 0 62.01 l 999 | -15.58 0 l 1000 | 0 -62.01 l 1001 | o 1002 | np 1003 | 451.04 73.44 m 1004 | 15.58 0 l 1005 | 0 63.50 l 1006 | -15.58 0 l 1007 | 0 -63.50 l 1008 | o 1009 | np 1010 | 482.20 73.44 m 1011 | 15.58 0 l 1012 | 0 10.37 l 1013 | -15.58 0 l 1014 | 0 -10.37 l 1015 | o 1016 | np 1017 | 497.78 73.44 m 1018 | 15.58 0 l 1019 | 0 3.72 l 1020 | -15.58 0 l 1021 | 0 -3.72 l 1022 | o 1023 | np 1024 | 513.36 73.44 m 1025 | 15.58 0 l 1026 | 0 6.55 l 1027 | -15.58 0 l 1028 | 0 -6.55 l 1029 | o 1030 | np 1031 | 528.94 73.44 m 1032 | 15.58 0 l 1033 | 0 6.55 l 1034 | -15.58 0 l 1035 | 0 -6.55 l 1036 | o 1037 | np 1038 | 560.10 73.44 m 1039 | 15.58 0 l 1040 | 0 54.43 l 1041 | -15.58 0 l 1042 | 0 -54.43 l 1043 | o 1044 | np 1045 | 575.68 73.44 m 1046 | 15.58 0 l 1047 | 0 13.35 l 1048 | -15.58 0 l 1049 | 0 -13.35 l 1050 | o 1051 | np 1052 | 591.26 73.44 m 1053 | 15.58 0 l 1054 | 0 20.26 l 1055 | -15.58 0 l 1056 | 0 -20.26 l 1057 | o 1058 | np 1059 | 606.84 73.44 m 1060 | 15.58 0 l 1061 | 0 22.37 l 1062 | -15.58 0 l 1063 | 0 -22.37 l 1064 | o 1065 | np 1066 | 638.00 73.44 m 1067 | 15.58 0 l 1068 | 0 60.13 l 1069 | -15.58 0 l 1070 | 0 -60.13 l 1071 | o 1072 | np 1073 | 653.58 73.44 m 1074 | 15.58 0 l 1075 | 0 18.84 l 1076 | -15.58 0 l 1077 | 0 -18.84 l 1078 | o 1079 | np 1080 | 669.16 73.44 m 1081 | 15.58 0 l 1082 | 0 55.78 l 1083 | -15.58 0 l 1084 | 0 -55.78 l 1085 | o 1086 | np 1087 | 684.74 73.44 m 1088 | 15.58 0 l 1089 | 0 56.57 l 1090 | -15.58 0 l 1091 | 0 -56.57 l 1092 | o 1093 | np 1094 | 715.90 73.44 m 1095 | 15.58 0 l 1096 | 0 52.52 l 1097 | -15.58 0 l 1098 | 0 -52.52 l 1099 | o 1100 | np 1101 | 731.48 73.44 m 1102 | 15.58 0 l 1103 | 0 6.80 l 1104 | -15.58 0 l 1105 | 0 -6.80 l 1106 | o 1107 | np 1108 | 747.06 73.44 m 1109 | 15.58 0 l 1110 | 0 20.66 l 1111 | -15.58 0 l 1112 | 0 -20.66 l 1113 | o 1114 | np 1115 | 762.64 73.44 m 1116 | 15.58 0 l 1117 | 0 20.68 l 1118 | -15.58 0 l 1119 | 0 -20.68 l 1120 | o 1121 | np 1122 | 793.80 73.44 m 1123 | 15.58 0 l 1124 | 0 53.18 l 1125 | -15.58 0 l 1126 | 0 -53.18 l 1127 | o 1128 | np 1129 | 809.38 73.44 m 1130 | 15.58 0 l 1131 | 0 37.12 l 1132 | -15.58 0 l 1133 | 0 -37.12 l 1134 | o 1135 | np 1136 | 824.96 73.44 m 1137 | 15.59 0 l 1138 | 0 53.67 l 1139 | -15.59 0 l 1140 | 0 -53.67 l 1141 | o 1142 | np 1143 | 840.55 73.44 m 1144 | 15.58 0 l 1145 | 0 44.65 l 1146 | -15.58 0 l 1147 | 0 -44.65 l 1148 | o 1149 | np 1150 | 871.71 73.44 m 1151 | 15.58 0 l 1152 | 0 35.39 l 1153 | -15.58 0 l 1154 | 0 -35.39 l 1155 | o 1156 | np 1157 | 887.29 73.44 m 1158 | 15.58 0 l 1159 | 0 13.81 l 1160 | -15.58 0 l 1161 | 0 -13.81 l 1162 | o 1163 | np 1164 | 902.87 73.44 m 1165 | 15.58 0 l 1166 | 0 19.99 l 1167 | -15.58 0 l 1168 | 0 -19.99 l 1169 | o 1170 | np 1171 | 918.45 73.44 m 1172 | 15.58 0 l 1173 | 0 20.03 l 1174 | -15.58 0 l 1175 | 0 -20.03 l 1176 | o 1177 | 59.04 73.44 967.68 297.36 cl 1178 | 0 0 0 srgb 1179 | 0.75 setlinewidth 1180 | [ 0.00 3.00] 0 setdash 1181 | 1 setlinecap 1182 | 1 setlinejoin 1183 | 10.00 setmiterlimit 1184 | np 1185 | 59.04 129.42 m 1186 | 908.64 0 l 1187 | o 1188 | np 1189 | 59.04 185.40 m 1190 | 908.64 0 l 1191 | o 1192 | np 1193 | 59.04 241.38 m 1194 | 908.64 0 l 1195 | o 1196 | 0.00 0.00 1008.00 648.00 cl 1197 | 0 0 0 srgb 1198 | 0.75 setlinewidth 1199 | [] 0 setdash 1200 | 1 setlinecap 1201 | 1 setlinejoin 1202 | 10.00 setmiterlimit 1203 | np 1204 | 967.68 297.36 m 1205 | -908.64 0 l 1206 | 0 -223.92 l 1207 | 908.64 0 l 1208 | o 1209 | 0.75 setlinewidth 1210 | [ 0.00 3.00] 0 setdash 1211 | np 1212 | 59.04 73.44 m 1213 | 908.64 0 l 1214 | 0 223.92 l 1215 | -908.64 0 l 1216 | 0 -223.92 l 1217 | o 1218 | 0.00 0.00 997.92 356.40 cl 1219 | /bg { 0 0 0.5451 srgb } def 1220 | 0 0 0 srgb 1221 | 0.75 setlinewidth 1222 | [] 0 setdash 1223 | 1 setlinecap 1224 | 1 setlinejoin 1225 | 10.00 setmiterlimit 1226 | 92.69 73.44 15.58 139.35 r p3 1227 | /bg { 0.3882 0.7216 1 srgb } def 1228 | 108.27 73.44 15.58 78.21 r p3 1229 | /bg { 1 0.6471 0 srgb } def 1230 | 123.85 73.44 15.58 103.04 r p3 1231 | /bg { 0 0 0 srgb } def 1232 | 139.43 73.44 15.58 104.38 r p3 1233 | /bg { 0 0 0.5451 srgb } def 1234 | 170.59 73.44 15.58 96.87 r p3 1235 | /bg { 0.3882 0.7216 1 srgb } def 1236 | 186.17 73.44 15.58 61.14 r p3 1237 | /bg { 1 0.6471 0 srgb } def 1238 | 201.76 73.44 15.58 74.71 r p3 1239 | /bg { 0 0 0 srgb } def 1240 | 217.34 73.44 15.58 69.07 r p3 1241 | /bg { 0 0 0.5451 srgb } def 1242 | 248.50 73.44 15.58 32.41 r p3 1243 | /bg { 0.3882 0.7216 1 srgb } def 1244 | 264.08 73.44 15.58 9.88 r p3 1245 | /bg { 1 0.6471 0 srgb } def 1246 | 279.66 73.44 15.58 15.03 r p3 1247 | /bg { 0 0 0 srgb } def 1248 | 295.24 73.44 15.58 14.96 r p3 1249 | /bg { 0 0 0.5451 srgb } def 1250 | 326.40 73.44 15.58 21.91 r p3 1251 | /bg { 0.3882 0.7216 1 srgb } def 1252 | 341.98 73.44 15.58 9.94 r p3 1253 | /bg { 1 0.6471 0 srgb } def 1254 | 357.56 73.44 15.58 14.92 r p3 1255 | /bg { 0 0 0 srgb } def 1256 | 373.14 73.44 15.58 15.26 r p3 1257 | /bg { 0 0 0.5451 srgb } def 1258 | 404.30 73.44 15.58 94.55 r p3 1259 | /bg { 0.3882 0.7216 1 srgb } def 1260 | 419.88 73.44 15.58 33.89 r p3 1261 | /bg { 1 0.6471 0 srgb } def 1262 | 435.46 73.44 15.58 62.01 r p3 1263 | /bg { 0 0 0 srgb } def 1264 | 451.04 73.44 15.58 63.50 r p3 1265 | /bg { 0 0 0.5451 srgb } def 1266 | 482.20 73.44 15.58 10.37 r p3 1267 | /bg { 0.3882 0.7216 1 srgb } def 1268 | 497.78 73.44 15.58 3.72 r p3 1269 | /bg { 1 0.6471 0 srgb } def 1270 | 513.36 73.44 15.58 6.55 r p3 1271 | /bg { 0 0 0 srgb } def 1272 | 528.94 73.44 15.58 6.55 r p3 1273 | /bg { 0 0 0.5451 srgb } def 1274 | 560.10 73.44 15.58 54.43 r p3 1275 | /bg { 0.3882 0.7216 1 srgb } def 1276 | 575.68 73.44 15.58 13.35 r p3 1277 | /bg { 1 0.6471 0 srgb } def 1278 | 591.26 73.44 15.58 20.26 r p3 1279 | /bg { 0 0 0 srgb } def 1280 | 606.84 73.44 15.58 22.37 r p3 1281 | /bg { 0 0 0.5451 srgb } def 1282 | 638.00 73.44 15.58 60.13 r p3 1283 | /bg { 0.3882 0.7216 1 srgb } def 1284 | 653.58 73.44 15.58 18.84 r p3 1285 | /bg { 1 0.6471 0 srgb } def 1286 | 669.16 73.44 15.58 55.78 r p3 1287 | /bg { 0 0 0 srgb } def 1288 | 684.74 73.44 15.58 56.57 r p3 1289 | /bg { 0 0 0.5451 srgb } def 1290 | 715.90 73.44 15.58 52.52 r p3 1291 | /bg { 0.3882 0.7216 1 srgb } def 1292 | 731.48 73.44 15.58 6.80 r p3 1293 | /bg { 1 0.6471 0 srgb } def 1294 | 747.06 73.44 15.58 20.66 r p3 1295 | /bg { 0 0 0 srgb } def 1296 | 762.64 73.44 15.58 20.68 r p3 1297 | /bg { 0 0 0.5451 srgb } def 1298 | 793.80 73.44 15.58 53.18 r p3 1299 | /bg { 0.3882 0.7216 1 srgb } def 1300 | 809.38 73.44 15.58 37.12 r p3 1301 | /bg { 1 0.6471 0 srgb } def 1302 | 824.96 73.44 15.58 53.67 r p3 1303 | /bg { 0 0 0 srgb } def 1304 | 840.55 73.44 15.58 44.65 r p3 1305 | /bg { 0 0 0.5451 srgb } def 1306 | 871.71 73.44 15.58 35.39 r p3 1307 | /bg { 0.3882 0.7216 1 srgb } def 1308 | 887.29 73.44 15.58 13.81 r p3 1309 | /bg { 1 0.6471 0 srgb } def 1310 | 902.87 73.44 15.58 19.99 r p3 1311 | /bg { 0 0 0 srgb } def 1312 | 918.45 73.44 15.58 20.03 r p3 1313 | 0.00 0.00 1008.00 648.00 cl 1314 | 0 0 0 srgb 1315 | 0.75 setlinewidth 1316 | [] 0 setdash 1317 | 1 setlinecap 1318 | 1 setlinejoin 1319 | 10.00 setmiterlimit 1320 | np 1321 | 967.68 73.44 m 1322 | 0 223.92 l 1323 | o 1324 | np 1325 | 967.68 73.44 m 1326 | 7.20 0 l 1327 | o 1328 | np 1329 | 967.68 129.42 m 1330 | 7.20 0 l 1331 | o 1332 | np 1333 | 967.68 185.40 m 1334 | 7.20 0 l 1335 | o 1336 | np 1337 | 967.68 241.38 m 1338 | 7.20 0 l 1339 | o 1340 | np 1341 | 967.68 297.36 m 1342 | 7.20 0 l 1343 | o 1344 | /Font1 findfont 14 s 1345 | 982.08 68.41 (0.0) 0 0 t 1346 | 982.08 124.39 (0.5) 0 0 t 1347 | 982.08 180.37 (1.0) 0 0 t 1348 | 982.08 236.35 (1.5) 0 0 t 1349 | 982.08 292.33 (2.0) 0 0 t 1350 | np 1351 | 59.04 73.44 m 1352 | 0 223.92 l 1353 | o 1354 | np 1355 | 59.04 73.44 m 1356 | -7.20 0 l 1357 | o 1358 | np 1359 | 59.04 129.42 m 1360 | -7.20 0 l 1361 | o 1362 | np 1363 | 59.04 185.40 m 1364 | -7.20 0 l 1365 | o 1366 | np 1367 | 59.04 241.38 m 1368 | -7.20 0 l 1369 | o 1370 | np 1371 | 59.04 297.36 m 1372 | -7.20 0 l 1373 | o 1374 | 44.64 68.41 (0.0) 1 0 t 1375 | 44.64 124.39 (0.5) 1 0 t 1376 | 44.64 180.37 (1.0) 1 0 t 1377 | 44.64 236.35 (1.5) 1 0 t 1378 | 44.64 292.33 (2.0) 1 0 t 1379 | 24.48 185.40 (GFLOPs) .5 90 t 1380 | 0.00 0.00 997.92 356.40 cl 1381 | /Font1 findfont 12 s 1382 | 0 0 0 srgb 1383 | 90.14 23.32 (acceler) 30.00 ta 1384 | -0.120 (ator) tb gr 1385 | 159.31 18.41 (amaz) 30.00 ta 1386 | -0.180 (on0312) tb gr 1387 | 297.39 52.92 (ca-CondMat) 1 30.00 t 1388 | 323.55 23.14 (cit-P) 30.00 ta 1389 | -0.480 (atents) tb gr 1390 | 453.15 52.99 (circuit) 1 30.00 t 1391 | 531.05 52.99 (email-Enron) 1 30.00 t 1392 | 534.77 11.36 (p2p-Gn) 30.00 ta 1393 | -0.120 (utella31) tb gr 1394 | 686.90 52.92 (roadNet-CA) 1 30.00 t 1395 | 708.73 20.65 (w) 30.00 ta 1396 | -0.120 (eb) tb 1397 | -0.120 (base1m) tb gr 1398 | 783.46 20.11 (w) 30.00 ta 1399 | -0.120 (eb-Google) tb gr 1400 | 875.80 27.15 (wiki-V) 30.00 ta 1401 | -0.960 (ote) tb gr 1402 | 59.04 73.44 967.68 297.36 cl 1403 | /Font1 findfont 13 s 1404 | 0 0 0 srgb 1405 | 103.60 282.17 (1.24) .5 90 t 1406 | 119.18 282.17 (0.70) .5 90 t 1407 | 134.76 282.17 (0.92) .5 90 t 1408 | 150.34 282.17 (0.93) .5 90 t 1409 | 181.50 282.17 (0.87) .5 90 t 1410 | 197.08 282.17 (0.55) .5 90 t 1411 | 212.66 282.17 (0.67) .5 90 t 1412 | 228.24 282.17 (0.62) .5 90 t 1413 | 259.40 282.17 (0.29) .5 90 t 1414 | 274.98 282.17 (0.09) .5 90 t 1415 | 290.56 282.17 (0.13) .5 90 t 1416 | 306.14 282.17 (0.13) .5 90 t 1417 | 337.30 282.17 (0.20) .5 90 t 1418 | 352.88 282.17 (0.09) .5 90 t 1419 | 368.46 282.17 (0.13) .5 90 t 1420 | 384.04 282.17 (0.14) .5 90 t 1421 | 415.20 282.17 (0.84) .5 90 t 1422 | 430.78 282.17 (0.30) .5 90 t 1423 | 446.36 282.17 (0.55) .5 90 t 1424 | 461.95 282.17 (0.57) .5 90 t 1425 | 493.11 282.17 (0.09) .5 90 t 1426 | 508.69 282.17 (0.03) .5 90 t 1427 | 524.27 282.17 (0.06) .5 90 t 1428 | 539.85 282.17 (0.06) .5 90 t 1429 | 571.01 282.17 (0.49) .5 90 t 1430 | 586.59 282.17 (0.12) .5 90 t 1431 | 602.17 282.17 (0.18) .5 90 t 1432 | 617.75 282.17 (0.20) .5 90 t 1433 | 648.91 282.17 (0.54) .5 90 t 1434 | 664.49 282.17 (0.17) .5 90 t 1435 | 680.07 282.17 (0.50) .5 90 t 1436 | 695.65 282.17 (0.51) .5 90 t 1437 | 726.81 282.17 (0.47) .5 90 t 1438 | 742.39 282.17 (0.06) .5 90 t 1439 | 757.97 282.17 (0.18) .5 90 t 1440 | 773.55 282.17 (0.18) .5 90 t 1441 | 804.71 282.17 (0.48) .5 90 t 1442 | 820.29 282.17 (0.33) .5 90 t 1443 | 835.87 282.17 (0.48) .5 90 t 1444 | 851.45 282.17 (0.40) .5 90 t 1445 | 882.61 282.17 (0.32) .5 90 t 1446 | 898.19 282.17 (0.12) .5 90 t 1447 | 913.77 282.17 (0.18) .5 90 t 1448 | 929.35 282.17 (0.18) .5 90 t 1449 | 0.00 0.00 1008.00 648.00 cl 1450 | 0 0 0.5451 srgb 1451 | 9.00 setlinewidth 1452 | [] 0 setdash 1453 | 1 setlinecap 1454 | 1 setlinejoin 1455 | 10.00 setmiterlimit 1456 | np 1457 | 121.24 629.93 m 1458 | 23.73 0 l 1459 | o 1460 | 0.3882 0.7216 1 srgb 1461 | np 1462 | 530.67 629.93 m 1463 | 23.74 0 l 1464 | o 1465 | /Font1 findfont 13 s 1466 | 0 0 0 srgb 1467 | 156.84 625.26 (MKL 11.2.1, Xeon E5-2670 v3 x2 \(Hasw) 0 ta 1468 | -0.130 (ell\)) tb gr 1469 | 566.28 625.26 (MKL 11.2.1, Xeon Phi 7120 \(KNC\)) 0 0 t 1470 | 1 0.6471 0 srgb 1471 | np 1472 | 121.24 609.57 m 1473 | 23.73 0 l 1474 | o 1475 | 0 0 0 srgb 1476 | np 1477 | 530.67 609.57 m 1478 | 23.74 0 l 1479 | o 1480 | 156.84 604.90 (MKL 11.3.3, Xeon Phi 7250 \(KNL, DDR4\)) 0 0 t 1481 | 566.28 604.90 (MKL 11.3.3, Xeon Phi 7250 \(KNL, MCDRAM\)) 0 0 t 1482 | ep 1483 | %%Trailer 1484 | %%Pages: 1 1485 | %%EOF 1486 | --------------------------------------------------------------------------------