From 91a7ef529e21ed69fe40395c02a193f4457a4db6 Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Thu, 5 Nov 2015 17:31:12 +0000 Subject: [PATCH 01/23] Initial import --- index.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 0000000..cd08755 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ +Hello world! From d68d0a4a1f38634d08b9f745c1528123507e2982 Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Mon, 16 Nov 2015 12:06:58 +0000 Subject: [PATCH 02/23] Update documentation --- BiConjugateGradient_8cpp.html | 215 ++ ConjugateGradient_8cpp.html | 104 + Converters_8hpp.html | 132 ++ Converters_8hpp_source.html | 149 ++ Dse_8cpp.html | 187 ++ Dse_8hpp.html | 140 ++ Dse_8hpp_source.html | 188 ++ Io_8hpp.html | 127 ++ Io_8hpp_source.html | 277 +++ Model_8hpp.html | 121 ++ Model_8hpp_source.html | 187 ++ ParallelCsrReadControl_8java.html | 110 + README_8md.html | 96 + SimpleSpmv_8hpp.html | 228 ++ SimpleSpmv_8hpp_source.html | 431 ++++ SparseLinearSolvers_8cpp.html | 194 ++ SparseLinearSolvers_8hpp.html | 125 ++ SparseLinearSolvers_8hpp_source.html | 148 ++ SparseMatrix_8hpp.html | 127 ++ SparseMatrix_8hpp_source.html | 127 ++ SpmvDeviceInterfaceMock_8cpp.html | 377 ++++ SpmvDeviceInterface_8cpp.html | 194 ++ SpmvDeviceInterface_8h.html | 398 ++++ SpmvDeviceInterface_8h_source.html | 142 ++ SpmvKernel_8java.html | 120 ++ SpmvManager_8java.html | 108 + Spmv_8cpp.html | 223 ++ Spmv_8hpp.html | 133 ++ Spmv_8hpp_source.html | 183 ++ UserInput_8hpp.html | 127 ++ UserInput_8hpp_source.html | 139 ++ Utils_8hpp.html | 129 ++ Utils_8hpp_source.html | 165 ++ annotated.html | 147 ++ bc_s.png | Bin 0 -> 676 bytes bdwn.png | Bin 0 -> 147 bytes classBramSpmvReductionKernel-members.html | 102 + classBramSpmvReductionKernel.html | 165 ++ classBramSpmvReductionKernel.png | Bin 0 -> 581 bytes classDramSpmvReductionKernel-members.html | 102 + classDramSpmvReductionKernel.html | 143 ++ classDramSpmvReductionKernel.png | Bin 0 -> 585 bytes classPaddingKernel-members.html | 102 + classPaddingKernel.html | 143 ++ classPaddingKernel.png | Bin 0 -> 467 bytes classParallelCsrReadControl-members.html | 144 ++ classParallelCsrReadControl.html | 1264 +++++++++++ classParallelCsrReadControl.png | Bin 0 -> 655 bytes classSpmvCacheKernel-members.html | 113 + classSpmvCacheKernel.html | 469 +++++ classSpmvCacheKernel.png | Bin 0 -> 516 bytes classSpmvKernel-members.html | 103 + classSpmvKernel.html | 204 ++ classSpmvKernel.png | Bin 0 -> 425 bytes classSpmvManager-members.html | 128 ++ classSpmvManager.html | 975 +++++++++ classSpmvManager.png | Bin 0 -> 547 bytes classSpmvReductionKernel-members.html | 102 + classSpmvReductionKernel.html | 159 ++ classSpmvReductionKernel.png | Bin 0 -> 539 bytes classUnpaddingKernel-members.html | 102 + classUnpaddingKernel.html | 159 ++ classUnpaddingKernel.png | Bin 0 -> 473 bytes classes.html | 128 ++ classspark_1_1dse_1_1Benchmark-members.html | 109 + classspark_1_1dse_1_1Benchmark.html | 219 ++ ...spark_1_1dse_1_1DseParameters-members.html | 109 + classspark_1_1dse_1_1DseParameters.html | 171 ++ classspark_1_1dse_1_1DseResult-members.html | 109 + classspark_1_1dse_1_1DseResult.html | 211 ++ classspark_1_1dse_1_1SparkDse-members.html | 107 + classspark_1_1dse_1_1SparkDse.html | 170 ++ classspark_1_1io_1_1MmReader-members.html | 122 ++ classspark_1_1io_1_1MmReader.html | 565 +++++ ...l_1_1ImplementationParameters-members.html | 110 + ..._1_1model_1_1ImplementationParameters.html | 236 +++ ..._1model_1_1LogicResourceUsage-members.html | 117 ++ ...sspark_1_1model_1_1LogicResourceUsage.html | 405 ++++ ...k_1_1sparse_1_1SparkCooMatrix-members.html | 110 + classspark_1_1sparse_1_1SparkCooMatrix.html | 227 ++ ...ear__solvers_1_1DfeBiCgSolver-members.html | 108 + ...rse__linear__solvers_1_1DfeBiCgSolver.html | 168 ++ ...arse__linear__solvers_1_1DfeBiCgSolver.png | Bin 0 -> 907 bytes ...inear__solvers_1_1DfeCgSolver-members.html | 108 + ...parse__linear__solvers_1_1DfeCgSolver.html | 168 ++ ...sparse__linear__solvers_1_1DfeCgSolver.png | Bin 0 -> 864 bytes ...inear__solvers_1_1EigenSolver-members.html | 108 + ...parse__linear__solvers_1_1EigenSolver.html | 168 ++ ...sparse__linear__solvers_1_1EigenSolver.png | Bin 0 -> 855 bytes ...se__linear__solvers_1_1Solver-members.html | 108 + ..._1_1sparse__linear__solvers_1_1Solver.html | 216 ++ ...k_1_1sparse__linear__solvers_1_1Solver.png | Bin 0 -> 1579 bytes ..._1spmv_1_1FstSpmvArchitecture-members.html | 132 ++ ...sspark_1_1spmv_1_1FstSpmvArchitecture.html | 329 +++ classspark_1_1spmv_1_1FstSpmvArchitecture.png | Bin 0 -> 1225 bytes ...mv_1_1PrefetchingArchitecture-members.html | 135 ++ ...rk_1_1spmv_1_1PrefetchingArchitecture.html | 286 +++ ...ark_1_1spmv_1_1PrefetchingArchitecture.png | Bin 0 -> 1721 bytes ...pmv_1_1SimpleSpmvArchitecture-members.html | 132 ++ ...ark_1_1spmv_1_1SimpleSpmvArchitecture.html | 756 +++++++ ...park_1_1spmv_1_1SimpleSpmvArchitecture.png | Bin 0 -> 2306 bytes ..._1SimpleSpmvArchitectureSpace-members.html | 115 + ..._1spmv_1_1SimpleSpmvArchitectureSpace.html | 392 ++++ ...1_1spmv_1_1SimpleSpmvArchitectureSpace.png | Bin 0 -> 1058 bytes ..._1_1SkipEmptyRowsArchitecture-members.html | 133 ++ ..._1_1spmv_1_1SkipEmptyRowsArchitecture.html | 367 ++++ ...k_1_1spmv_1_1SkipEmptyRowsArchitecture.png | Bin 0 -> 1728 bytes ...k_1_1spmv_1_1SpmvArchitecture-members.html | 119 ++ classspark_1_1spmv_1_1SpmvArchitecture.html | 522 +++++ classspark_1_1spmv_1_1SpmvArchitecture.png | Bin 0 -> 2314 bytes ...spmv_1_1SpmvArchitectureSpace-members.html | 108 + ...park_1_1spmv_1_1SpmvArchitectureSpace.html | 207 ++ ...spark_1_1spmv_1_1SpmvArchitectureSpace.png | Bin 0 -> 1065 bytes closed.png | Bin 0 -> 132 bytes dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html | 100 + dir_16dc92632bab467dc50b01bd02b3341a.html | 100 + dir_376f1c4177942cba0305052d5eaaa828.html | 100 + dir_55daf1889a6971c13f7bc2c2ab706314.html | 100 + dir_68267d1309a1af8e8297ef4c3efbcdba.html | 115 + dir_6d2d4b597c0c9fbf0dac624a287f2dec.html | 100 + dir_817fd82c291ca2ce5189d4384ec10041.html | 100 + dir_bcdd1c0198fc998763f86146a43d3c64.html | 123 ++ dir_d44c64559bbebec7f509842c48db8b23.html | 100 + dir_d7c482895ed73b33d89221a7692a7a0a.html | 100 + dir_d8b7011e84264c6173d8b11c4e58b2d3.html | 108 + dir_e1e695598025e13caf4d9e666dd56479.html | 100 + doxygen.conf | 1869 +++++++++++++++++ doxygen.css | 1184 +++++++++++ doxygen.png | Bin 0 -> 3779 bytes dynsections.js | 97 + ...arallelCsrReadControl_1_1Mode-members.html | 109 + enumParallelCsrReadControl_1_1Mode.html | 169 ++ files.html | 134 ++ ftv2blank.png | Bin 0 -> 86 bytes ftv2cl.png | Bin 0 -> 453 bytes ftv2doc.png | Bin 0 -> 746 bytes ftv2folderclosed.png | Bin 0 -> 616 bytes ftv2folderopen.png | Bin 0 -> 597 bytes ftv2lastnode.png | Bin 0 -> 86 bytes ftv2link.png | Bin 0 -> 746 bytes ftv2mlastnode.png | Bin 0 -> 246 bytes ftv2mnode.png | Bin 0 -> 246 bytes ftv2mo.png | Bin 0 -> 403 bytes ftv2node.png | Bin 0 -> 86 bytes ftv2ns.png | Bin 0 -> 388 bytes ftv2plastnode.png | Bin 0 -> 229 bytes ftv2pnode.png | Bin 0 -> 229 bytes ftv2splitbar.png | Bin 0 -> 314 bytes ftv2vertline.png | Bin 0 -> 86 bytes functions.html | 152 ++ functions_0x62.html | 143 ++ functions_0x63.html | 170 ++ functions_0x64.html | 175 ++ functions_0x65.html | 144 ++ functions_0x66.html | 152 ++ functions_0x67.html | 192 ++ functions_0x69.html | 178 ++ functions_0x6c.html | 140 ++ functions_0x6d.html | 193 ++ functions_0x6e.html | 175 ++ functions_0x6f.html | 180 ++ functions_0x70.html | 173 ++ functions_0x72.html | 169 ++ functions_0x73.html | 191 ++ functions_0x74.html | 151 ++ functions_0x75.html | 134 ++ functions_0x76.html | 158 ++ functions_0x77.html | 135 ++ functions_0x7a.html | 134 ++ functions_0x7e.html | 137 ++ functions_func.html | 516 +++++ functions_type.html | 111 + functions_vars.html | 499 +++++ globals.html | 256 +++ globals_func.html | 239 +++ globals_type.html | 108 + globals_vars.html | 108 + hierarchy.html | 141 ++ index.html | 91 +- jquery.js | 8 + main_8cpp.html | 208 ++ md_README.html | 127 ++ namespacemembers.html | 139 ++ namespacemembers_func.html | 126 ++ namespacemembers_type.html | 115 + namespacemembers_vars.html | 105 + namespaces.html | 110 + namespacespark.html | 120 ++ namespacespark_1_1converters.html | 204 ++ namespacespark_1_1dse.html | 191 ++ namespacespark_1_1io.html | 108 + namespacespark_1_1model.html | 110 + namespacespark_1_1sparse.html | 141 ++ ...spacespark_1_1sparse__linear__solvers.html | 114 + namespacespark_1_1spmv.html | 252 +++ namespacespark_1_1userio.html | 152 ++ namespacespark_1_1utils.html | 149 ++ nav_f.png | Bin 0 -> 153 bytes nav_g.png | Bin 0 -> 95 bytes nav_h.png | Bin 0 -> 98 bytes open.png | Bin 0 -> 123 bytes pages.html | 95 + search/all_5f.html | 26 + search/all_5f.js | 4 + search/all_61.html | 26 + search/all_61.js | 11 + search/all_62.html | 26 + search/all_62.js | 10 + search/all_63.html | 26 + search/all_63.js | 20 + search/all_64.html | 26 + search/all_64.js | 25 + search/all_65.html | 26 + search/all_65.js | 10 + search/all_66.html | 26 + search/all_66.js | 11 + search/all_67.html | 26 + search/all_67.js | 26 + search/all_69.html | 26 + search/all_69.js | 21 + search/all_6c.html | 26 + search/all_6c.js | 9 + search/all_6d.html | 26 + search/all_6d.js | 27 + search/all_6e.html | 26 + search/all_6e.js | 16 + search/all_6f.html | 26 + search/all_6f.js | 19 + search/all_70.html | 26 + search/all_70.js | 22 + search/all_72.html | 26 + search/all_72.js | 17 + search/all_73.html | 26 + search/all_73.js | 63 + search/all_74.html | 26 + search/all_74.js | 9 + search/all_75.html | 26 + search/all_75.js | 7 + search/all_76.html | 26 + search/all_76.js | 13 + search/all_77.html | 26 + search/all_77.js | 6 + search/all_7a.html | 26 + search/all_7a.js | 4 + search/all_7e.html | 26 + search/all_7e.js | 5 + search/classes_62.html | 26 + search/classes_62.js | 5 + search/classes_64.html | 26 + search/classes_64.js | 8 + search/classes_65.html | 26 + search/classes_65.js | 4 + search/classes_66.html | 26 + search/classes_66.js | 4 + search/classes_69.html | 26 + search/classes_69.js | 5 + search/classes_6c.html | 26 + search/classes_6c.js | 4 + search/classes_6d.html | 26 + search/classes_6d.js | 5 + search/classes_70.html | 26 + search/classes_70.js | 8 + search/classes_72.html | 26 + search/classes_72.js | 4 + search/classes_73.html | 26 + search/classes_73.js | 17 + search/classes_75.html | 26 + search/classes_75.js | 4 + search/close.png | Bin 0 -> 273 bytes search/files_62.html | 26 + search/files_62.js | 4 + search/files_63.html | 26 + search/files_63.js | 5 + search/files_64.html | 26 + search/files_64.js | 5 + search/files_69.html | 26 + search/files_69.js | 4 + search/files_6d.html | 26 + search/files_6d.js | 5 + search/files_70.html | 26 + search/files_70.js | 4 + search/files_72.html | 26 + search/files_72.js | 4 + search/files_73.html | 26 + search/files_73.js | 14 + search/files_75.html | 26 + search/files_75.js | 5 + search/functions_5f.html | 26 + search/functions_5f.js | 4 + search/functions_61.html | 26 + search/functions_61.js | 10 + search/functions_62.html | 26 + search/functions_62.js | 6 + search/functions_63.html | 26 + search/functions_63.js | 8 + search/functions_64.html | 26 + search/functions_64.js | 11 + search/functions_65.html | 26 + search/functions_65.js | 6 + search/functions_66.html | 26 + search/functions_66.js | 5 + search/functions_67.html | 26 + search/functions_67.js | 25 + search/functions_69.html | 26 + search/functions_69.js | 6 + search/functions_6c.html | 26 + search/functions_6c.js | 6 + search/functions_6d.html | 26 + search/functions_6d.js | 10 + search/functions_6e.html | 26 + search/functions_6e.js | 6 + search/functions_6f.html | 26 + search/functions_6f.js | 13 + search/functions_70.html | 26 + search/functions_70.js | 11 + search/functions_72.html | 26 + search/functions_72.js | 8 + search/functions_73.html | 26 + search/functions_73.js | 25 + search/functions_74.html | 26 + search/functions_74.js | 6 + search/functions_75.html | 26 + search/functions_75.js | 4 + search/functions_77.html | 26 + search/functions_77.js | 6 + search/functions_7a.html | 26 + search/functions_7a.js | 4 + search/functions_7e.html | 26 + search/functions_7e.js | 5 + search/mag_sel.png | Bin 0 -> 563 bytes search/namespaces_73.html | 26 + search/namespaces_73.js | 13 + search/nomatches.html | 12 + search/pages_73.html | 26 + search/pages_73.js | 4 + search/search.css | 271 +++ search/search.js | 809 +++++++ search/search_l.png | Bin 0 -> 604 bytes search/search_m.png | Bin 0 -> 158 bytes search/search_r.png | Bin 0 -> 612 bytes search/typedefs_63.html | 26 + search/typedefs_63.js | 5 + search/typedefs_65.html | 26 + search/typedefs_65.js | 4 + search/typedefs_70.html | 26 + search/typedefs_70.js | 4 + search/typedefs_73.html | 26 + search/typedefs_73.js | 5 + search/typedefs_75.html | 26 + search/typedefs_75.js | 4 + search/typedefs_76.html | 26 + search/typedefs_76.js | 4 + search/variables_5f.html | 26 + search/variables_5f.js | 4 + search/variables_61.html | 26 + search/variables_61.js | 4 + search/variables_62.html | 26 + search/variables_62.js | 5 + search/variables_63.html | 26 + search/variables_63.js | 11 + search/variables_64.html | 26 + search/variables_64.js | 11 + search/variables_65.html | 26 + search/variables_65.js | 5 + search/variables_66.html | 26 + search/variables_66.js | 8 + search/variables_67.html | 26 + search/variables_67.js | 4 + search/variables_69.html | 26 + search/variables_69.js | 15 + search/variables_6c.html | 26 + search/variables_6c.js | 5 + search/variables_6d.html | 26 + search/variables_6d.js | 16 + search/variables_6e.html | 26 + search/variables_6e.js | 13 + search/variables_6f.html | 26 + search/variables_6f.js | 9 + search/variables_70.html | 26 + search/variables_70.js | 9 + search/variables_72.html | 26 + search/variables_72.js | 10 + search/variables_73.html | 26 + search/variables_73.js | 7 + search/variables_74.html | 26 + search/variables_74.js | 6 + search/variables_76.html | 26 + search/variables_76.js | 12 + structPartitionWriteResult-members.html | 108 + structPartitionWriteResult.html | 207 ++ structSpmvEqual-members.html | 102 + structSpmvEqual.html | 145 ++ structSpmvHash-members.html | 102 + structSpmvHash.html | 135 ++ structspark_1_1spmv_1_1Partition-members.html | 118 ++ structspark_1_1spmv_1_1Partition.html | 313 +++ ...park_1_1spmv_1_1indptr__value-members.html | 109 + structspark_1_1spmv_1_1indptr__value.html | 209 ++ structspark_1_1utils_1_1Range-members.html | 115 + structspark_1_1utils_1_1Range.html | 345 +++ sync_off.png | Bin 0 -> 853 bytes sync_on.png | Bin 0 -> 845 bytes tab_a.png | Bin 0 -> 142 bytes tab_b.png | Bin 0 -> 169 bytes tab_h.png | Bin 0 -> 177 bytes tab_s.png | Bin 0 -> 184 bytes tabs.css | 60 + 407 files changed, 37942 insertions(+), 1 deletion(-) create mode 100644 BiConjugateGradient_8cpp.html create mode 100644 ConjugateGradient_8cpp.html create mode 100644 Converters_8hpp.html create mode 100644 Converters_8hpp_source.html create mode 100644 Dse_8cpp.html create mode 100644 Dse_8hpp.html create mode 100644 Dse_8hpp_source.html create mode 100644 Io_8hpp.html create mode 100644 Io_8hpp_source.html create mode 100644 Model_8hpp.html create mode 100644 Model_8hpp_source.html create mode 100644 ParallelCsrReadControl_8java.html create mode 100644 README_8md.html create mode 100644 SimpleSpmv_8hpp.html create mode 100644 SimpleSpmv_8hpp_source.html create mode 100644 SparseLinearSolvers_8cpp.html create mode 100644 SparseLinearSolvers_8hpp.html create mode 100644 SparseLinearSolvers_8hpp_source.html create mode 100644 SparseMatrix_8hpp.html create mode 100644 SparseMatrix_8hpp_source.html create mode 100644 SpmvDeviceInterfaceMock_8cpp.html create mode 100644 SpmvDeviceInterface_8cpp.html create mode 100644 SpmvDeviceInterface_8h.html create mode 100644 SpmvDeviceInterface_8h_source.html create mode 100644 SpmvKernel_8java.html create mode 100644 SpmvManager_8java.html create mode 100644 Spmv_8cpp.html create mode 100644 Spmv_8hpp.html create mode 100644 Spmv_8hpp_source.html create mode 100644 UserInput_8hpp.html create mode 100644 UserInput_8hpp_source.html create mode 100644 Utils_8hpp.html create mode 100644 Utils_8hpp_source.html create mode 100644 annotated.html create mode 100644 bc_s.png create mode 100644 bdwn.png create mode 100644 classBramSpmvReductionKernel-members.html create mode 100644 classBramSpmvReductionKernel.html create mode 100644 classBramSpmvReductionKernel.png create mode 100644 classDramSpmvReductionKernel-members.html create mode 100644 classDramSpmvReductionKernel.html create mode 100644 classDramSpmvReductionKernel.png create mode 100644 classPaddingKernel-members.html create mode 100644 classPaddingKernel.html create mode 100644 classPaddingKernel.png create mode 100644 classParallelCsrReadControl-members.html create mode 100644 classParallelCsrReadControl.html create mode 100644 classParallelCsrReadControl.png create mode 100644 classSpmvCacheKernel-members.html create mode 100644 classSpmvCacheKernel.html create mode 100644 classSpmvCacheKernel.png create mode 100644 classSpmvKernel-members.html create mode 100644 classSpmvKernel.html create mode 100644 classSpmvKernel.png create mode 100644 classSpmvManager-members.html create mode 100644 classSpmvManager.html create mode 100644 classSpmvManager.png create mode 100644 classSpmvReductionKernel-members.html create mode 100644 classSpmvReductionKernel.html create mode 100644 classSpmvReductionKernel.png create mode 100644 classUnpaddingKernel-members.html create mode 100644 classUnpaddingKernel.html create mode 100644 classUnpaddingKernel.png create mode 100644 classes.html create mode 100644 classspark_1_1dse_1_1Benchmark-members.html create mode 100644 classspark_1_1dse_1_1Benchmark.html create mode 100644 classspark_1_1dse_1_1DseParameters-members.html create mode 100644 classspark_1_1dse_1_1DseParameters.html create mode 100644 classspark_1_1dse_1_1DseResult-members.html create mode 100644 classspark_1_1dse_1_1DseResult.html create mode 100644 classspark_1_1dse_1_1SparkDse-members.html create mode 100644 classspark_1_1dse_1_1SparkDse.html create mode 100644 classspark_1_1io_1_1MmReader-members.html create mode 100644 classspark_1_1io_1_1MmReader.html create mode 100644 classspark_1_1model_1_1ImplementationParameters-members.html create mode 100644 classspark_1_1model_1_1ImplementationParameters.html create mode 100644 classspark_1_1model_1_1LogicResourceUsage-members.html create mode 100644 classspark_1_1model_1_1LogicResourceUsage.html create mode 100644 classspark_1_1sparse_1_1SparkCooMatrix-members.html create mode 100644 classspark_1_1sparse_1_1SparkCooMatrix.html create mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html create mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html create mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.png create mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeCgSolver-members.html create mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html create mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.png create mode 100644 classspark_1_1sparse__linear__solvers_1_1EigenSolver-members.html create mode 100644 classspark_1_1sparse__linear__solvers_1_1EigenSolver.html create mode 100644 classspark_1_1sparse__linear__solvers_1_1EigenSolver.png create mode 100644 classspark_1_1sparse__linear__solvers_1_1Solver-members.html create mode 100644 classspark_1_1sparse__linear__solvers_1_1Solver.html create mode 100644 classspark_1_1sparse__linear__solvers_1_1Solver.png create mode 100644 classspark_1_1spmv_1_1FstSpmvArchitecture-members.html create mode 100644 classspark_1_1spmv_1_1FstSpmvArchitecture.html create mode 100644 classspark_1_1spmv_1_1FstSpmvArchitecture.png create mode 100644 classspark_1_1spmv_1_1PrefetchingArchitecture-members.html create mode 100644 classspark_1_1spmv_1_1PrefetchingArchitecture.html create mode 100644 classspark_1_1spmv_1_1PrefetchingArchitecture.png create mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html create mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitecture.html create mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitecture.png create mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html create mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html create mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.png create mode 100644 classspark_1_1spmv_1_1SkipEmptyRowsArchitecture-members.html create mode 100644 classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html create mode 100644 classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.png create mode 100644 classspark_1_1spmv_1_1SpmvArchitecture-members.html create mode 100644 classspark_1_1spmv_1_1SpmvArchitecture.html create mode 100644 classspark_1_1spmv_1_1SpmvArchitecture.png create mode 100644 classspark_1_1spmv_1_1SpmvArchitectureSpace-members.html create mode 100644 classspark_1_1spmv_1_1SpmvArchitectureSpace.html create mode 100644 classspark_1_1spmv_1_1SpmvArchitectureSpace.png create mode 100644 closed.png create mode 100644 dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html create mode 100644 dir_16dc92632bab467dc50b01bd02b3341a.html create mode 100644 dir_376f1c4177942cba0305052d5eaaa828.html create mode 100644 dir_55daf1889a6971c13f7bc2c2ab706314.html create mode 100644 dir_68267d1309a1af8e8297ef4c3efbcdba.html create mode 100644 dir_6d2d4b597c0c9fbf0dac624a287f2dec.html create mode 100644 dir_817fd82c291ca2ce5189d4384ec10041.html create mode 100644 dir_bcdd1c0198fc998763f86146a43d3c64.html create mode 100644 dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 dir_d7c482895ed73b33d89221a7692a7a0a.html create mode 100644 dir_d8b7011e84264c6173d8b11c4e58b2d3.html create mode 100644 dir_e1e695598025e13caf4d9e666dd56479.html create mode 100644 doxygen.conf create mode 100644 doxygen.css create mode 100644 doxygen.png create mode 100644 dynsections.js create mode 100644 enumParallelCsrReadControl_1_1Mode-members.html create mode 100644 enumParallelCsrReadControl_1_1Mode.html create mode 100644 files.html create mode 100644 ftv2blank.png create mode 100644 ftv2cl.png create mode 100644 ftv2doc.png create mode 100644 ftv2folderclosed.png create mode 100644 ftv2folderopen.png create mode 100644 ftv2lastnode.png create mode 100644 ftv2link.png create mode 100644 ftv2mlastnode.png create mode 100644 ftv2mnode.png create mode 100644 ftv2mo.png create mode 100644 ftv2node.png create mode 100644 ftv2ns.png create mode 100644 ftv2plastnode.png create mode 100644 ftv2pnode.png create mode 100644 ftv2splitbar.png create mode 100644 ftv2vertline.png create mode 100644 functions.html create mode 100644 functions_0x62.html create mode 100644 functions_0x63.html create mode 100644 functions_0x64.html create mode 100644 functions_0x65.html create mode 100644 functions_0x66.html create mode 100644 functions_0x67.html create mode 100644 functions_0x69.html create mode 100644 functions_0x6c.html create mode 100644 functions_0x6d.html create mode 100644 functions_0x6e.html create mode 100644 functions_0x6f.html create mode 100644 functions_0x70.html create mode 100644 functions_0x72.html create mode 100644 functions_0x73.html create mode 100644 functions_0x74.html create mode 100644 functions_0x75.html create mode 100644 functions_0x76.html create mode 100644 functions_0x77.html create mode 100644 functions_0x7a.html create mode 100644 functions_0x7e.html create mode 100644 functions_func.html create mode 100644 functions_type.html create mode 100644 functions_vars.html create mode 100644 globals.html create mode 100644 globals_func.html create mode 100644 globals_type.html create mode 100644 globals_vars.html create mode 100644 hierarchy.html create mode 100644 jquery.js create mode 100644 main_8cpp.html create mode 100644 md_README.html create mode 100644 namespacemembers.html create mode 100644 namespacemembers_func.html create mode 100644 namespacemembers_type.html create mode 100644 namespacemembers_vars.html create mode 100644 namespaces.html create mode 100644 namespacespark.html create mode 100644 namespacespark_1_1converters.html create mode 100644 namespacespark_1_1dse.html create mode 100644 namespacespark_1_1io.html create mode 100644 namespacespark_1_1model.html create mode 100644 namespacespark_1_1sparse.html create mode 100644 namespacespark_1_1sparse__linear__solvers.html create mode 100644 namespacespark_1_1spmv.html create mode 100644 namespacespark_1_1userio.html create mode 100644 namespacespark_1_1utils.html create mode 100644 nav_f.png create mode 100644 nav_g.png create mode 100644 nav_h.png create mode 100644 open.png create mode 100644 pages.html create mode 100644 search/all_5f.html create mode 100644 search/all_5f.js create mode 100644 search/all_61.html create mode 100644 search/all_61.js create mode 100644 search/all_62.html create mode 100644 search/all_62.js create mode 100644 search/all_63.html create mode 100644 search/all_63.js create mode 100644 search/all_64.html create mode 100644 search/all_64.js create mode 100644 search/all_65.html create mode 100644 search/all_65.js create mode 100644 search/all_66.html create mode 100644 search/all_66.js create mode 100644 search/all_67.html create mode 100644 search/all_67.js create mode 100644 search/all_69.html create mode 100644 search/all_69.js create mode 100644 search/all_6c.html create mode 100644 search/all_6c.js create mode 100644 search/all_6d.html create mode 100644 search/all_6d.js create mode 100644 search/all_6e.html create mode 100644 search/all_6e.js create mode 100644 search/all_6f.html create mode 100644 search/all_6f.js create mode 100644 search/all_70.html create mode 100644 search/all_70.js create mode 100644 search/all_72.html create mode 100644 search/all_72.js create mode 100644 search/all_73.html create mode 100644 search/all_73.js create mode 100644 search/all_74.html create mode 100644 search/all_74.js create mode 100644 search/all_75.html create mode 100644 search/all_75.js create mode 100644 search/all_76.html create mode 100644 search/all_76.js create mode 100644 search/all_77.html create mode 100644 search/all_77.js create mode 100644 search/all_7a.html create mode 100644 search/all_7a.js create mode 100644 search/all_7e.html create mode 100644 search/all_7e.js create mode 100644 search/classes_62.html create mode 100644 search/classes_62.js create mode 100644 search/classes_64.html create mode 100644 search/classes_64.js create mode 100644 search/classes_65.html create mode 100644 search/classes_65.js create mode 100644 search/classes_66.html create mode 100644 search/classes_66.js create mode 100644 search/classes_69.html create mode 100644 search/classes_69.js create mode 100644 search/classes_6c.html create mode 100644 search/classes_6c.js create mode 100644 search/classes_6d.html create mode 100644 search/classes_6d.js create mode 100644 search/classes_70.html create mode 100644 search/classes_70.js create mode 100644 search/classes_72.html create mode 100644 search/classes_72.js create mode 100644 search/classes_73.html create mode 100644 search/classes_73.js create mode 100644 search/classes_75.html create mode 100644 search/classes_75.js create mode 100644 search/close.png create mode 100644 search/files_62.html create mode 100644 search/files_62.js create mode 100644 search/files_63.html create mode 100644 search/files_63.js create mode 100644 search/files_64.html create mode 100644 search/files_64.js create mode 100644 search/files_69.html create mode 100644 search/files_69.js create mode 100644 search/files_6d.html create mode 100644 search/files_6d.js create mode 100644 search/files_70.html create mode 100644 search/files_70.js create mode 100644 search/files_72.html create mode 100644 search/files_72.js create mode 100644 search/files_73.html create mode 100644 search/files_73.js create mode 100644 search/files_75.html create mode 100644 search/files_75.js create mode 100644 search/functions_5f.html create mode 100644 search/functions_5f.js create mode 100644 search/functions_61.html create mode 100644 search/functions_61.js create mode 100644 search/functions_62.html create mode 100644 search/functions_62.js create mode 100644 search/functions_63.html create mode 100644 search/functions_63.js create mode 100644 search/functions_64.html create mode 100644 search/functions_64.js create mode 100644 search/functions_65.html create mode 100644 search/functions_65.js create mode 100644 search/functions_66.html create mode 100644 search/functions_66.js create mode 100644 search/functions_67.html create mode 100644 search/functions_67.js create mode 100644 search/functions_69.html create mode 100644 search/functions_69.js create mode 100644 search/functions_6c.html create mode 100644 search/functions_6c.js create mode 100644 search/functions_6d.html create mode 100644 search/functions_6d.js create mode 100644 search/functions_6e.html create mode 100644 search/functions_6e.js create mode 100644 search/functions_6f.html create mode 100644 search/functions_6f.js create mode 100644 search/functions_70.html create mode 100644 search/functions_70.js create mode 100644 search/functions_72.html create mode 100644 search/functions_72.js create mode 100644 search/functions_73.html create mode 100644 search/functions_73.js create mode 100644 search/functions_74.html create mode 100644 search/functions_74.js create mode 100644 search/functions_75.html create mode 100644 search/functions_75.js create mode 100644 search/functions_77.html create mode 100644 search/functions_77.js create mode 100644 search/functions_7a.html create mode 100644 search/functions_7a.js create mode 100644 search/functions_7e.html create mode 100644 search/functions_7e.js create mode 100644 search/mag_sel.png create mode 100644 search/namespaces_73.html create mode 100644 search/namespaces_73.js create mode 100644 search/nomatches.html create mode 100644 search/pages_73.html create mode 100644 search/pages_73.js create mode 100644 search/search.css create mode 100644 search/search.js create mode 100644 search/search_l.png create mode 100644 search/search_m.png create mode 100644 search/search_r.png create mode 100644 search/typedefs_63.html create mode 100644 search/typedefs_63.js create mode 100644 search/typedefs_65.html create mode 100644 search/typedefs_65.js create mode 100644 search/typedefs_70.html create mode 100644 search/typedefs_70.js create mode 100644 search/typedefs_73.html create mode 100644 search/typedefs_73.js create mode 100644 search/typedefs_75.html create mode 100644 search/typedefs_75.js create mode 100644 search/typedefs_76.html create mode 100644 search/typedefs_76.js create mode 100644 search/variables_5f.html create mode 100644 search/variables_5f.js create mode 100644 search/variables_61.html create mode 100644 search/variables_61.js create mode 100644 search/variables_62.html create mode 100644 search/variables_62.js create mode 100644 search/variables_63.html create mode 100644 search/variables_63.js create mode 100644 search/variables_64.html create mode 100644 search/variables_64.js create mode 100644 search/variables_65.html create mode 100644 search/variables_65.js create mode 100644 search/variables_66.html create mode 100644 search/variables_66.js create mode 100644 search/variables_67.html create mode 100644 search/variables_67.js create mode 100644 search/variables_69.html create mode 100644 search/variables_69.js create mode 100644 search/variables_6c.html create mode 100644 search/variables_6c.js create mode 100644 search/variables_6d.html create mode 100644 search/variables_6d.js create mode 100644 search/variables_6e.html create mode 100644 search/variables_6e.js create mode 100644 search/variables_6f.html create mode 100644 search/variables_6f.js create mode 100644 search/variables_70.html create mode 100644 search/variables_70.js create mode 100644 search/variables_72.html create mode 100644 search/variables_72.js create mode 100644 search/variables_73.html create mode 100644 search/variables_73.js create mode 100644 search/variables_74.html create mode 100644 search/variables_74.js create mode 100644 search/variables_76.html create mode 100644 search/variables_76.js create mode 100644 structPartitionWriteResult-members.html create mode 100644 structPartitionWriteResult.html create mode 100644 structSpmvEqual-members.html create mode 100644 structSpmvEqual.html create mode 100644 structSpmvHash-members.html create mode 100644 structSpmvHash.html create mode 100644 structspark_1_1spmv_1_1Partition-members.html create mode 100644 structspark_1_1spmv_1_1Partition.html create mode 100644 structspark_1_1spmv_1_1indptr__value-members.html create mode 100644 structspark_1_1spmv_1_1indptr__value.html create mode 100644 structspark_1_1utils_1_1Range-members.html create mode 100644 structspark_1_1utils_1_1Range.html create mode 100644 sync_off.png create mode 100644 sync_on.png create mode 100644 tab_a.png create mode 100644 tab_b.png create mode 100644 tab_h.png create mode 100644 tab_s.png create mode 100644 tabs.css diff --git a/BiConjugateGradient_8cpp.html b/BiConjugateGradient_8cpp.html new file mode 100644 index 0000000..2adb57a --- /dev/null +++ b/BiConjugateGradient_8cpp.html @@ -0,0 +1,215 @@ + + + + + + +Spark: src/bicg/src/BiConjugateGradient.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
BiConjugateGradient.cpp File Reference
+
+
+
#include <Spark/SparseLinearSolvers.hpp>
+#include <Spark/Spmv.hpp>
+#include <Spark/SimpleSpmv.hpp>
+#include <iostream>
+#include <stdexcept>
+
+ + + +

+Typedefs

using Vd = Eigen::VectorXd
 
+ + + + + + + +

+Functions

Vd cpuReferenceUnprecon (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd cpuReferencePrecon (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd dfeImplUnprecon (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
+

Typedef Documentation

+ +
+
+ + + + +
using Vd = Eigen::VectorXd
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd cpuReferencePrecon (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Vd cpuReferenceUnprecon (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd dfeImplUnprecon (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+
+ + + + diff --git a/ConjugateGradient_8cpp.html b/ConjugateGradient_8cpp.html new file mode 100644 index 0000000..ca4b931 --- /dev/null +++ b/ConjugateGradient_8cpp.html @@ -0,0 +1,104 @@ + + + + + + +Spark: src/cg/src/ConjugateGradient.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ConjugateGradient.cpp File Reference
+
+
+
#include <Eigen/Sparse>
+#include <Spark/SparseLinearSolvers.hpp>
+#include <Maxfiles.h>
+#include <iostream>
+
+ + + + diff --git a/Converters_8hpp.html b/Converters_8hpp.html new file mode 100644 index 0000000..29e7e0b --- /dev/null +++ b/Converters_8hpp.html @@ -0,0 +1,132 @@ + + + + + + +Spark: include/Spark/Converters.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Converters.hpp File Reference
+
+
+
#include <stdexcept>
+#include <memory>
+#include <Spark/SparseMatrix.hpp>
+#include <Eigen/Sparse>
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

namespace  spark
 
namespace  spark::converters
 
+ + + +

+Typedefs

using spark::converters::EigenSparseMatrix = std::unique_ptr< Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >>
 
+ + + + + + + +

+Functions

EigenSparseMatrix spark::converters::tripletToEigen (spark::sparse::SparkCooMatrix< double > mat)
 
Eigen::VectorXd spark::converters::stdvectorToEigen (std::vector< double > v)
 
std::vector< double > spark::converters::eigenVectorToStdVector (const Eigen::VectorXd &v)
 
+
+ + + + diff --git a/Converters_8hpp_source.html b/Converters_8hpp_source.html new file mode 100644 index 0000000..6daebac --- /dev/null +++ b/Converters_8hpp_source.html @@ -0,0 +1,149 @@ + + + + + + +Spark: include/Spark/Converters.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Converters.hpp
+
+
+Go to the documentation of this file.
1 #ifndef CONVERTERS_HPP_QNX3RWUJ
+
2 #define CONVERTERS_HPP_QNX3RWUJ
+
3 
+
4 #include <stdexcept>
+
5 #include <memory>
+
6 
+
7 #include <Spark/SparseMatrix.hpp>
+
8 #include <Eigen/Sparse>
+
9 #include <Spark/SparseMatrix.hpp>
+
10 
+
11 namespace spark {
+
12  namespace converters {
+
13 
+
14  using EigenSparseMatrix = std::unique_ptr<Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>>;
+
15 
+
16  // convert a Spark COO matrix to an Eigen Sparse Matrix
+ +
18  auto coo = mat.data;
+
19  EigenSparseMatrix m(new Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>(mat.n, mat.m));
+
20  std::vector<Eigen::Triplet<double>> trips;
+
21  for (size_t i = 0; i < coo.size(); i++)
+
22  trips.push_back(
+
23  Eigen::Triplet<double>(
+
24  std::get<0>(coo[i]),
+
25  std::get<1>(coo[i]),
+
26  std::get<2>(coo[i])));
+
27  m->setFromTriplets(trips.begin(), trips.end());
+
28  return m;
+
29  }
+
30 
+
31  inline Eigen::VectorXd stdvectorToEigen(std::vector<double> v) {
+
32  Eigen::VectorXd m(v.size());
+
33  for (size_t i = 0; i < v.size(); i++)
+
34  m[i] = v[i];
+
35  return m;
+
36  }
+
37 
+
38  inline std::vector<double> eigenVectorToStdVector(const Eigen::VectorXd& v) {
+
39  std::vector<double> m(v.size());
+
40  for (int i = 0; i < v.size(); i++)
+
41  m[i] = v[i];
+
42  return m;
+
43  }
+
44 
+
45  }
+
46 }
+
47 
+
48 
+
49 #endif /* end of include guard: CONVERTERS_HPP_QNX3RWUJ */
+
+ + + + diff --git a/Dse_8cpp.html b/Dse_8cpp.html new file mode 100644 index 0000000..2919efc --- /dev/null +++ b/Dse_8cpp.html @@ -0,0 +1,187 @@ + + + + + + +Spark: src/dse/Dse.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Dse.cpp File Reference
+
+
+
#include <iostream>
+#include <Spark/Dse.hpp>
+#include <unordered_map>
+#include <Spark/Converters.hpp>
+
+ + + + + +

+Classes

struct  SpmvHash
 
struct  SpmvEqual
 
+ + + + + +

+Functions

std::shared_ptr< SpmvArchitecture > better (std::shared_ptr< SpmvArchitecture > a1, std::shared_ptr< SpmvArchitecture > a2)
 
std::shared_ptr< SpmvArchitecture > dse_run (std::string basename, SpmvArchitectureSpace *af, const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat, const DseParameters &params)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::shared_ptr<SpmvArchitecture> better (std::shared_ptr< SpmvArchitecture > a1,
std::shared_ptr< SpmvArchitecture > a2 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::shared_ptr<SpmvArchitecture> dse_run (std::string basename,
SpmvArchitectureSpace * af,
const Eigen::SparseMatrix< double, Eigen::RowMajor > & mat,
const DseParameters & params 
)
+
+ +
+
+
+ + + + diff --git a/Dse_8hpp.html b/Dse_8hpp.html new file mode 100644 index 0000000..c27ab03 --- /dev/null +++ b/Dse_8hpp.html @@ -0,0 +1,140 @@ + + + + + + +Spark: include/Spark/Dse.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Dse.hpp File Reference
+
+
+
#include <memory>
+#include <Spark/Spmv.hpp>
+#include <Spark/SimpleSpmv.hpp>
+#include <Spark/Utils.hpp>
+#include <Spark/Io.hpp>
+#include <chrono>
+#include <stdexcept>
+#include <sstream>
+
+

Go to the source code of this file.

+ + + + + + + + + + +

+Classes

class  spark::dse::Benchmark
 
class  spark::dse::DseParameters
 
class  spark::dse::DseResult
 
class  spark::dse::SparkDse
 
+ + + + + +

+Namespaces

namespace  spark
 
namespace  spark::dse
 
+ + + + + +

+Functions

std::ostream & spark::dse::operator<< (std::ostream &s, Benchmark &b)
 
std::ostream & spark::dse::operator<< (std::ostream &s, DseParameters &d)
 
+
+ + + + diff --git a/Dse_8hpp_source.html b/Dse_8hpp_source.html new file mode 100644 index 0000000..5b25fbf --- /dev/null +++ b/Dse_8hpp_source.html @@ -0,0 +1,188 @@ + + + + + + +Spark: include/Spark/Dse.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Dse.hpp
+
+
+Go to the documentation of this file.
1 #ifndef DSE_H
+
2 #define DSE_H
+
3 
+
4 #include <memory>
+
5 #include <Spark/Spmv.hpp>
+
6 #include <Spark/SimpleSpmv.hpp>
+
7 #include <Spark/Utils.hpp>
+
8 #include <Spark/Io.hpp>
+
9 #include <chrono>
+
10 #include <stdexcept>
+
11 #include <sstream>
+
12 
+
13 namespace spark {
+
14  namespace dse {
+
15 
+
16  // a benchmark to use for the DSE
+
17  class Benchmark {
+
18  std::vector<std::string> paths;
+
19  public:
+
20  std::string get_matrix_path(int id) const {
+
21  if (id < paths.size())
+
22  return paths[id];
+
23  std::stringstream ss;
+
24  ss << "Benchmark::Index out of range " << id;
+
25  throw std::invalid_argument(ss.str());
+
26  }
+
27 
+
28  void add_matrix_path(std::string path) {
+
29  paths.push_back(path);
+
30  }
+
31 
+
32  int get_benchmark_size() const {
+
33  return paths.size();
+
34  }
+
35  };
+
36 
+
37  inline std::ostream& operator<<(std::ostream& s, Benchmark& b) {
+
38  s << "Benchmark(" << std::endl;
+
39  for (int i = 0; i < b.get_benchmark_size(); i++)
+
40  s << " " << b.get_matrix_path(i) << std::endl;
+
41  s << ")" << std::endl;
+
42  return s;
+
43  }
+
44 
+
45  // the parameters and ranges to use for DSE
+
46  class DseParameters {
+
47  public:
+
48  bool gflopsOnly;
+ + + +
52  };
+
53 
+
54  inline std::ostream& operator<<(std::ostream& s, DseParameters& d) {
+
55  s << "DseParams(" << std::endl;
+
56  s << " numPipes = " << d.numPipesRange << std::endl;
+
57  s << " inputWidth = " << d.inputWidthRange << std::endl;
+
58  s << " cacheSize = " << d.cacheSizeRange << std::endl;
+
59  s << ")" << std::endl;
+
60  return s;
+
61  }
+
62 
+
63  class DseResult {
+
64  public:
+
65  std::shared_ptr<spark::spmv::SpmvArchitecture> bestArchitecture;
+
66  std::vector<std::string> matrices;
+
67 
+
68  DseResult(std::string path, std::shared_ptr<spark::spmv::SpmvArchitecture> arch) {
+
69  matrices.push_back(path);
+
70  bestArchitecture = arch;
+
71  }
+
72  DseResult(std::shared_ptr<spark::spmv::SpmvArchitecture> arch) {
+
73  bestArchitecture = arch;
+
74  }
+
75  };
+
76 
+
77  class SparkDse {
+
78  public:
+
79  SparkDse() {}
+
80  // returns the best architecture
+
81  std::vector<DseResult> run (
+
82  const Benchmark& benchmark,
+
83  const DseParameters& dseParams);
+
84  };
+
85  }
+
86 }
+
87 
+
88 #endif /* end of include guard: DSE_H */
+
+ + + + diff --git a/Io_8hpp.html b/Io_8hpp.html new file mode 100644 index 0000000..767cc61 --- /dev/null +++ b/Io_8hpp.html @@ -0,0 +1,127 @@ + + + + + + +Spark: include/Spark/Io.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Io.hpp File Reference
+
+
+
#include <vector>
+#include <utility>
+#include <string>
+#include <sstream>
+#include <stdexcept>
+#include <fstream>
+#include <chrono>
+#include <Spark/SparseMatrix.hpp>
+#include <dfesnippets/Timing.hpp>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  spark::io::MmReader< value_type >
 
+ + + + + +

+Namespaces

namespace  spark
 
namespace  spark::io
 
+
+ + + + diff --git a/Io_8hpp_source.html b/Io_8hpp_source.html new file mode 100644 index 0000000..0dd63ac --- /dev/null +++ b/Io_8hpp_source.html @@ -0,0 +1,277 @@ + + + + + + +Spark: include/Spark/Io.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Io.hpp
+
+
+Go to the documentation of this file.
1 #ifndef IO_HPP_QPBO8W0X
+
2 #define IO_HPP_QPBO8W0X
+
3 
+
4 #include <vector>
+
5 #include <utility>
+
6 #include <string>
+
7 #include <sstream>
+
8 #include <stdexcept>
+
9 #include <fstream>
+
10 #include <chrono>
+
11 
+
12 #include <Spark/SparseMatrix.hpp>
+
13 
+
14 #include <dfesnippets/Timing.hpp>
+
15 
+
16 namespace spark {
+
17  namespace io {
+
18 
+
19  template<typename value_type>
+
20  class MmReader {
+
21 
+
22  bool sparse = false, symmetric = false, matrix = false;
+
23  int ncols, nrows, nnzs = -1;
+
24 
+ + +
27 
+
28  typename SparseMatrix::CoordType mmparse(const std::string line) {
+
29  std::stringstream ss{line};
+
30  int x, y;
+
31  value_type val;
+
32  ss >> x >> y >> val;
+
33  return std::make_tuple(x - 1, y - 1, val);
+
34  }
+
35 
+
36  void parseHeader(std::string line) {
+
37  // is this dense / sparse ?
+
38  sparse = true;
+
39  if (line.find("coordinate") != std::string::npos) {
+
40  sparse = true;
+
41  } else if (line.find("array") != std::string::npos) {
+
42  sparse = false;
+
43  } else {
+
44  throw std::invalid_argument("Cannot parse header, requires either 'coordinate' or 'matrix' type");
+
45  }
+
46 
+
47  if (line[0] =='%' && line[1] == '%') {
+
48  if (line.find("matrix") != std::string::npos) {
+
49  symmetric = line.find("symmetric") != std::string::npos;
+
50  } else
+
51  throw std::invalid_argument("Unsupported file type: " + line);
+
52  }
+
53  }
+
54 
+
55  bool parseHeader(bool pprint=false) {
+
56  std::string line;
+
57  if (!getline(*f, line))
+
58  throw std::invalid_argument("File " + path + " is empty");
+
59 
+
60  parseHeader(line);
+
61 
+
62  // skip comments
+
63  while (getline(*f, line) && line[0] == '%')
+
64  continue;
+
65 
+
66  // read the dimensions
+
67  std::stringstream ss;
+
68  ss << line;
+
69  ss >> nrows >> ncols;
+
70  if (sparse)
+
71  ss >> nnzs;
+
72  matrix = ncols > 1;
+
73 
+
74  if (pprint) {
+
75  std::cout << "sparse: " << sparse << std::endl;
+
76  std::cout << "symmetric: " << symmetric << std::endl;
+
77  std::cout << "matrix: " << matrix << std::endl;
+
78  std::cout << "ncols: " << ncols << std::endl;
+
79  std::cout << "nrows: " << nrows << std::endl;
+
80  std::cout << "nnzs: " << nnzs << std::endl;
+
81  }
+
82  }
+
83 
+
84  std::ifstream* f;
+
85  std::string path;
+
86 
+
87  public:
+
88 
+
89  MmReader(std::string _path) : path(_path) {
+
90  f = new std::ifstream{_path};
+
91  if (!f->is_open())
+
92  throw std::invalid_argument("Could not open file path " + path);
+
93  }
+
94 
+
95  virtual ~MmReader() {
+
96  delete f;
+
97  }
+
98 
+
99  std::vector<double> readVector() {
+
100  parseHeader();
+
101  if (matrix)
+
102  throw std::invalid_argument("Object has > 1 columns ==> Use readMatrix");
+
103  if (sparse)
+
104  throw std::invalid_argument("Sparse vectors not supported");
+
105 
+
106  std::cout << "Reading vector" << std::endl;
+
107 
+
108  std::vector<std::tuple<int, double>> tpls;
+
109  double val;
+
110 
+
111  std::vector<double> res;
+
112  while (*f >> val )
+
113  res.push_back(val);
+
114 
+
115  //tpls.push_back(std::make_tuple(i, val));
+
116  //std::sort(tpls.begin(), tpls.end(),
+
117  //[](std::tuple<int, double> x, std::tuple<int, double> y) {
+
118  //return std::get<0>(x) < std::get<0>(y);
+
119  //}
+
120  //);
+
121 
+
122  //for (int i = 0; i < res.size(); i++)
+
123  //res[i] = std::get<1>(tpls[i]);
+
124 
+
125  return res;
+
126  }
+
127 
+
128  // Read the given file as a MM format description of a sparse matrix.
+
129  // Returns a COO representation of the matrix.
+
130  // NOTE:
+
131  // - the values will be adjusted to 0 based indexing
+
132  // - for symmetric matrices, the symmetric entries are also included
+
133  // - Triplets will be sorted in lexicographical order of their coordinates (row, column)
+ +
135  parseHeader();
+
136 
+
137  if (!matrix)
+
138  throw std::invalid_argument("Matrix has only one column ==> Use readVector");
+
139 
+
140  // skip comments
+
141  std::vector<CoordType> values;
+
142  std::string line;
+
143  for (int i = 0; i < nnzs; i++) {
+
144  if (!getline(*f, line))
+
145  throw std::invalid_argument("File has less than given nonzeros!");
+
146  auto tpl = mmparse(line);
+
147  values.push_back(tpl);
+
148  auto row = std::get<0>(tpl);
+
149  auto col = std::get<1>(tpl);
+
150  if (symmetric && row != col)
+
151  values.push_back(
+
152  std::make_tuple(
+
153  std::get<1>(tpl),
+
154  std::get<0>(tpl),
+
155  std::get<2>(tpl)));
+
156  }
+
157 
+
158  auto start = std::chrono::high_resolution_clock::now();
+
159  std::sort(values.begin(), values.end(),
+
160  [](CoordType x, CoordType y) {
+
161  return
+
162  std::get<0>(x) < std::get<0>(y) ||
+
163  (std::get<0>(x) == std::get<0>(y) && std::get<1>(x) < std::get<1>(y));
+
164  });
+
165  dfesnippets::timing::print_clock_diff("Sorting took: ", start);
+
166 
+ +
168  m.data = values;
+
169  return m;
+
170  }
+
171  };
+
172  }
+
173 }
+
174 
+
175 
+
176 
+
177 #endif /* end of include guard: IO_HPP_QPBO8W0X */
+
+ + + + diff --git a/Model_8hpp.html b/Model_8hpp.html new file mode 100644 index 0000000..ea675b0 --- /dev/null +++ b/Model_8hpp.html @@ -0,0 +1,121 @@ + + + + + + +Spark: include/Spark/Model.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Model.hpp File Reference
+
+
+
#include <sstream>
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  spark::model::LogicResourceUsage
 
class  spark::model::ImplementationParameters
 
+ + + + + +

+Namespaces

namespace  spark
 
namespace  spark::model
 
+
+ + + + diff --git a/Model_8hpp_source.html b/Model_8hpp_source.html new file mode 100644 index 0000000..720ce96 --- /dev/null +++ b/Model_8hpp_source.html @@ -0,0 +1,187 @@ + + + + + + +Spark: include/Spark/Model.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Model.hpp
+
+
+Go to the documentation of this file.
1 #ifndef MODEL_H
+
2 #define MODEL_H
+
3 
+
4 #include <sstream>
+
5 
+
6 namespace spark {
+
7  namespace model {
+
8 
+ +
10  public:
+
11  int luts, ffs, brams, dsps;
+
12 
+
13  LogicResourceUsage() : luts(0), ffs(0), dsps(0), brams(0) {}
+
14 
+
15  LogicResourceUsage(int _l, int _f, int _b, int _d) :
+
16  luts(_l), ffs(_f), brams(_b), dsps(_d) {}
+
17 
+ +
19  luts = ru.luts;
+
20  ffs = ru.ffs;
+
21  dsps = ru.dsps;
+
22  brams = ru.brams;
+
23  }
+
24 
+
25  std::string to_string() {
+
26  std::stringstream s;
+
27  s << luts << " " << ffs << " " << " " << dsps << " " << brams;
+
28  return s.str();
+
29  }
+
30 
+ +
32  return LogicResourceUsage(luts + ru.luts, ffs + ru.ffs, brams + ru.brams, dsps + ru.dsps);
+
33  }
+
34 
+
35  const LogicResourceUsage operator*(int x) const {
+
36  return LogicResourceUsage(x * luts, x * ffs, x * brams, x * dsps);
+
37  }
+
38 
+
39  const LogicResourceUsage operator*(double x) const {
+
40  return LogicResourceUsage(x * (double)luts, x * (double)ffs, x * (double)brams, x * (double)dsps);
+
41  }
+
42 
+
43  const bool operator<(const LogicResourceUsage& ru) const {
+
44  return
+
45  luts < ru.luts &&
+
46  ffs < ru.ffs &&
+
47  dsps < ru.dsps &&
+
48  brams < ru.brams;
+
49  }
+
50  };
+
51 
+
52  // models the implementation parameters which are constrained (e.g. by
+
53  // physical properties, such as lut usage, or by the compiler, such as the
+
54  // number of streams)
+ +
56  public:
+
57 
+ +
59 
+
60  // params belows not being used currently
+
61  double memoryBandwidth; // <-- would be nice to have this
+
62  //int streams;
+
63  //int clockFrequency;
+
64  //int memoryClockFrequency;
+
65 
+
66  ImplementationParameters(const LogicResourceUsage& _ru, double _memoryBandwidth) : ru(_ru), memoryBandwidth(_memoryBandwidth) {}
+
67 
+
68  std::string to_string() {
+
69  std::stringstream s;
+
70  s << ru.to_string() << " " << memoryBandwidth;
+
71  return s.str();
+
72  }
+
73 
+
74  bool operator<(const ImplementationParameters& other) const {
+
75  return
+
76  ru < other.ru &&
+ +
78  //stream < other.streams &&
+
79  //clockFrequency < other.clockFrequency &&
+
80  //memoryClockFrequency < other.memoryClockFrequency;
+
81  }
+
82  };
+
83 
+
84 
+
85  }
+
86 }
+
87 #endif /* end of include guard: MODEL_H */
+
+ + + + diff --git a/ParallelCsrReadControl_8java.html b/ParallelCsrReadControl_8java.html new file mode 100644 index 0000000..abe98a8 --- /dev/null +++ b/ParallelCsrReadControl_8java.html @@ -0,0 +1,110 @@ + + + + + + +Spark: src/spmv/src/ParallelCsrReadControl.java File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ParallelCsrReadControl.java File Reference
+
+
+ + + + + + +

+Classes

class  ParallelCsrReadControl
 
enum  ParallelCsrReadControl.Mode
 
+
+ + + + diff --git a/README_8md.html b/README_8md.html new file mode 100644 index 0000000..6c58457 --- /dev/null +++ b/README_8md.html @@ -0,0 +1,96 @@ + + + + + + +Spark: README.md File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
README.md File Reference
+
+
+
+ + + + diff --git a/SimpleSpmv_8hpp.html b/SimpleSpmv_8hpp.html new file mode 100644 index 0000000..5d6ea13 --- /dev/null +++ b/SimpleSpmv_8hpp.html @@ -0,0 +1,228 @@ + + + + + + +Spark: include/Spark/SimpleSpmv.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SimpleSpmv.hpp File Reference
+
+
+
#include <sstream>
+#include <Spark/Spmv.hpp>
+#include <Spark/Utils.hpp>
+#include <Spark/Model.hpp>
+#include <Spark/device/SpmvDeviceInterface.h>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + +

+Classes

struct  spark::spmv::indptr_value
 
struct  spark::spmv::Partition
 
class  spark::spmv::SimpleSpmvArchitecture
 
class  spark::spmv::SimpleSpmvArchitectureSpace< T >
 
class  spark::spmv::FstSpmvArchitecture
 
class  spark::spmv::SkipEmptyRowsArchitecture
 
class  spark::spmv::PrefetchingArchitecture
 
+ + + + + +

+Namespaces

namespace  spark
 
namespace  spark::spmv
 
+ + + +

+Typedefs

using spark::spmv::EigenSparseMatrix = Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >
 
+ + + + + + + +

+Functions

struct spark::spmv::indptr_value spark::spmv::__attribute__ ((packed))
 
 indptr_value (double _value, int _indptr)
 
 indptr_value ()
 
+ + + + + + + +

+Variables

double value
 
int indptr
 
struct spark::spmv::Partition spark::spmv::__attribute__
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
__attribute__::indptr_value (double _value,
int _indptr 
)
+
+ +
+
+ +
+
+ + + + + + + +
__attribute__::indptr_value ()
+
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
int indptr
+
+ +
+
+ +
+
+ + + + +
double value
+
+ +
+
+
+ + + + diff --git a/SimpleSpmv_8hpp_source.html b/SimpleSpmv_8hpp_source.html new file mode 100644 index 0000000..d71e566 --- /dev/null +++ b/SimpleSpmv_8hpp_source.html @@ -0,0 +1,431 @@ + + + + + + +Spark: include/Spark/SimpleSpmv.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SimpleSpmv.hpp
+
+
+Go to the documentation of this file.
1 #ifndef SIMPLESPMV_H
+
2 #define SIMPLESPMV_H
+
3 
+
4 #include <sstream>
+
5 
+
6 #include <Spark/Spmv.hpp>
+
7 #include <Spark/Utils.hpp>
+
8 #include <Spark/Model.hpp>
+ +
10 
+
11 
+
12 namespace spark {
+
13  namespace spmv {
+
14 
+
15  using EigenSparseMatrix = Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>;
+
16 
+
17  // pack values and colptr to reduce number of streams
+
18 #pragma pack(1)
+
19  struct indptr_value {
+
20  double value;
+
21  int indptr;
+
22  indptr_value(double _value, int _indptr) : value(_value), indptr(_indptr) {}
+
23  indptr_value() : value(0), indptr(0) {}
+
24  } __attribute__((packed));
+
25 #pragma pack()
+
26 
+
27  struct Partition {
+ + + + +
32  std::vector<int> m_colptr;
+
33  std::vector<indptr_value> m_indptr_values;
+
34 
+
35  std::string to_string() {
+
36  std::stringstream s;
+
37  s << "Vector load cycles " << vector_load_cycles << std::endl;
+
38  s << "Padding cycles = " << paddingCycles << std::endl;
+
39  s << "Total cycles = " << totalCycles << std::endl;
+
40  s << "Nrows = " << n << std::endl;
+
41  s << "Partitions = " << nBlocks << std::endl;
+
42  s << "Reduction cycles = " << reductionCycles << std::endl;
+
43  std::cout << "Empty cycles = " << emptyCycles << std::endl;
+
44  return s.str();
+
45  }
+
46  };
+
47 
+
48  // A parameterised, generic architecture for SpMV. Supported parameters are:
+
49  // - input width
+
50  // - number of pipes
+
51  // - cache size per pipe
+
52  // - TODO data type
+ +
54  // architecture specific properties
+
55  protected:
+
56 
+
57  // design parameters
+ +
59 
+ +
61  std::vector<Partition> partitions;
+
62 
+
63  virtual int countComputeCycles(uint32_t* v, int size, int inputWidth);
+
64 
+
65  virtual bool equals(const SpmvArchitecture& a) const override {
+
66  const SimpleSpmvArchitecture* other = dynamic_cast<const SimpleSpmvArchitecture*>(&a);
+
67  return other != nullptr && *other == *this;
+
68  }
+
69 
+
70  public:
+
71 
+
72  bool operator==(const SimpleSpmvArchitecture& other) const {
+
73  return
+
74  cacheSize == other.cacheSize &&
+
75  inputWidth == other.inputWidth &&
+
76  numPipes == other.numPipes &&
+
77  maxRows == other.maxRows;
+
78  }
+
79 
+
80  virtual boost::property_tree::ptree write_params() override {
+
81  boost::property_tree::ptree tree;
+
82  tree.put("num_pipes", numPipes);
+
83  tree.put("cache_size", cacheSize);
+
84  tree.put("input_width", inputWidth);
+
85  tree.put("max_rows", maxRows);
+
86  return tree;
+
87  }
+
88 
+ + + + + +
94 
+
95  SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
+
96  cacheSize(_cacheSize),
+
97  inputWidth(_inputWidth),
+
98  numPipes(_numPipes),
+
99  maxRows(_maxRows) {}
+
100 
+
101  virtual double getEstimatedClockCycles() {
+
102  auto res = std::max_element(partitions.begin(), partitions.end(),
+
103  [](const Partition& a, const Partition& b) {
+
104  return a.totalCycles < b.totalCycles;
+
105  });
+
106  return res->totalCycles;
+
107  }
+
108 
+
109  virtual double getGFlopsCount() {
+
110  return 2 * this->mat.nonZeros() / 1E9;
+
111  }
+
112 
+
113  // NOTE: only call this after a call to preprocessMatrix
+ +
115  // XXX bram usage for altera in double precision only (512 deep, 40 bits wide, so need 2 BRAMs)
+
116  //int brams = (double)cacheSize * (double)inputWidth / 512.0 * 2.0;
+
117  using namespace spark::model;
+
118 
+
119  // XXX these should be architecture params
+
120  int maxRows = (this->mat.rows() / 512) * 512;
+
121  const int virtex6EntriesPerBram = 512;
+
122 
+
123  LogicResourceUsage interPartitionReductionKernel(2768,1505, maxRows / virtex6EntriesPerBram, 0);
+
124  LogicResourceUsage paddingKernel{400, 500, 0, 0};
+
125  LogicResourceUsage spmvKernelPerInput{1466, 2060, cacheSize / virtex6EntriesPerBram, 10}; // includes cache
+
126  LogicResourceUsage sm{800, 500, 0, 0};
+
127 
+
128  LogicResourceUsage spmvPerPipe =
+
129  interPartitionReductionKernel +
+
130  paddingKernel +
+
131  spmvKernelPerInput * inputWidth +
+
132  sm;
+
133 
+
134  LogicResourceUsage memoryPerPipe{3922, 8393, 160, 0};
+
135  LogicResourceUsage memory{24000, 32000, 0, 0};
+
136 
+
137  //LogicResourceUsage designOther{};
+
138  LogicResourceUsage designUsage = (spmvPerPipe + memoryPerPipe) * numPipes + memory;
+
139 
+
140  double memoryBandwidth =(double)inputWidth * numPipes * getFrequency() * 12.0 / 1E9;
+
141  ImplementationParameters ip{designUsage, memoryBandwidth};
+
142  //ip.clockFrequency = getFrequency() / 1E6; // MHz
+
143  return ip;
+
144  }
+
145 
+
146  virtual std::string to_string() {
+
147  std::stringstream s;
+
148  s << get_name();
+
149  s << " " << cacheSize;
+
150  s << " " << inputWidth;
+
151  s << " " << numPipes;
+
152  s << " " << getEstimatedClockCycles();
+
153  s << " " << getEstimatedGFlops();
+
154  return s.str();
+
155  }
+
156 
+
157  virtual void preprocess(const EigenSparseMatrix& mat) override;
+
158 
+
159  virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) override;
+
160 
+
161  virtual std::string get_name() override {
+
162  return std::string("Simple");
+
163  }
+
164 
+
165  private:
+
166  std::vector<EigenSparseMatrix> do_partition(
+
167  const EigenSparseMatrix& mat,
+
168  int numPipes);
+
169 
+ +
171  const Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>& mat,
+
172  int blockSize,
+
173  int inputWidth);
+
174  };
+
175 
+
176  template<typename T>
+ +
178  // NOTE any raw pointers returned through the API of this class
+
179  // are assumed to be wrapped in smart pointers by the base class
+
180  spark::utils::Range cacheSizeR{1024, 4096, 512};
+
181  spark::utils::Range inputWidthR{8, 100, 8};
+
182  spark::utils::Range numPipesR{1, 6, 1};
+
183  int maxRows;
+
184 
+
185  bool last = false;
+
186 
+
187  public:
+
188 
+ +
190  spark::utils::Range numPipesRange,
+
191  spark::utils::Range inputWidthRange,
+
192  spark::utils::Range cacheSizeRange,
+
193  int _maxRows) {
+
194  cacheSizeR = cacheSizeRange;
+
195  inputWidthR = inputWidthRange;
+
196  numPipesR = numPipesRange;
+
197  maxRows = _maxRows;
+
198  }
+
199 
+ +
201  }
+
202 
+
203  protected:
+
204  void restart() override {
+
205  cacheSizeR.restart();
+
206  inputWidthR.restart();
+
207  numPipesR.restart();
+
208  last = false;
+
209  }
+
210 
+
211  T* doNext(){
+
212  if (last)
+
213  return nullptr;
+
214 
+
215  T* result = new T(cacheSizeR.crt, inputWidthR.crt, numPipesR.crt, maxRows);
+
216 
+
217  ++cacheSizeR;
+
218  if (cacheSizeR.at_start()) {
+
219  ++inputWidthR;
+
220  if (inputWidthR.at_start()) {
+
221  ++numPipesR;
+
222  if (numPipesR.at_start())
+
223  last = true;
+
224  }
+
225  }
+
226 
+
227  return result;
+
228  }
+
229  };
+
230 
+
231 
+
232  // FST based architecture, for now we assume it's the same though it probably isn't
+ +
234  protected:
+
235 
+
236  virtual int countComputeCycles(uint32_t* v, int size, int inputWidth) override {
+
237  int cycles = 0;
+
238  for (int i = 0; i < size; i++) {
+
239  int toread = v[i] - (i > 0 ? v[i - 1] : 0);
+
240  do {
+
241  toread -= std::min(toread, inputWidth);
+
242  cycles++;
+
243  } while (toread > 0);
+
244  }
+
245  return cycles;
+
246  }
+
247 
+
248  public:
+ +
250 
+
251  FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
+
252  SimpleSpmvArchitecture(_cacheSize, _inputWidth, _numPipes, _maxRows) {}
+
253 
+
254  virtual std::string get_name() override {
+
255  return std::string("Fst");
+
256  }
+
257 
+
258  };
+
259 
+
260  // Model for an architecture which can skip sequences of empty rows
+ +
262  protected:
+
263 
+
264  std::vector<uint32_t> encodeEmptyRows(std::vector<uint32_t> pin, bool encode) {
+
265  std::vector<uint32_t> encoded;
+
266  if (!encode) {
+
267  return pin;
+
268  }
+
269 
+
270  int emptyRunLength = 0;
+
271  for (size_t i = 0; i < pin.size(); i++) {
+
272  uint32_t rowLength = pin[i] - (i == 0 ? 0 : pin[i - 1]);
+
273  if (rowLength == 0) {
+
274  emptyRunLength++;
+
275  } else {
+
276  if (emptyRunLength != 0) {
+
277  encoded.push_back(emptyRunLength | (1 << 31));
+
278  }
+
279  emptyRunLength = 0;
+
280  encoded.push_back(pin[i]);
+
281  }
+
282  }
+
283 
+
284  if (emptyRunLength != 0) {
+
285  encoded.push_back(emptyRunLength | (1 << 31));
+
286  }
+
287 
+
288  return encoded;
+
289  }
+
290 
+ +
292  const spark::sparse::CsrMatrix& in,
+
293  int blockNumber,
+
294  int nBlocks) override {
+
295  bool encode = blockNumber != 0 && blockNumber != nBlocks - 1;
+
296  return std::make_tuple(
+
297  encodeEmptyRows(std::get<0>(in), encode),
+
298  std::get<1>(in),
+
299  std::get<2>(in));
+
300  }
+
301 
+
302  public:
+ +
304 
+
305  SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
+
306  SimpleSpmvArchitecture(_cacheSize, _inputWidth, _numPipes, maxRows) {}
+
307 
+
308  virtual std::string get_name() override {
+
309  return std::string("SkipEmpty");
+
310  }
+
311  };
+
312 
+ +
314  protected:
+
315 
+
316  public:
+ +
318 
+
319  PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
+
320  SkipEmptyRowsArchitecture(_cacheSize, _inputWidth, _numPipes, _maxRows) {}
+
321 
+
322  virtual std::string get_name() override {
+
323  return std::string("PrefetchingArchitecture");
+
324  }
+
325  };
+
326 
+
327  }
+
328 }
+
329 
+
330 
+
331 #endif /* end of include guard: SIMPLESPMV_H */
+
+ + + + diff --git a/SparseLinearSolvers_8cpp.html b/SparseLinearSolvers_8cpp.html new file mode 100644 index 0000000..efa9960 --- /dev/null +++ b/SparseLinearSolvers_8cpp.html @@ -0,0 +1,194 @@ + + + + + + +Spark: src/SparseLinearSolvers.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SparseLinearSolvers.cpp File Reference
+
+
+
#include <Spark/SparseLinearSolvers.hpp>
+#include <iostream>
+#include <Eigen/Sparse>
+
+ + + + + + + +

+Functions

Eigen::VectorXd solveBICG (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd solveLU (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd solveCG (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd solveBICG (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd solveCG (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd solveLU (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+
+ + + + diff --git a/SparseLinearSolvers_8hpp.html b/SparseLinearSolvers_8hpp.html new file mode 100644 index 0000000..0d82bf1 --- /dev/null +++ b/SparseLinearSolvers_8hpp.html @@ -0,0 +1,125 @@ + + + + + + +Spark: include/Spark/SparseLinearSolvers.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SparseLinearSolvers.hpp File Reference
+
+
+
#include <Eigen/Sparse>
+
+

Go to the source code of this file.

+ + + + + + + + + + +

+Classes

class  spark::sparse_linear_solvers::Solver
 
class  spark::sparse_linear_solvers::EigenSolver
 
class  spark::sparse_linear_solvers::DfeCgSolver
 
class  spark::sparse_linear_solvers::DfeBiCgSolver
 
+ + + + + +

+Namespaces

namespace  spark
 
namespace  spark::sparse_linear_solvers
 
+
+ + + + diff --git a/SparseLinearSolvers_8hpp_source.html b/SparseLinearSolvers_8hpp_source.html new file mode 100644 index 0000000..d334fb9 --- /dev/null +++ b/SparseLinearSolvers_8hpp_source.html @@ -0,0 +1,148 @@ + + + + + + +Spark: include/Spark/SparseLinearSolvers.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SparseLinearSolvers.hpp
+
+
+Go to the documentation of this file.
1 #ifndef SPARSE_LINEAR_SOLVERS_HPP
+
2 #define SPARSE_LINEAR_SOLVERS_HPP
+
3 
+
4 #include <Eigen/Sparse>
+
5 
+
6 namespace spark {
+
7  namespace sparse_linear_solvers {
+
8 
+
9  class Solver {
+
10  public:
+
11  virtual void analyze(
+
12  const Eigen::SparseMatrix<double> &A) {
+
13  }
+
14 
+
15  virtual void preprocess(
+
16  const Eigen::SparseMatrix<double> &A) {
+
17  }
+
18 
+
19  virtual Eigen::VectorXd solve(
+
20  const Eigen::SparseMatrix<double>& A,
+
21  const Eigen::VectorXd& b) = 0;
+
22  };
+
23 
+
24  class EigenSolver: public Solver {
+
25  public:
+
26  virtual Eigen::VectorXd solve(
+
27  const Eigen::SparseMatrix<double>& A,
+
28  const Eigen::VectorXd& b);
+
29  };
+
30 
+
31  class DfeCgSolver: public Solver {
+
32  public:
+
33  virtual Eigen::VectorXd solve(
+
34  const Eigen::SparseMatrix<double>& A,
+
35  const Eigen::VectorXd& b);
+
36  };
+
37 
+
38  class DfeBiCgSolver: public Solver {
+
39  public:
+
40  virtual Eigen::VectorXd solve(
+
41  const Eigen::SparseMatrix<double>& A,
+
42  const Eigen::VectorXd& b);
+
43  };
+
44  }
+
45 }
+
46 
+
47 #endif /* end of include guard: SPARSE_LINEAR_SOLVERS_HPP */
+
48 
+
+ + + + diff --git a/SparseMatrix_8hpp.html b/SparseMatrix_8hpp.html new file mode 100644 index 0000000..710397b --- /dev/null +++ b/SparseMatrix_8hpp.html @@ -0,0 +1,127 @@ + + + + + + +Spark: include/Spark/SparseMatrix.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SparseMatrix.hpp File Reference
+
+
+
#include <Eigen/Sparse>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  spark::sparse::SparkCooMatrix< value_type >
 
+ + + + + +

+Namespaces

namespace  spark
 
namespace  spark::sparse
 
+ + + + + +

+Typedefs

using spark::sparse::CsrMatrix = std::tuple< std::vector< uint32_t >, std::vector< int >, std::vector< double >>
 
using spark::sparse::PartitionedCsrMatrix = std::vector< CsrMatrix >
 
+
+ + + + diff --git a/SparseMatrix_8hpp_source.html b/SparseMatrix_8hpp_source.html new file mode 100644 index 0000000..90ebf43 --- /dev/null +++ b/SparseMatrix_8hpp_source.html @@ -0,0 +1,127 @@ + + + + + + +Spark: include/Spark/SparseMatrix.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SparseMatrix.hpp
+
+
+Go to the documentation of this file.
1 #ifndef SPARSEMATRIX_HPP_1BWMMLC8
+
2 #define SPARSEMATRIX_HPP_1BWMMLC8
+
3 
+
4 #include <Eigen/Sparse>
+
5 
+
6 namespace spark {
+
7  namespace sparse {
+
8 
+
9  using CsrMatrix = std::tuple<std::vector<uint32_t>, std::vector<int>, std::vector<double>>;
+
10 
+
11  using PartitionedCsrMatrix = std::vector<CsrMatrix>;
+
12 
+
13  template<typename value_type>
+ +
15 
+
16  public:
+
17  using CoordType = std::tuple<int, int, value_type>;
+
18 
+
19  int n, m;
+
20  std::vector<CoordType> data;
+
21 
+
22  SparkCooMatrix(int _n, int _m) : n(_n), m(_m) {}
+
23  };
+
24  }
+
25 }
+
26 
+
27 #endif /* end of include guard: SPARSEMATRIX_HPP_1BWMMLC8 */
+
+ + + + diff --git a/SpmvDeviceInterfaceMock_8cpp.html b/SpmvDeviceInterfaceMock_8cpp.html new file mode 100644 index 0000000..e70ffb3 --- /dev/null +++ b/SpmvDeviceInterfaceMock_8cpp.html @@ -0,0 +1,377 @@ + + + + + + +Spark: src/device/SpmvDeviceInterfaceMock.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SpmvDeviceInterfaceMock.cpp File Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Functions

int getSpmv_PartitionSize ()
 
int getSpmv_InputWidth ()
 
int getSpmv_NumPipes ()
 
int getSpmv_MaxRows ()
 
bool getDramReductionEnabled ()
 
void Spmv_dramWrite (int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
 Basic static function for the interface 'dramWrite'. More...
 
void Spmv_dramRead (int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
 Basic static function for the interface 'dramRead'. More...
 
void Spmv (int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int32_t *param_outResultSizes, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
 
+

Function Documentation

+ +
+
+ + + + + + + +
bool getDramReductionEnabled ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_InputWidth ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_MaxRows ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_NumPipes ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_PartitionSize ()
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv (int64_t param_nIterations,
int64_t param_nPartitions,
int64_t param_vectorLoadCycles,
const int64_t * param_colPtrStartAddresses,
const int32_t * param_colptrSizes,
const int64_t * param_indptrValuesAddresses,
const int32_t * param_indptrValuesSizes,
const int32_t * param_nrows,
const int32_t * param_outResultSizes,
const int64_t * param_outStartAddresses,
const int32_t * param_reductionCycles,
const int32_t * param_totalCycles,
const int64_t * param_vStartAddresses 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv_dramRead (int64_t param_size_bytes,
int64_t param_start_bytes,
uint8_t * outstream_tocpu 
)
+
+ +

Basic static function for the interface 'dramRead'.

+
Parameters
+ + + + +
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[out]outstream_tocpuThe stream should be of size param_size_bytes bytes.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv_dramWrite (int64_t param_size_bytes,
int64_t param_start_bytes,
const uint8_t * instream_fromcpu 
)
+
+ +

Basic static function for the interface 'dramWrite'.

+
Parameters
+ + + + +
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[in]instream_fromcpuThe stream should be of size param_size_bytes bytes.
+
+
+ +
+
+
+ + + + diff --git a/SpmvDeviceInterface_8cpp.html b/SpmvDeviceInterface_8cpp.html new file mode 100644 index 0000000..fa45fb2 --- /dev/null +++ b/SpmvDeviceInterface_8cpp.html @@ -0,0 +1,194 @@ + + + + + + +Spark: src/spmv/src/SpmvDeviceInterface.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SpmvDeviceInterface.cpp File Reference
+
+
+
#include <Spark/device/SpmvDeviceInterface.h>
+#include <Spmv.h>
+
+ + + + + + + + + + + +

+Functions

int getSpmv_InputWidth ()
 
int getSpmv_NumPipes ()
 
int getSpmv_MaxRows ()
 
int getSpmv_PartitionSize ()
 
bool getDramReductionEnabled ()
 
+

Function Documentation

+ +
+
+ + + + + + + +
bool getDramReductionEnabled ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_InputWidth ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_MaxRows ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_NumPipes ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_PartitionSize ()
+
+ +
+
+
+ + + + diff --git a/SpmvDeviceInterface_8h.html b/SpmvDeviceInterface_8h.html new file mode 100644 index 0000000..5035aa6 --- /dev/null +++ b/SpmvDeviceInterface_8h.html @@ -0,0 +1,398 @@ + + + + + + +Spark: include/Spark/device/SpmvDeviceInterface.h File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SpmvDeviceInterface.h File Reference
+
+
+
#include <cstdint>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + +

+Functions

int getSpmv_PartitionSize ()
 
int getSpmv_InputWidth ()
 
int getSpmv_NumPipes ()
 
int getSpmv_MaxRows ()
 
bool getDramReductionEnabled ()
 
void Spmv_dramWrite (int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
 Basic static function for the interface 'dramWrite'. More...
 
void Spmv_dramRead (int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
 Basic static function for the interface 'dramRead'. More...
 
void Spmv (int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
 Basic static function for the interface 'default'. More...
 
+

Function Documentation

+ +
+
+ + + + + + + +
bool getDramReductionEnabled ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_InputWidth ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_MaxRows ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_NumPipes ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_PartitionSize ()
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv (int64_t param_nIterations,
int64_t param_nPartitions,
int64_t param_vectorLoadCycles,
const int64_t * param_colPtrStartAddresses,
const int32_t * param_colptrSizes,
const int64_t * param_indptrValuesAddresses,
const int32_t * param_indptrValuesSizes,
const int32_t * param_nrows,
const int64_t * param_outStartAddresses,
const int32_t * param_reductionCycles,
const int32_t * param_totalCycles,
const int64_t * param_vStartAddresses 
)
+
+ +

Basic static function for the interface 'default'.

+
Parameters
+ + + + + + + + + + + + + + + + + + +
[in]param_nIterationsInterface Parameter "nIterations".
[in]param_nPartitionsInterface Parameter "nPartitions".
[in]param_vectorLoadCyclesInterface Parameter "vectorLoadCycles".
[in]param_vectorSizeInterface Parameter "vectorSize".
[in]param_colPtrStartAddressesInterface Parameter array colPtrStartAddresses[] should be of size 1.
[in]param_colptrSizesInterface Parameter array colptrSizes[] should be of size 1.
[in]param_colptrUnpaddedlengthsInterface Parameter array colptrUnpaddedlengths[] should be of size 1.
[in]param_indptrValuesAddressesInterface Parameter array indptrValuesAddresses[] should be of size 1.
[in]param_indptrValuesSizesInterface Parameter array indptrValuesSizes[] should be of size 1.
[in]param_indptrValuesUnpaddedLengthsInterface Parameter array indptrValuesUnpaddedLengths[] should be of size 1.
[in]param_nrowsInterface Parameter array nrows[] should be of size 1.
[in]param_outResultSizesInterface Parameter array outResultSizes[] should be of size 1.
[in]param_outStartAddressesInterface Parameter array outStartAddresses[] should be of size 1.
[in]param_paddingCyclesInterface Parameter array paddingCycles[] should be of size 1.
[in]param_reductionCyclesInterface Parameter array reductionCycles[] should be of size 1.
[in]param_totalCyclesInterface Parameter array totalCycles[] should be of size 1.
[in]param_vStartAddressesInterface Parameter array vStartAddresses[] should be of size 1.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv_dramRead (int64_t param_size_bytes,
int64_t param_start_bytes,
uint8_t * outstream_tocpu 
)
+
+ +

Basic static function for the interface 'dramRead'.

+
Parameters
+ + + + +
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[out]outstream_tocpuThe stream should be of size param_size_bytes bytes.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv_dramWrite (int64_t param_size_bytes,
int64_t param_start_bytes,
const uint8_t * instream_fromcpu 
)
+
+ +

Basic static function for the interface 'dramWrite'.

+
Parameters
+ + + + +
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[in]instream_fromcpuThe stream should be of size param_size_bytes bytes.
+
+
+ +
+
+
+ + + + diff --git a/SpmvDeviceInterface_8h_source.html b/SpmvDeviceInterface_8h_source.html new file mode 100644 index 0000000..419d879 --- /dev/null +++ b/SpmvDeviceInterface_8h_source.html @@ -0,0 +1,142 @@ + + + + + + +Spark: include/Spark/device/SpmvDeviceInterface.h Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SpmvDeviceInterface.h
+
+
+Go to the documentation of this file.
1 #ifdef __cplusplus
+
2 extern "C" {
+
3 #endif /* __cplusplus */
+
4 #include <cstdint>
+
5 
+
6 // access device parameters
+ + +
9 int getSpmv_NumPipes();
+
10 int getSpmv_MaxRows();
+ +
12 
+
13 
+
21 void Spmv_dramWrite(
+
22  int64_t param_size_bytes,
+
23  int64_t param_start_bytes,
+
24  const uint8_t *instream_fromcpu);
+
25 
+
26 
+
34 void Spmv_dramRead(
+
35  int64_t param_size_bytes,
+
36  int64_t param_start_bytes,
+
37  uint8_t *outstream_tocpu);
+
38 
+
39 
+
61 void Spmv(
+
62  int64_t param_nIterations,
+
63  int64_t param_nPartitions,
+
64  int64_t param_vectorLoadCycles,
+
65  const int64_t *param_colPtrStartAddresses,
+
66  const int32_t *param_colptrSizes,
+
67  const int64_t *param_indptrValuesAddresses,
+
68  const int32_t *param_indptrValuesSizes,
+
69  const int32_t *param_nrows,
+
70  const int64_t *param_outStartAddresses,
+
71  const int32_t *param_reductionCycles,
+
72  const int32_t *param_totalCycles,
+
73  const int64_t *param_vStartAddresses);
+
74 
+
75 #ifdef __cplusplus
+
76 }
+
77 #endif /* __cplusplus */
+
+ + + + diff --git a/SpmvKernel_8java.html b/SpmvKernel_8java.html new file mode 100644 index 0000000..3c16919 --- /dev/null +++ b/SpmvKernel_8java.html @@ -0,0 +1,120 @@ + + + + + + +Spark: src/spmv/src/SpmvKernel.java File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SpmvKernel.java File Reference
+
+
+ + + + + + + + + + + + + + + + +

+Classes

class  SpmvKernel
 
class  SpmvCacheKernel
 
class  SpmvReductionKernel
 
class  DramSpmvReductionKernel
 
class  BramSpmvReductionKernel
 
class  PaddingKernel
 
class  UnpaddingKernel
 
+
+ + + + diff --git a/SpmvManager_8java.html b/SpmvManager_8java.html new file mode 100644 index 0000000..ec6b7a1 --- /dev/null +++ b/SpmvManager_8java.html @@ -0,0 +1,108 @@ + + + + + + +Spark: src/spmv/src/SpmvManager.java File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
SpmvManager.java File Reference
+
+
+ + + + +

+Classes

class  SpmvManager
 
+
+ + + + diff --git a/Spmv_8cpp.html b/Spmv_8cpp.html new file mode 100644 index 0000000..70fbfb0 --- /dev/null +++ b/Spmv_8cpp.html @@ -0,0 +1,223 @@ + + + + + + +Spark: src/spmv/src/Spmv.cpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Spmv.cpp File Reference
+
+
+
#include <Spark/Spmv.hpp>
+#include <Spark/SimpleSpmv.hpp>
+#include <Spark/Converters.hpp>
+#include <iostream>
+#include <tuple>
+#include <dfesnippets/VectorUtils.hpp>
+#include <dfesnippets/Timing.hpp>
+#include <Spark/device/SpmvDeviceInterface.h>
+
+ + + +

+Classes

struct  PartitionWriteResult
 
+ + + +

+Typedefs

using ssarch = spark::spmv::SimpleSpmvArchitecture
 
+ + + + + + + + +

+Functions

template<typename T >
long size_bytes (const std::vector< T > &v)
 
int align (int bytes, int to)
 
PartitionWriteResult writeDataForPartition (int offset, const Partition &br, const std::vector< double > &v)
 
+

Typedef Documentation

+ +
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int align (int bytes,
int to 
)
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + +
long size_bytes (const std::vector< T > & v)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
PartitionWriteResult writeDataForPartition (int offset,
const Partition & br,
const std::vector< double > & v 
)
+
+ +
+
+
+ + + + diff --git a/Spmv_8hpp.html b/Spmv_8hpp.html new file mode 100644 index 0000000..74d5cf2 --- /dev/null +++ b/Spmv_8hpp.html @@ -0,0 +1,133 @@ + + + + + + +Spark: include/Spark/Spmv.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Spmv.hpp File Reference
+
+
+
#include <Spark/SparseMatrix.hpp>
+#include <Spark/Model.hpp>
+#include <boost/property_tree/ptree.hpp>
+#include <Eigen/Sparse>
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  spark::spmv::SpmvArchitecture
 
class  spark::spmv::SpmvArchitectureSpace
 
+ + + + + +

+Namespaces

namespace  spark
 
namespace  spark::spmv
 
+ + + + + + +

+Functions

std::ostream & spark::spmv::operator<< (std::ostream &s, SpmvArchitecture &a)
 
template<typename T >
void spark::spmv::align (std::vector< T > &v, int widthInBytes)
 
+
+ + + + diff --git a/Spmv_8hpp_source.html b/Spmv_8hpp_source.html new file mode 100644 index 0000000..b1d55e2 --- /dev/null +++ b/Spmv_8hpp_source.html @@ -0,0 +1,183 @@ + + + + + + +Spark: include/Spark/Spmv.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Spmv.hpp
+
+
+Go to the documentation of this file.
1 #ifndef SPMV_H
+
2 #define SPMV_H
+
3 
+
4 #include <Spark/SparseMatrix.hpp>
+
5 #include <Spark/Model.hpp>
+
6 #include <boost/property_tree/ptree.hpp>
+
7 #include <Eigen/Sparse>
+
8 
+
9 namespace spark {
+
10  namespace spmv {
+
11 
+
12  // A generic architecture for SpMV
+ +
14 
+
15  public:
+
16  double getEstimatedGFlops() {
+ +
18  }
+
19 
+
20  double getFrequency() {
+
21  return 100 * 1E6;
+
22  }
+
23 
+
24  virtual double getEstimatedClockCycles() = 0;
+
25  virtual double getGFlopsCount() = 0;
+
26  virtual std::string to_string() = 0;
+ +
28  virtual void preprocess(const Eigen::SparseMatrix<double, Eigen::RowMajor>& mat) = 0;
+
29  virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) = 0;
+
30  virtual std::string get_name() = 0;
+
31  virtual boost::property_tree::ptree write_params() = 0;
+
32  bool operator==(const SpmvArchitecture& other) {
+
33  return equals(other);
+
34  }
+
35 
+
36  virtual ~SpmvArchitecture() {}
+
37 
+
38  protected:
+ +
40  const spark::sparse::CsrMatrix& in,
+
41  int blockNumber,
+
42  int nBlocks) {
+
43  return in;
+
44  }
+
45  virtual bool equals(const SpmvArchitecture& a) const = 0;
+
46  };
+
47 
+
48  inline std::ostream& operator<<(std::ostream& s, SpmvArchitecture& a) {
+
49  s << " Estimated clock cycles = " << a.getEstimatedClockCycles();
+
50  return s;
+
51  }
+
52 
+
53  // An ArchitectureSpace provides a simple way to iterate over the design space
+
54  // of an architecture, abstracting the details of the architecture's parameters
+
55  // XXX actually implemnt the STL iterator (if it makes sense?)
+ +
57  public:
+
58  std::shared_ptr<SpmvArchitecture> next() {
+
59  return std::shared_ptr<SpmvArchitecture>(doNext());
+
60  }
+
61 
+
62  // restart the exploration process
+
63  virtual void restart() = 0;
+
64 
+
65  protected:
+
66  // returns nullptr if at end
+
67  virtual SpmvArchitecture* doNext() = 0;
+
68  };
+
69 
+
70  template<typename T>
+
71  void align(std::vector<T>& v, int widthInBytes) {
+
72  int limit = widthInBytes / sizeof(T);
+
73  while ((v.size() * sizeof(T)) % widthInBytes != 0 && limit != 0) {
+
74  v.push_back(T{});
+
75  limit--;
+
76  }
+
77  }
+
78 
+
79 }
+
80 }
+
81 
+
82 
+
83 #endif /* end of include guard: SPMV_H */
+
+ + + + diff --git a/UserInput_8hpp.html b/UserInput_8hpp.html new file mode 100644 index 0000000..ddd6aee --- /dev/null +++ b/UserInput_8hpp.html @@ -0,0 +1,127 @@ + + + + + + +Spark: include/Spark/UserInput.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
UserInput.hpp File Reference
+
+
+
#include <vector>
+#include <boost/algorithm/string.hpp>
+#include <unordered_map>
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

namespace  spark
 
namespace  spark::userio
 
+ + + +

+Typedefs

using spark::userio::UserInputParams = std::unordered_map< std::string, int >
 
+ + + +

+Functions

UserInputParams spark::userio::parseBuildParams (std::string params)
 
+
+ + + + diff --git a/UserInput_8hpp_source.html b/UserInput_8hpp_source.html new file mode 100644 index 0000000..bfc9acb --- /dev/null +++ b/UserInput_8hpp_source.html @@ -0,0 +1,139 @@ + + + + + + +Spark: include/Spark/UserInput.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
UserInput.hpp
+
+
+Go to the documentation of this file.
1 #ifndef USERINPUT_H
+
2 
+
3 #define USERINPUT_H
+
4 
+
5 #include <vector>
+
6 #include <boost/algorithm/string.hpp>
+
7 #include <unordered_map>
+
8 
+
9 namespace spark {
+
10  namespace userio {
+
11 
+
12  using UserInputParams = std::unordered_map<std::string, int>;
+
13 
+
14  inline UserInputParams parseBuildParams(std::string params) {
+
15  std::string delimiters("= ");
+
16  std::vector<std::string> parts;
+
17  boost::split(parts, params, boost::is_any_of(delimiters));
+
18  for (auto s : parts)
+
19  std::cout << s << std::endl;
+
20  // TODO need a more flexible approach
+
21  // for now we assume we have -> param + int value pairs
+
22  UserInputParams buildParams;
+
23 
+
24  bool param_name = true;
+
25  std::cout << "parts size " << parts.size() << std::endl;
+
26  for (int i = 0; i < parts.size(); i+=2) {
+
27  buildParams.insert(std::make_pair(parts[i], std::stoi(parts[i + 1])));
+
28  }
+
29 
+
30  return buildParams;
+
31  }
+
32 
+
33  }
+
34 };
+
35 
+
36 
+
37 
+
38 
+
39 #endif /* end of include guard: USERINPUT_H */
+
+ + + + diff --git a/Utils_8hpp.html b/Utils_8hpp.html new file mode 100644 index 0000000..d25831b --- /dev/null +++ b/Utils_8hpp.html @@ -0,0 +1,129 @@ + + + + + + +Spark: include/Spark/Utils.hpp File Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
Utils.hpp File Reference
+
+
+
#include <string>
+#include <vector>
+#include <sstream>
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+
+

Go to the source code of this file.

+ + + + +

+Classes

struct  spark::utils::Range
 
+ + + + + +

+Namespaces

namespace  spark
 
namespace  spark::utils
 
+ + + +

+Functions

std::ostream & spark::utils::operator<< (std::ostream &s, const Range &r)
 
+
+ + + + diff --git a/Utils_8hpp_source.html b/Utils_8hpp_source.html new file mode 100644 index 0000000..cbd7dac --- /dev/null +++ b/Utils_8hpp_source.html @@ -0,0 +1,165 @@ + + + + + + +Spark: include/Spark/Utils.hpp Source File + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Utils.hpp
+
+
+Go to the documentation of this file.
1 #ifndef UTILS_HPP_DASDASD
+
2 #define UTILS_HPP_DASDASD
+
3 
+
4 #include <string>
+
5 #include <vector>
+
6 #include <sstream>
+
7 #include <iostream>
+
8 
+
9 #include <boost/algorithm/string.hpp>
+
10 
+
11 namespace spark {
+
12  namespace utils {
+
13  struct Range {
+
14  int start, end, step, crt;
+
15  Range(int _s, int _e, int _stp) : start(_s), end(_e), step(_stp), crt(_s) {}
+
16  Range(std::string range) {
+
17  std::vector<std::string> strs;
+
18  if (range.find(",") != std::string::npos) {
+
19  // assume a (start, end, step) range format
+
20  boost::split(strs, range, boost::is_any_of(","));
+
21  start = std::stoi(strs[0]);
+
22  end = std::stoi(strs[1]);
+
23  step = std::stoi(strs[2]);
+
24  } else {
+
25  // assume a single element range (start, start + 1, 1)
+
26  start = std::stoi(range);
+
27  end = start + 1;
+
28  step = 1;
+
29  }
+
30 
+
31  crt = start;
+
32  }
+
33 
+
34  std::string to_string() {
+
35  std::stringstream ss;
+
36  ss << start << ", " << end << ", " << step;
+
37  return ss.str();
+
38  }
+
39 
+
40  void restart() {
+
41  crt = start;
+
42  }
+
43 
+
44  bool at_start() {
+
45  return crt == start;
+
46  }
+
47 
+
48  int operator++() {
+
49  crt = crt + step;
+
50  if (crt == end) {
+
51  crt = start;
+
52  }
+
53  return crt;
+
54  }
+
55  };
+
56 
+
57  inline std::ostream& operator<<(std::ostream& s, const Range& r) {
+
58  std::cout << "Range{";
+
59  std::cout << r.start << "," << r.end << "," << r.step << "}";
+
60  return s;
+
61  }
+
62  }
+
63 }
+
64 
+
65 #endif /* end of include guard: UTILS_H */
+
+ + + + diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..6de2542 --- /dev/null +++ b/annotated.html @@ -0,0 +1,147 @@ + + + + + + +Spark: Class List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class List
+
+ + + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
BramSpmvReductionKernel Member List
+
+
+ +

This is the complete list of members for BramSpmvReductionKernel, including all inherited members.

+ + +
BramSpmvReductionKernel(KernelParameters parameters, int fpl, int maxRows, boolean dbg)BramSpmvReductionKernelinlineprotected
+ + + + diff --git a/classBramSpmvReductionKernel.html b/classBramSpmvReductionKernel.html new file mode 100644 index 0000000..7d46603 --- /dev/null +++ b/classBramSpmvReductionKernel.html @@ -0,0 +1,165 @@ + + + + + + +Spark: BramSpmvReductionKernel Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
BramSpmvReductionKernel Class Reference
+
+
+
+Inheritance diagram for BramSpmvReductionKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 BramSpmvReductionKernel (KernelParameters parameters, int fpl, int maxRows, boolean dbg)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BramSpmvReductionKernel.BramSpmvReductionKernel (KernelParameters parameters,
int fpl,
int maxRows,
boolean dbg 
)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classBramSpmvReductionKernel.png b/classBramSpmvReductionKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..c02c70344562171b5b7f32350c93710da4ad3860 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^OMy6mgBeKruX1$)QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;O$K zUz{4!FBR+fS(P2V;1(|0skVQ{OkaLA&&k5mCOvVE@S4QWH!b@>>Z$X~KWyB?H}i;5 z>Yn-8FKcR-KK`1_ciOio{i5Hi=uEEDTXKw6rmLOa+c<6hIism*ujbjVh(6s}wddBo z%5t0c?;rk~v+TI)OMAGfiJG2vHpecV$th!)Q_1LaURfu8y?Tb-p-;L$8P29hxb-tv z2u@?LYf)|BPvm^y9KrNM04MkG`>iI%v*maaiVg`KXy3r{K{0w+7?VWd&!-u09=xl222d_5@2JD}H>ucD&sC84fn7!Q4RVB{%wRYmQ$6J=X{5efOqU*P@ zKKpg&&pW={GFsKiJ}tFLwUYn-rCU|$k$$fy1g&Yld{Zpi|887GS^Tup)sxK6*B!IT z{CV2F$~VS(-By{jId3Z7O}q6eCwA5sn>Ws~%l7Ql5B3f_*?i9?YMX7GU7xydbGYq2TS>lY4BKm7{|^Cr v|3mpShWiRSj5QqI4D!>SZ<%@X$sfjJF{ybOCEH7Yan9iB>gTe~DWM4fh+z(J literal 0 HcmV?d00001 diff --git a/classDramSpmvReductionKernel-members.html b/classDramSpmvReductionKernel-members.html new file mode 100644 index 0000000..15943c6 --- /dev/null +++ b/classDramSpmvReductionKernel-members.html @@ -0,0 +1,102 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
DramSpmvReductionKernel Member List
+
+
+ +

This is the complete list of members for DramSpmvReductionKernel, including all inherited members.

+ + +
DramSpmvReductionKernel(KernelParameters parameters)DramSpmvReductionKernelinlineprotected
+ + + + diff --git a/classDramSpmvReductionKernel.html b/classDramSpmvReductionKernel.html new file mode 100644 index 0000000..6ed552c --- /dev/null +++ b/classDramSpmvReductionKernel.html @@ -0,0 +1,143 @@ + + + + + + +Spark: DramSpmvReductionKernel Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
DramSpmvReductionKernel Class Reference
+
+
+
+Inheritance diagram for DramSpmvReductionKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 DramSpmvReductionKernel (KernelParameters parameters)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
DramSpmvReductionKernel.DramSpmvReductionKernel (KernelParameters parameters)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classDramSpmvReductionKernel.png b/classDramSpmvReductionKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..c51a5ccbb9927c24b56505664636031e71cbe934 GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^%YZn5gBeIJnfuQXNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~-tcsB45?szJNM$GW(6Ks|G29E|NFyT z1tz?Dms8fYIkP&dSE&Esh43?Hp0Q6}a+A~7^OKT^>Pc?)v$_XUr`-=fQnegb#G%=KkBbZ05~B2@IQsXEDUJs5OYY8h;f&FyZ&& zyALnl^iB|wc45!tJ9}Et{3l!caW99zk;&ILTVAH%6cx&3OytO~q8TtM)dNX_0)vHx!m9JKx4ZNCX61_M- z`zr5x@RXch4X8DWA&2PUve!l1OmddLy z@BS*d#IoagaDC)L&Id>NO&RSRGngs_fj(XHdh5)aZ)zC7tV-jwnS9j(81D?8u6{1- HoD!M + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PaddingKernel Member List
+
+
+ +

This is the complete list of members for PaddingKernel, including all inherited members.

+ + +
PaddingKernel(KernelParameters parameters)PaddingKernelinlineprotected
+ + + + diff --git a/classPaddingKernel.html b/classPaddingKernel.html new file mode 100644 index 0000000..7fcb4dd --- /dev/null +++ b/classPaddingKernel.html @@ -0,0 +1,143 @@ + + + + + + +Spark: PaddingKernel Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
PaddingKernel Class Reference
+
+
+
+Inheritance diagram for PaddingKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 PaddingKernel (KernelParameters parameters)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
PaddingKernel.PaddingKernel (KernelParameters parameters)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classPaddingKernel.png b/classPaddingKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..a827051d731dbd4da8c454e933521aad07de323a GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^@jx8F!3-oljzkIpDTx4|5ZC|z{{xvX-h3_XKQsZz z0^Bu^K|kP61Pa|0(gEAX(H>;L`t-+rIg z0*+&^u52kT-|{9yQAaRnzM(NU%j6{nZSj+8_Pw3&&hH#|#{QxG#7333MTh1y&09LB z?)?1{`}lib(`yr>40LDhzV~H$NNUh&+kZtzE-(MMd|maq?JlN2?+4jmO>=p3ev|ZF z%R2$~lfLjB*7vjnVfhcUXC7rNXk~X$IQZ|la#>@-|6uuD4qN_TzkdD$vy8zX2D`)j z4~$W$&+q@Fr8OonB=XodoIn2O<%Y(sQzt%MCuwyiXXc)$TasTn0=BPw|Knh6eO*t? z&X-2pchy%e6Pmlva#7UY&(Almd>eNv_L{!uRl%#%-o5*8wraN7ZmIuW&)44!%m43mnI0J5JI`QOe;_|i>^Q&2Mav0V+XFuXV}QZa)z4*}Q$iB}Ne|>S literal 0 HcmV?d00001 diff --git a/classParallelCsrReadControl-members.html b/classParallelCsrReadControl-members.html new file mode 100644 index 0000000..b2fed6e --- /dev/null +++ b/classParallelCsrReadControl-members.html @@ -0,0 +1,144 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
ParallelCsrReadControl Member List
+
+
+ +

This is the complete list of members for ParallelCsrReadControl, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
buildReadMask(DFEsmValue canread)ParallelCsrReadControlinlinepackage
canRead()ParallelCsrReadControlinlinepackage
cat(DFEsmValue...args)ParallelCsrReadControlinlinepackage
cat(DFEsmValue left, DFEsmValue right)ParallelCsrReadControlinlinepackage
crtPosParallelCsrReadControlprivate
cycleCounterParallelCsrReadControlprivate
dbgParallelCsrReadControlprivate
firstReadPositionParallelCsrReadControlprivate
fls()ParallelCsrReadControlinlinepackage
iLengthParallelCsrReadControlprivate
iLengthReadyParallelCsrReadControlpackage
inputWidthParallelCsrReadControlprivate
iterationsProcessedParallelCsrReadControlprivate
makeCommand(DFEsmValue p_crtPos, DFEsmValue p_toread, DFEsmValue p_rowLengthData, DFEsmValue p_firstReadPosition, DFEsmValue p_cycleCounter)ParallelCsrReadControlinlinepackage
makeOutput(DFEsmValue readEnable, DFEsmValue rowFinished, DFEsmValue readMask, DFEsmValue rowLength, DFEsmValue cycleCounterP, DFEsmValue firstReadPositionP, DFEsmValue vectorLoad)ParallelCsrReadControlinlinepackage
min(DFEsmValue a, DFEsmValue b)ParallelCsrReadControlinlinepackage
modeParallelCsrReadControlprivate
needToRead()ParallelCsrReadControlinlinepackage
nextState()ParallelCsrReadControlinlineprotected
nIterationsParallelCsrReadControlpackage
nPartitionsParallelCsrReadControlpackage
nRowsParallelCsrReadControlpackage
oControlParallelCsrReadControlprivate
oControlDataParallelCsrReadControlprivate
one()ParallelCsrReadControlinlinepackage
outputFunction()ParallelCsrReadControlinlineprotected
outputNotStall()ParallelCsrReadControlinlinepackage
outValidParallelCsrReadControlprivate
ParallelCsrReadControl(DFEManager owner, int inputWidth, boolean dbg)ParallelCsrReadControlinline
partitionsProcessedParallelCsrReadControlpackage
prevDataParallelCsrReadControlpackage
processRows(DFEsmValue r, DFEsmValue requestRead)ParallelCsrReadControlinlinepackage
readLengthParallelCsrReadControlpackage
readMaskDataParallelCsrReadControlprivate
rowLengthDataParallelCsrReadControlpackage
rowsProcessedParallelCsrReadControlprivate
toreadParallelCsrReadControlpackage
totalOutputsParallelCsrReadControlpackage
tru()ParallelCsrReadControlinlinepackage
vectorLoadCommandsParallelCsrReadControlpackage
vectorLoadCyclesParallelCsrReadControlprivate
zero()ParallelCsrReadControlinlinepackage
zero(int bitWidth)ParallelCsrReadControlinlinepackage
+ + + + diff --git a/classParallelCsrReadControl.html b/classParallelCsrReadControl.html new file mode 100644 index 0000000..425e403 --- /dev/null +++ b/classParallelCsrReadControl.html @@ -0,0 +1,1264 @@ + + + + + + +Spark: ParallelCsrReadControl Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for ParallelCsrReadControl:
+
+
+ + + +
+ + + + +

+Classes

enum  Mode
 
+ + + +

+Public Member Functions

 ParallelCsrReadControl (DFEManager owner, int inputWidth, boolean dbg)
 
+ + + + + +

+Protected Member Functions

void nextState ()
 
void outputFunction ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Package Functions

DFEsmValue outputNotStall ()
 
DFEsmValue needToRead ()
 
DFEsmValue canRead ()
 
void processRows (DFEsmValue r, DFEsmValue requestRead)
 
void makeCommand (DFEsmValue p_crtPos, DFEsmValue p_toread, DFEsmValue p_rowLengthData, DFEsmValue p_firstReadPosition, DFEsmValue p_cycleCounter)
 
void makeOutput (DFEsmValue readEnable, DFEsmValue rowFinished, DFEsmValue readMask, DFEsmValue rowLength, DFEsmValue cycleCounterP, DFEsmValue firstReadPositionP, DFEsmValue vectorLoad)
 
DFEsmValue min (DFEsmValue a, DFEsmValue b)
 
DFEsmValue buildReadMask (DFEsmValue canread)
 
DFEsmValue fls ()
 
DFEsmValue tru ()
 
DFEsmValue one ()
 
DFEsmValue zero ()
 
DFEsmValue zero (int bitWidth)
 
DFEsmValue cat (DFEsmValue...args)
 
DFEsmValue cat (DFEsmValue left, DFEsmValue right)
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Package Attributes

final DFEsmInput nRows
 
final DFEsmInput nPartitions
 
final DFEsmInput nIterations
 
final DFEsmStateValue prevData
 
final DFEsmStateValue readLength
 
final DFEsmStateValue iLengthReady
 
final DFEsmStateValue rowLengthData
 
final DFEsmStateValue vectorLoadCommands
 
final DFEsmStateValue partitionsProcessed
 
final DFEsmStateValue totalOutputs
 
final DFEsmStateValue toread
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

final DFEsmStateEnum< Mode > mode
 
final DFEsmPullInput iLength
 
final DFEsmInput vectorLoadCycles
 
final DFEsmPushOutput oControl
 
final DFEsmStateValue oControlData
 
final DFEsmStateValue outValid
 
final DFEsmStateValue readMaskData
 
final DFEsmStateValue cycleCounter
 
final DFEsmStateValue firstReadPosition
 
final DFEsmStateValue rowsProcessed
 
final DFEsmStateValue iterationsProcessed
 
final DFEsmStateValue crtPos
 
final int inputWidth
 
final boolean dbg
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ParallelCsrReadControl.ParallelCsrReadControl (DFEManager owner,
int inputWidth,
boolean dbg 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
DFEsmValue ParallelCsrReadControl.buildReadMask (DFEsmValue canread)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.canRead ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DFEsmValue ParallelCsrReadControl.cat (DFEsmValue... args)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
DFEsmValue ParallelCsrReadControl.cat (DFEsmValue left,
DFEsmValue right 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.fls ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ParallelCsrReadControl.makeCommand (DFEsmValue p_crtPos,
DFEsmValue p_toread,
DFEsmValue p_rowLengthData,
DFEsmValue p_firstReadPosition,
DFEsmValue p_cycleCounter 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ParallelCsrReadControl.makeOutput (DFEsmValue readEnable,
DFEsmValue rowFinished,
DFEsmValue readMask,
DFEsmValue rowLength,
DFEsmValue cycleCounterP,
DFEsmValue firstReadPositionP,
DFEsmValue vectorLoad 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
DFEsmValue ParallelCsrReadControl.min (DFEsmValue a,
DFEsmValue b 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.needToRead ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void ParallelCsrReadControl.nextState ()
+
+inlineprotected
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.one ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void ParallelCsrReadControl.outputFunction ()
+
+inlineprotected
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.outputNotStall ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ParallelCsrReadControl.processRows (DFEsmValue r,
DFEsmValue requestRead 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.tru ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.zero ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DFEsmValue ParallelCsrReadControl.zero (int bitWidth)
+
+inlinepackage
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.crtPos
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.cycleCounter
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean ParallelCsrReadControl.dbg
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.firstReadPosition
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmPullInput ParallelCsrReadControl.iLength
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.iLengthReady
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int ParallelCsrReadControl.inputWidth
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.iterationsProcessed
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateEnum<Mode> ParallelCsrReadControl.mode
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmInput ParallelCsrReadControl.nIterations
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmInput ParallelCsrReadControl.nPartitions
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmInput ParallelCsrReadControl.nRows
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmPushOutput ParallelCsrReadControl.oControl
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.oControlData
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.outValid
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.partitionsProcessed
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.prevData
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.readLength
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.readMaskData
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.rowLengthData
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.rowsProcessed
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.toread
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.totalOutputs
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.vectorLoadCommands
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmInput ParallelCsrReadControl.vectorLoadCycles
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classParallelCsrReadControl.png b/classParallelCsrReadControl.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8f7874f03c33746e885698c2de752fa6e622ee GIT binary patch literal 655 zcmeAS@N?(olHy`uVBq!ia0vp^6M;B@gBeKbZAu4{3=#o8A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;K^^T_vf#cX9D;zQ*-&AIxE?qHdt=V{d?HUbpJidX4|TLqn5QC$7p` zquc4?QYLhu{{`!YsoRvR_Le!{>U+VvMesLuDf~Z+J|RFPJIW(Qhj-^)Pt4`njxgN@xNANwF*8 literal 0 HcmV?d00001 diff --git a/classSpmvCacheKernel-members.html b/classSpmvCacheKernel-members.html new file mode 100644 index 0000000..5f3eb27 --- /dev/null +++ b/classSpmvCacheKernel-members.html @@ -0,0 +1,113 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
SpmvCacheKernel Member List
+
+
+ +

This is the complete list of members for SpmvCacheKernel, including all inherited members.

+ + + + + + + + + + + + + +
addressTSpmvCacheKernelprivate
getMatrixValues()SpmvCacheKernelinlinepackage
getVectorValues()SpmvCacheKernelinlinepackage
indptrVectorSpmvCacheKernelprivate
ivtypeSpmvCacheKernelpackage
matrixValuesSpmvCacheKernelprivate
resolveVectorReads(DFEVector< DFEVar > reads)SpmvCacheKernelinlinepackage
selectValues(DFEVector< DFEVar > in, DFEVar readMask)SpmvCacheKernelinlinepackage
SpmvCacheKernel(KernelLib owner, DFEVar vRomLoadEnable, DFEVar cacheReadEnable, DFEVar readMask, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth)SpmvCacheKernelinlineprotected
vectorValuesSpmvCacheKernelprivate
vromsSpmvCacheKernelprivate
vtypeSpmvCacheKernelprivate
+ + + + diff --git a/classSpmvCacheKernel.html b/classSpmvCacheKernel.html new file mode 100644 index 0000000..7b9eccf --- /dev/null +++ b/classSpmvCacheKernel.html @@ -0,0 +1,469 @@ + + + + + + +Spark: SpmvCacheKernel Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for SpmvCacheKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 SpmvCacheKernel (KernelLib owner, DFEVar vRomLoadEnable, DFEVar cacheReadEnable, DFEVar readMask, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth)
 
+ + + + + + + + + +

+Package Functions

DFEVector< DFEVar > getMatrixValues ()
 
DFEVector< DFEVar > getVectorValues ()
 
DFEVector< DFEVar > selectValues (DFEVector< DFEVar > in, DFEVar readMask)
 
DFEVector< DFEVar > resolveVectorReads (DFEVector< DFEVar > reads)
 
+ + + +

+Package Attributes

final DFEVectorType< DFEVar > ivtype
 
+ + + + + + + + + + + + + +

+Private Attributes

final DFEVectorType< DFEVar > vtype
 
final List< Memory< DFEVar > > vroms
 
final DFEType addressT
 
final DFEVector< DFEVar > matrixValues
 
final DFEVector< DFEVar > vectorValues
 
final DFEVector< DFEVar > indptrVector
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpmvCacheKernel.SpmvCacheKernel (KernelLib owner,
DFEVar vRomLoadEnable,
DFEVar cacheReadEnable,
DFEVar readMask,
int inputWidth,
int cacheSize,
int indexWidth,
int mantissaWidth 
)
+
+inlineprotected
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
DFEVector<DFEVar> SpmvCacheKernel.getMatrixValues ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEVector<DFEVar> SpmvCacheKernel.getVectorValues ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DFEVector<DFEVar> SpmvCacheKernel.resolveVectorReads (DFEVector< DFEVar > reads)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
DFEVector<DFEVar> SpmvCacheKernel.selectValues (DFEVector< DFEVar > in,
DFEVar readMask 
)
+
+inlinepackage
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
final DFEType SpmvCacheKernel.addressT
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVector<DFEVar> SpmvCacheKernel.indptrVector
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVectorType<DFEVar> SpmvCacheKernel.ivtype
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVector<DFEVar> SpmvCacheKernel.matrixValues
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVector<DFEVar> SpmvCacheKernel.vectorValues
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final List<Memory<DFEVar> > SpmvCacheKernel.vroms
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVectorType<DFEVar> SpmvCacheKernel.vtype
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classSpmvCacheKernel.png b/classSpmvCacheKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..49fe08e8d13a4c684ecd97f236788db3301a4b4e GIT binary patch literal 516 zcmV+f0{i`mP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004#NkllyXhQ?TBn2Fr5HLVLYJeJ!fJh9OBh)e~xjZu(9gKsz#{K8f-JYFxWX zs??-DiSqLZuV1o?8oHdQ#Z=W^TeX*{`E+*?e(AmL^QEJ^XI3NDujH^Ky{$==Bu`DM zBzbBW)y%B70RE^CKz9wHem*0xL#PXM0Co)Zr*e2w0bDhy0G^su08dRSfTt!Ez*Cb7 z;HgOk@YJLN+{?_YyD)&xnp6N!ji#=t1#qI~c-gbIt|zIecTcp(kJRhXHL0N^JiPpF zv&3rJ^Ik-EYDM4X30LW;Bb3w^1Iw?^?134ih6Xk za<~{yjq-Jctg5J~bBkuagVNE=raNlA=te8ck(Q%LHOTLjAcs}8iz*B6BAlX935$sU0000 + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
SpmvKernel Member List
+
+
+ +

This is the complete list of members for SpmvKernel, including all inherited members.

+ + + +
fpLSpmvKernelprivatestatic
SpmvKernel(KernelParameters parameters, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth, boolean dbg)SpmvKernelinlineprotected
+ + + + diff --git a/classSpmvKernel.html b/classSpmvKernel.html new file mode 100644 index 0000000..7f63af8 --- /dev/null +++ b/classSpmvKernel.html @@ -0,0 +1,204 @@ + + + + + + +Spark: SpmvKernel Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for SpmvKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 SpmvKernel (KernelParameters parameters, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth, boolean dbg)
 
+ + + +

+Static Private Attributes

static final int fpL = 16
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpmvKernel.SpmvKernel (KernelParameters parameters,
int inputWidth,
int cacheSize,
int indexWidth,
int mantissaWidth,
boolean dbg 
)
+
+inlineprotected
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
final int SpmvKernel.fpL = 16
+
+staticprivate
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classSpmvKernel.png b/classSpmvKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..57cf5d7157930ecdae54806ce205b770f1270a10 GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPOVBBm#UwT>t<74`jZ0^R=}9&;%e0 zj1L?*z}k679?0b=3GxeO04f53tEWPY7#J8WJY5_^Dj46+b==mhz{8*}UHo6VUa_Ic zOFQNA_e|@nlPnaEy%QAt$PyU(HJLLs^m&EQv8#D&+Y|h6-2Yv@koBAT>AK_F=N>0m{-BQ{p`&bx_4^#xs^ZU_o?J$REuVEpv) zu_?ZHul!#2^pbbpOD&tbXS}NHpZ+Rjl6b`4%3!RcctGZ%rI_Hy$Nct*1~RR_&lQ2; O%HZkh=d#Wzp$P!&Ft!!| literal 0 HcmV?d00001 diff --git a/classSpmvManager-members.html b/classSpmvManager-members.html new file mode 100644 index 0000000..c6f3fd9 --- /dev/null +++ b/classSpmvManager-members.html @@ -0,0 +1,128 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
SpmvManager Member List
+
+
+ +

This is the complete list of members for SpmvManager, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addComputePipe(int id, int inputWidth)SpmvManagerinlinepackage
addPaddingKernel(String stream)SpmvManagerinlinepackage
addUnpaddingKernel(String stream, int bitwidth, int id)SpmvManagerinlinepackage
cacheSizeSpmvManagerprivate
DBG_PAR_CSR_CTLSpmvManagerprivatestatic
DBG_REDUCTION_KERNELSpmvManagerprivatestatic
DBG_SPMV_KERNELSpmvManagerprivatestatic
dramReductionEnabledSpmvManagerprivatestatic
FLOATING_POINT_LATENCYSpmvManagerprivatestatic
getComputeKernel(int id)SpmvManagerinlinepackage
getFanoutName(int id)SpmvManagerinlinepackage
getPaddingCycles(InterfaceParam outSizeBytes, InterfaceParam outWidthBytes)SpmvManagerinlineprivate
getPaddingKernel(String id)SpmvManagerinlinepackage
getReadControl(int id)SpmvManagerinlinepackage
getReductionKernel(int id)SpmvManagerinlinepackage
getUnpaddingKernel(String stream)SpmvManagerinlinepackage
indexWidthSpmvManagerprivatestatic
inputWidthSpmvManagerprivate
interfaceDefault()SpmvManagerinlineprivate
main(String[] args)SpmvManagerinlinestatic
mantissaWidthSpmvManagerprivatestatic
maxRowsSpmvManagerprivate
numPipesSpmvManagerprivate
setUpComputePipe(EngineInterface ei, int id, InterfaceParam vectorLoadCycles, InterfaceParam nPartitions, InterfaceParam n, InterfaceParam outResultStartAddress, InterfaceParam outResultSize, InterfaceParam vStartAddress, InterfaceParam colPtrStartAddress, InterfaceParam colptrSize, InterfaceParam indptrValuesStartAddress, InterfaceParam indptrValuesSize, InterfaceParam totalCycles, InterfaceParam reductionCycles, InterfaceParam nIterations)SpmvManagerinlinepackage
setupUnpaddingKernel(EngineInterface ei, String kernelId, String memoryStream, InterfaceParam size, InterfaceParam inputWidthBytes, InterfaceParam iterations, InterfaceParam startAddress)SpmvManagerinlineprivate
smallestMultipleLargerThan(InterfaceParam x, long y)SpmvManagerinlineprivate
SpmvManager(SpmvEngineParams ep)SpmvManagerinlinepackage
+ + + + diff --git a/classSpmvManager.html b/classSpmvManager.html new file mode 100644 index 0000000..e25671b --- /dev/null +++ b/classSpmvManager.html @@ -0,0 +1,975 @@ + + + + + + +Spark: SpmvManager Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+
+Inheritance diagram for SpmvManager:
+
+
+ + + +
+ + + + +

+Static Public Member Functions

static void main (String[] args)
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Package Functions

 SpmvManager (SpmvEngineParams ep)
 
void addComputePipe (int id, int inputWidth)
 
DFELink addPaddingKernel (String stream)
 
DFELink addUnpaddingKernel (String stream, int bitwidth, int id)
 
String getComputeKernel (int id)
 
String getReductionKernel (int id)
 
String getPaddingKernel (String id)
 
String getReadControl (int id)
 
String getFanoutName (int id)
 
String getUnpaddingKernel (String stream)
 
void setUpComputePipe (EngineInterface ei, int id, InterfaceParam vectorLoadCycles, InterfaceParam nPartitions, InterfaceParam n, InterfaceParam outResultStartAddress, InterfaceParam outResultSize, InterfaceParam vStartAddress, InterfaceParam colPtrStartAddress, InterfaceParam colptrSize, InterfaceParam indptrValuesStartAddress, InterfaceParam indptrValuesSize, InterfaceParam totalCycles, InterfaceParam reductionCycles, InterfaceParam nIterations)
 
+ + + + + + + + + +

+Private Member Functions

void setupUnpaddingKernel (EngineInterface ei, String kernelId, String memoryStream, InterfaceParam size, InterfaceParam inputWidthBytes, InterfaceParam iterations, InterfaceParam startAddress)
 
InterfaceParam smallestMultipleLargerThan (InterfaceParam x, long y)
 
InterfaceParam getPaddingCycles (InterfaceParam outSizeBytes, InterfaceParam outWidthBytes)
 
EngineInterface interfaceDefault ()
 
+ + + + + + + + + +

+Private Attributes

final int cacheSize
 
final int inputWidth
 
final int maxRows
 
final int numPipes
 
+ + + + + + + + + + + + + + + +

+Static Private Attributes

static final int mantissaWidth = 53
 
static final int indexWidth = 32
 
static final int FLOATING_POINT_LATENCY = 16
 
static final boolean DBG_PAR_CSR_CTL = false
 
static final boolean DBG_SPMV_KERNEL = false
 
static final boolean DBG_REDUCTION_KERNEL = false
 
static final boolean dramReductionEnabled = true
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
SpmvManager.SpmvManager (SpmvEngineParams ep)
+
+inlinepackage
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SpmvManager.addComputePipe (int id,
int inputWidth 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DFELink SpmvManager.addPaddingKernel (String stream)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
DFELink SpmvManager.addUnpaddingKernel (String stream,
int bitwidth,
int id 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getComputeKernel (int id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getFanoutName (int id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
InterfaceParam SpmvManager.getPaddingCycles (InterfaceParam outSizeBytes,
InterfaceParam outWidthBytes 
)
+
+inlineprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getPaddingKernel (String id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getReadControl (int id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getReductionKernel (int id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getUnpaddingKernel (String stream)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
EngineInterface SpmvManager.interfaceDefault ()
+
+inlineprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void SpmvManager.main (String[] args)
+
+inlinestatic
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void SpmvManager.setUpComputePipe (EngineInterface ei,
int id,
InterfaceParam vectorLoadCycles,
InterfaceParam nPartitions,
InterfaceParam n,
InterfaceParam outResultStartAddress,
InterfaceParam outResultSize,
InterfaceParam vStartAddress,
InterfaceParam colPtrStartAddress,
InterfaceParam colptrSize,
InterfaceParam indptrValuesStartAddress,
InterfaceParam indptrValuesSize,
InterfaceParam totalCycles,
InterfaceParam reductionCycles,
InterfaceParam nIterations 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void SpmvManager.setupUnpaddingKernel (EngineInterface ei,
String kernelId,
String memoryStream,
InterfaceParam size,
InterfaceParam inputWidthBytes,
InterfaceParam iterations,
InterfaceParam startAddress 
)
+
+inlineprivate
+
+

An unpadding kernel reads a stream from memory and discards the bytes which were added to pad the data to a multiple of BURST_SIZE_BYTES.

+
Parameters
+ + + + +
sizesize in number of elements of the stream
memoryStreamthe stream from memory to unpad
inputWidthBytesthe number of bytes the kernel should read (and write) every cycle
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
InterfaceParam SpmvManager.smallestMultipleLargerThan (InterfaceParam x,
long y 
)
+
+inlineprivate
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.cacheSize
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean SpmvManager.DBG_PAR_CSR_CTL = false
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean SpmvManager.DBG_REDUCTION_KERNEL = false
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean SpmvManager.DBG_SPMV_KERNEL = false
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean SpmvManager.dramReductionEnabled = true
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.FLOATING_POINT_LATENCY = 16
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.indexWidth = 32
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.inputWidth
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.mantissaWidth = 53
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.maxRows
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.numPipes
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classSpmvManager.png b/classSpmvManager.png new file mode 100644 index 0000000000000000000000000000000000000000..d86ac1b1309958e5b902526682d8496c2f47d1b0 GIT binary patch literal 547 zcmV+;0^I$HP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d00059NklO$T>S>W@$NKzXipN>%k-6|@Id^!t-y%z?@_S>{Vum$H|ovwh~e?LPzg zmb!FYvLn}A3J>m9jrDu`x&@pwYvbW<>zY9g$ zR9#4VA9P0uVV=K7wQ79nsp#H(vg-e=SWVSEc{B80zmJ1_zMj47Iyc$+OsJ}k>MKDa zA`=Agwq5`;Gz;{4O(M+#{c`4zrh&e&>J|uKObY}sqy+*P(gFbtX@LNSv_JquS|ETS zEl~Os5t$(b;CU?&z>xk5l*$93tFkoWTLh)?`7!3il`jBYbwGJ`8>YoPNb;Z@x@|OT zGxoK3c9Xi=<%9F11!My^V;jqQnK0f}F_@zuu^m7bf7u)?cfw`WMGuSNS(cvQytDF+ za|tTNa1V;kw_Q_JCm;de+|Lamgn9oS)v7xMrOK*tn$=X@?alBXx5e3`9|bk}dMu)g l3v7KR0EYCHAQ6!X`T + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
SpmvReductionKernel Member List
+
+
+ +

This is the complete list of members for SpmvReductionKernel, including all inherited members.

+ + +
SpmvReductionKernel(KernelParameters parameters, int fpl, int maxRows)SpmvReductionKernelinlineprotected
+ + + + diff --git a/classSpmvReductionKernel.html b/classSpmvReductionKernel.html new file mode 100644 index 0000000..3ebe27b --- /dev/null +++ b/classSpmvReductionKernel.html @@ -0,0 +1,159 @@ + + + + + + +Spark: SpmvReductionKernel Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
SpmvReductionKernel Class Reference
+
+
+
+Inheritance diagram for SpmvReductionKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 SpmvReductionKernel (KernelParameters parameters, int fpl, int maxRows)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
SpmvReductionKernel.SpmvReductionKernel (KernelParameters parameters,
int fpl,
int maxRows 
)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classSpmvReductionKernel.png b/classSpmvReductionKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..0a468e327ad1825014a9e00aee7055edb4df075f GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^9Y7qw!3-q7a-LNJQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;#OHD#{yZ(5+eaJ56y$Gmro_1RW_{q;lAL8+v0mZ);KN^&Pwa?-D+8*A-^4mqJ<^x5R_v`xw_e2zAKY?&=Z7xU+bT<0c-DGTsI& zM~1*AhD9ulE}TpqLM#HR9130n4pS5wG~g2dxsRO5VNGV3Uk*`deIjfpL$G@y^KL%> z`^=kfs94Qh*0|@yj63u8i@f;SG57sX5f!G1G1tQHIGj4>a(_F!+`(V50{&YnPn|K< zw@dBg+iX9p>}J~4^3Vyj5ppt3zZdkK+QPeY_tp7n@oRW5EC@fd`}28@vU3l^V&xNF zJy$p%rY_8K;k)Cjv{z2Mw%Tf66Bej_zTI(2!tqVkjD{~v|5#n=cz3>LGur}j_sieb zt^TImQFgY@l5a`su62@CxpB(+v*jM-&jEVr|8FLcPqiCo%+!6L?~)yCef?ng8DLB@ Nc)I$ztaD0e0sx{Y>#zU- literal 0 HcmV?d00001 diff --git a/classUnpaddingKernel-members.html b/classUnpaddingKernel-members.html new file mode 100644 index 0000000..0f71fcf --- /dev/null +++ b/classUnpaddingKernel-members.html @@ -0,0 +1,102 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
UnpaddingKernel Member List
+
+
+ +

This is the complete list of members for UnpaddingKernel, including all inherited members.

+ + +
UnpaddingKernel(KernelParameters parameters, int bitWidth, int id)UnpaddingKernelinlineprotected
+ + + + diff --git a/classUnpaddingKernel.html b/classUnpaddingKernel.html new file mode 100644 index 0000000..c6d357f --- /dev/null +++ b/classUnpaddingKernel.html @@ -0,0 +1,159 @@ + + + + + + +Spark: UnpaddingKernel Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
UnpaddingKernel Class Reference
+
+
+
+Inheritance diagram for UnpaddingKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 UnpaddingKernel (KernelParameters parameters, int bitWidth, int id)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
UnpaddingKernel.UnpaddingKernel (KernelParameters parameters,
int bitWidth,
int id 
)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classUnpaddingKernel.png b/classUnpaddingKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..a542a698e8c4a6ab398e9bc1904e96f60a7136b5 GIT binary patch literal 473 zcmV;~0Ve*5P)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004KNklV!KN<(caSJ#l;aU!0HhP20)fUk&%gn_8429Y*ZRS*89trQ(r zUYq8+?YPj{W_8bd#=e)sK9}HYn`M83OEC;DnTx(Rk|^XN9oGBKXEPqVDDHNno>`mmW? zCu|uAjJ#(nkDF6l9d6YNTbtnAwih<@uTB}(cGxACuG^SjS&w&e-m`YPwUo^{^yI4_ zT0?d{xwsS?YXkcC^(V|b&!W$4=eIS`y+2%A?R|g? + + + + + +Spark: Class Index + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Index
+
+ + + + + diff --git a/classspark_1_1dse_1_1Benchmark-members.html b/classspark_1_1dse_1_1Benchmark-members.html new file mode 100644 index 0000000..67028c2 --- /dev/null +++ b/classspark_1_1dse_1_1Benchmark-members.html @@ -0,0 +1,109 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::dse::Benchmark Member List
+
+
+ +

This is the complete list of members for spark::dse::Benchmark, including all inherited members.

+ + + + + +
add_matrix_path(std::string path)spark::dse::Benchmarkinline
get_benchmark_size() const spark::dse::Benchmarkinline
get_matrix_path(int id) const spark::dse::Benchmarkinline
pathsspark::dse::Benchmarkprivate
+ + + + diff --git a/classspark_1_1dse_1_1Benchmark.html b/classspark_1_1dse_1_1Benchmark.html new file mode 100644 index 0000000..49eeec6 --- /dev/null +++ b/classspark_1_1dse_1_1Benchmark.html @@ -0,0 +1,219 @@ + + + + + + +Spark: spark::dse::Benchmark Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::dse::Benchmark Class Reference
+
+
+ +

#include <Dse.hpp>

+ + + + + + + + +

+Public Member Functions

std::string get_matrix_path (int id) const
 
void add_matrix_path (std::string path)
 
int get_benchmark_size () const
 
+ + + +

+Private Attributes

std::vector< std::string > paths
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void spark::dse::Benchmark::add_matrix_path (std::string path)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::dse::Benchmark::get_benchmark_size () const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
std::string spark::dse::Benchmark::get_matrix_path (int id) const
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> spark::dse::Benchmark::paths
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1dse_1_1DseParameters-members.html b/classspark_1_1dse_1_1DseParameters-members.html new file mode 100644 index 0000000..0fad4b3 --- /dev/null +++ b/classspark_1_1dse_1_1DseParameters-members.html @@ -0,0 +1,109 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::dse::DseParameters Member List
+
+ + + + + diff --git a/classspark_1_1dse_1_1DseParameters.html b/classspark_1_1dse_1_1DseParameters.html new file mode 100644 index 0000000..65f26ca --- /dev/null +++ b/classspark_1_1dse_1_1DseParameters.html @@ -0,0 +1,171 @@ + + + + + + +Spark: spark::dse::DseParameters Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::dse::DseParameters Class Reference
+
+
+ +

#include <Dse.hpp>

+ + + + + + + + + + +

+Public Attributes

bool gflopsOnly
 
spark::utils::Range numPipesRange {1, 4, 1}
 
spark::utils::Range inputWidthRange {1, 3, 1}
 
spark::utils::Range cacheSizeRange {1024, 2048, 1024}
 
+

Member Data Documentation

+ +
+
+ + + + +
spark::utils::Range spark::dse::DseParameters::cacheSizeRange {1024, 2048, 1024}
+
+ +
+
+ +
+
+ + + + +
bool spark::dse::DseParameters::gflopsOnly
+
+ +
+
+ +
+
+ + + + +
spark::utils::Range spark::dse::DseParameters::inputWidthRange {1, 3, 1}
+
+ +
+
+ +
+
+ + + + +
spark::utils::Range spark::dse::DseParameters::numPipesRange {1, 4, 1}
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1dse_1_1DseResult-members.html b/classspark_1_1dse_1_1DseResult-members.html new file mode 100644 index 0000000..cb3ea22 --- /dev/null +++ b/classspark_1_1dse_1_1DseResult-members.html @@ -0,0 +1,109 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::dse::DseResult Member List
+
+
+ +

This is the complete list of members for spark::dse::DseResult, including all inherited members.

+ + + + + +
bestArchitecturespark::dse::DseResult
DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)spark::dse::DseResultinline
DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)spark::dse::DseResultinline
matricesspark::dse::DseResult
+ + + + diff --git a/classspark_1_1dse_1_1DseResult.html b/classspark_1_1dse_1_1DseResult.html new file mode 100644 index 0000000..19b5bcb --- /dev/null +++ b/classspark_1_1dse_1_1DseResult.html @@ -0,0 +1,211 @@ + + + + + + +Spark: spark::dse::DseResult Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::dse::DseResult Class Reference
+
+
+ +

#include <Dse.hpp>

+ + + + + + +

+Public Member Functions

 DseResult (std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
 
 DseResult (std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
 
+ + + + + +

+Public Attributes

std::shared_ptr
+< spark::spmv::SpmvArchitecture > 
bestArchitecture
 
std::vector< std::string > matrices
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
spark::dse::DseResult::DseResult (std::string path,
std::shared_ptr< spark::spmv::SpmvArchitecture > arch 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
spark::dse::DseResult::DseResult (std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
std::shared_ptr<spark::spmv::SpmvArchitecture> spark::dse::DseResult::bestArchitecture
+
+ +
+
+ +
+
+ + + + +
std::vector<std::string> spark::dse::DseResult::matrices
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1dse_1_1SparkDse-members.html b/classspark_1_1dse_1_1SparkDse-members.html new file mode 100644 index 0000000..e3d403a --- /dev/null +++ b/classspark_1_1dse_1_1SparkDse-members.html @@ -0,0 +1,107 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::dse::SparkDse Member List
+
+
+ +

This is the complete list of members for spark::dse::SparkDse, including all inherited members.

+ + + +
run(const Benchmark &benchmark, const DseParameters &dseParams)spark::dse::SparkDse
SparkDse()spark::dse::SparkDseinline
+ + + + diff --git a/classspark_1_1dse_1_1SparkDse.html b/classspark_1_1dse_1_1SparkDse.html new file mode 100644 index 0000000..c8868a3 --- /dev/null +++ b/classspark_1_1dse_1_1SparkDse.html @@ -0,0 +1,170 @@ + + + + + + +Spark: spark::dse::SparkDse Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::dse::SparkDse Class Reference
+
+
+ +

#include <Dse.hpp>

+ + + + + + +

+Public Member Functions

 SparkDse ()
 
std::vector< DseResult > run (const Benchmark &benchmark, const DseParameters &dseParams)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::dse::SparkDse::SparkDse ()
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::vector< DseResult > spark::dse::SparkDse::run (const Benchmark & benchmark,
const DseParameters & dseParams 
)
+
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classspark_1_1io_1_1MmReader-members.html b/classspark_1_1io_1_1MmReader-members.html new file mode 100644 index 0000000..6881b80 --- /dev/null +++ b/classspark_1_1io_1_1MmReader-members.html @@ -0,0 +1,122 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::io::MmReader< value_type > Member List
+
+ + + + + diff --git a/classspark_1_1io_1_1MmReader.html b/classspark_1_1io_1_1MmReader.html new file mode 100644 index 0000000..2a73e99 --- /dev/null +++ b/classspark_1_1io_1_1MmReader.html @@ -0,0 +1,565 @@ + + + + + + +Spark: spark::io::MmReader< value_type > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::io::MmReader< value_type > Class Template Reference
+
+
+ +

#include <Io.hpp>

+ + + + + + + + + + +

+Public Member Functions

 MmReader (std::string _path)
 
virtual ~MmReader ()
 
std::vector< double > readVector ()
 
spark::sparse::SparkCooMatrix
+< value_type > 
mmreadMatrix (std::string path)
 
+ + + + + +

+Private Types

using SparseMatrix = spark::sparse::SparkCooMatrix< value_type >
 
using CoordType = typename SparseMatrix::CoordType
 
+ + + + + + + +

+Private Member Functions

SparseMatrix::CoordType mmparse (const std::string line)
 
void parseHeader (std::string line)
 
bool parseHeader (bool pprint=false)
 
+ + + + + + + + + + + + + + + + + +

+Private Attributes

bool sparse = false
 
bool symmetric = false
 
bool matrix = false
 
int ncols
 
int nrows
 
int nnzs = -1
 
std::ifstream * f
 
std::string path
 
+

Member Typedef Documentation

+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
using spark::io::MmReader< value_type >::CoordType = typename SparseMatrix::CoordType
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
using spark::io::MmReader< value_type >::SparseMatrix = spark::sparse::SparkCooMatrix<value_type>
+
+private
+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + + + + + +
spark::io::MmReader< value_type >::MmReader (std::string _path)
+
+inline
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + + + + +
virtual spark::io::MmReader< value_type >::~MmReader ()
+
+inlinevirtual
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + + + + + +
SparseMatrix::CoordType spark::io::MmReader< value_type >::mmparse (const std::string line)
+
+inlineprivate
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + + + + + +
spark::sparse::SparkCooMatrix<value_type> spark::io::MmReader< value_type >::mmreadMatrix (std::string path)
+
+inline
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + + + + + +
void spark::io::MmReader< value_type >::parseHeader (std::string line)
+
+inlineprivate
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + + + + + +
bool spark::io::MmReader< value_type >::parseHeader (bool pprint = false)
+
+inlineprivate
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + + + + +
std::vector<double> spark::io::MmReader< value_type >::readVector ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
std::ifstream* spark::io::MmReader< value_type >::f
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
bool spark::io::MmReader< value_type >::matrix = false
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
int spark::io::MmReader< value_type >::ncols
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
int spark::io::MmReader< value_type >::nnzs = -1
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
int spark::io::MmReader< value_type >::nrows
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
std::string spark::io::MmReader< value_type >::path
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
bool spark::io::MmReader< value_type >::sparse = false
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type >
+ + + + + +
+ + + + +
bool spark::io::MmReader< value_type >::symmetric = false
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1model_1_1ImplementationParameters-members.html b/classspark_1_1model_1_1ImplementationParameters-members.html new file mode 100644 index 0000000..d81fe75 --- /dev/null +++ b/classspark_1_1model_1_1ImplementationParameters-members.html @@ -0,0 +1,110 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::model::ImplementationParameters Member List
+
+
+ +

This is the complete list of members for spark::model::ImplementationParameters, including all inherited members.

+ + + + + + +
ImplementationParameters(const LogicResourceUsage &_ru, double _memoryBandwidth)spark::model::ImplementationParametersinline
memoryBandwidthspark::model::ImplementationParameters
operator<(const ImplementationParameters &other) const spark::model::ImplementationParametersinline
ruspark::model::ImplementationParameters
to_string()spark::model::ImplementationParametersinline
+ + + + diff --git a/classspark_1_1model_1_1ImplementationParameters.html b/classspark_1_1model_1_1ImplementationParameters.html new file mode 100644 index 0000000..48a31e5 --- /dev/null +++ b/classspark_1_1model_1_1ImplementationParameters.html @@ -0,0 +1,236 @@ + + + + + + +Spark: spark::model::ImplementationParameters Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::model::ImplementationParameters Class Reference
+
+
+ +

#include <Model.hpp>

+ + + + + + + + +

+Public Member Functions

 ImplementationParameters (const LogicResourceUsage &_ru, double _memoryBandwidth)
 
std::string to_string ()
 
bool operator< (const ImplementationParameters &other) const
 
+ + + + + +

+Public Attributes

LogicResourceUsage ru
 
double memoryBandwidth
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
spark::model::ImplementationParameters::ImplementationParameters (const LogicResourceUsage & _ru,
double _memoryBandwidth 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool spark::model::ImplementationParameters::operator< (const ImplementationParameters & other) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string spark::model::ImplementationParameters::to_string ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
double spark::model::ImplementationParameters::memoryBandwidth
+
+ +
+
+ +
+
+ + + + +
LogicResourceUsage spark::model::ImplementationParameters::ru
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1model_1_1LogicResourceUsage-members.html b/classspark_1_1model_1_1LogicResourceUsage-members.html new file mode 100644 index 0000000..4c02ef9 --- /dev/null +++ b/classspark_1_1model_1_1LogicResourceUsage-members.html @@ -0,0 +1,117 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::model::LogicResourceUsage Member List
+
+ + + + + diff --git a/classspark_1_1model_1_1LogicResourceUsage.html b/classspark_1_1model_1_1LogicResourceUsage.html new file mode 100644 index 0000000..c127f61 --- /dev/null +++ b/classspark_1_1model_1_1LogicResourceUsage.html @@ -0,0 +1,405 @@ + + + + + + +Spark: spark::model::LogicResourceUsage Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::model::LogicResourceUsage Class Reference
+
+
+ +

#include <Model.hpp>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 LogicResourceUsage ()
 
 LogicResourceUsage (int _l, int _f, int _b, int _d)
 
 LogicResourceUsage (const LogicResourceUsage &ru)
 
std::string to_string ()
 
const LogicResourceUsage operator+ (const LogicResourceUsage &ru) const
 
const LogicResourceUsage operator* (int x) const
 
const LogicResourceUsage operator* (double x) const
 
const bool operator< (const LogicResourceUsage &ru) const
 
+ + + + + + + + + +

+Public Attributes

int luts
 
int ffs
 
int brams
 
int dsps
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::model::LogicResourceUsage::LogicResourceUsage ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::model::LogicResourceUsage::LogicResourceUsage (int _l,
int _f,
int _b,
int _d 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
spark::model::LogicResourceUsage::LogicResourceUsage (const LogicResourceUsage & ru)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
const LogicResourceUsage spark::model::LogicResourceUsage::operator* (int x) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const LogicResourceUsage spark::model::LogicResourceUsage::operator* (double x) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const LogicResourceUsage spark::model::LogicResourceUsage::operator+ (const LogicResourceUsage & ru) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const bool spark::model::LogicResourceUsage::operator< (const LogicResourceUsage & ru) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string spark::model::LogicResourceUsage::to_string ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
int spark::model::LogicResourceUsage::brams
+
+ +
+
+ +
+
+ + + + +
int spark::model::LogicResourceUsage::dsps
+
+ +
+
+ +
+
+ + + + +
int spark::model::LogicResourceUsage::ffs
+
+ +
+
+ +
+
+ + + + +
int spark::model::LogicResourceUsage::luts
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1sparse_1_1SparkCooMatrix-members.html b/classspark_1_1sparse_1_1SparkCooMatrix-members.html new file mode 100644 index 0000000..ea2de37 --- /dev/null +++ b/classspark_1_1sparse_1_1SparkCooMatrix-members.html @@ -0,0 +1,110 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::sparse::SparkCooMatrix< value_type > Member List
+
+ + + + + diff --git a/classspark_1_1sparse_1_1SparkCooMatrix.html b/classspark_1_1sparse_1_1SparkCooMatrix.html new file mode 100644 index 0000000..c15c31f --- /dev/null +++ b/classspark_1_1sparse_1_1SparkCooMatrix.html @@ -0,0 +1,227 @@ + + + + + + +Spark: spark::sparse::SparkCooMatrix< value_type > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::sparse::SparkCooMatrix< value_type > Class Template Reference
+
+
+ +

#include <SparseMatrix.hpp>

+ + + + +

+Public Types

using CoordType = std::tuple< int, int, value_type >
 
+ + + +

+Public Member Functions

 SparkCooMatrix (int _n, int _m)
 
+ + + + + + + +

+Public Attributes

int n
 
int m
 
std::vector< CoordType > data
 
+

Member Typedef Documentation

+ +
+
+
+template<typename value_type>
+ + + + +
using spark::sparse::SparkCooMatrix< value_type >::CoordType = std::tuple<int, int, value_type>
+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
spark::sparse::SparkCooMatrix< value_type >::SparkCooMatrix (int _n,
int _m 
)
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename value_type>
+ + + + +
std::vector<CoordType> spark::sparse::SparkCooMatrix< value_type >::data
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + +
int spark::sparse::SparkCooMatrix< value_type >::m
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + +
int spark::sparse::SparkCooMatrix< value_type >::n
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html b/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html new file mode 100644 index 0000000..216c393 --- /dev/null +++ b/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html @@ -0,0 +1,108 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::sparse_linear_solvers::DfeBiCgSolver Member List
+
+
+ +

This is the complete list of members for spark::sparse_linear_solvers::DfeBiCgSolver, including all inherited members.

+ + + + +
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)spark::sparse_linear_solvers::DfeBiCgSolvervirtual
+ + + + diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html b/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html new file mode 100644 index 0000000..afe1b50 --- /dev/null +++ b/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html @@ -0,0 +1,168 @@ + + + + + + +Spark: spark::sparse_linear_solvers::DfeBiCgSolver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::sparse_linear_solvers::DfeBiCgSolver Class Reference
+
+
+ +

#include <SparseLinearSolvers.hpp>

+
+Inheritance diagram for spark::sparse_linear_solvers::DfeBiCgSolver:
+
+
+ + +spark::sparse_linear_solvers::Solver + +
+ + + + + + + + + +

+Public Member Functions

virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
- Public Member Functions inherited from spark::sparse_linear_solvers::Solver
virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd spark::sparse_linear_solvers::DfeBiCgSolver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+virtual
+
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.png b/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.png new file mode 100644 index 0000000000000000000000000000000000000000..713a05b8579b2b0f45356f650bdd7a0002d8c4c0 GIT binary patch literal 907 zcmeAS@N?(olHy`uVBq!ia0y~yVB`R@12~w0ZQd`TJl0 z9TtNg{Y{FwX4Ts^PrbzA?etIQWc@~+(@C*nIx3l_9L)-vNdjz+K~GWzI#uE?wm;6j z&&~Jp<9G9$wJa>2_b%-`pH(<(FXNF@mbw3JH|DRe{CD{~o7+?2wH>!2YD}K(+ps_9 zs#?{~&kLD7*{qm1E}y&k{Kn!3F7qxKUs5l0`MR=V>-}3V9$A$rob=FdusHns`Znci zx35l9(vm}Wm3_Nx4JG|1*TDu}kP2V_^mnjhT6W%6iUUeUzZQ_)}+?ORkQcRB`-`_-$FjvD-fNR7pL(du`>b_lY%UGy03$ zZue|m8?#L~0t9YubGg=eKeu;rUX_B=VxRcx#Wne6V)OmZ?EQR;QKI2SPgB + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::sparse_linear_solvers::DfeCgSolver Member List
+
+
+ +

This is the complete list of members for spark::sparse_linear_solvers::DfeCgSolver, including all inherited members.

+ + + + +
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)spark::sparse_linear_solvers::DfeCgSolvervirtual
+ + + + diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html b/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html new file mode 100644 index 0000000..f076f01 --- /dev/null +++ b/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html @@ -0,0 +1,168 @@ + + + + + + +Spark: spark::sparse_linear_solvers::DfeCgSolver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::sparse_linear_solvers::DfeCgSolver Class Reference
+
+
+ +

#include <SparseLinearSolvers.hpp>

+
+Inheritance diagram for spark::sparse_linear_solvers::DfeCgSolver:
+
+
+ + +spark::sparse_linear_solvers::Solver + +
+ + + + + + + + + +

+Public Member Functions

virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
- Public Member Functions inherited from spark::sparse_linear_solvers::Solver
virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd spark::sparse_linear_solvers::DfeCgSolver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+virtual
+
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.png b/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.png new file mode 100644 index 0000000000000000000000000000000000000000..dc67ab899a6dd2bfb72cc4b86f90c25452cf6099 GIT binary patch literal 864 zcmV-m1E2hfP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0008-NklSg}Y_P)&MCim6F2 zNip>aeUhY4v^qZaz2T77f1hRd+w_w3NMoPP;xzj%`mLhr{pVHSckI`H`>>8tdB^U3 zZESpO%za^h*d`af#JzNoB&Q4dJ=dIa4w$1Q>HM^e?45o@>r)lUU-{_9_0mC-ysqib znD)}2vX)W3(96wPm97mK-`;uC`wo)ib))l-E^5}YXS6RA6RFHC8ylZCOl~$8-4E2h zgCsd!PrY8@i+J5)yAkhprn{R>nDU&T$Ni>*BvpER?klQ+(YW&)^u9>PS0{zBgCu!9 zn)yYtcH}gSu4aBYk&RD#<{y(Fk8pE1%-OkikR+$!`~KGJ^OG03B>lC1g?<}9{rAp8 zGfDa;&ApeTn40vG6jPI4l45G5UzTNwDu6%K7eH8rrvLhij31hQg%6A$n|{uGfT)`E z05LV`0b**>1H{y%2Z*Uj4-iw69w4SBJwQxNdVrXk^Z+q6=>cMD(gVcQqzCvbrIb=w zkpO~f(gVcQqz8zpG5yEYSsfqyjvd~k`h8X2t&Hvj{aJc|N4i0uzY5yYxAhai>7?JP zwf=m&?tk9vCQ!$yykqyiHa0#s=Dx5$Y?F&_P+n0_qav2g_cEwWW6w3GoQ<l72ar5l(VbEq@16=Eq7dgQ1=t*`zK)>xyF)IO_ZkhqymLDkqef?*9|FE1D qJwPB$dVrXk^Z+rn(x;SCRQ&_^Dm5f+e$`C?0000 + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::sparse_linear_solvers::EigenSolver Member List
+
+
+ +

This is the complete list of members for spark::sparse_linear_solvers::EigenSolver, including all inherited members.

+ + + + +
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)spark::sparse_linear_solvers::EigenSolvervirtual
+ + + + diff --git a/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html b/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html new file mode 100644 index 0000000..34ba163 --- /dev/null +++ b/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html @@ -0,0 +1,168 @@ + + + + + + +Spark: spark::sparse_linear_solvers::EigenSolver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::sparse_linear_solvers::EigenSolver Class Reference
+
+
+ +

#include <SparseLinearSolvers.hpp>

+
+Inheritance diagram for spark::sparse_linear_solvers::EigenSolver:
+
+
+ + +spark::sparse_linear_solvers::Solver + +
+ + + + + + + + + +

+Public Member Functions

virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
- Public Member Functions inherited from spark::sparse_linear_solvers::Solver
virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd spark::sparse_linear_solvers::EigenSolver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+virtual
+
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classspark_1_1sparse__linear__solvers_1_1EigenSolver.png b/classspark_1_1sparse__linear__solvers_1_1EigenSolver.png new file mode 100644 index 0000000000000000000000000000000000000000..5d03df221755bb1dab559f0396d6727822738b23 GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^KY=)agBeJ^X;N+hQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;x9aey&W{f4wei;;GiS zIMLJXW<6Kjf8BUf*Pt?0V&1pwCo`{Ya6iSJ_v^5gnOWQqvkJ>WZ+wpVjd$KMIEQ?>qtg`aJgW9^+Uw?d)j+^vPvhLtdv#hH3(~g^X z{^EEx&pSxR=lLWN?#nw>jvjhd6FE&)iQ%8*J_aYHHJ{h7UvcfQReUe|R=Mjx=e%XO zXfT)g$e|KG0q)C|4nS=T8wm>R@1GLH#VO?A09SqE=k2MH%<{+km_Nn5GyeW`=iB2=NR=itewBa`rLM}wg2BO{CR#~UW=7V{qc8|o@Rz&#`;g%b5~rMJ9Tc-jGvDB z&z3ImReWB#D?@`l`$`D zw + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::sparse_linear_solvers::Solver Member List
+
+
+ +

This is the complete list of members for spark::sparse_linear_solvers::Solver, including all inherited members.

+ + + + +
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)=0spark::sparse_linear_solvers::Solverpure virtual
+ + + + diff --git a/classspark_1_1sparse__linear__solvers_1_1Solver.html b/classspark_1_1sparse__linear__solvers_1_1Solver.html new file mode 100644 index 0000000..26f7f6e --- /dev/null +++ b/classspark_1_1sparse__linear__solvers_1_1Solver.html @@ -0,0 +1,216 @@ + + + + + + +Spark: spark::sparse_linear_solvers::Solver Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::sparse_linear_solvers::Solver Class Referenceabstract
+
+
+ +

#include <SparseLinearSolvers.hpp>

+
+Inheritance diagram for spark::sparse_linear_solvers::Solver:
+
+
+ + +spark::sparse_linear_solvers::DfeBiCgSolver +spark::sparse_linear_solvers::DfeCgSolver +spark::sparse_linear_solvers::EigenSolver + +
+ + + + + + + + +

+Public Member Functions

virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)=0
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void spark::sparse_linear_solvers::Solver::analyze (const Eigen::SparseMatrix< double > & A)
+
+inlinevirtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void spark::sparse_linear_solvers::Solver::preprocess (const Eigen::SparseMatrix< double > & A)
+
+inlinevirtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Eigen::VectorXd spark::sparse_linear_solvers::Solver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+pure virtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1sparse__linear__solvers_1_1Solver.png b/classspark_1_1sparse__linear__solvers_1_1Solver.png new file mode 100644 index 0000000000000000000000000000000000000000..f8cb4daa2f2a4c1e989c82dd22aff377fa209b16 GIT binary patch literal 1579 zcmbVMc~H|w6ix_)fP?@lagD7WG0Bj*>SovyZgQOcHXz|+c%r*?dbwn)KUb2 zKycSnPCg(I1PNeo7z9`c(cm0l)9^m+=PZ><0XVxLyiD#X0?_BlX0zpTdAfiJi}UgH z1p$Y)2e;qP3Dw z@LKYyw7D}&PG(S?!C?F9h=_&laCfvGn?A`l#7czkB`nUOq-$ywJ3rJ{z2%nD#6v_U zk6Dds&-XH4557sy=R?bi7!D+>?7aa&zl)cDWbSO!f=AE?!|^FgW-Y006%Q})qez+x zJ7mjNpI!Uobt;Z2u9j$<8xu|n??aXe{%KY|({R)Mp&6h{*W-E5D|P83o_5*~-k|9P zJ+Yd+j|C6Yt@8 z4C`8KvISO~G2XhF9_UuEcKFpl543YT-Ha;LcJdcdYhaHIczWX=gBZQZSA_)b)q%2p+SabG zuLMX6c~|lb1Xj***N4bj>Y3y!sk|k%8<_nYumoNx#tqO`Fr+CX3o|_clnkCO=eX_w z48zX`5odS-aGoJe* zXZDJAXJmt%i(z0$4XiUyUsVR`q#C!|SzlHuM}PL4JSUijit{jPSFVbwUS4&bk=nix zhh4}0&loteNk&&1YEEU5!2c&f`c?gbCgic9Bn)LLI~TwJCnfBCzYl76K%^h)s*w*W z$Pn3h62&Eb5!{nK<%bd~>K1y5_8u*_$If?2BC%gJhzO#+H>8-z?hNF&kt-4Ct&<*W zchWq`f;|)(tv1miW1vbx??{Ulc-eoCiuzO6YrgVn{Totf7EWVe7;Z^ip8HJFkj5nw;iVvQduw8R+lzxUL_`A zf=AvNAqltp!cLjTrVf`T9|^^brZn@`b6O_+F4v7zuk{n3w9a_mUF=$17{%V&W2!vh z+$MDGT3tp@EQTdH=VvmysRt6869`o=ZXw*$i^$f~nM;JhN|q+KOj8IJ~tT&Fuq@BR+{IH;)la#A`qinV(KFgPRMg%5q`RJ z$UgQls&J$)wykAhkae~&fjYJOkaEw5;G0T!(mco($kqCIyWciiSkDu?%J864Igy}U zGVY>1Y=9iP&lij8S6(%B*E}xP2TCN)0V4G@HM9k;&DsjI+s;)&MMfAF_aLMG#VTM zr_t6gRAOd%TGDGs4n5kx_~^??DRzJW8%U@|geS+KQC#DK>mxLpCd&?a%xIuFV55<- zao8i+x0=?up5R3}$la{lsa$V4r nFpOhlVHk#@0(3aWdQ0A_rZ#*EXX6I^>>yWXPp1aQkSl)y#)#rx literal 0 HcmV?d00001 diff --git a/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html b/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html new file mode 100644 index 0000000..2dccf51 --- /dev/null +++ b/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html @@ -0,0 +1,132 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::spmv::FstSpmvArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::FstSpmvArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth) overridespark::spmv::FstSpmvArchitectureinlineprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
FstSpmvArchitecture()spark::spmv::FstSpmvArchitectureinline
FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::FstSpmvArchitectureinline
get_name() overridespark::spmv::FstSpmvArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)spark::spmv::SpmvArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+ + + + diff --git a/classspark_1_1spmv_1_1FstSpmvArchitecture.html b/classspark_1_1spmv_1_1FstSpmvArchitecture.html new file mode 100644 index 0000000..a3ff95d --- /dev/null +++ b/classspark_1_1spmv_1_1FstSpmvArchitecture.html @@ -0,0 +1,329 @@ + + + + + + +Spark: spark::spmv::FstSpmvArchitecture Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv::FstSpmvArchitecture Class Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::FstSpmvArchitecture:
+
+
+ + +spark::spmv::SimpleSpmvArchitecture +spark::spmv::SpmvArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FstSpmvArchitecture ()
 
 FstSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + + + + + +

+Protected Member Functions

virtual int countComputeCycles (uint32_t *v, int size, int inputWidth) override
 
- Protected Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
virtual bool equals (const SpmvArchitecture &a) const override
 
- Protected Member Functions inherited from spark::spmv::SpmvArchitecture
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
 
+ + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from spark::spmv::SimpleSpmvArchitecture
const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual int spark::spmv::FstSpmvArchitecture::countComputeCycles (uint32_t * v,
int size,
int inputWidth 
)
+
+inlineoverrideprotectedvirtual
+
+ +

Reimplemented from spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::FstSpmvArchitecture::get_name ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from spark::spmv::SimpleSpmvArchitecture.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1spmv_1_1FstSpmvArchitecture.png b/classspark_1_1spmv_1_1FstSpmvArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c815234e1d6165d49a997b7a587f871e70e281c1 GIT binary patch literal 1225 zcmeAS@N?(olHy`uVBq!ia0vp^_kg&AgBeKf&s&-gq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYLB0OCjLn;{G&b_$qu@;Z3xOLF~|C94? zwIoP;+}=5NqJzxFsq+$g#LdoW-`^)zt znrD0eO@G$A)p!3h-aGv#&v#eykLrr`#`nM5J+hW}H%O~aF7Zv>S+UDa^8E}>zWL|( zl>dtjo9^kksq%?GvwG*POS{u&Qd`acdr{itW9x_iYWC zda>)TTG90=E4O_fRX11fdindz--~y--&#pM-5IgJcCpm@S`ov=`?bzp+9tE?t#tU} z)k@{1ca1;&RSl_rG3R;r4u?rnRlo24eqsFCTG{j0La})&doS*&m}IgJ$m(6ys_wZs z>o_n}W`{BS58`jAG&R5X*wFO;oeJx_XKE%tUVDzyV4axUffZ2|42!cKGWM)$Wj9zw zNZ^BU?(J=7waq+dg>w5(asvnUS2=ypOX6O?%t$UpP&D%VBUR8a;vSR&tp5!GLy1z+)DHOT{@PStxDq4 z3=5K+nt5{hlrtTXJs(3V_)NlrL+6C^ZvAk}@v6D1XJSmJeyi}#-sPv)beBt%d^n}H zZEJ{U{?R(&DX*nGHy!@-$<0e^@tqbc!Kt}deOKFk`1Y>VPp0=%%$oZuJ1^?2+P54M z8S*0OFFp7!f9t)(ksPpZ-C2&gn*wWcyG0(hH0U z%ieBvPvgvoo|k|jJ;`KM*&bjBX0m?J|H?2Uy!f%LT=3_!z1uIJJ!5Wp@6{ZJ$3#a3 zJhJSAy)@5i3msSkkIDQG`)oQkm(D!;t-iqv8XNOlKAV4RFe+*&_mes}Mcn>ywd_Z` z!j@t?KJU%54RrSa1_qm~1ebO+s|7hr9lUwZHjQ08cS+P22_5xs3 zyb*oAc7Kh^-B7m6JG>Iyw{~}~oB7c1Qt#H%OD0{vXYYRQvwn^#H2@2F7f+FF9q8mhvmY{+nCQtJ_yG@^=jvulr=(r2SI~`g + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::spmv::PrefetchingArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::PrefetchingArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth)spark::spmv::SimpleSpmvArchitectureprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
encodeEmptyRows(std::vector< uint32_t > pin, bool encode)spark::spmv::SkipEmptyRowsArchitectureinlineprotected
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
get_name() overridespark::spmv::PrefetchingArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
PrefetchingArchitecture()spark::spmv::PrefetchingArchitectureinline
PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::PrefetchingArchitectureinline
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) overridespark::spmv::SkipEmptyRowsArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
SkipEmptyRowsArchitecture()spark::spmv::SkipEmptyRowsArchitectureinline
SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SkipEmptyRowsArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+ + + + diff --git a/classspark_1_1spmv_1_1PrefetchingArchitecture.html b/classspark_1_1spmv_1_1PrefetchingArchitecture.html new file mode 100644 index 0000000..af81e9a --- /dev/null +++ b/classspark_1_1spmv_1_1PrefetchingArchitecture.html @@ -0,0 +1,286 @@ + + + + + + +Spark: spark::spmv::PrefetchingArchitecture Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv::PrefetchingArchitecture Class Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::PrefetchingArchitecture:
+
+
+ + +spark::spmv::SkipEmptyRowsArchitecture +spark::spmv::SimpleSpmvArchitecture +spark::spmv::SpmvArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PrefetchingArchitecture ()
 
 PrefetchingArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SkipEmptyRowsArchitecture
 SkipEmptyRowsArchitecture ()
 
 SkipEmptyRowsArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
- Public Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from spark::spmv::SkipEmptyRowsArchitecture
std::vector< uint32_t > encodeEmptyRows (std::vector< uint32_t > pin, bool encode)
 
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) override
 
- Protected Attributes inherited from spark::spmv::SimpleSpmvArchitecture
const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::PrefetchingArchitecture::get_name ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from spark::spmv::SkipEmptyRowsArchitecture.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1spmv_1_1PrefetchingArchitecture.png b/classspark_1_1spmv_1_1PrefetchingArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..dc4ec72f7c36ee57d5a4ad01d2a59fa3cdecc080 GIT binary patch literal 1721 zcma)-2~d+)5XXZEwLqnSC}$G|2NfC*(10Lv!-v6AS9CqS{IQ1#b^qbE&8=o_e($NpC!LAzDKELC^+kS z-_(?S5*Ht0(^6C=St>)$M8d7vbwRj{y3ZvgQ|3z+VWqU2(JE-S7B#uXazX9CzRt+A zUHcBKI_<`XVCliIV|`P4F@OceUJdpoWWypN4bt=D5(P@0E}ry0osB!g_|Rp~A>N{1 z%#|mm0!W2DMawT7rk%s`&^5zk80=$jFpo;sIlu#7`CGy&wJ;VnVSLT@5!0iP30?)8 z{TgNmu*;j)hadJ-jRsJMYY7W`l@%{nY&)Soq>`2{`JHWkS@(4YvEI^!v*@+2Oc;)B zvCV$CqLKb_#Xzb>sio@V56Wo|Y1&m(S+5Om{0Lb@rzXb1@cA6K;%PFkAZB=JXd-cK z<;G=g*J1PKBj(BD?!di+XXmwTOT>QjmSH~OmZ4U@dv@(^>2^}J(U2g6oT|4B#9vW{ zaO=&KkqoijUclGY#MTbey7lL$Ux&e{jig04m~qPZ!3P1VS`^hF4mh zpz87c*0V%`{crI-COiE3x@Oq_;P9`Yuzmj&0YPpHAZTKli-RGFL`n&0sH>+i881a^ z!sY7aWybnpwXogDyEoU9h7UtW<<_82+QH0h_Utzs?M9J})2;am*EY7ZT`xMT{q5xQ370B-_qGV=)nO$3T-i zm{W}~QPzd0H=Vuf1*C^F5N_sx@s`U?b?tV}y@@tnaZfI&D7Va%1+xNDaKR8Rp_xL@ zqgOk-;0}f5?b?mlsR*m>`M!~zlGl6i-1f=g&xPRyRv$Ai)~6UH`oFPw#=NT>vd^~0 z#-B0;Lix8MX6GHY4YW8l_*Suo3XaJ_;i!yA)lW?Mz_ED5FC(3z(B4N0Ne+WiS;QN~ zmyvu{Z=(CG2;jhx9ed(}Qf97Q?MUDCp3`du8UCDrm|M|bnjhT@URGfD z`h88wV>3D?%S|m_Ym$^I2G=yt`N*^!X?v{U+3pz_cM_Ip7lqcptglgYUWwOIB;ej$ zwLwpopS_)m(~l#lLu$F^%ev_-5wb*lmwWGrDP|`$t)` zdaZ}xd*;{6tsp;%xkX3W@&su=r0iu^q^3-;&CY0yu>47CE1e3Fg+tAw0^ZH8<{eeE czK~_@iu2_A2aBT?!G8t<_#XFRc}0EwJ4?h}s{jB1 literal 0 HcmV?d00001 diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html b/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html new file mode 100644 index 0000000..a5e51cc --- /dev/null +++ b/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html @@ -0,0 +1,132 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::spmv::SimpleSpmvArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::SimpleSpmvArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth)spark::spmv::SimpleSpmvArchitectureprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
do_blocking(const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > &mat, int blockSize, int inputWidth)spark::spmv::SimpleSpmvArchitectureprivate
do_partition(const EigenSparseMatrix &mat, int numPipes)spark::spmv::SimpleSpmvArchitectureprivate
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
get_name() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)spark::spmv::SpmvArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+ + + + diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html b/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html new file mode 100644 index 0000000..471a9a1 --- /dev/null +++ b/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html @@ -0,0 +1,756 @@ + + + + + + +Spark: spark::spmv::SimpleSpmvArchitecture Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv::SimpleSpmvArchitecture Class Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::SimpleSpmvArchitecture:
+
+
+ + +spark::spmv::SpmvArchitecture +spark::spmv::FstSpmvArchitecture +spark::spmv::SkipEmptyRowsArchitecture +spark::spmv::PrefetchingArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + + + + +

+Protected Member Functions

virtual int countComputeCycles (uint32_t *v, int size, int inputWidth)
 
virtual bool equals (const SpmvArchitecture &a) const override
 
- Protected Member Functions inherited from spark::spmv::SpmvArchitecture
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
 
+ + + + + + + + + + + + + +

+Protected Attributes

const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
+ + + + + +

+Private Member Functions

std::vector< EigenSparseMatrix > do_partition (const EigenSparseMatrix &mat, int numPipes)
 
Partition do_blocking (const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > &mat, int blockSize, int inputWidth)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int ssarch::countComputeCycles (uint32_t * v,
int size,
int inputWidth 
)
+
+protectedvirtual
+
+ +

Reimplemented in spark::spmv::FstSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Eigen::VectorXd ssarch::dfespmv (Eigen::VectorXd x)
+
+overridevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::Partition ssarch::do_blocking (const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > & mat,
int blockSize,
int inputWidth 
)
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector< EigenSparseMatrix > ssarch::do_partition (const EigenSparseMatrix & mat,
int numPipes 
)
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool spark::spmv::SimpleSpmvArchitecture::equals (const SpmvArchitecture & a) const
+
+inlineoverrideprotectedvirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SimpleSpmvArchitecture::get_name ()
+
+inlineoverridevirtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual double spark::spmv::SimpleSpmvArchitecture::getEstimatedClockCycles ()
+
+inlinevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual double spark::spmv::SimpleSpmvArchitecture::getGFlopsCount ()
+
+inlinevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::model::ImplementationParameters spark::spmv::SimpleSpmvArchitecture::getImplementationParameters ()
+
+inlinevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool spark::spmv::SimpleSpmvArchitecture::operator== (const SimpleSpmvArchitecture & other) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ssarch::preprocess (const EigenSparseMatrix & mat)
+
+overridevirtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SimpleSpmvArchitecture::to_string ()
+
+inlinevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual boost::property_tree::ptree spark::spmv::SimpleSpmvArchitecture::write_params ()
+
+inlineoverridevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const int spark::spmv::SimpleSpmvArchitecture::cacheSize
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::spmv::SimpleSpmvArchitecture::inputWidth
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
EigenSparseMatrix spark::spmv::SimpleSpmvArchitecture::mat
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::spmv::SimpleSpmvArchitecture::maxRows
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::spmv::SimpleSpmvArchitecture::numPipes
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<Partition> spark::spmv::SimpleSpmvArchitecture::partitions
+
+protected
+
+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitecture.png b/classspark_1_1spmv_1_1SimpleSpmvArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f11bf591cfbb7a90b6355eecd30492edc6ca5c GIT binary patch literal 2306 zcmb`JeN>WJ9>*~gt+bufw5#T8E#zn>jlEboq-bq{MMhwnrIwYW2u#8QzT`_iM!_K=OJ@ocoN8O zz64nx-=?M}tGq5Z=+lNlz#oJ`ixwXBQ=%_4bQ!x7Lrk_9;f@rQdfQtm+736&hh(t7 zcw2#$Y;2t~y+C(<-3tq9eT{0e$9k59!_FbG1VmLNyEz7AuY??2Vt(6zmT4ux>;&$OpnU`vM zo9$DHwxqg6w>h6X8e$-LV&fo>+`ESxP^aJYXUNT7C*@VXC9@-G+m;Gz53RSa@F~FS z;B3ZsKuE`u6ouL&{tnG{$ZFCv@bJry(YG1p7}g&%_9EDfENFpa9Y3=D`XG0}aHWs^9NZ=w zu-y4NLDy(;JO+fFy_=Y|0h)5Ca&ouT*nI|v9OeL)=N?EbASGbO?o$8v=_Wx$(aAik z!0_g_SO4O+`%6)^D#^_8t8}GcVDv{XM_MO+JJA#0Y3#c1CzSzFcvlx85T3_t4T8NK)7b&P>m& z^Mr4o-P0edz{wSJQ;rP3UmqvNf`ZmF%7%>~9ovJI1|Bj!3|&E)cOjxjj^#?US(c#M zU6a0bZZ#GXe~*_7>e-c{YP;jN3X_ul>;zn(2=T0XARvY5w~cQ56i9E3zUiq#oas`P zr+tWj=l`nJIp)zZUp;$Zvg2!IfbeD>-{f4512zr6n5`A`!AA2hZRQ*z8Ct4820M_P za3CtGp#|>7fRu89vNN@y);W&s6a5xzW!{PvOJSB{SRWYNeGw${dBx9-7TM5m2Yz~4 zPs?(E2yplQPY4*p_!KLU-mo7p+?W4%$V|WLI*1!wcZ7f&bUMdNWApcPN|2r_H0!Yt zY}lnaKnTHMp$?2~1TP}c%B1;9C#@VAA5#VLj-Y};vS=dPXy1QLP`72>_qrLSB)}$l zF7?cx#C*crWjx^C^|sfUVJu#lez=@N#d(y<$mn)}rXQMpP0{Nqy{B-%vnbMzw|#wK zX=YTw*2F8pniA@{u8<5tSM1;rL$H@2PvMb48Br>WSIefV)3~97$(&ZHriVCXYM;~5 zP=&jr`2>?s^a<%WoW;O+(s$ZCDw=4 z_#W1rg_gTFXLejyP_aX0vc53$tyvqEgg5Z6OeE*{z9dAoNM&wwQUbP z`j~57!t$ye-&ea37qC2wXxobKlXK(f%M+yxWck7V<@NnpVi zwGtyn0N!!2-f4J&U>$4~W#_Cv`PRQggeEnA4{r)5>xa zo^)UuP^bf5NcGPWB+ng1o(taT!MAs2>b^Gl2EV^w23P{y@O>{%&qSc2T!Zb z!pvv5@xTJ>lPdhH?svmfdI6#?T+EjwE~|g@+)y@NE9hO(X`t3eWz>_Oh{?XZ8M)d{ z^0-@;bNg}QS^jMZfJtY55SEnUwTB(me*>UE+fM8QJv>AR^K$4^ literal 0 HcmV?d00001 diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html b/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html new file mode 100644 index 0000000..60fa7fa --- /dev/null +++ b/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html @@ -0,0 +1,115 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::spmv::SimpleSpmvArchitectureSpace< T > Member List
+
+ + + + + diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html b/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html new file mode 100644 index 0000000..b2570a9 --- /dev/null +++ b/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html @@ -0,0 +1,392 @@ + + + + + + +Spark: spark::spmv::SimpleSpmvArchitectureSpace< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv::SimpleSpmvArchitectureSpace< T > Class Template Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::SimpleSpmvArchitectureSpace< T >:
+
+
+ + +spark::spmv::SpmvArchitectureSpace + +
+ + + + + + + + + +

+Public Member Functions

 SimpleSpmvArchitectureSpace (spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)
 
 SimpleSpmvArchitectureSpace ()
 
- Public Member Functions inherited from spark::spmv::SpmvArchitectureSpace
std::shared_ptr< SpmvArchitecture > next ()
 
+ + + + + +

+Protected Member Functions

void restart () override
 
T * doNext ()
 
+ + + + + + + + + + + +

+Private Attributes

spark::utils::Range cacheSizeR {1024, 4096, 512}
 
spark::utils::Range inputWidthR {8, 100, 8}
 
spark::utils::Range numPipesR {1, 6, 1}
 
int maxRows
 
bool last = false
 
+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::SimpleSpmvArchitectureSpace< T >::SimpleSpmvArchitectureSpace (spark::utils::Range numPipesRange,
spark::utils::Range inputWidthRange,
spark::utils::Range cacheSizeRange,
int _maxRows 
)
+
+inline
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
spark::spmv::SimpleSpmvArchitectureSpace< T >::SimpleSpmvArchitectureSpace ()
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
T* spark::spmv::SimpleSpmvArchitectureSpace< T >::doNext ()
+
+inlineprotectedvirtual
+
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
void spark::spmv::SimpleSpmvArchitectureSpace< T >::restart ()
+
+inlineoverrideprotectedvirtual
+
+
+

Member Data Documentation

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
spark::utils::Range spark::spmv::SimpleSpmvArchitectureSpace< T >::cacheSizeR {1024, 4096, 512}
+
+private
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
spark::utils::Range spark::spmv::SimpleSpmvArchitectureSpace< T >::inputWidthR {8, 100, 8}
+
+private
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
bool spark::spmv::SimpleSpmvArchitectureSpace< T >::last = false
+
+private
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
int spark::spmv::SimpleSpmvArchitectureSpace< T >::maxRows
+
+private
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + +
spark::utils::Range spark::spmv::SimpleSpmvArchitectureSpace< T >::numPipesR {1, 6, 1}
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.png b/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.png new file mode 100644 index 0000000000000000000000000000000000000000..651f4ff49a3495391a9a31c983e3d7dac7ca61cb GIT binary patch literal 1058 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM12~w0Wa25~pFm0?z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op4;)Ij%DpLK%l)w-kD<&W&XvwnSgOOEA^vpsHh>hT#t8xLQf#BaJJ z+j!g4TkIQs-)!f&Il*21OUtv9{cDe2cS!%Tv&bjIJVM}A)E3Q^_nvx6*I!$C+-dF- zd6oQGFAklU_G(pI+oc&6XZo*S=KJ^7?#a7^{E~A&n|GK=ah}cmwQE*R#*KIS-xq$= zGhXt`tR~jh`O~w8bv-$|%Z^{Wn|hr4{ez~M+kda_e&g8sZ_Y%OTKD_>lUh_XgM=n6 z@#yFDyi~sw7HIHL6kiyX?Rz!qbqvG*DRvA&4BV=U4G!}1og4{kRagXGuxbc0>P&56 zNK%z=@bKhN2ohrIn9{9AsL9^&Rr>*Lat^Zd>e}84b zG$VVC?Y%v6hwmh<-0s+5c5XJe!QdE!}?wBJyJJnpx&^GmY;*9l%r?cNkvEJEnYJKQ-_v>p*X6kaj zW#e|btl;jq{Pef^)|v12zguvATaN!W|9MW*b%Gj)U(`h^bLDPPww-b~!+OfGBZ+l; zeyNr2Z+ljIB6j_~7jr(dZ)}jfe0gJBri#h(m#?!ny;fYl9+o)ntW%pm-FCsB51htk<3DI17<}3TVy*9H?U;C~J%+L&;u6{1-oD!M + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::spmv::SkipEmptyRowsArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::SkipEmptyRowsArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth)spark::spmv::SimpleSpmvArchitectureprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
encodeEmptyRows(std::vector< uint32_t > pin, bool encode)spark::spmv::SkipEmptyRowsArchitectureinlineprotected
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
get_name() overridespark::spmv::SkipEmptyRowsArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) overridespark::spmv::SkipEmptyRowsArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
SkipEmptyRowsArchitecture()spark::spmv::SkipEmptyRowsArchitectureinline
SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SkipEmptyRowsArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+ + + + diff --git a/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html b/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html new file mode 100644 index 0000000..c1f6e89 --- /dev/null +++ b/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html @@ -0,0 +1,367 @@ + + + + + + +Spark: spark::spmv::SkipEmptyRowsArchitecture Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv::SkipEmptyRowsArchitecture Class Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::SkipEmptyRowsArchitecture:
+
+
+ + +spark::spmv::SimpleSpmvArchitecture +spark::spmv::SpmvArchitecture +spark::spmv::PrefetchingArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SkipEmptyRowsArchitecture ()
 
 SkipEmptyRowsArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + + + + + + +

+Protected Member Functions

std::vector< uint32_t > encodeEmptyRows (std::vector< uint32_t > pin, bool encode)
 
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) override
 
- Protected Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
virtual int countComputeCycles (uint32_t *v, int size, int inputWidth)
 
virtual bool equals (const SpmvArchitecture &a) const override
 
+ + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from spark::spmv::SimpleSpmvArchitecture
const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector<uint32_t> spark::spmv::SkipEmptyRowsArchitecture::encodeEmptyRows (std::vector< uint32_t > pin,
bool encode 
)
+
+inlineprotected
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SkipEmptyRowsArchitecture::get_name ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from spark::spmv::SimpleSpmvArchitecture.

+ +

Reimplemented in spark::spmv::PrefetchingArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual spark::sparse::CsrMatrix spark::spmv::SkipEmptyRowsArchitecture::preprocessBlock (const spark::sparse::CsrMatrix & in,
int blockNumber,
int nBlocks 
)
+
+inlineoverrideprotectedvirtual
+
+ +

Reimplemented from spark::spmv::SpmvArchitecture.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.png b/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe420795c4a266bc465b1595df1b4afe77cdad2 GIT binary patch literal 1728 zcmb7FdoBrTELSu7ofHnLu~@s4y#m|?o-65FhmBsy*_S(laE zTIw)E;&qz|Q!a^V8q(bM{_33Ge>?B@oagd=&i9Y+^L#$f^Q0a><_cb?vkn9TfzfVG zUVxPWQm3{G&}&z}Hv|6j{gS%6I+fIZ7;sgK@jB)W0v`Q5 z-Obp2AkZ35w39tHUTG@tL*^uWgY(wyY=xp}S1UNzz3*<$myDFO@}f5oQ?s#~kl-Ee zPG}vp7LJi1bYc|^&RLGY(I{nNx5;%_dCW&aQkYDM5yRd-FY{mFwYf2poq){oI+{TG?LX7E zq$AjINP#*3AQP1As*&<^zpiZ9e8)_@VEwo7cdPW<(!lMn4foke?+8GzNcyX0IjI}k zYyK3N)@y(apU^+r;dV#B=&CV%wsVeSEwE>t-fi-F!E7c1#VD$79$apb?OqsM`%RVZ zH?weicJA%CS>@2efsv%>if%FLqZQZRmlP9Qg*hD9!|NRCkIz@ec&f^JvRfAtb(M6b z5it`?CSHY{8#8yR)d*Fzmzko9XYNZpqsDSPOX zE!ol~s$uNI%jyF?CD@c1yX71+WLa<1gV8486Uo8Q%@hUg=g(#WlP5Rv$linvl~ZWO zil-JiJOn-A{U1SJz#AdM$CZCT4}+L{(Irt~237=SzdfK-=I?Z;+*n_S_G< zB-NKvxX4-FU|Zl;p5>vMj*>gK%A=#ggaZ#g&kx_R3B!qnnIrMyMT4$Z$1P1CCwJUi z>QhoDXGt?+@|T{d(fZ`QOV!D+g19QvKHKK%=K>GVL9{Zx2)b zfiz*kTMDB_55FO^j5p%buTriB)Suwob$zcInwm7`3l?n?r9R6(7Z$v6?S(G2B9?Jm zF1Ol}-ey^@SK1d|h-4Jg zG+5Th+l`Ka*Ik2kHOan_DJzzAC14n>89%ADtso8)k^*$)9|9UidvOB*x8lAv~Idd}1sp~_~&Dxwwo)&o^HM9ab zw)_+mZMffsDAdcUJ%0p=B7QlqpvIeL>lUJ-n=a+-vvQLfUGFk#s?d>bS(&I$iBu{+ zO?=L$Kk7Vg(Nn`!bYNGI + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::spmv::SpmvArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::SpmvArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + +
dfespmv(Eigen::VectorXd x)=0spark::spmv::SpmvArchitecturepure virtual
equals(const SpmvArchitecture &a) const =0spark::spmv::SpmvArchitectureprotectedpure virtual
get_name()=0spark::spmv::SpmvArchitecturepure virtual
getEstimatedClockCycles()=0spark::spmv::SpmvArchitecturepure virtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()=0spark::spmv::SpmvArchitecturepure virtual
getImplementationParameters()=0spark::spmv::SpmvArchitecturepure virtual
operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)spark::spmv::SpmvArchitectureinlineprotectedvirtual
to_string()=0spark::spmv::SpmvArchitecturepure virtual
write_params()=0spark::spmv::SpmvArchitecturepure virtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+ + + + diff --git a/classspark_1_1spmv_1_1SpmvArchitecture.html b/classspark_1_1spmv_1_1SpmvArchitecture.html new file mode 100644 index 0000000..8430e04 --- /dev/null +++ b/classspark_1_1spmv_1_1SpmvArchitecture.html @@ -0,0 +1,522 @@ + + + + + + +Spark: spark::spmv::SpmvArchitecture Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv::SpmvArchitecture Class Referenceabstract
+
+
+ +

#include <Spmv.hpp>

+
+Inheritance diagram for spark::spmv::SpmvArchitecture:
+
+
+ + +spark::spmv::SimpleSpmvArchitecture +spark::spmv::FstSpmvArchitecture +spark::spmv::SkipEmptyRowsArchitecture +spark::spmv::PrefetchingArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual double getEstimatedClockCycles ()=0
 
virtual double getGFlopsCount ()=0
 
virtual std::string to_string ()=0
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()=0
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x)=0
 
virtual std::string get_name ()=0
 
virtual boost::property_tree::ptree write_params ()=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + +

+Protected Member Functions

virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
 
virtual bool equals (const SpmvArchitecture &a) const =0
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::spmv::SpmvArchitecture::~SpmvArchitecture ()
+
+inlinevirtual
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Eigen::VectorXd spark::spmv::SpmvArchitecture::dfespmv (Eigen::VectorXd x)
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool spark::spmv::SpmvArchitecture::equals (const SpmvArchitecture & a) const
+
+protectedpure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SpmvArchitecture::get_name ()
+
+pure virtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual double spark::spmv::SpmvArchitecture::getEstimatedClockCycles ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double spark::spmv::SpmvArchitecture::getEstimatedGFlops ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double spark::spmv::SpmvArchitecture::getFrequency ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual double spark::spmv::SpmvArchitecture::getGFlopsCount ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::model::ImplementationParameters spark::spmv::SpmvArchitecture::getImplementationParameters ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool spark::spmv::SpmvArchitecture::operator== (const SpmvArchitecture & other)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void spark::spmv::SpmvArchitecture::preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > & mat)
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual spark::sparse::CsrMatrix spark::spmv::SpmvArchitecture::preprocessBlock (const spark::sparse::CsrMatrix & in,
int blockNumber,
int nBlocks 
)
+
+inlineprotectedvirtual
+
+ +

Reimplemented in spark::spmv::SkipEmptyRowsArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SpmvArchitecture::to_string ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual boost::property_tree::ptree spark::spmv::SpmvArchitecture::write_params ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1spmv_1_1SpmvArchitecture.png b/classspark_1_1spmv_1_1SpmvArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2cf1d84906726e31eb26e724d646b534d9248d GIT binary patch literal 2314 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 + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::spmv::SpmvArchitectureSpace Member List
+
+
+ +

This is the complete list of members for spark::spmv::SpmvArchitectureSpace, including all inherited members.

+ + + + +
doNext()=0spark::spmv::SpmvArchitectureSpaceprotectedpure virtual
next()spark::spmv::SpmvArchitectureSpaceinline
restart()=0spark::spmv::SpmvArchitectureSpacepure virtual
+ + + + diff --git a/classspark_1_1spmv_1_1SpmvArchitectureSpace.html b/classspark_1_1spmv_1_1SpmvArchitectureSpace.html new file mode 100644 index 0000000..bc58daf --- /dev/null +++ b/classspark_1_1spmv_1_1SpmvArchitectureSpace.html @@ -0,0 +1,207 @@ + + + + + + +Spark: spark::spmv::SpmvArchitectureSpace Class Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv::SpmvArchitectureSpace Class Referenceabstract
+
+
+ +

#include <Spmv.hpp>

+
+Inheritance diagram for spark::spmv::SpmvArchitectureSpace:
+
+
+ + +spark::spmv::SimpleSpmvArchitectureSpace< T > + +
+ + + + + + +

+Public Member Functions

std::shared_ptr< SpmvArchitecture > next ()
 
virtual void restart ()=0
 
+ + + +

+Protected Member Functions

virtual SpmvArchitecture * doNext ()=0
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual SpmvArchitecture* spark::spmv::SpmvArchitectureSpace::doNext ()
+
+protectedpure virtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
std::shared_ptr<SpmvArchitecture> spark::spmv::SpmvArchitectureSpace::next ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void spark::spmv::SpmvArchitectureSpace::restart ()
+
+pure virtual
+
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classspark_1_1spmv_1_1SpmvArchitectureSpace.png b/classspark_1_1spmv_1_1SpmvArchitectureSpace.png new file mode 100644 index 0000000000000000000000000000000000000000..51861730be057d4fbe9b97472733b89c239abcc9 GIT binary patch literal 1065 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM12~w0Wa25~pFm0?z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opMPpzYHryN6mY4e47C$_EDTl)6*$JM>B zH@?4rM!q^uvUG{nd8WTJbh2b?1l|{^zqM}3vD|UC$IVVXJ|p1GhpkVXd0*b@$=&(Q zF-Q2fu9Ml5i=4I#D?cSm#52#mnEiCdg}e<4SGHyZ2kkvQ*Q{=RaDS_nr@hBLlZ&kr zb+3l<@-8(joFTt{x9p$WwI}W#y!T?xXZFHe6QNm`zm%HZys+VJ{5$8zv1uM(bARlr zYI|~)F;?oaqpDKFQlQY9C(Phb zMhkQ*abLa{T($Mu{w3~fxBgQNRMk}V3|3Y2?3&V|q8TJKX^DrY$0Vh_>LDsG+fIEp zE`J>->o&>cx<&P#O1rk5M}zX4J+dCB+7|yPbejG1&hovyJ$}s$hud53u}xH2ys}Wa zJhPMs3FQM7dO1-r+K_RV|FcK-d@-NgouJ*U4; zxZ>uMasRQ{hTCsvF7Mh^X!~vL%%92D*A{#?bNf8iD(LPf*H_0?HkE#G+;jS;`kAiH z)i;GVJ$>+~$IbcHx(gv!jwRe$<)w8Omqi@c%yEBe_nG)NcxbK+G z`i zO08VcTehUVNFulW(hQ3;{o(hQ*sWh!DPMGbwYk;vKaM(+Brjjy7?-JHvi#-itWB>K zm#_c6@S~pbl3!+b)~U^(ZoA-aL3yNc)Y_EWTdi-u)3c7NU>ARK>gDS4$OPq+J^ej) zMLYIRQn`E8yjcYr^pliTJT*OYVO)4j*m7Qt%3gIX>iIAJ$Y$$FtC(l!1M@Y5r>mdK II;Vst0Gu}JuK)l5 literal 0 HcmV?d00001 diff --git a/closed.png b/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html b/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html new file mode 100644 index 0000000..c18c055 --- /dev/null +++ b/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html @@ -0,0 +1,100 @@ + + + + + + +Spark: src/bicg/src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+ + + + +

+Files

file  BiConjugateGradient.cpp
 
+
+ + + + diff --git a/dir_16dc92632bab467dc50b01bd02b3341a.html b/dir_16dc92632bab467dc50b01bd02b3341a.html new file mode 100644 index 0000000..76fdef4 --- /dev/null +++ b/dir_16dc92632bab467dc50b01bd02b3341a.html @@ -0,0 +1,100 @@ + + + + + + +Spark: src/device Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
device Directory Reference
+
+
+ + + + +

+Files

file  SpmvDeviceInterfaceMock.cpp
 
+
+ + + + diff --git a/dir_376f1c4177942cba0305052d5eaaa828.html b/dir_376f1c4177942cba0305052d5eaaa828.html new file mode 100644 index 0000000..8449aab --- /dev/null +++ b/dir_376f1c4177942cba0305052d5eaaa828.html @@ -0,0 +1,100 @@ + + + + + + +Spark: src/cg/src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+ + + + +

+Files

file  ConjugateGradient.cpp
 
+
+ + + + diff --git a/dir_55daf1889a6971c13f7bc2c2ab706314.html b/dir_55daf1889a6971c13f7bc2c2ab706314.html new file mode 100644 index 0000000..897c693 --- /dev/null +++ b/dir_55daf1889a6971c13f7bc2c2ab706314.html @@ -0,0 +1,100 @@ + + + + + + +Spark: src/cg Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
cg Directory Reference
+
+
+ + + + +

+Directories

directory  src
 
+
+ + + + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..52c6219 --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,115 @@ + + + + + + +Spark: src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+ + + + + + + + + + + + +

+Directories

directory  bicg
 
directory  cg
 
directory  device
 
directory  dse
 
directory  spmv
 
+ + + + + +

+Files

file  main.cpp
 
file  SparseLinearSolvers.cpp
 
+
+ + + + diff --git a/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html b/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html new file mode 100644 index 0000000..3ad2ec5 --- /dev/null +++ b/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html @@ -0,0 +1,100 @@ + + + + + + +Spark: src/bicg Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
bicg Directory Reference
+
+
+ + + + +

+Directories

directory  src
 
+
+ + + + diff --git a/dir_817fd82c291ca2ce5189d4384ec10041.html b/dir_817fd82c291ca2ce5189d4384ec10041.html new file mode 100644 index 0000000..662a280 --- /dev/null +++ b/dir_817fd82c291ca2ce5189d4384ec10041.html @@ -0,0 +1,100 @@ + + + + + + +Spark: src/spmv Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
spmv Directory Reference
+
+
+ + + + +

+Directories

directory  src
 
+
+ + + + diff --git a/dir_bcdd1c0198fc998763f86146a43d3c64.html b/dir_bcdd1c0198fc998763f86146a43d3c64.html new file mode 100644 index 0000000..eae8bcf --- /dev/null +++ b/dir_bcdd1c0198fc998763f86146a43d3c64.html @@ -0,0 +1,123 @@ + + + + + + +Spark: include/Spark Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
Spark Directory Reference
+
+
+ + + + +

+Directories

directory  device
 
+ + + + + + + + + + + + + + + + + + + + + +

+Files

file  Converters.hpp [code]
 
file  Dse.hpp [code]
 
file  Io.hpp [code]
 
file  Model.hpp [code]
 
file  SimpleSpmv.hpp [code]
 
file  SparseLinearSolvers.hpp [code]
 
file  SparseMatrix.hpp [code]
 
file  Spmv.hpp [code]
 
file  UserInput.hpp [code]
 
file  Utils.hpp [code]
 
+
+ + + + diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..05a5edd --- /dev/null +++ b/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,100 @@ + + + + + + +Spark: include Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
include Directory Reference
+
+
+ + + + +

+Directories

directory  Spark
 
+
+ + + + diff --git a/dir_d7c482895ed73b33d89221a7692a7a0a.html b/dir_d7c482895ed73b33d89221a7692a7a0a.html new file mode 100644 index 0000000..a2a5798 --- /dev/null +++ b/dir_d7c482895ed73b33d89221a7692a7a0a.html @@ -0,0 +1,100 @@ + + + + + + +Spark: src/dse Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
dse Directory Reference
+
+
+ + + + +

+Files

file  Dse.cpp
 
+
+ + + + diff --git a/dir_d8b7011e84264c6173d8b11c4e58b2d3.html b/dir_d8b7011e84264c6173d8b11c4e58b2d3.html new file mode 100644 index 0000000..1cdafaf --- /dev/null +++ b/dir_d8b7011e84264c6173d8b11c4e58b2d3.html @@ -0,0 +1,108 @@ + + + + + + +Spark: src/spmv/src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+ + + + + + + + + + + + +

+Files

file  ParallelCsrReadControl.java
 
file  Spmv.cpp
 
file  SpmvDeviceInterface.cpp
 
file  SpmvKernel.java
 
file  SpmvManager.java
 
+
+ + + + diff --git a/dir_e1e695598025e13caf4d9e666dd56479.html b/dir_e1e695598025e13caf4d9e666dd56479.html new file mode 100644 index 0000000..72f18ac --- /dev/null +++ b/dir_e1e695598025e13caf4d9e666dd56479.html @@ -0,0 +1,100 @@ + + + + + + +Spark: include/Spark/device Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
device Directory Reference
+
+
+ + + + +

+Files

file  SpmvDeviceInterface.h [code]
 
+
+ + + + diff --git a/doxygen.conf b/doxygen.conf new file mode 100644 index 0000000..2ec9ec3 --- /dev/null +++ b/doxygen.conf @@ -0,0 +1,1869 @@ +# Doxyfile 1.8.3.1 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = "Spark" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. Note that you specify absolute paths here, but also +# relative paths, which will be relative from the directory where doxygen is +# started. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, +# and language is one of the parsers supported by doxygen: IDL, Java, +# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, +# C++. For instance to make doxygen treat .inc files as Fortran files (default +# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note +# that for custom extensions you also need to set FILE_PATTERNS otherwise the +# files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented classes, +# or namespaces to their corresponding documentation. Such a link can be +# prevented in individual cases by by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES (the +# default) will make doxygen replace the get and set methods by a property in +# the documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to +# determine which symbols to keep in memory and which to flush to disk. +# When the cache is full, less often used symbols will be written to disk. +# For small to medium size projects (<1000 input files) the default value is +# probably good enough. For larger projects a too small cache size can cause +# doxygen to be busy swapping symbols to and from disk most of the time +# causing a significant performance penalty. +# If the system has enough physical memory increasing the cache will improve the +# performance by keeping more symbols in memory. Note that the value works on +# a logarithmic scale so increasing the size by one will roughly double the +# memory usage. The cache size is given by this formula: +# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +SYMBOL_CACHE_SIZE = 0 + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if section-label ... \endif +# and \cond section-label ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. Do not use +# file names with spaces, bibtex cannot handle them. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = "include" "src" "README.md" + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page (index.html). +# This can be useful if you have a project on for instance GitHub and want reuse +# the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If left blank doxygen will +# generate a default style sheet. Note that it is recommended to use +# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this +# tag will in the future become obsolete. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional +# user-defined cascading style sheet that is included after the standard +# style sheets created by doxygen. Using this option one can overrule +# certain style aspects. This is preferred over using HTML_STYLESHEET +# since it does not replace the standard style sheet and is therefor more +# robust against future updates. Doxygen will copy the style sheet file to +# the output directory. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely +# identify the documentation publisher. This should be a reverse domain-name +# style string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and +# SVG. The default value is HTML-CSS, which is slower, but has the best +# compatibility. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. +# There are two flavours of web server based search depending on the +# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for +# searching and an index file used by the script. When EXTERNAL_SEARCH is +# enabled the indexing and searching needs to be provided by external tools. +# See the manual for details. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# external search engine pointed to by the SEARCHENGINE_URL option to obtain +# the search results. Doxygen ships with an example indexer (doxyindexer) and +# search engine (doxysearch.cgi) which are based on the open source search engine +# library Xapian. See the manual for configuration details. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will returned the search results when EXTERNAL_SEARCH is enabled. +# Doxygen ships with an example search engine (doxysearch) which is based on +# the open source search engine library Xapian. See the manual for configuration +# details. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id +# of to a relative location where the documentation can be found. +# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 10 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..dabaff2 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1184 @@ +/* The standard CSS for doxygen 1.8.3.1 */ + +body, table, div, p, dl { + font: 400 14px/19px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px; + margin: 4px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 5px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 2px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/doxygen.png b/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 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 literal 0 HcmV?d00001 diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..ed092c7 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
ParallelCsrReadControl.Mode Member List
+
+ + + + + diff --git a/enumParallelCsrReadControl_1_1Mode.html b/enumParallelCsrReadControl_1_1Mode.html new file mode 100644 index 0000000..ebcceae --- /dev/null +++ b/enumParallelCsrReadControl_1_1Mode.html @@ -0,0 +1,169 @@ + + + + + + +Spark: ParallelCsrReadControl.Mode Enum Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
ParallelCsrReadControl.Mode Enum Reference
+
+
+ + + + + + + + + + +

+Public Attributes

 VectorLoad
 
 ReadingLength
 
 OutputtingCommands
 
 Done
 
+

Member Data Documentation

+ +
+
+ + + + +
ParallelCsrReadControl.Mode.Done
+
+ +
+
+ +
+
+ + + + +
ParallelCsrReadControl.Mode.OutputtingCommands
+
+ +
+
+ +
+
+ + + + +
ParallelCsrReadControl.Mode.ReadingLength
+
+ +
+
+ +
+
+ + + + +
ParallelCsrReadControl.Mode.VectorLoad
+
+ +
+
+
The documentation for this enum was generated from the following file: +
+ + + + diff --git a/files.html b/files.html new file mode 100644 index 0000000..3322e0b --- /dev/null +++ b/files.html @@ -0,0 +1,134 @@ + + + + + + +Spark: File List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
File List
+
+ + + + + diff --git a/ftv2blank.png b/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/ftv2cl.png b/ftv2cl.png new file mode 100644 index 0000000000000000000000000000000000000000..132f6577bf7f085344904602815a260d29f55d9b GIT binary patch literal 453 zcmV;$0XqJPP)VBF;ev;toEj8_OB0EQg5eYilIj#JZG_m^33l3^k4mtzx!TVD?g)Y$ zrvwRDSqT!wLIM$dWCIa$vtxE|mzbTzu-y&$FvF6WA2a{Wr1g}`WdPT-0JzEZ0IxAv z-Z+ejZc&H;I5-pb_SUB}04j0^V)3t{`z<7asDl2Tw3w3sP%)0^8$bhEg)IOTBcRXv zFfq~3&gvJ$F-U7mpBW8z1GY~HK&7h4^YI~Orv~wLnC0PP_dAkv;nzX{9Q|8Gv=2ca z@v)c9T;D#h`TZ2X&&$ff2wedmot995de~-s3I)yauahg;7qn*?1n?F$e+PwP37}~; z1NKUk7reVK^7A;$QRW7qAx40HHUZ<|k3U%nz(Ec`#i+q9K!dgcROAlCS?`L= v>#=f?wF5ZND!1uAfQsk;KN^4&*8~0npJiJ%2dj9(00000NkvXXu0mjfWVFf_ literal 0 HcmV?d00001 diff --git a/ftv2doc.png b/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/ftv2folderclosed.png b/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/ftv2lastnode.png b/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/ftv2link.png b/ftv2link.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/ftv2mlastnode.png b/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/ftv2mnode.png b/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/ftv2mo.png b/ftv2mo.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfb80f76e65815989a9350ad79d8ce45380e2b1 GIT binary patch literal 403 zcmV;E0c`$>P)${!fXv7NWJ%@%u4(KapRY>T6_x;E zxE7kt!}Tiw8@d9Sd`rTGum>z#Q14vIm`wm1#-byD1muMi02@YNO5LRF0o!Y{`a!Ya z{^&p0Su|s705&2QxmqdexG+-zNKL3f@8gTQSJrKByfo+oNJ^-{|Mn||Q5SDwjQVsS zr1}7o5-QMs>gYIMD>GRw@$lT`z4r-_m{5U#cR{urD_)TOeY)(UD|qZ^&y`IVijqk~ xs(9-kWFr7E^!lgi8GsFK5kOY_{Xbgf0^etEU%fLevs?fG002ovPDHLkV1nB&vX1}& literal 0 HcmV?d00001 diff --git a/ftv2node.png b/ftv2node.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/ftv2ns.png b/ftv2ns.png new file mode 100644 index 0000000000000000000000000000000000000000..72e3d71c2892d6f00e259facebc88b45f6db2e35 GIT binary patch literal 388 zcmV-~0ek+5P)f+++#cT|!CkD&4pnIkeMEUEM*>`*9>+Juji$!h-mW%M^8s9957{3nvbrz^&=u<~TAUrFROkmt%^F~Ez+-c53Lv%iH3d38!Rv?K zrb&MYAhp;Gf<}wS;9ZZq2@;!uYG;=Z>~GKE^{HD4keu}lnyqhc>kWX^tQn|warJ~h zT+rtMkdz6aHoN%z(o|&wpu@@OpJnF_z{PA)6(FHw02iHslz^(N{4*+K9)QJHR87wT iTyp>aXaF{u2lxRou|^4tux6eB0000^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/ftv2pnode.png b/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/ftv2splitbar.png b/ftv2splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/ftv2vertline.png b/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/functions.html b/functions.html new file mode 100644 index 0000000..fcda033 --- /dev/null +++ b/functions.html @@ -0,0 +1,152 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+
+ + + + diff --git a/functions_0x62.html b/functions_0x62.html new file mode 100644 index 0000000..8727ead --- /dev/null +++ b/functions_0x62.html @@ -0,0 +1,143 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+
+ + + + diff --git a/functions_0x63.html b/functions_0x63.html new file mode 100644 index 0000000..964a838 --- /dev/null +++ b/functions_0x63.html @@ -0,0 +1,170 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- c -

+
+ + + + diff --git a/functions_0x64.html b/functions_0x64.html new file mode 100644 index 0000000..a970fac --- /dev/null +++ b/functions_0x64.html @@ -0,0 +1,175 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- d -

+
+ + + + diff --git a/functions_0x65.html b/functions_0x65.html new file mode 100644 index 0000000..76e8227 --- /dev/null +++ b/functions_0x65.html @@ -0,0 +1,144 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- e -

+
+ + + + diff --git a/functions_0x66.html b/functions_0x66.html new file mode 100644 index 0000000..4c26030 --- /dev/null +++ b/functions_0x66.html @@ -0,0 +1,152 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- f -

+
+ + + + diff --git a/functions_0x67.html b/functions_0x67.html new file mode 100644 index 0000000..588945e --- /dev/null +++ b/functions_0x67.html @@ -0,0 +1,192 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- g -

+
+ + + + diff --git a/functions_0x69.html b/functions_0x69.html new file mode 100644 index 0000000..2b026be --- /dev/null +++ b/functions_0x69.html @@ -0,0 +1,178 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- i -

+
+ + + + diff --git a/functions_0x6c.html b/functions_0x6c.html new file mode 100644 index 0000000..d470d7d --- /dev/null +++ b/functions_0x6c.html @@ -0,0 +1,140 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- l -

+
+ + + + diff --git a/functions_0x6d.html b/functions_0x6d.html new file mode 100644 index 0000000..54872f9 --- /dev/null +++ b/functions_0x6d.html @@ -0,0 +1,193 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- m -

+
+ + + + diff --git a/functions_0x6e.html b/functions_0x6e.html new file mode 100644 index 0000000..bdd703f --- /dev/null +++ b/functions_0x6e.html @@ -0,0 +1,175 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- n -

+
+ + + + diff --git a/functions_0x6f.html b/functions_0x6f.html new file mode 100644 index 0000000..e629549 --- /dev/null +++ b/functions_0x6f.html @@ -0,0 +1,180 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- o -

+
+ + + + diff --git a/functions_0x70.html b/functions_0x70.html new file mode 100644 index 0000000..5249744 --- /dev/null +++ b/functions_0x70.html @@ -0,0 +1,173 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- p -

+
+ + + + diff --git a/functions_0x72.html b/functions_0x72.html new file mode 100644 index 0000000..872111e --- /dev/null +++ b/functions_0x72.html @@ -0,0 +1,169 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- r -

+
+ + + + diff --git a/functions_0x73.html b/functions_0x73.html new file mode 100644 index 0000000..1371cfb --- /dev/null +++ b/functions_0x73.html @@ -0,0 +1,191 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- s -

+
+ + + + diff --git a/functions_0x74.html b/functions_0x74.html new file mode 100644 index 0000000..dc1615d --- /dev/null +++ b/functions_0x74.html @@ -0,0 +1,151 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- t -

+
+ + + + diff --git a/functions_0x75.html b/functions_0x75.html new file mode 100644 index 0000000..c962e3d --- /dev/null +++ b/functions_0x75.html @@ -0,0 +1,134 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- u -

+
+ + + + diff --git a/functions_0x76.html b/functions_0x76.html new file mode 100644 index 0000000..63f7db9 --- /dev/null +++ b/functions_0x76.html @@ -0,0 +1,158 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- v -

+
+ + + + diff --git a/functions_0x77.html b/functions_0x77.html new file mode 100644 index 0000000..174df71 --- /dev/null +++ b/functions_0x77.html @@ -0,0 +1,135 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- w -

+
+ + + + diff --git a/functions_0x7a.html b/functions_0x7a.html new file mode 100644 index 0000000..36ecb98 --- /dev/null +++ b/functions_0x7a.html @@ -0,0 +1,134 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- z -

+
+ + + + diff --git a/functions_0x7e.html b/functions_0x7e.html new file mode 100644 index 0000000..2f36efa --- /dev/null +++ b/functions_0x7e.html @@ -0,0 +1,137 @@ + + + + + + +Spark: Class Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- ~ -

+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 0000000..98081eb --- /dev/null +++ b/functions_func.html @@ -0,0 +1,516 @@ + + + + + + +Spark: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- z -

+ + +

- ~ -

+
+ + + + diff --git a/functions_type.html b/functions_type.html new file mode 100644 index 0000000..87fd1f2 --- /dev/null +++ b/functions_type.html @@ -0,0 +1,111 @@ + + + + + + +Spark: Class Members - Typedefs + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 0000000..e7298de --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,499 @@ + + + + + + +Spark: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+
+ + + + diff --git a/globals.html b/globals.html new file mode 100644 index 0000000..4d133bf --- /dev/null +++ b/globals.html @@ -0,0 +1,256 @@ + + + + + + +Spark: File Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- s -

+ + +

- v -

+ + +

- w -

+
+ + + + diff --git a/globals_func.html b/globals_func.html new file mode 100644 index 0000000..bfd56f8 --- /dev/null +++ b/globals_func.html @@ -0,0 +1,239 @@ + + + + + + +Spark: File Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- s -

+ + +

- w -

+
+ + + + diff --git a/globals_type.html b/globals_type.html new file mode 100644 index 0000000..91eef0c --- /dev/null +++ b/globals_type.html @@ -0,0 +1,108 @@ + + + + + + +Spark: File Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+  +
+ + + + diff --git a/globals_vars.html b/globals_vars.html new file mode 100644 index 0000000..ec302b6 --- /dev/null +++ b/globals_vars.html @@ -0,0 +1,108 @@ + + + + + + +Spark: File Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+  +
+ + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 0000000..5d9dc55 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,141 @@ + + + + + + +Spark: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Hierarchy
+
+ + + + + diff --git a/index.html b/index.html index cd08755..17e6ffb 100644 --- a/index.html +++ b/index.html @@ -1 +1,90 @@ -Hello world! + + + + + + +Spark: Main Page + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Spark Documentation
+
+
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..63939e7 --- /dev/null +++ b/jquery.js @@ -0,0 +1,8 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")), +f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c) +{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); diff --git a/main_8cpp.html b/main_8cpp.html new file mode 100644 index 0000000..358d225 --- /dev/null +++ b/main_8cpp.html @@ -0,0 +1,208 @@ + + + + + + +Spark: src/main.cpp File Reference + + + + + + + + + +
+
+
+ + + + + +
+
Spark +
+
+ + + + + + + + + + +
+ +
+ + + +
+ +
+
main.cpp File Reference
+
+
+
#include <Spark/Dse.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/program_options.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+#include <iostream>
+#include <string>
+#include <chrono>
+#include <sstream>
+
+ + + + + + + + + +

+Functions

spark::dse::DseParameters loadParams (const boost::filesystem::path &parf)
 
spark::dse::Benchmark loadBenchmark (const boost::filesystem::path &p)
 
void write_dse_results (const std::vector< spark::dse::DseResult > &results, double took)
 
int main (int argc, char **argv)
 
+

Function Documentation

+ +
+
+ + + + + + + + +
spark::dse::Benchmark loadBenchmark (const boost::filesystem::path & p)
+
+ +
+
+ +
+
+ + + + + + + + +
spark::dse::DseParameters loadParams (const boost::filesystem::path & parf)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char ** argv 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void write_dse_results (const std::vector< spark::dse::DseResult > & results,
double took 
)
+
+ +
+
+
+ + + + diff --git a/md_README.html b/md_README.html new file mode 100644 index 0000000..8da8c37 --- /dev/null +++ b/md_README.html @@ -0,0 +1,127 @@ + + + + + + +Spark: spark + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + +
+ +
+ +
+
+
+
spark
+
+
+

spark is a tool for exploring customised architectures for sparse linear algebra. It focuses on micro-architectural optimsations for iterative solvers and the sparse matrix vector multiplication kernel.

+

Installation

+

``` git clone https://github.com/paul-g/spark.git git submodule update –init cd spark && mkdir build && cd build && cmake .. make -C main ```

+

Requires

+

All builds are performed on the local machine which must have:

+
    +
  1. Maxeler MaxCompiler 2013.2.2 or higher
  2. +
  3. g++ 4.9.2 or higher
  4. +
  5. Boost 1.55 or higher
  6. +
+

Usage

+

DSE flow

+

First, compile the DSE program:

+

```` mkdir build && cd build && cmake .. && make main ````

+

You can then use the DSE flow through scripts/spark.py.

+

``` bash-4.1$ python spark.py -h usage: spark.py [-h] [-d] -t {dfe,sim} -p PARAM_FILE -b BENCHMARK_DIR [-m MAX_BUILDS]

+

Run Spark DSE flow

+

optional arguments: -h, –help show this help message and exit -d, –dse -t {dfe,sim}, –target {dfe,sim} -p PARAM_FILE, –param-file PARAM_FILE -b BENCHMARK_DIR, –benchmark-dir BENCHMARK_DIR -m MAX_BUILDS, –max-builds MAX_BUILDS ```

+

spark.py automates:

+
    +
  1. DSE process based on a set of benchmark matrices
  2. +
  3. generating simulation and hardware configurations
  4. +
  5. running and benchmarking simulation and hardware configurations
  6. +
+

CMake Flow

+

Once a simulation / hardware library has been generated through the DSE flow, it will be available in lib-generated.

+

From here you can use also CMake directly to rebuild the client targets, for example test_spmv_sim. Just build the corresponding Makefile target:

+

``` make -C build test_spmv_sim ```

+

Running tests

+

Tests are provided for both software, hardware simulation and hardware runs. These should always pass on the master branch. Beware though that it's not practical to test every design parameter configuration, so awkward issues may arise.

+

First, compile the test binaries (e.g.): make -C build test_spmv_sim Then you can:

+
    +
  1. Run unit tests with ctest -R unit
  2. +
  3. Run hardware simulation tests with ctest -R sim
  4. +
  5. Run hardware tests with ctest -R hw
  6. +
+

Note Some simulation tests may take a long time to run (`~60s), particularly if a large architecture is simulated.

+
+ + + + diff --git a/namespacemembers.html b/namespacemembers.html new file mode 100644 index 0000000..70a41f1 --- /dev/null +++ b/namespacemembers.html @@ -0,0 +1,139 @@ + + + + + + +Spark: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+
+ + + + diff --git a/namespacemembers_func.html b/namespacemembers_func.html new file mode 100644 index 0000000..0d2d9fc --- /dev/null +++ b/namespacemembers_func.html @@ -0,0 +1,126 @@ + + + + + + +Spark: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+  +
+ + + + diff --git a/namespacemembers_type.html b/namespacemembers_type.html new file mode 100644 index 0000000..4910257 --- /dev/null +++ b/namespacemembers_type.html @@ -0,0 +1,115 @@ + + + + + + +Spark: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+  +
+ + + + diff --git a/namespacemembers_vars.html b/namespacemembers_vars.html new file mode 100644 index 0000000..7fb214e --- /dev/null +++ b/namespacemembers_vars.html @@ -0,0 +1,105 @@ + + + + + + +Spark: Namespace Members + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+  +
+ + + + diff --git a/namespaces.html b/namespaces.html new file mode 100644 index 0000000..519a52b --- /dev/null +++ b/namespaces.html @@ -0,0 +1,110 @@ + + + + + + +Spark: Namespace List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Namespace List
+
+
+
Here is a list of all namespaces with brief descriptions:
+
+ + + + diff --git a/namespacespark.html b/namespacespark.html new file mode 100644 index 0000000..8d9840f --- /dev/null +++ b/namespacespark.html @@ -0,0 +1,120 @@ + + + + + + +Spark: spark Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
spark Namespace Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Namespaces

namespace  converters
 
namespace  dse
 
namespace  io
 
namespace  model
 
namespace  sparse
 
namespace  sparse_linear_solvers
 
namespace  spmv
 
namespace  userio
 
namespace  utils
 
+
+ + + + diff --git a/namespacespark_1_1converters.html b/namespacespark_1_1converters.html new file mode 100644 index 0000000..2141f31 --- /dev/null +++ b/namespacespark_1_1converters.html @@ -0,0 +1,204 @@ + + + + + + +Spark: spark::converters Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::converters Namespace Reference
+
+
+ + + + +

+Typedefs

using EigenSparseMatrix = std::unique_ptr< Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >>
 
+ + + + + + + +

+Functions

EigenSparseMatrix tripletToEigen (spark::sparse::SparkCooMatrix< double > mat)
 
Eigen::VectorXd stdvectorToEigen (std::vector< double > v)
 
std::vector< double > eigenVectorToStdVector (const Eigen::VectorXd &v)
 
+

Typedef Documentation

+ +
+
+ + + + +
using spark::converters::EigenSparseMatrix = typedef std::unique_ptr<Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>>
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
std::vector<double> spark::converters::eigenVectorToStdVector (const Eigen::VectorXd & v)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Eigen::VectorXd spark::converters::stdvectorToEigen (std::vector< double > v)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
EigenSparseMatrix spark::converters::tripletToEigen (spark::sparse::SparkCooMatrix< double > mat)
+
+inline
+
+ +
+
+
+ + + + diff --git a/namespacespark_1_1dse.html b/namespacespark_1_1dse.html new file mode 100644 index 0000000..9e978df --- /dev/null +++ b/namespacespark_1_1dse.html @@ -0,0 +1,191 @@ + + + + + + +Spark: spark::dse Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::dse Namespace Reference
+
+
+ + + + + + + + + + +

+Classes

class  Benchmark
 
class  DseParameters
 
class  DseResult
 
class  SparkDse
 
+ + + + + +

+Functions

std::ostream & operator<< (std::ostream &s, Benchmark &b)
 
std::ostream & operator<< (std::ostream &s, DseParameters &d)
 
+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& spark::dse::operator<< (std::ostream & s,
Benchmark & b 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& spark::dse::operator<< (std::ostream & s,
DseParameters & d 
)
+
+inline
+
+ +
+
+
+ + + + diff --git a/namespacespark_1_1io.html b/namespacespark_1_1io.html new file mode 100644 index 0000000..c5b4bfd --- /dev/null +++ b/namespacespark_1_1io.html @@ -0,0 +1,108 @@ + + + + + + +Spark: spark::io Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::io Namespace Reference
+
+
+ + + + +

+Classes

class  MmReader
 
+
+ + + + diff --git a/namespacespark_1_1model.html b/namespacespark_1_1model.html new file mode 100644 index 0000000..c00dc30 --- /dev/null +++ b/namespacespark_1_1model.html @@ -0,0 +1,110 @@ + + + + + + +Spark: spark::model Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::model Namespace Reference
+
+
+ + + + + + +

+Classes

class  LogicResourceUsage
 
class  ImplementationParameters
 
+
+ + + + diff --git a/namespacespark_1_1sparse.html b/namespacespark_1_1sparse.html new file mode 100644 index 0000000..3155f6d --- /dev/null +++ b/namespacespark_1_1sparse.html @@ -0,0 +1,141 @@ + + + + + + +Spark: spark::sparse Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::sparse Namespace Reference
+
+
+ + + + +

+Classes

class  SparkCooMatrix
 
+ + + + + +

+Typedefs

using CsrMatrix = std::tuple< std::vector< uint32_t >, std::vector< int >, std::vector< double >>
 
using PartitionedCsrMatrix = std::vector< CsrMatrix >
 
+

Typedef Documentation

+ +
+
+ + + + +
using spark::sparse::CsrMatrix = typedef std::tuple<std::vector<uint32_t>, std::vector<int>, std::vector<double>>
+
+ +
+
+ +
+
+ + + + +
using spark::sparse::PartitionedCsrMatrix = typedef std::vector<CsrMatrix>
+
+ +
+
+
+ + + + diff --git a/namespacespark_1_1sparse__linear__solvers.html b/namespacespark_1_1sparse__linear__solvers.html new file mode 100644 index 0000000..0ebc7e2 --- /dev/null +++ b/namespacespark_1_1sparse__linear__solvers.html @@ -0,0 +1,114 @@ + + + + + + +Spark: spark::sparse_linear_solvers Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::sparse_linear_solvers Namespace Reference
+
+
+ + + + + + + + + + +

+Classes

class  Solver
 
class  EigenSolver
 
class  DfeCgSolver
 
class  DfeBiCgSolver
 
+
+ + + + diff --git a/namespacespark_1_1spmv.html b/namespacespark_1_1spmv.html new file mode 100644 index 0000000..048d532 --- /dev/null +++ b/namespacespark_1_1spmv.html @@ -0,0 +1,252 @@ + + + + + + +Spark: spark::spmv Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv Namespace Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Classes

struct  indptr_value
 
struct  Partition
 
class  SimpleSpmvArchitecture
 
class  SimpleSpmvArchitectureSpace
 
class  FstSpmvArchitecture
 
class  SkipEmptyRowsArchitecture
 
class  PrefetchingArchitecture
 
class  SpmvArchitecture
 
class  SpmvArchitectureSpace
 
+ + + +

+Typedefs

using EigenSparseMatrix = Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >
 
+ + + + + + + + +

+Functions

struct spark::spmv::indptr_value __attribute__ ((packed))
 
std::ostream & operator<< (std::ostream &s, SpmvArchitecture &a)
 
template<typename T >
void align (std::vector< T > &v, int widthInBytes)
 
+ + + +

+Variables

struct spark::spmv::Partition __attribute__
 
+

Typedef Documentation

+ +
+
+ + + + +
using spark::spmv::EigenSparseMatrix = typedef Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
struct spark::spmv::indptr_value spark::spmv::__attribute__ ((packed) )
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
void spark::spmv::align (std::vector< T > & v,
int widthInBytes 
)
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& spark::spmv::operator<< (std::ostream & s,
SpmvArchitecture & a 
)
+
+inline
+
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
struct spark::spmv::Partition spark::spmv::__attribute__
+
+ +
+
+
+ + + + diff --git a/namespacespark_1_1userio.html b/namespacespark_1_1userio.html new file mode 100644 index 0000000..1abd37a --- /dev/null +++ b/namespacespark_1_1userio.html @@ -0,0 +1,152 @@ + + + + + + +Spark: spark::userio Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::userio Namespace Reference
+
+
+ + + + +

+Typedefs

using UserInputParams = std::unordered_map< std::string, int >
 
+ + + +

+Functions

UserInputParams parseBuildParams (std::string params)
 
+

Typedef Documentation

+ +
+
+ + + + +
using spark::userio::UserInputParams = typedef std::unordered_map<std::string, int>
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
UserInputParams spark::userio::parseBuildParams (std::string params)
+
+inline
+
+ +
+
+
+ + + + diff --git a/namespacespark_1_1utils.html b/namespacespark_1_1utils.html new file mode 100644 index 0000000..483f324 --- /dev/null +++ b/namespacespark_1_1utils.html @@ -0,0 +1,149 @@ + + + + + + +Spark: spark::utils Namespace Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::utils Namespace Reference
+
+
+ + + + +

+Classes

struct  Range
 
+ + + +

+Functions

std::ostream & operator<< (std::ostream &s, const Range &r)
 
+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& spark::utils::operator<< (std::ostream & s,
const Range & r 
)
+
+inline
+
+ +
+
+
+ + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + +Spark: Related Pages + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+ + +
\spark
+
+
+ + + + diff --git a/search/all_5f.html b/search/all_5f.html new file mode 100644 index 0000000..879d792 --- /dev/null +++ b/search/all_5f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_5f.js b/search/all_5f.js new file mode 100644 index 0000000..e671369 --- /dev/null +++ b/search/all_5f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5fattribute_5f_5f',['__attribute__',['../namespacespark_1_1spmv.html#a8ad7d0fb384bbf6ef88a68b8cad95182',1,'spark::spmv::__attribute__()'],['../namespacespark_1_1spmv.html#a8ed4b5e7d25d6d210e3f1b7f09a84c7a',1,'spark::spmv::__attribute__((packed))']]] +]; diff --git a/search/all_61.html b/search/all_61.html new file mode 100644 index 0000000..f85089b --- /dev/null +++ b/search/all_61.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_61.js b/search/all_61.js new file mode 100644 index 0000000..11fa3f7 --- /dev/null +++ b/search/all_61.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['add_5fmatrix_5fpath',['add_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a18854065058a9f70a0fbb4127212d81f',1,'spark::dse::Benchmark']]], + ['addcomputepipe',['addComputePipe',['../classSpmvManager.html#ac993f1b6041594ae5bd7211d4f498702',1,'SpmvManager']]], + ['addpaddingkernel',['addPaddingKernel',['../classSpmvManager.html#ab025ef7147d5d645028cc92b7d1a513f',1,'SpmvManager']]], + ['addresst',['addressT',['../classSpmvCacheKernel.html#a33ae456838bd9708e94df43436703305',1,'SpmvCacheKernel']]], + ['addunpaddingkernel',['addUnpaddingKernel',['../classSpmvManager.html#ae2858b4c2bd5a17d5710d0d34429e2b3',1,'SpmvManager']]], + ['align',['align',['../namespacespark_1_1spmv.html#abaf9d6fbe5cd5df67ea6314fccd769e0',1,'spark::spmv::align()'],['../Spmv_8cpp.html#af110ee89567b09ff002ff971364c551d',1,'align(): Spmv.cpp']]], + ['analyze',['analyze',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#a5922d0592d66ae9966bfbf4bb78a1c55',1,'spark::sparse_linear_solvers::Solver']]], + ['at_5fstart',['at_start',['../structspark_1_1utils_1_1Range.html#a2e5c2a068b494d96fa3bb9bc81f3b98b',1,'spark::utils::Range']]] +]; diff --git a/search/all_62.html b/search/all_62.html new file mode 100644 index 0000000..f25fa2c --- /dev/null +++ b/search/all_62.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_62.js b/search/all_62.js new file mode 100644 index 0000000..c9c3f5e --- /dev/null +++ b/search/all_62.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['benchmark',['Benchmark',['../classspark_1_1dse_1_1Benchmark.html',1,'spark::dse']]], + ['bestarchitecture',['bestArchitecture',['../classspark_1_1dse_1_1DseResult.html#a2a23395d873d124a4da624ed94ab4d76',1,'spark::dse::DseResult']]], + ['better',['better',['../Dse_8cpp.html#ac63ef9b091049d2a25c5941b73512252',1,'Dse.cpp']]], + ['biconjugategradient_2ecpp',['BiConjugateGradient.cpp',['../BiConjugateGradient_8cpp.html',1,'']]], + ['brams',['brams',['../classspark_1_1model_1_1LogicResourceUsage.html#a9e1bfd322976881da5fc6d0501ecbf32',1,'spark::model::LogicResourceUsage']]], + ['bramspmvreductionkernel',['BramSpmvReductionKernel',['../classBramSpmvReductionKernel.html',1,'BramSpmvReductionKernel'],['../classBramSpmvReductionKernel.html#a68264df2094dfb810030e2147b3cacaa',1,'BramSpmvReductionKernel.BramSpmvReductionKernel()']]], + ['buildreadmask',['buildReadMask',['../classParallelCsrReadControl.html#ac16da093fd2a7f25322d24d8be66593f',1,'ParallelCsrReadControl']]] +]; diff --git a/search/all_63.html b/search/all_63.html new file mode 100644 index 0000000..e7f34db --- /dev/null +++ b/search/all_63.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_63.js b/search/all_63.js new file mode 100644 index 0000000..75a53ce --- /dev/null +++ b/search/all_63.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['cachesize',['cacheSize',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a0fd07f4d1e241d9bb5e525fc1f9c4ab2',1,'spark::spmv::SimpleSpmvArchitecture::cacheSize()'],['../classSpmvManager.html#a9a9f9ca14bf99119d5ed0d7106acdcd9',1,'SpmvManager.cacheSize()']]], + ['cachesizer',['cacheSizeR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a5eb1ea4c3054ef0b99c199732c004195',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['cachesizerange',['cacheSizeRange',['../classspark_1_1dse_1_1DseParameters.html#a407b33c26d55c84c1436a3535576f380',1,'spark::dse::DseParameters']]], + ['canread',['canRead',['../classParallelCsrReadControl.html#a2aa999eee54eca7e025dcb2be11dc900',1,'ParallelCsrReadControl']]], + ['cat',['cat',['../classParallelCsrReadControl.html#aff22ed75d30f759a6fa33b1d8a20b602',1,'ParallelCsrReadControl.cat(DFEsmValue...args)'],['../classParallelCsrReadControl.html#ac1026ad92d6b9e38d84c81aaced9c3b7',1,'ParallelCsrReadControl.cat(DFEsmValue left, DFEsmValue right)']]], + ['colptrsize',['colptrSize',['../structPartitionWriteResult.html#a1b1d42061ca85c85c68b12e3405743e5',1,'PartitionWriteResult']]], + ['colptrstartaddress',['colptrStartAddress',['../structPartitionWriteResult.html#a744ceeec06294048f07cd552a340118f',1,'PartitionWriteResult']]], + ['conjugategradient_2ecpp',['ConjugateGradient.cpp',['../ConjugateGradient_8cpp.html',1,'']]], + ['converters_2ehpp',['Converters.hpp',['../Converters_8hpp.html',1,'']]], + ['coordtype',['CoordType',['../classspark_1_1io_1_1MmReader.html#a43348db7743f21cff1854197cf7f9819',1,'spark::io::MmReader::CoordType()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a9de150aa2a040306403bc97687b40f',1,'spark::sparse::SparkCooMatrix::CoordType()']]], + ['countcomputecycles',['countComputeCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ab2b61b0a02aa4dfa40a38ad98a84bbb4',1,'spark::spmv::SimpleSpmvArchitecture::countComputeCycles()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a328db4b67f8f9c6763117c8a82f81577',1,'spark::spmv::FstSpmvArchitecture::countComputeCycles()']]], + ['cpureferenceprecon',['cpuReferencePrecon',['../BiConjugateGradient_8cpp.html#ab1ada1c516bfa9599e8e43b4b9666a10',1,'BiConjugateGradient.cpp']]], + ['cpureferenceunprecon',['cpuReferenceUnprecon',['../BiConjugateGradient_8cpp.html#aa6ded0f7e5d8161252912d0eb17f27c0',1,'BiConjugateGradient.cpp']]], + ['crt',['crt',['../structspark_1_1utils_1_1Range.html#a07fd2cc26cde356c3f1db74bedd31eb5',1,'spark::utils::Range']]], + ['crtpos',['crtPos',['../classParallelCsrReadControl.html#ab0f5b6539f65df26eccc3c40b234752c',1,'ParallelCsrReadControl']]], + ['csrmatrix',['CsrMatrix',['../namespacespark_1_1sparse.html#a0f0d804dd8f37cb44a636bca7d03f016',1,'spark::sparse']]], + ['cyclecounter',['cycleCounter',['../classParallelCsrReadControl.html#a51cfb6d5b02eb3e5b204e4ea8f16fce4',1,'ParallelCsrReadControl']]] +]; diff --git a/search/all_64.html b/search/all_64.html new file mode 100644 index 0000000..360601f --- /dev/null +++ b/search/all_64.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_64.js b/search/all_64.js new file mode 100644 index 0000000..86bc2cb --- /dev/null +++ b/search/all_64.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['data',['data',['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a0b72ae9e7b1deed9b6228cf40e9f32',1,'spark::sparse::SparkCooMatrix']]], + ['dbg',['dbg',['../classParallelCsrReadControl.html#a522323c9bbe60e7a02f48e1ff6f7db06',1,'ParallelCsrReadControl']]], + ['dbg_5fpar_5fcsr_5fctl',['DBG_PAR_CSR_CTL',['../classSpmvManager.html#a234ea438d3c8363b41db2581e3d8a51a',1,'SpmvManager']]], + ['dbg_5freduction_5fkernel',['DBG_REDUCTION_KERNEL',['../classSpmvManager.html#a5c29c11c95c8f9980aa3201d8f25ff3d',1,'SpmvManager']]], + ['dbg_5fspmv_5fkernel',['DBG_SPMV_KERNEL',['../classSpmvManager.html#aece403b7ff81eeebfaf75b35aacb2b1f',1,'SpmvManager']]], + ['dfebicgsolver',['DfeBiCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html',1,'spark::sparse_linear_solvers']]], + ['dfecgsolver',['DfeCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html',1,'spark::sparse_linear_solvers']]], + ['dfeimplunprecon',['dfeImplUnprecon',['../BiConjugateGradient_8cpp.html#ac3a55e37d1559a049fcef0af776feb3b',1,'BiConjugateGradient.cpp']]], + ['dfespmv',['dfespmv',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a8c7ca2d2ac7284e46506f23728dde499',1,'spark::spmv::SimpleSpmvArchitecture::dfespmv()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1d557e23529a5040a858beafb9971acc',1,'spark::spmv::SpmvArchitecture::dfespmv()']]], + ['do_5fblocking',['do_blocking',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aedb22fc8e413dd6bc2c54d74bf03ed2d',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['do_5fpartition',['do_partition',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac3cd16da984d35b091f0833edd919a56',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['done',['Done',['../enumParallelCsrReadControl_1_1Mode.html#a4af99d8c25b54128c920d384091485d0',1,'ParallelCsrReadControl::Mode']]], + ['donext',['doNext',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abde19171c284739290c7a7c145d7deb7',1,'spark::spmv::SimpleSpmvArchitectureSpace::doNext()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a414ec6872fdf32550af1a6efbb4394d5',1,'spark::spmv::SpmvArchitectureSpace::doNext()']]], + ['dramreductionenabled',['dramReductionEnabled',['../classSpmvManager.html#adfc3a8c884874f553215941bf86692fa',1,'SpmvManager']]], + ['dramspmvreductionkernel',['DramSpmvReductionKernel',['../classDramSpmvReductionKernel.html',1,'DramSpmvReductionKernel'],['../classDramSpmvReductionKernel.html#a85cd96e69eec800ebfdea2c7bb6f7376',1,'DramSpmvReductionKernel.DramSpmvReductionKernel()']]], + ['dse_2ecpp',['Dse.cpp',['../Dse_8cpp.html',1,'']]], + ['dse_2ehpp',['Dse.hpp',['../Dse_8hpp.html',1,'']]], + ['dse_5frun',['dse_run',['../Dse_8cpp.html#a50c99f119df5ba972bbebeef76239c2e',1,'Dse.cpp']]], + ['dseparameters',['DseParameters',['../classspark_1_1dse_1_1DseParameters.html',1,'spark::dse']]], + ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html',1,'spark::dse']]], + ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html#a1d1342fbcf4346f77de3cb29c23622ba',1,'spark::dse::DseResult::DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)'],['../classspark_1_1dse_1_1DseResult.html#ac8b6f838e0112d684058ee911b9e2ab5',1,'spark::dse::DseResult::DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)']]], + ['dsps',['dsps',['../classspark_1_1model_1_1LogicResourceUsage.html#adb488affc0a051d6c8458d9e2a35d201',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/search/all_65.html b/search/all_65.html new file mode 100644 index 0000000..c2f4fcd --- /dev/null +++ b/search/all_65.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_65.js b/search/all_65.js new file mode 100644 index 0000000..5948c07 --- /dev/null +++ b/search/all_65.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['eigensolver',['EigenSolver',['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html',1,'spark::sparse_linear_solvers']]], + ['eigensparsematrix',['EigenSparseMatrix',['../namespacespark_1_1converters.html#a724347922bbc7e56429febfd000be78b',1,'spark::converters::EigenSparseMatrix()'],['../namespacespark_1_1spmv.html#a3235bbbc3c8db242db2f00947ec4ca9b',1,'spark::spmv::EigenSparseMatrix()']]], + ['eigenvectortostdvector',['eigenVectorToStdVector',['../namespacespark_1_1converters.html#a78a095076b8d4daa406d3dc9bca7504c',1,'spark::converters']]], + ['emptycycles',['emptyCycles',['../structspark_1_1spmv_1_1Partition.html#a59dfdff4762b092034d952fe2e81f95c',1,'spark::spmv::Partition']]], + ['encodeemptyrows',['encodeEmptyRows',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#a0336d2d0c76a4ad1586b904bafaefb3d',1,'spark::spmv::SkipEmptyRowsArchitecture']]], + ['end',['end',['../structspark_1_1utils_1_1Range.html#a014c4c4aa8e0f0c9f9aaf954d3e8fba7',1,'spark::utils::Range']]], + ['equals',['equals',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac9cd3ac1f8a7ff7c2634d707a2d33356',1,'spark::spmv::SimpleSpmvArchitecture::equals()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa3aebf2b76c95d7b96e37865637a1104',1,'spark::spmv::SpmvArchitecture::equals()']]] +]; diff --git a/search/all_66.html b/search/all_66.html new file mode 100644 index 0000000..a9ac881 --- /dev/null +++ b/search/all_66.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_66.js b/search/all_66.js new file mode 100644 index 0000000..3bd01fc --- /dev/null +++ b/search/all_66.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['f',['f',['../classspark_1_1io_1_1MmReader.html#a65848ca959d0961ab594205b40335072',1,'spark::io::MmReader']]], + ['ffs',['ffs',['../classspark_1_1model_1_1LogicResourceUsage.html#ad67dec36e8bd5ba1937687b538d97a8e',1,'spark::model::LogicResourceUsage']]], + ['firstreadposition',['firstReadPosition',['../classParallelCsrReadControl.html#af30ed96f729b948fec5bd989acc13a56',1,'ParallelCsrReadControl']]], + ['floating_5fpoint_5flatency',['FLOATING_POINT_LATENCY',['../classSpmvManager.html#a3a947b39653f09305c7712af18ddd113',1,'SpmvManager']]], + ['fls',['fls',['../classParallelCsrReadControl.html#aa9acfae4966606e3e5645eb1592f5736',1,'ParallelCsrReadControl']]], + ['fpl',['fpL',['../classSpmvKernel.html#a0bf2a803445d2454781d5e09937de571',1,'SpmvKernel']]], + ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#ab1db27169d0bc9921d4c5048592e3d24',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#add2548a017451c5caae61cd3e9021467',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html',1,'spark::spmv']]] +]; diff --git a/search/all_67.html b/search/all_67.html new file mode 100644 index 0000000..747fb51 --- /dev/null +++ b/search/all_67.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_67.js b/search/all_67.js new file mode 100644 index 0000000..2a7f01d --- /dev/null +++ b/search/all_67.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['get_5fbenchmark_5fsize',['get_benchmark_size',['../classspark_1_1dse_1_1Benchmark.html#a1692f6d32fb3d2a6de8ad8c85cf7fc39',1,'spark::dse::Benchmark']]], + ['get_5fmatrix_5fpath',['get_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a42578888522f08d21a620fa6ce17cfb3',1,'spark::dse::Benchmark']]], + ['get_5fname',['get_name',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac91efdbe0c3de7a45edde0052f478638',1,'spark::spmv::SimpleSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a90397fa9aa179cb86021fac39afc3f27',1,'spark::spmv::FstSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ae9604bff9ee8258920e8b599e0bb1a1d',1,'spark::spmv::SkipEmptyRowsArchitecture::get_name()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a91515587bbfe2ac62a891f17363d508f',1,'spark::spmv::PrefetchingArchitecture::get_name()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4dfdec260889947cf9844eed98e5dbbe',1,'spark::spmv::SpmvArchitecture::get_name()']]], + ['getcomputekernel',['getComputeKernel',['../classSpmvManager.html#a6776e0fc817b9cce1698ad46bef5c1ad',1,'SpmvManager']]], + ['getdramreductionenabled',['getDramReductionEnabled',['../SpmvDeviceInterface_8h.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterface.cpp']]], + ['getestimatedclockcycles',['getEstimatedClockCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ad109173c60a0469e99d188010e09fa9c',1,'spark::spmv::SimpleSpmvArchitecture::getEstimatedClockCycles()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#af60acfd57143cbb06c582bd6c1e6a3a9',1,'spark::spmv::SpmvArchitecture::getEstimatedClockCycles()']]], + ['getestimatedgflops',['getEstimatedGFlops',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a745a51a90e0d0e027be6f927e41e267a',1,'spark::spmv::SpmvArchitecture']]], + ['getfanoutname',['getFanoutName',['../classSpmvManager.html#aa4b9b4fd7299e8967130613ce89df06e',1,'SpmvManager']]], + ['getfrequency',['getFrequency',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a3eafac9b3bffd4a17d86a6f99eb97503',1,'spark::spmv::SpmvArchitecture']]], + ['getgflopscount',['getGFlopsCount',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a1b45bc81758c2e9ef21e6620d8fbd4db',1,'spark::spmv::SimpleSpmvArchitecture::getGFlopsCount()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1be404ebea121baa4b28f1548ad6207d',1,'spark::spmv::SpmvArchitecture::getGFlopsCount()']]], + ['getimplementationparameters',['getImplementationParameters',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3c5900f38fdfafa6481508d9c90819ff',1,'spark::spmv::SimpleSpmvArchitecture::getImplementationParameters()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a31274a6b708f9db92d810d2a161d812a',1,'spark::spmv::SpmvArchitecture::getImplementationParameters()']]], + ['getmatrixvalues',['getMatrixValues',['../classSpmvCacheKernel.html#a1c512fd317ade4f64a5e7f7215dd0c53',1,'SpmvCacheKernel']]], + ['getpaddingcycles',['getPaddingCycles',['../classSpmvManager.html#a64afe0643711d9cd06053a68f187f8da',1,'SpmvManager']]], + ['getpaddingkernel',['getPaddingKernel',['../classSpmvManager.html#a0cc931d1320ec4754066dacceeaff9c0',1,'SpmvManager']]], + ['getreadcontrol',['getReadControl',['../classSpmvManager.html#aca5d9419bca8dbc02b44df878cac0009',1,'SpmvManager']]], + ['getreductionkernel',['getReductionKernel',['../classSpmvManager.html#a0e7f3c94df7eafa7a899a2447f16155d',1,'SpmvManager']]], + ['getspmv_5finputwidth',['getSpmv_InputWidth',['../SpmvDeviceInterface_8h.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fmaxrows',['getSpmv_MaxRows',['../SpmvDeviceInterface_8h.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fnumpipes',['getSpmv_NumPipes',['../SpmvDeviceInterface_8h.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fpartitionsize',['getSpmv_PartitionSize',['../SpmvDeviceInterface_8h.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterface.cpp']]], + ['getunpaddingkernel',['getUnpaddingKernel',['../classSpmvManager.html#aff135aa6706cfaf3cea42f1353dd3ea7',1,'SpmvManager']]], + ['getvectorvalues',['getVectorValues',['../classSpmvCacheKernel.html#a937fcc2032a9fc1e390bef6cb425fd55',1,'SpmvCacheKernel']]], + ['gflopsonly',['gflopsOnly',['../classspark_1_1dse_1_1DseParameters.html#a903571a00336065eb295887170686770',1,'spark::dse::DseParameters']]] +]; diff --git a/search/all_69.html b/search/all_69.html new file mode 100644 index 0000000..192e4ba --- /dev/null +++ b/search/all_69.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_69.js b/search/all_69.js new file mode 100644 index 0000000..839a71f --- /dev/null +++ b/search/all_69.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['ilength',['iLength',['../classParallelCsrReadControl.html#a85aaa3cdd7bbfe023bc74bcd02bc21b4',1,'ParallelCsrReadControl']]], + ['ilengthready',['iLengthReady',['../classParallelCsrReadControl.html#a7ffcf81575bcc0d92af9b198653dcf28',1,'ParallelCsrReadControl']]], + ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html',1,'spark::model']]], + ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html#af2b90d99043967462da25c003c7f7e17',1,'spark::model::ImplementationParameters']]], + ['indexwidth',['indexWidth',['../classSpmvManager.html#a01ee1f96ba381149f4233fae1c87c821',1,'SpmvManager']]], + ['indptr',['indptr',['../structspark_1_1spmv_1_1indptr__value.html#ae450af92f13728c597605f909eb7f3b6',1,'spark::spmv::indptr_value::indptr()'],['../SimpleSpmv_8hpp.html#a164fa1a90d7bd63f14e631438885cc69',1,'indptr(): SimpleSpmv.hpp']]], + ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html',1,'spark::spmv']]], + ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html#abf5ac17c5a8b83c68b8e421c9fb2b9f4',1,'spark::spmv::indptr_value::indptr_value(double _value, int _indptr)'],['../structspark_1_1spmv_1_1indptr__value.html#a1bb3b22d80c09f283b847a1fb907a462',1,'spark::spmv::indptr_value::indptr_value()'],['../SimpleSpmv_8hpp.html#ac37db725a01a5625a6a32d51d7fd3e78',1,'indptr_value(double _value, int _indptr): SimpleSpmv.hpp'],['../SimpleSpmv_8hpp.html#a84d257f77f20931d14a7e5abb9d099c8',1,'indptr_value(): SimpleSpmv.hpp']]], + ['indptrvaluessize',['indptrValuesSize',['../structPartitionWriteResult.html#a389a493dd0f322031a4b176ad7251cc1',1,'PartitionWriteResult']]], + ['indptrvaluesstartaddress',['indptrValuesStartAddress',['../structPartitionWriteResult.html#a2ca20725ee8dcb4aad19eac57bc5c957',1,'PartitionWriteResult']]], + ['indptrvector',['indptrVector',['../classSpmvCacheKernel.html#a334b1e969200dfe46d013bef0e5b1934',1,'SpmvCacheKernel']]], + ['inputwidth',['inputWidth',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a4083f351467c940c767fa9122d3a727c',1,'spark::spmv::SimpleSpmvArchitecture::inputWidth()'],['../classParallelCsrReadControl.html#a3458a62c53ce83128cedb6c7765ca6fc',1,'ParallelCsrReadControl.inputWidth()'],['../classSpmvManager.html#a778e13e71f500522f13c6207e6f4e8a4',1,'SpmvManager.inputWidth()']]], + ['inputwidthr',['inputWidthR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#ab7dd6b46e80d1fe85694b964ce761e85',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['inputwidthrange',['inputWidthRange',['../classspark_1_1dse_1_1DseParameters.html#af54d3b84a9781ce472374fb4d4dbecb1',1,'spark::dse::DseParameters']]], + ['interfacedefault',['interfaceDefault',['../classSpmvManager.html#ad0360a20a24483e22664a4bda8428ec6',1,'SpmvManager']]], + ['io_2ehpp',['Io.hpp',['../Io_8hpp.html',1,'']]], + ['iterationsprocessed',['iterationsProcessed',['../classParallelCsrReadControl.html#aca9dea6888fb835dc40d3df86fa60156',1,'ParallelCsrReadControl']]], + ['ivtype',['ivtype',['../classSpmvCacheKernel.html#a7fc692be3af6b331cdf30edbb6db98e6',1,'SpmvCacheKernel']]] +]; diff --git a/search/all_6c.html b/search/all_6c.html new file mode 100644 index 0000000..ae8bc48 --- /dev/null +++ b/search/all_6c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6c.js b/search/all_6c.js new file mode 100644 index 0000000..08cd25b --- /dev/null +++ b/search/all_6c.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['last',['last',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a618c39ec4cde84cb595f089fb881ce7c',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['loadbenchmark',['loadBenchmark',['../main_8cpp.html#a75bc35b120d6b6f0834ae4d32856036c',1,'main.cpp']]], + ['loadparams',['loadParams',['../main_8cpp.html#a84bdcf570024843f14fc9624770bf035',1,'main.cpp']]], + ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html#a5b88cae38db7b5ab535f4a17fa643a15',1,'spark::model::LogicResourceUsage::LogicResourceUsage()'],['../classspark_1_1model_1_1LogicResourceUsage.html#a64aef671cc1360f9c760eddecc95dfe5',1,'spark::model::LogicResourceUsage::LogicResourceUsage(int _l, int _f, int _b, int _d)'],['../classspark_1_1model_1_1LogicResourceUsage.html#a303a7df506637540e2b7eb4d871f9029',1,'spark::model::LogicResourceUsage::LogicResourceUsage(const LogicResourceUsage &ru)']]], + ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html',1,'spark::model']]], + ['luts',['luts',['../classspark_1_1model_1_1LogicResourceUsage.html#a620a5a18ce206d8dbc7cd5adbcb48d7b',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/search/all_6d.html b/search/all_6d.html new file mode 100644 index 0000000..ee90718 --- /dev/null +++ b/search/all_6d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6d.js b/search/all_6d.js new file mode 100644 index 0000000..1599052 --- /dev/null +++ b/search/all_6d.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['m',['m',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ae3892beabaaf78e2e9a67269c22c8f8e',1,'spark::sparse::SparkCooMatrix']]], + ['m_5fcolptr',['m_colptr',['../structspark_1_1spmv_1_1Partition.html#a8aa3fa9f9be247ab7e092f968122e3a7',1,'spark::spmv::Partition']]], + ['m_5fcolptr_5funpaddedlength',['m_colptr_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ac28e1c351c409032a1166678f800141b',1,'spark::spmv::Partition']]], + ['m_5findptr_5fvalues',['m_indptr_values',['../structspark_1_1spmv_1_1Partition.html#ae134d0793283258fb0f95433d5448bb2',1,'spark::spmv::Partition']]], + ['m_5findptr_5fvalues_5funpaddedlength',['m_indptr_values_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ae9b189f7ec6c8fbd47202945dc3fef23',1,'spark::spmv::Partition']]], + ['main',['main',['../classSpmvManager.html#abf7df885f5ea650b0128628cad8bf33b',1,'SpmvManager.main()'],['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(): main.cpp']]], + ['main_2ecpp',['main.cpp',['../main_8cpp.html',1,'']]], + ['makecommand',['makeCommand',['../classParallelCsrReadControl.html#a75734eee54f3dfaaabf8794ba378ccfa',1,'ParallelCsrReadControl']]], + ['makeoutput',['makeOutput',['../classParallelCsrReadControl.html#a999c16ceab5da519c9e90a6b5765359c',1,'ParallelCsrReadControl']]], + ['mantissawidth',['mantissaWidth',['../classSpmvManager.html#a6c6ea06d3d9cb5f752e3cbc3ca7cbafa',1,'SpmvManager']]], + ['mat',['mat',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae295666cf3885149b0e37766c4feffc7',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['matrices',['matrices',['../classspark_1_1dse_1_1DseResult.html#a797ff2ef1c189cb2cff7fa18cfede2a9',1,'spark::dse::DseResult']]], + ['matrix',['matrix',['../classspark_1_1io_1_1MmReader.html#a8bf3a76c76dad47d667f28052adbfaa5',1,'spark::io::MmReader']]], + ['matrixvalues',['matrixValues',['../classSpmvCacheKernel.html#a2c0074e62c391424c276981965dc4bf4',1,'SpmvCacheKernel']]], + ['maxrows',['maxRows',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a577fd6e73f088b437a5632ba3ca89c61',1,'spark::spmv::SimpleSpmvArchitecture::maxRows()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#acaac03fcff370b3f0945823b1f13a90f',1,'spark::spmv::SimpleSpmvArchitectureSpace::maxRows()'],['../classSpmvManager.html#a5746b324d3b38fc407d1577739b969ef',1,'SpmvManager.maxRows()']]], + ['memorybandwidth',['memoryBandwidth',['../classspark_1_1model_1_1ImplementationParameters.html#a7935fb3d5d9d782c66530a541d6f705c',1,'spark::model::ImplementationParameters']]], + ['min',['min',['../classParallelCsrReadControl.html#af39c2cd937063656ee7d2bdb4a21e8db',1,'ParallelCsrReadControl']]], + ['mmparse',['mmparse',['../classspark_1_1io_1_1MmReader.html#a73bef88acba33d35b9f714365456ab39',1,'spark::io::MmReader']]], + ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html#a18da82e5b71af2ce6f5946f7b66f8cd5',1,'spark::io::MmReader']]], + ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html',1,'spark::io']]], + ['mmreadmatrix',['mmreadMatrix',['../classspark_1_1io_1_1MmReader.html#ae0ed6d286d9c5c08ad3bd3e910f3554a',1,'spark::io::MmReader']]], + ['mode',['mode',['../classParallelCsrReadControl.html#aa98eb2e85dadf134870803067fa13ad8',1,'ParallelCsrReadControl']]], + ['mode',['Mode',['../enumParallelCsrReadControl_1_1Mode.html',1,'ParallelCsrReadControl']]], + ['model_2ehpp',['Model.hpp',['../Model_8hpp.html',1,'']]] +]; diff --git a/search/all_6e.html b/search/all_6e.html new file mode 100644 index 0000000..e0fd765 --- /dev/null +++ b/search/all_6e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6e.js b/search/all_6e.js new file mode 100644 index 0000000..40eb596 --- /dev/null +++ b/search/all_6e.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['n',['n',['../structspark_1_1spmv_1_1Partition.html#a858144bacceb65f6b0c6caab04b0308b',1,'spark::spmv::Partition::n()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a582426cd2434334fe15c5f3c23aa0c54',1,'spark::sparse::SparkCooMatrix::n()']]], + ['nblocks',['nBlocks',['../structspark_1_1spmv_1_1Partition.html#a3084298925d168aafc1affa127bb4ef2',1,'spark::spmv::Partition']]], + ['ncols',['ncols',['../classspark_1_1io_1_1MmReader.html#a7b783ac977c5badcd28069cea5368adc',1,'spark::io::MmReader']]], + ['needtoread',['needToRead',['../classParallelCsrReadControl.html#af55c1da545422cde5c57c61a861017d8',1,'ParallelCsrReadControl']]], + ['next',['next',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#aa9e55d9a1af4b951561705869dd2e2fe',1,'spark::spmv::SpmvArchitectureSpace']]], + ['nextstate',['nextState',['../classParallelCsrReadControl.html#acac4d268696bea31cb88a0293e7484ec',1,'ParallelCsrReadControl']]], + ['niterations',['nIterations',['../classParallelCsrReadControl.html#ad8041b856c97ae1d5ac6ea96a5cb0b04',1,'ParallelCsrReadControl']]], + ['nnzs',['nnzs',['../classspark_1_1io_1_1MmReader.html#a55b7ae127a34af4d09bca7079c443866',1,'spark::io::MmReader']]], + ['npartitions',['nPartitions',['../classParallelCsrReadControl.html#a82a4d8d9d682f6c65537975de9483540',1,'ParallelCsrReadControl']]], + ['nrows',['nrows',['../classspark_1_1io_1_1MmReader.html#a3698c442e4b847c2f1479dd11fef9a15',1,'spark::io::MmReader::nrows()'],['../classParallelCsrReadControl.html#afda30a96f0ffe1c758ce548cfd8d5907',1,'ParallelCsrReadControl.nRows()']]], + ['numpipes',['numPipes',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac51f502488f2b7d2dbffb5a9939b4271',1,'spark::spmv::SimpleSpmvArchitecture::numPipes()'],['../classSpmvManager.html#a2b1f61839183d1301ddc3975f4ad3ae9',1,'SpmvManager.numPipes()']]], + ['numpipesr',['numPipesR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a2250dba56bfc36df530fcba2ae8e5573',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['numpipesrange',['numPipesRange',['../classspark_1_1dse_1_1DseParameters.html#a312071f767470577bf393c3d190d72bd',1,'spark::dse::DseParameters']]] +]; diff --git a/search/all_6f.html b/search/all_6f.html new file mode 100644 index 0000000..5e86b03 --- /dev/null +++ b/search/all_6f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6f.js b/search/all_6f.js new file mode 100644 index 0000000..30ed723 --- /dev/null +++ b/search/all_6f.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['ocontrol',['oControl',['../classParallelCsrReadControl.html#acadabffbfd3d06c672dabfe98ee0ca23',1,'ParallelCsrReadControl']]], + ['ocontroldata',['oControlData',['../classParallelCsrReadControl.html#acfc1f32a0362606d06eeb514a7738af8',1,'ParallelCsrReadControl']]], + ['one',['one',['../classParallelCsrReadControl.html#af04777655393a3fb3dc8265c4047d0a6',1,'ParallelCsrReadControl']]], + ['operator_28_29',['operator()',['../structSpmvHash.html#a4655e26aca9f73c92dcbc679f7222e83',1,'SpmvHash::operator()()'],['../structSpmvEqual.html#aad8f140c593abd6997a30cf6833dcfc2',1,'SpmvEqual::operator()()']]], + ['operator_2a',['operator*',['../classspark_1_1model_1_1LogicResourceUsage.html#accca14ba38323db0242d77a654b22520',1,'spark::model::LogicResourceUsage::operator*(int x) const '],['../classspark_1_1model_1_1LogicResourceUsage.html#ae939cb8a86e0fe1209d312317627d3a1',1,'spark::model::LogicResourceUsage::operator*(double x) const ']]], + ['operator_2b',['operator+',['../classspark_1_1model_1_1LogicResourceUsage.html#a48bf8cd8225540f1fa0da63719657e6a',1,'spark::model::LogicResourceUsage']]], + ['operator_2b_2b',['operator++',['../structspark_1_1utils_1_1Range.html#a8623004edfe9d73657f831d1392fe579',1,'spark::utils::Range']]], + ['operator_3c',['operator<',['../classspark_1_1model_1_1LogicResourceUsage.html#aea20a053d751c2de91d491e38688f776',1,'spark::model::LogicResourceUsage::operator<()'],['../classspark_1_1model_1_1ImplementationParameters.html#acf5199cb8cb126ddb4977b02f1cebddd',1,'spark::model::ImplementationParameters::operator<()']]], + ['operator_3c_3c',['operator<<',['../namespacespark_1_1dse.html#a2cba03adcd7e6708f31a01eb270ffeb9',1,'spark::dse::operator<<(std::ostream &s, Benchmark &b)'],['../namespacespark_1_1dse.html#ae3baaf24604e126136d1d8b583fc389d',1,'spark::dse::operator<<(std::ostream &s, DseParameters &d)'],['../namespacespark_1_1spmv.html#ad1e89fa7b9bf647e70186d2dc8385961',1,'spark::spmv::operator<<()'],['../namespacespark_1_1utils.html#a58716b1e1a4e2b2a3115f339aba795ef',1,'spark::utils::operator<<()']]], + ['operator_3d_3d',['operator==',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9ff8f85bf609bf02b087b39674dc1b25',1,'spark::spmv::SimpleSpmvArchitecture::operator==()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a113cc5b7d55d561f862e007e0252cc82',1,'spark::spmv::SpmvArchitecture::operator==()']]], + ['outputfunction',['outputFunction',['../classParallelCsrReadControl.html#a9f87d1cc0071a87de47a8ede3cd8508c',1,'ParallelCsrReadControl']]], + ['outputnotstall',['outputNotStall',['../classParallelCsrReadControl.html#a5ba3304bde2ca9c746fc58f4f632092e',1,'ParallelCsrReadControl']]], + ['outputtingcommands',['OutputtingCommands',['../enumParallelCsrReadControl_1_1Mode.html#a1fe6df0a1446f33e43e80b9ad3e0cd49',1,'ParallelCsrReadControl::Mode']]], + ['outsize',['outSize',['../structspark_1_1spmv_1_1Partition.html#a4653f40c7d63f4c663190b209b6373d7',1,'spark::spmv::Partition::outSize()'],['../structPartitionWriteResult.html#a7cc1bba9c690f9a66fa15add6d1763e6',1,'PartitionWriteResult::outSize()']]], + ['outstartaddr',['outStartAddr',['../structPartitionWriteResult.html#a93f6f5c23c1f0f7e18f319f3e33aee61',1,'PartitionWriteResult']]], + ['outvalid',['outValid',['../classParallelCsrReadControl.html#a998688c17de6d3dee32bb3005124d484',1,'ParallelCsrReadControl']]] +]; diff --git a/search/all_70.html b/search/all_70.html new file mode 100644 index 0000000..799c1a2 --- /dev/null +++ b/search/all_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_70.js b/search/all_70.js new file mode 100644 index 0000000..5bc327b --- /dev/null +++ b/search/all_70.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['paddingcycles',['paddingCycles',['../structspark_1_1spmv_1_1Partition.html#a611bc144e0b0f3e4075e4fa27137669f',1,'spark::spmv::Partition']]], + ['paddingkernel',['PaddingKernel',['../classPaddingKernel.html',1,'PaddingKernel'],['../classPaddingKernel.html#a6087bd04eca705d5c45d7978892ba7b0',1,'PaddingKernel.PaddingKernel()']]], + ['parallelcsrreadcontrol',['ParallelCsrReadControl',['../classParallelCsrReadControl.html',1,'ParallelCsrReadControl'],['../classParallelCsrReadControl.html#abcbdd7c1a9d3193fa28f097ffb47e110',1,'ParallelCsrReadControl.ParallelCsrReadControl()']]], + ['parallelcsrreadcontrol_2ejava',['ParallelCsrReadControl.java',['../ParallelCsrReadControl_8java.html',1,'']]], + ['parsebuildparams',['parseBuildParams',['../namespacespark_1_1userio.html#a3dd99cbd0dfbe620ddebf4f95351b15b',1,'spark::userio']]], + ['parseheader',['parseHeader',['../classspark_1_1io_1_1MmReader.html#a5f474abc81a8d634a45b80750d816df9',1,'spark::io::MmReader::parseHeader(std::string line)'],['../classspark_1_1io_1_1MmReader.html#a3575f75893a9ece651ef17b111d959fd',1,'spark::io::MmReader::parseHeader(bool pprint=false)']]], + ['partition',['Partition',['../structspark_1_1spmv_1_1Partition.html',1,'spark::spmv']]], + ['partitionedcsrmatrix',['PartitionedCsrMatrix',['../namespacespark_1_1sparse.html#a15a8e3974007d1c440410bf83232f5dd',1,'spark::sparse']]], + ['partitions',['partitions',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a90e1699cd2d8ee0abd21e4461d8c7d32',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['partitionsprocessed',['partitionsProcessed',['../classParallelCsrReadControl.html#abaf944d93404a6d08eaa4f17e8ee4d0c',1,'ParallelCsrReadControl']]], + ['partitionwriteresult',['PartitionWriteResult',['../structPartitionWriteResult.html',1,'']]], + ['path',['path',['../classspark_1_1io_1_1MmReader.html#a853387b508034ba82ede19c2500c5030',1,'spark::io::MmReader']]], + ['paths',['paths',['../classspark_1_1dse_1_1Benchmark.html#aa21c70d1c142db7c1ee3fb81fc5e81c5',1,'spark::dse::Benchmark']]], + ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html',1,'spark::spmv']]], + ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#ae614b247e6e43b41b6ee2ec4565a55c6',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a12e8b6b4d9135f559d1800dacf5f25f1',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['preprocess',['preprocess',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3aed67e40e87a0ea0dd79fd30f76a7cf',1,'spark::spmv::SimpleSpmvArchitecture::preprocess()'],['../classspark_1_1sparse__linear__solvers_1_1Solver.html#ae5a1a27b9213613cf6d67dc6e635f42d',1,'spark::sparse_linear_solvers::Solver::preprocess()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4f14b957c8585ed81ff2af46ab26340f',1,'spark::spmv::SpmvArchitecture::preprocess()']]], + ['preprocessblock',['preprocessBlock',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#adefa266d246a395b8a67a83912272e2d',1,'spark::spmv::SkipEmptyRowsArchitecture::preprocessBlock()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a7cd5036aa7c21a4439b8ddfb8a969bf0',1,'spark::spmv::SpmvArchitecture::preprocessBlock()']]], + ['prevdata',['prevData',['../classParallelCsrReadControl.html#aae3d7861bddbf53bea616be8e308afa8',1,'ParallelCsrReadControl']]], + ['processrows',['processRows',['../classParallelCsrReadControl.html#a0860f8fe7c3841a51d7b9faa16b1f26a',1,'ParallelCsrReadControl']]] +]; diff --git a/search/all_72.html b/search/all_72.html new file mode 100644 index 0000000..347b9f6 --- /dev/null +++ b/search/all_72.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_72.js b/search/all_72.js new file mode 100644 index 0000000..d51533a --- /dev/null +++ b/search/all_72.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['range',['Range',['../structspark_1_1utils_1_1Range.html',1,'spark::utils']]], + ['range',['Range',['../structspark_1_1utils_1_1Range.html#af0ce17db5625ad22c87532891f4b890a',1,'spark::utils::Range::Range(int _s, int _e, int _stp)'],['../structspark_1_1utils_1_1Range.html#a6a3850b17634041447d86797929e9f2c',1,'spark::utils::Range::Range(std::string range)']]], + ['readinglength',['ReadingLength',['../enumParallelCsrReadControl_1_1Mode.html#a0bf9792309f43608f812f047b288bcd9',1,'ParallelCsrReadControl::Mode']]], + ['readlength',['readLength',['../classParallelCsrReadControl.html#afe43fc900641b277ae1069dde875a88b',1,'ParallelCsrReadControl']]], + ['readmaskdata',['readMaskData',['../classParallelCsrReadControl.html#a0f2333314c34fb9b3a1cd57c7d2d6d37',1,'ParallelCsrReadControl']]], + ['readme_2emd',['README.md',['../README_8md.html',1,'']]], + ['readvector',['readVector',['../classspark_1_1io_1_1MmReader.html#a3aa3d0ea6867f58d326674b632f7b045',1,'spark::io::MmReader']]], + ['reductioncycles',['reductionCycles',['../structspark_1_1spmv_1_1Partition.html#abf0e3c933b315809c50c6e68506bb174',1,'spark::spmv::Partition']]], + ['resolvevectorreads',['resolveVectorReads',['../classSpmvCacheKernel.html#a8c2591875950cd9bb288c779aacccd54',1,'SpmvCacheKernel']]], + ['restart',['restart',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a50a6bb214092c694e0c3e8b9978f607c',1,'spark::spmv::SimpleSpmvArchitectureSpace::restart()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a76b80d8f6d287bf6b90f38a0ac215354',1,'spark::spmv::SpmvArchitectureSpace::restart()'],['../structspark_1_1utils_1_1Range.html#a05c07c975dd7bf3ba8a097044258aa5a',1,'spark::utils::Range::restart()']]], + ['rowlengthdata',['rowLengthData',['../classParallelCsrReadControl.html#a309e5d2abd0d3bdaca25a19f280cd029',1,'ParallelCsrReadControl']]], + ['rowsprocessed',['rowsProcessed',['../classParallelCsrReadControl.html#ad0b253e90543c25af346b9afff908d87',1,'ParallelCsrReadControl']]], + ['ru',['ru',['../classspark_1_1model_1_1ImplementationParameters.html#ac82ef6a8d3fd73cd40fff27d1ec9b943',1,'spark::model::ImplementationParameters']]], + ['run',['run',['../classspark_1_1dse_1_1SparkDse.html#abefe26e252597bb164ef8236e5460210',1,'spark::dse::SparkDse']]] +]; diff --git a/search/all_73.html b/search/all_73.html new file mode 100644 index 0000000..9abac91 --- /dev/null +++ b/search/all_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_73.js b/search/all_73.js new file mode 100644 index 0000000..9aecf04 --- /dev/null +++ b/search/all_73.js @@ -0,0 +1,63 @@ +var searchData= +[ + ['converters',['converters',['../namespacespark_1_1converters.html',1,'spark']]], + ['dse',['dse',['../namespacespark_1_1dse.html',1,'spark']]], + ['io',['io',['../namespacespark_1_1io.html',1,'spark']]], + ['spark',['spark',['../md_README.html',1,'']]], + ['model',['model',['../namespacespark_1_1model.html',1,'spark']]], + ['selectvalues',['selectValues',['../classSpmvCacheKernel.html#a3864c0d130426bcad05724a9a864c7db',1,'SpmvCacheKernel']]], + ['setupcomputepipe',['setUpComputePipe',['../classSpmvManager.html#a8f777c0e6b5572b85bf90427b1419039',1,'SpmvManager']]], + ['setupunpaddingkernel',['setupUnpaddingKernel',['../classSpmvManager.html#a42510179831b9c539721ffbf0506c0f2',1,'SpmvManager']]], + ['simplespmv_2ehpp',['SimpleSpmv.hpp',['../SimpleSpmv_8hpp.html',1,'']]], + ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html',1,'spark::spmv']]], + ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae0357e972b3380edb382868d3616542d',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a254d3c473b526699bdf5d7994da756b9',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html',1,'spark::spmv']]], + ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a045eb9b1b8b025ae7ebff4a4f6cd3246',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace(spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abd7023a217d39076e9c47a4226580c4f',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace()']]], + ['size_5fbytes',['size_bytes',['../Spmv_8cpp.html#a725a1b7ac05f04b3bc61b2a270346ea6',1,'Spmv.cpp']]], + ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ad7f11ef476f1343c237b4bd41f19559b',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ab8dadd53ee054e2152cd86b979b4304e',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html',1,'spark::spmv']]], + ['smallestmultiplelargerthan',['smallestMultipleLargerThan',['../classSpmvManager.html#a3297286373eb2b5536b6cc04481cc996',1,'SpmvManager']]], + ['solve',['solve',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#aeab2189d0b72aaeda51f9defb2fd64b4',1,'spark::sparse_linear_solvers::Solver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html#a3c0f45b239cb7127fe8da07673cbfd52',1,'spark::sparse_linear_solvers::EigenSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html#a55a4b35ed35b40ee3f712024d9b45206',1,'spark::sparse_linear_solvers::DfeCgSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html#adaa588ced5dd2ce56da4cc095c88c4c3',1,'spark::sparse_linear_solvers::DfeBiCgSolver::solve()']]], + ['solvebicg',['solveBICG',['../SparseLinearSolvers_8cpp.html#a0917711c5c1de1d6fc6d3f5c2fa08c47',1,'SparseLinearSolvers.cpp']]], + ['solvecg',['solveCG',['../SparseLinearSolvers_8cpp.html#a857d72c794d4097e9a37e2a1a6839567',1,'SparseLinearSolvers.cpp']]], + ['solvelu',['solveLU',['../SparseLinearSolvers_8cpp.html#abdc884f0c76856917e9821d6242ee98a',1,'SparseLinearSolvers.cpp']]], + ['solver',['Solver',['../classspark_1_1sparse__linear__solvers_1_1Solver.html',1,'spark::sparse_linear_solvers']]], + ['spark',['spark',['../namespacespark.html',1,'']]], + ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html',1,'spark::sparse']]], + ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ad81f39eca4950c1e4623cdb120f094b0',1,'spark::sparse::SparkCooMatrix']]], + ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html#acf3f66892ae92b0d4c4d0e250da9ebde',1,'spark::dse::SparkDse']]], + ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html',1,'spark::dse']]], + ['sparse',['sparse',['../namespacespark_1_1sparse.html',1,'spark']]], + ['sparse',['sparse',['../classspark_1_1io_1_1MmReader.html#abaeb856fe8052dada1094aeeba575482',1,'spark::io::MmReader']]], + ['sparse_5flinear_5fsolvers',['sparse_linear_solvers',['../namespacespark_1_1sparse__linear__solvers.html',1,'spark']]], + ['sparselinearsolvers_2ecpp',['SparseLinearSolvers.cpp',['../SparseLinearSolvers_8cpp.html',1,'']]], + ['sparselinearsolvers_2ehpp',['SparseLinearSolvers.hpp',['../SparseLinearSolvers_8hpp.html',1,'']]], + ['sparsematrix',['SparseMatrix',['../classspark_1_1io_1_1MmReader.html#a4b6628e5d0886325e152e8ffdae1964c',1,'spark::io::MmReader']]], + ['sparsematrix_2ehpp',['SparseMatrix.hpp',['../SparseMatrix_8hpp.html',1,'']]], + ['spmv',['Spmv',['../SpmvDeviceInterface_8h.html#a2f0caf835f75923c7b64abf5b530f56a',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterface.h'],['../SpmvDeviceInterfaceMock_8cpp.html#a56da26d4ef8ebccdac40830eae1f75d6',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int32_t *param_outResultSizes, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterfaceMock.cpp']]], + ['spmv',['spmv',['../namespacespark_1_1spmv.html',1,'spark']]], + ['spmv_2ecpp',['Spmv.cpp',['../Spmv_8cpp.html',1,'']]], + ['spmv_2ehpp',['Spmv.hpp',['../Spmv_8hpp.html',1,'']]], + ['spmv_5fdramread',['Spmv_dramRead',['../SpmvDeviceInterface_8h.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp']]], + ['spmv_5fdramwrite',['Spmv_dramWrite',['../SpmvDeviceInterface_8h.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp']]], + ['spmvarchitecture',['SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html',1,'spark::spmv']]], + ['spmvarchitecturespace',['SpmvArchitectureSpace',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html',1,'spark::spmv']]], + ['spmvcachekernel',['SpmvCacheKernel',['../classSpmvCacheKernel.html',1,'SpmvCacheKernel'],['../classSpmvCacheKernel.html#acd4688b7b45eb067763e70a072acc496',1,'SpmvCacheKernel.SpmvCacheKernel()']]], + ['spmvdeviceinterface_2ecpp',['SpmvDeviceInterface.cpp',['../SpmvDeviceInterface_8cpp.html',1,'']]], + ['spmvdeviceinterface_2eh',['SpmvDeviceInterface.h',['../SpmvDeviceInterface_8h.html',1,'']]], + ['spmvdeviceinterfacemock_2ecpp',['SpmvDeviceInterfaceMock.cpp',['../SpmvDeviceInterfaceMock_8cpp.html',1,'']]], + ['spmvequal',['SpmvEqual',['../structSpmvEqual.html',1,'']]], + ['spmvhash',['SpmvHash',['../structSpmvHash.html',1,'']]], + ['spmvkernel',['SpmvKernel',['../classSpmvKernel.html',1,'SpmvKernel'],['../classSpmvKernel.html#ad09b317bceedc13d1f50865cbdb4cd91',1,'SpmvKernel.SpmvKernel()']]], + ['spmvkernel_2ejava',['SpmvKernel.java',['../SpmvKernel_8java.html',1,'']]], + ['spmvmanager',['SpmvManager',['../classSpmvManager.html',1,'SpmvManager'],['../classSpmvManager.html#aaeaf51093060e192ab53048bf0c2fa9d',1,'SpmvManager.SpmvManager()']]], + ['spmvmanager_2ejava',['SpmvManager.java',['../SpmvManager_8java.html',1,'']]], + ['spmvreductionkernel',['SpmvReductionKernel',['../classSpmvReductionKernel.html',1,'SpmvReductionKernel'],['../classSpmvReductionKernel.html#a6cf50bef530943f0e812c5a684b2b26a',1,'SpmvReductionKernel.SpmvReductionKernel()']]], + ['ssarch',['ssarch',['../Spmv_8cpp.html#a73ed93bfd16d2b54084241251efe53ca',1,'Spmv.cpp']]], + ['start',['start',['../structspark_1_1utils_1_1Range.html#aa944c6fbb45db229c82ab2af62836237',1,'spark::utils::Range']]], + ['stdvectortoeigen',['stdvectorToEigen',['../namespacespark_1_1converters.html#aa6e224b8b4ce34ca7a1683910b0dd9c2',1,'spark::converters']]], + ['step',['step',['../structspark_1_1utils_1_1Range.html#adafa797e5802e578a9fffc6fc25b6a24',1,'spark::utils::Range']]], + ['symmetric',['symmetric',['../classspark_1_1io_1_1MmReader.html#a339fd452b0db39fdabb6fc9b9994624d',1,'spark::io::MmReader']]], + ['userio',['userio',['../namespacespark_1_1userio.html',1,'spark']]], + ['utils',['utils',['../namespacespark_1_1utils.html',1,'spark']]] +]; diff --git a/search/all_74.html b/search/all_74.html new file mode 100644 index 0000000..c646aef --- /dev/null +++ b/search/all_74.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_74.js b/search/all_74.js new file mode 100644 index 0000000..ec177a7 --- /dev/null +++ b/search/all_74.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['to_5fstring',['to_string',['../classspark_1_1model_1_1LogicResourceUsage.html#a0f6ff26d2cab74fc11bca87f60bdce35',1,'spark::model::LogicResourceUsage::to_string()'],['../classspark_1_1model_1_1ImplementationParameters.html#a0e71a3875d830daed887869a9f86c374',1,'spark::model::ImplementationParameters::to_string()'],['../structspark_1_1spmv_1_1Partition.html#a11004c0342811a57bba97bf31c823d64',1,'spark::spmv::Partition::to_string()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af12e62e4f0c6a5d0f6e37bf3a326956b',1,'spark::spmv::SimpleSpmvArchitecture::to_string()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa6bc86fc3b1f6d37836c7219d00c49a0',1,'spark::spmv::SpmvArchitecture::to_string()'],['../structspark_1_1utils_1_1Range.html#ae03ddb2296e4c08b7756adc10847b4b9',1,'spark::utils::Range::to_string()']]], + ['toread',['toread',['../classParallelCsrReadControl.html#af87a65fc4f7423554e3a36f0a059cbf1',1,'ParallelCsrReadControl']]], + ['totalcycles',['totalCycles',['../structspark_1_1spmv_1_1Partition.html#a2256e3b766ab51acd2be27a1975f0ed9',1,'spark::spmv::Partition']]], + ['totaloutputs',['totalOutputs',['../classParallelCsrReadControl.html#a869e17d0a43818cd085f01898143f2cc',1,'ParallelCsrReadControl']]], + ['triplettoeigen',['tripletToEigen',['../namespacespark_1_1converters.html#ad8ff5498781446bc5c51cd52922f5d72',1,'spark::converters']]], + ['tru',['tru',['../classParallelCsrReadControl.html#ab6214aafff1d0650206637e7a9f15729',1,'ParallelCsrReadControl']]] +]; diff --git a/search/all_75.html b/search/all_75.html new file mode 100644 index 0000000..550133a --- /dev/null +++ b/search/all_75.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_75.js b/search/all_75.js new file mode 100644 index 0000000..1563c61 --- /dev/null +++ b/search/all_75.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['unpaddingkernel',['UnpaddingKernel',['../classUnpaddingKernel.html',1,'UnpaddingKernel'],['../classUnpaddingKernel.html#a52a201168b15d7ab1e1378178a5abd5e',1,'UnpaddingKernel.UnpaddingKernel()']]], + ['userinput_2ehpp',['UserInput.hpp',['../UserInput_8hpp.html',1,'']]], + ['userinputparams',['UserInputParams',['../namespacespark_1_1userio.html#a61705a89ecd4794e1aaf8e56bc89a5ae',1,'spark::userio']]], + ['utils_2ehpp',['Utils.hpp',['../Utils_8hpp.html',1,'']]] +]; diff --git a/search/all_76.html b/search/all_76.html new file mode 100644 index 0000000..50b86da --- /dev/null +++ b/search/all_76.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_76.js b/search/all_76.js new file mode 100644 index 0000000..8ae8702 --- /dev/null +++ b/search/all_76.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['value',['value',['../structspark_1_1spmv_1_1indptr__value.html#ae0073c7eec3c96ddf6ce38dedc3312b1',1,'spark::spmv::indptr_value::value()'],['../SimpleSpmv_8hpp.html#aee90379adb0307effb138f4871edbc5c',1,'value(): SimpleSpmv.hpp']]], + ['vd',['Vd',['../BiConjugateGradient_8cpp.html#a61f485fb4164897d20404192b8a20927',1,'BiConjugateGradient.cpp']]], + ['vector_5fload_5fcycles',['vector_load_cycles',['../structspark_1_1spmv_1_1Partition.html#a087b0019edb1ad8ef824ed7e26e19849',1,'spark::spmv::Partition']]], + ['vectorload',['VectorLoad',['../enumParallelCsrReadControl_1_1Mode.html#aa2414caa80d02424c7a80c3946160a2d',1,'ParallelCsrReadControl::Mode']]], + ['vectorloadcommands',['vectorLoadCommands',['../classParallelCsrReadControl.html#a4627fcdaeb69d3836053e91cc70a80f2',1,'ParallelCsrReadControl']]], + ['vectorloadcycles',['vectorLoadCycles',['../classParallelCsrReadControl.html#aa609515db6c67afd973f1d15431e1684',1,'ParallelCsrReadControl']]], + ['vectorvalues',['vectorValues',['../classSpmvCacheKernel.html#a866881c55c08adf35042aeeb18c9cffd',1,'SpmvCacheKernel']]], + ['vroms',['vroms',['../classSpmvCacheKernel.html#ad7249c675981ec57613b0f3d69a39342',1,'SpmvCacheKernel']]], + ['vstartaddress',['vStartAddress',['../structPartitionWriteResult.html#a2a1d5b0084ae204040066b7fe3a33b07',1,'PartitionWriteResult']]], + ['vtype',['vtype',['../classSpmvCacheKernel.html#a4a13093fa8aa4a3a053cf3d7122c6866',1,'SpmvCacheKernel']]] +]; diff --git a/search/all_77.html b/search/all_77.html new file mode 100644 index 0000000..55d7142 --- /dev/null +++ b/search/all_77.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_77.js b/search/all_77.js new file mode 100644 index 0000000..34a8108 --- /dev/null +++ b/search/all_77.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['write_5fdse_5fresults',['write_dse_results',['../main_8cpp.html#a8d444a99dbaa5e94893a71e578e1d902',1,'main.cpp']]], + ['write_5fparams',['write_params',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9acabcfa6d09c76000290982c33a36f0',1,'spark::spmv::SimpleSpmvArchitecture::write_params()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#acb14edc8b1c5a5e961304e3bf92c97c7',1,'spark::spmv::SpmvArchitecture::write_params()']]], + ['writedataforpartition',['writeDataForPartition',['../Spmv_8cpp.html#a5aa85a542358e8677cae112694f88d78',1,'Spmv.cpp']]] +]; diff --git a/search/all_7a.html b/search/all_7a.html new file mode 100644 index 0000000..5d99ff7 --- /dev/null +++ b/search/all_7a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_7a.js b/search/all_7a.js new file mode 100644 index 0000000..dd8a2c4 --- /dev/null +++ b/search/all_7a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zero',['zero',['../classParallelCsrReadControl.html#ae2dc7d8decaf5a2458d11eee8f0e5f33',1,'ParallelCsrReadControl.zero()'],['../classParallelCsrReadControl.html#a6a81725c82d1c2631d13b35ea2bce758',1,'ParallelCsrReadControl.zero(int bitWidth)']]] +]; diff --git a/search/all_7e.html b/search/all_7e.html new file mode 100644 index 0000000..71f33b1 --- /dev/null +++ b/search/all_7e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_7e.js b/search/all_7e.js new file mode 100644 index 0000000..df583cb --- /dev/null +++ b/search/all_7e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_7emmreader',['~MmReader',['../classspark_1_1io_1_1MmReader.html#afff251fc01bc6a47007e5b562f002ed3',1,'spark::io::MmReader']]], + ['_7espmvarchitecture',['~SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html#abec906effc222dd9f12781c75e3b40c1',1,'spark::spmv::SpmvArchitecture']]] +]; diff --git a/search/classes_62.html b/search/classes_62.html new file mode 100644 index 0000000..04a59d2 --- /dev/null +++ b/search/classes_62.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_62.js b/search/classes_62.js new file mode 100644 index 0000000..d447c84 --- /dev/null +++ b/search/classes_62.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['benchmark',['Benchmark',['../classspark_1_1dse_1_1Benchmark.html',1,'spark::dse']]], + ['bramspmvreductionkernel',['BramSpmvReductionKernel',['../classBramSpmvReductionKernel.html',1,'']]] +]; diff --git a/search/classes_64.html b/search/classes_64.html new file mode 100644 index 0000000..4092564 --- /dev/null +++ b/search/classes_64.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_64.js b/search/classes_64.js new file mode 100644 index 0000000..a5362c2 --- /dev/null +++ b/search/classes_64.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['dfebicgsolver',['DfeBiCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html',1,'spark::sparse_linear_solvers']]], + ['dfecgsolver',['DfeCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html',1,'spark::sparse_linear_solvers']]], + ['dramspmvreductionkernel',['DramSpmvReductionKernel',['../classDramSpmvReductionKernel.html',1,'']]], + ['dseparameters',['DseParameters',['../classspark_1_1dse_1_1DseParameters.html',1,'spark::dse']]], + ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html',1,'spark::dse']]] +]; diff --git a/search/classes_65.html b/search/classes_65.html new file mode 100644 index 0000000..4f441f9 --- /dev/null +++ b/search/classes_65.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_65.js b/search/classes_65.js new file mode 100644 index 0000000..c400400 --- /dev/null +++ b/search/classes_65.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eigensolver',['EigenSolver',['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html',1,'spark::sparse_linear_solvers']]] +]; diff --git a/search/classes_66.html b/search/classes_66.html new file mode 100644 index 0000000..b83e593 --- /dev/null +++ b/search/classes_66.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_66.js b/search/classes_66.js new file mode 100644 index 0000000..c071a37 --- /dev/null +++ b/search/classes_66.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html',1,'spark::spmv']]] +]; diff --git a/search/classes_69.html b/search/classes_69.html new file mode 100644 index 0000000..7a0d013 --- /dev/null +++ b/search/classes_69.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_69.js b/search/classes_69.js new file mode 100644 index 0000000..7308ebc --- /dev/null +++ b/search/classes_69.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html',1,'spark::model']]], + ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html',1,'spark::spmv']]] +]; diff --git a/search/classes_6c.html b/search/classes_6c.html new file mode 100644 index 0000000..a16bb58 --- /dev/null +++ b/search/classes_6c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_6c.js b/search/classes_6c.js new file mode 100644 index 0000000..764cb62 --- /dev/null +++ b/search/classes_6c.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html',1,'spark::model']]] +]; diff --git a/search/classes_6d.html b/search/classes_6d.html new file mode 100644 index 0000000..12b1c83 --- /dev/null +++ b/search/classes_6d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_6d.js b/search/classes_6d.js new file mode 100644 index 0000000..56dcdcf --- /dev/null +++ b/search/classes_6d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html',1,'spark::io']]], + ['mode',['Mode',['../enumParallelCsrReadControl_1_1Mode.html',1,'ParallelCsrReadControl']]] +]; diff --git a/search/classes_70.html b/search/classes_70.html new file mode 100644 index 0000000..7c5b3e5 --- /dev/null +++ b/search/classes_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_70.js b/search/classes_70.js new file mode 100644 index 0000000..30babaa --- /dev/null +++ b/search/classes_70.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['paddingkernel',['PaddingKernel',['../classPaddingKernel.html',1,'']]], + ['parallelcsrreadcontrol',['ParallelCsrReadControl',['../classParallelCsrReadControl.html',1,'']]], + ['partition',['Partition',['../structspark_1_1spmv_1_1Partition.html',1,'spark::spmv']]], + ['partitionwriteresult',['PartitionWriteResult',['../structPartitionWriteResult.html',1,'']]], + ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html',1,'spark::spmv']]] +]; diff --git a/search/classes_72.html b/search/classes_72.html new file mode 100644 index 0000000..03a7720 --- /dev/null +++ b/search/classes_72.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_72.js b/search/classes_72.js new file mode 100644 index 0000000..535570e --- /dev/null +++ b/search/classes_72.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['range',['Range',['../structspark_1_1utils_1_1Range.html',1,'spark::utils']]] +]; diff --git a/search/classes_73.html b/search/classes_73.html new file mode 100644 index 0000000..f447c45 --- /dev/null +++ b/search/classes_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_73.js b/search/classes_73.js new file mode 100644 index 0000000..93fb3c0 --- /dev/null +++ b/search/classes_73.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html',1,'spark::spmv']]], + ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html',1,'spark::spmv']]], + ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html',1,'spark::spmv']]], + ['solver',['Solver',['../classspark_1_1sparse__linear__solvers_1_1Solver.html',1,'spark::sparse_linear_solvers']]], + ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html',1,'spark::sparse']]], + ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html',1,'spark::dse']]], + ['spmvarchitecture',['SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html',1,'spark::spmv']]], + ['spmvarchitecturespace',['SpmvArchitectureSpace',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html',1,'spark::spmv']]], + ['spmvcachekernel',['SpmvCacheKernel',['../classSpmvCacheKernel.html',1,'']]], + ['spmvequal',['SpmvEqual',['../structSpmvEqual.html',1,'']]], + ['spmvhash',['SpmvHash',['../structSpmvHash.html',1,'']]], + ['spmvkernel',['SpmvKernel',['../classSpmvKernel.html',1,'']]], + ['spmvmanager',['SpmvManager',['../classSpmvManager.html',1,'']]], + ['spmvreductionkernel',['SpmvReductionKernel',['../classSpmvReductionKernel.html',1,'']]] +]; diff --git a/search/classes_75.html b/search/classes_75.html new file mode 100644 index 0000000..977f62a --- /dev/null +++ b/search/classes_75.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_75.js b/search/classes_75.js new file mode 100644 index 0000000..0f32206 --- /dev/null +++ b/search/classes_75.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unpaddingkernel',['UnpaddingKernel',['../classUnpaddingKernel.html',1,'']]] +]; diff --git a/search/close.png b/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN literal 0 HcmV?d00001 diff --git a/search/files_62.html b/search/files_62.html new file mode 100644 index 0000000..86dfe39 --- /dev/null +++ b/search/files_62.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/files_62.js b/search/files_62.js new file mode 100644 index 0000000..5f2a9ea --- /dev/null +++ b/search/files_62.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['biconjugategradient_2ecpp',['BiConjugateGradient.cpp',['../BiConjugateGradient_8cpp.html',1,'']]] +]; diff --git a/search/files_63.html b/search/files_63.html new file mode 100644 index 0000000..788d523 --- /dev/null +++ b/search/files_63.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/files_63.js b/search/files_63.js new file mode 100644 index 0000000..17d7cfb --- /dev/null +++ b/search/files_63.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['conjugategradient_2ecpp',['ConjugateGradient.cpp',['../ConjugateGradient_8cpp.html',1,'']]], + ['converters_2ehpp',['Converters.hpp',['../Converters_8hpp.html',1,'']]] +]; diff --git a/search/files_64.html b/search/files_64.html new file mode 100644 index 0000000..175a900 --- /dev/null +++ b/search/files_64.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/files_64.js b/search/files_64.js new file mode 100644 index 0000000..0cb5209 --- /dev/null +++ b/search/files_64.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dse_2ecpp',['Dse.cpp',['../Dse_8cpp.html',1,'']]], + ['dse_2ehpp',['Dse.hpp',['../Dse_8hpp.html',1,'']]] +]; diff --git a/search/files_69.html b/search/files_69.html new file mode 100644 index 0000000..4e0baee --- /dev/null +++ b/search/files_69.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/files_69.js b/search/files_69.js new file mode 100644 index 0000000..8a078d6 --- /dev/null +++ b/search/files_69.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['io_2ehpp',['Io.hpp',['../Io_8hpp.html',1,'']]] +]; diff --git a/search/files_6d.html b/search/files_6d.html new file mode 100644 index 0000000..5796e52 --- /dev/null +++ b/search/files_6d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/files_6d.js b/search/files_6d.js new file mode 100644 index 0000000..bb2be4e --- /dev/null +++ b/search/files_6d.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['main_2ecpp',['main.cpp',['../main_8cpp.html',1,'']]], + ['model_2ehpp',['Model.hpp',['../Model_8hpp.html',1,'']]] +]; diff --git a/search/files_70.html b/search/files_70.html new file mode 100644 index 0000000..e159cea --- /dev/null +++ b/search/files_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/files_70.js b/search/files_70.js new file mode 100644 index 0000000..9f19756 --- /dev/null +++ b/search/files_70.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parallelcsrreadcontrol_2ejava',['ParallelCsrReadControl.java',['../ParallelCsrReadControl_8java.html',1,'']]] +]; diff --git a/search/files_72.html b/search/files_72.html new file mode 100644 index 0000000..573ec11 --- /dev/null +++ b/search/files_72.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/files_72.js b/search/files_72.js new file mode 100644 index 0000000..f1a1f84 --- /dev/null +++ b/search/files_72.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_2emd',['README.md',['../README_8md.html',1,'']]] +]; diff --git a/search/files_73.html b/search/files_73.html new file mode 100644 index 0000000..bcc9ae6 --- /dev/null +++ b/search/files_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/files_73.js b/search/files_73.js new file mode 100644 index 0000000..4d6e0c6 --- /dev/null +++ b/search/files_73.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['simplespmv_2ehpp',['SimpleSpmv.hpp',['../SimpleSpmv_8hpp.html',1,'']]], + ['sparselinearsolvers_2ecpp',['SparseLinearSolvers.cpp',['../SparseLinearSolvers_8cpp.html',1,'']]], + ['sparselinearsolvers_2ehpp',['SparseLinearSolvers.hpp',['../SparseLinearSolvers_8hpp.html',1,'']]], + ['sparsematrix_2ehpp',['SparseMatrix.hpp',['../SparseMatrix_8hpp.html',1,'']]], + ['spmv_2ecpp',['Spmv.cpp',['../Spmv_8cpp.html',1,'']]], + ['spmv_2ehpp',['Spmv.hpp',['../Spmv_8hpp.html',1,'']]], + ['spmvdeviceinterface_2ecpp',['SpmvDeviceInterface.cpp',['../SpmvDeviceInterface_8cpp.html',1,'']]], + ['spmvdeviceinterface_2eh',['SpmvDeviceInterface.h',['../SpmvDeviceInterface_8h.html',1,'']]], + ['spmvdeviceinterfacemock_2ecpp',['SpmvDeviceInterfaceMock.cpp',['../SpmvDeviceInterfaceMock_8cpp.html',1,'']]], + ['spmvkernel_2ejava',['SpmvKernel.java',['../SpmvKernel_8java.html',1,'']]], + ['spmvmanager_2ejava',['SpmvManager.java',['../SpmvManager_8java.html',1,'']]] +]; diff --git a/search/files_75.html b/search/files_75.html new file mode 100644 index 0000000..70607dd --- /dev/null +++ b/search/files_75.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/files_75.js b/search/files_75.js new file mode 100644 index 0000000..311ca6c --- /dev/null +++ b/search/files_75.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['userinput_2ehpp',['UserInput.hpp',['../UserInput_8hpp.html',1,'']]], + ['utils_2ehpp',['Utils.hpp',['../Utils_8hpp.html',1,'']]] +]; diff --git a/search/functions_5f.html b/search/functions_5f.html new file mode 100644 index 0000000..2946e1e --- /dev/null +++ b/search/functions_5f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_5f.js b/search/functions_5f.js new file mode 100644 index 0000000..a6f0d18 --- /dev/null +++ b/search/functions_5f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5fattribute_5f_5f',['__attribute__',['../namespacespark_1_1spmv.html#a8ed4b5e7d25d6d210e3f1b7f09a84c7a',1,'spark::spmv']]] +]; diff --git a/search/functions_61.html b/search/functions_61.html new file mode 100644 index 0000000..d68c748 --- /dev/null +++ b/search/functions_61.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_61.js b/search/functions_61.js new file mode 100644 index 0000000..01d5e06 --- /dev/null +++ b/search/functions_61.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['add_5fmatrix_5fpath',['add_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a18854065058a9f70a0fbb4127212d81f',1,'spark::dse::Benchmark']]], + ['addcomputepipe',['addComputePipe',['../classSpmvManager.html#ac993f1b6041594ae5bd7211d4f498702',1,'SpmvManager']]], + ['addpaddingkernel',['addPaddingKernel',['../classSpmvManager.html#ab025ef7147d5d645028cc92b7d1a513f',1,'SpmvManager']]], + ['addunpaddingkernel',['addUnpaddingKernel',['../classSpmvManager.html#ae2858b4c2bd5a17d5710d0d34429e2b3',1,'SpmvManager']]], + ['align',['align',['../namespacespark_1_1spmv.html#abaf9d6fbe5cd5df67ea6314fccd769e0',1,'spark::spmv::align()'],['../Spmv_8cpp.html#af110ee89567b09ff002ff971364c551d',1,'align(): Spmv.cpp']]], + ['analyze',['analyze',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#a5922d0592d66ae9966bfbf4bb78a1c55',1,'spark::sparse_linear_solvers::Solver']]], + ['at_5fstart',['at_start',['../structspark_1_1utils_1_1Range.html#a2e5c2a068b494d96fa3bb9bc81f3b98b',1,'spark::utils::Range']]] +]; diff --git a/search/functions_62.html b/search/functions_62.html new file mode 100644 index 0000000..5134d2d --- /dev/null +++ b/search/functions_62.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_62.js b/search/functions_62.js new file mode 100644 index 0000000..2063049 --- /dev/null +++ b/search/functions_62.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['better',['better',['../Dse_8cpp.html#ac63ef9b091049d2a25c5941b73512252',1,'Dse.cpp']]], + ['bramspmvreductionkernel',['BramSpmvReductionKernel',['../classBramSpmvReductionKernel.html#a68264df2094dfb810030e2147b3cacaa',1,'BramSpmvReductionKernel']]], + ['buildreadmask',['buildReadMask',['../classParallelCsrReadControl.html#ac16da093fd2a7f25322d24d8be66593f',1,'ParallelCsrReadControl']]] +]; diff --git a/search/functions_63.html b/search/functions_63.html new file mode 100644 index 0000000..9114d82 --- /dev/null +++ b/search/functions_63.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_63.js b/search/functions_63.js new file mode 100644 index 0000000..f8564ee --- /dev/null +++ b/search/functions_63.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['canread',['canRead',['../classParallelCsrReadControl.html#a2aa999eee54eca7e025dcb2be11dc900',1,'ParallelCsrReadControl']]], + ['cat',['cat',['../classParallelCsrReadControl.html#aff22ed75d30f759a6fa33b1d8a20b602',1,'ParallelCsrReadControl.cat(DFEsmValue...args)'],['../classParallelCsrReadControl.html#ac1026ad92d6b9e38d84c81aaced9c3b7',1,'ParallelCsrReadControl.cat(DFEsmValue left, DFEsmValue right)']]], + ['countcomputecycles',['countComputeCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ab2b61b0a02aa4dfa40a38ad98a84bbb4',1,'spark::spmv::SimpleSpmvArchitecture::countComputeCycles()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a328db4b67f8f9c6763117c8a82f81577',1,'spark::spmv::FstSpmvArchitecture::countComputeCycles()']]], + ['cpureferenceprecon',['cpuReferencePrecon',['../BiConjugateGradient_8cpp.html#ab1ada1c516bfa9599e8e43b4b9666a10',1,'BiConjugateGradient.cpp']]], + ['cpureferenceunprecon',['cpuReferenceUnprecon',['../BiConjugateGradient_8cpp.html#aa6ded0f7e5d8161252912d0eb17f27c0',1,'BiConjugateGradient.cpp']]] +]; diff --git a/search/functions_64.html b/search/functions_64.html new file mode 100644 index 0000000..1714930 --- /dev/null +++ b/search/functions_64.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_64.js b/search/functions_64.js new file mode 100644 index 0000000..fd23efd --- /dev/null +++ b/search/functions_64.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['dfeimplunprecon',['dfeImplUnprecon',['../BiConjugateGradient_8cpp.html#ac3a55e37d1559a049fcef0af776feb3b',1,'BiConjugateGradient.cpp']]], + ['dfespmv',['dfespmv',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a8c7ca2d2ac7284e46506f23728dde499',1,'spark::spmv::SimpleSpmvArchitecture::dfespmv()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1d557e23529a5040a858beafb9971acc',1,'spark::spmv::SpmvArchitecture::dfespmv()']]], + ['do_5fblocking',['do_blocking',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aedb22fc8e413dd6bc2c54d74bf03ed2d',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['do_5fpartition',['do_partition',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac3cd16da984d35b091f0833edd919a56',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['donext',['doNext',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abde19171c284739290c7a7c145d7deb7',1,'spark::spmv::SimpleSpmvArchitectureSpace::doNext()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a414ec6872fdf32550af1a6efbb4394d5',1,'spark::spmv::SpmvArchitectureSpace::doNext()']]], + ['dramspmvreductionkernel',['DramSpmvReductionKernel',['../classDramSpmvReductionKernel.html#a85cd96e69eec800ebfdea2c7bb6f7376',1,'DramSpmvReductionKernel']]], + ['dse_5frun',['dse_run',['../Dse_8cpp.html#a50c99f119df5ba972bbebeef76239c2e',1,'Dse.cpp']]], + ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html#a1d1342fbcf4346f77de3cb29c23622ba',1,'spark::dse::DseResult::DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)'],['../classspark_1_1dse_1_1DseResult.html#ac8b6f838e0112d684058ee911b9e2ab5',1,'spark::dse::DseResult::DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)']]] +]; diff --git a/search/functions_65.html b/search/functions_65.html new file mode 100644 index 0000000..13260cf --- /dev/null +++ b/search/functions_65.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_65.js b/search/functions_65.js new file mode 100644 index 0000000..12a1cc3 --- /dev/null +++ b/search/functions_65.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['eigenvectortostdvector',['eigenVectorToStdVector',['../namespacespark_1_1converters.html#a78a095076b8d4daa406d3dc9bca7504c',1,'spark::converters']]], + ['encodeemptyrows',['encodeEmptyRows',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#a0336d2d0c76a4ad1586b904bafaefb3d',1,'spark::spmv::SkipEmptyRowsArchitecture']]], + ['equals',['equals',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac9cd3ac1f8a7ff7c2634d707a2d33356',1,'spark::spmv::SimpleSpmvArchitecture::equals()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa3aebf2b76c95d7b96e37865637a1104',1,'spark::spmv::SpmvArchitecture::equals()']]] +]; diff --git a/search/functions_66.html b/search/functions_66.html new file mode 100644 index 0000000..12565e3 --- /dev/null +++ b/search/functions_66.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_66.js b/search/functions_66.js new file mode 100644 index 0000000..9dec5c9 --- /dev/null +++ b/search/functions_66.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fls',['fls',['../classParallelCsrReadControl.html#aa9acfae4966606e3e5645eb1592f5736',1,'ParallelCsrReadControl']]], + ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#ab1db27169d0bc9921d4c5048592e3d24',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#add2548a017451c5caae61cd3e9021467',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]] +]; diff --git a/search/functions_67.html b/search/functions_67.html new file mode 100644 index 0000000..53d4a09 --- /dev/null +++ b/search/functions_67.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_67.js b/search/functions_67.js new file mode 100644 index 0000000..a282303 --- /dev/null +++ b/search/functions_67.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['get_5fbenchmark_5fsize',['get_benchmark_size',['../classspark_1_1dse_1_1Benchmark.html#a1692f6d32fb3d2a6de8ad8c85cf7fc39',1,'spark::dse::Benchmark']]], + ['get_5fmatrix_5fpath',['get_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a42578888522f08d21a620fa6ce17cfb3',1,'spark::dse::Benchmark']]], + ['get_5fname',['get_name',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac91efdbe0c3de7a45edde0052f478638',1,'spark::spmv::SimpleSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a90397fa9aa179cb86021fac39afc3f27',1,'spark::spmv::FstSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ae9604bff9ee8258920e8b599e0bb1a1d',1,'spark::spmv::SkipEmptyRowsArchitecture::get_name()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a91515587bbfe2ac62a891f17363d508f',1,'spark::spmv::PrefetchingArchitecture::get_name()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4dfdec260889947cf9844eed98e5dbbe',1,'spark::spmv::SpmvArchitecture::get_name()']]], + ['getcomputekernel',['getComputeKernel',['../classSpmvManager.html#a6776e0fc817b9cce1698ad46bef5c1ad',1,'SpmvManager']]], + ['getdramreductionenabled',['getDramReductionEnabled',['../SpmvDeviceInterface_8h.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterface.cpp']]], + ['getestimatedclockcycles',['getEstimatedClockCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ad109173c60a0469e99d188010e09fa9c',1,'spark::spmv::SimpleSpmvArchitecture::getEstimatedClockCycles()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#af60acfd57143cbb06c582bd6c1e6a3a9',1,'spark::spmv::SpmvArchitecture::getEstimatedClockCycles()']]], + ['getestimatedgflops',['getEstimatedGFlops',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a745a51a90e0d0e027be6f927e41e267a',1,'spark::spmv::SpmvArchitecture']]], + ['getfanoutname',['getFanoutName',['../classSpmvManager.html#aa4b9b4fd7299e8967130613ce89df06e',1,'SpmvManager']]], + ['getfrequency',['getFrequency',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a3eafac9b3bffd4a17d86a6f99eb97503',1,'spark::spmv::SpmvArchitecture']]], + ['getgflopscount',['getGFlopsCount',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a1b45bc81758c2e9ef21e6620d8fbd4db',1,'spark::spmv::SimpleSpmvArchitecture::getGFlopsCount()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1be404ebea121baa4b28f1548ad6207d',1,'spark::spmv::SpmvArchitecture::getGFlopsCount()']]], + ['getimplementationparameters',['getImplementationParameters',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3c5900f38fdfafa6481508d9c90819ff',1,'spark::spmv::SimpleSpmvArchitecture::getImplementationParameters()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a31274a6b708f9db92d810d2a161d812a',1,'spark::spmv::SpmvArchitecture::getImplementationParameters()']]], + ['getmatrixvalues',['getMatrixValues',['../classSpmvCacheKernel.html#a1c512fd317ade4f64a5e7f7215dd0c53',1,'SpmvCacheKernel']]], + ['getpaddingcycles',['getPaddingCycles',['../classSpmvManager.html#a64afe0643711d9cd06053a68f187f8da',1,'SpmvManager']]], + ['getpaddingkernel',['getPaddingKernel',['../classSpmvManager.html#a0cc931d1320ec4754066dacceeaff9c0',1,'SpmvManager']]], + ['getreadcontrol',['getReadControl',['../classSpmvManager.html#aca5d9419bca8dbc02b44df878cac0009',1,'SpmvManager']]], + ['getreductionkernel',['getReductionKernel',['../classSpmvManager.html#a0e7f3c94df7eafa7a899a2447f16155d',1,'SpmvManager']]], + ['getspmv_5finputwidth',['getSpmv_InputWidth',['../SpmvDeviceInterface_8h.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fmaxrows',['getSpmv_MaxRows',['../SpmvDeviceInterface_8h.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fnumpipes',['getSpmv_NumPipes',['../SpmvDeviceInterface_8h.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fpartitionsize',['getSpmv_PartitionSize',['../SpmvDeviceInterface_8h.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterface.cpp']]], + ['getunpaddingkernel',['getUnpaddingKernel',['../classSpmvManager.html#aff135aa6706cfaf3cea42f1353dd3ea7',1,'SpmvManager']]], + ['getvectorvalues',['getVectorValues',['../classSpmvCacheKernel.html#a937fcc2032a9fc1e390bef6cb425fd55',1,'SpmvCacheKernel']]] +]; diff --git a/search/functions_69.html b/search/functions_69.html new file mode 100644 index 0000000..9edd1a1 --- /dev/null +++ b/search/functions_69.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_69.js b/search/functions_69.js new file mode 100644 index 0000000..0a190b0 --- /dev/null +++ b/search/functions_69.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html#af2b90d99043967462da25c003c7f7e17',1,'spark::model::ImplementationParameters']]], + ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html#abf5ac17c5a8b83c68b8e421c9fb2b9f4',1,'spark::spmv::indptr_value::indptr_value(double _value, int _indptr)'],['../structspark_1_1spmv_1_1indptr__value.html#a1bb3b22d80c09f283b847a1fb907a462',1,'spark::spmv::indptr_value::indptr_value()'],['../SimpleSpmv_8hpp.html#ac37db725a01a5625a6a32d51d7fd3e78',1,'indptr_value(double _value, int _indptr): SimpleSpmv.hpp'],['../SimpleSpmv_8hpp.html#a84d257f77f20931d14a7e5abb9d099c8',1,'indptr_value(): SimpleSpmv.hpp']]], + ['interfacedefault',['interfaceDefault',['../classSpmvManager.html#ad0360a20a24483e22664a4bda8428ec6',1,'SpmvManager']]] +]; diff --git a/search/functions_6c.html b/search/functions_6c.html new file mode 100644 index 0000000..33c0d6d --- /dev/null +++ b/search/functions_6c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_6c.js b/search/functions_6c.js new file mode 100644 index 0000000..5815b23 --- /dev/null +++ b/search/functions_6c.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['loadbenchmark',['loadBenchmark',['../main_8cpp.html#a75bc35b120d6b6f0834ae4d32856036c',1,'main.cpp']]], + ['loadparams',['loadParams',['../main_8cpp.html#a84bdcf570024843f14fc9624770bf035',1,'main.cpp']]], + ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html#a5b88cae38db7b5ab535f4a17fa643a15',1,'spark::model::LogicResourceUsage::LogicResourceUsage()'],['../classspark_1_1model_1_1LogicResourceUsage.html#a64aef671cc1360f9c760eddecc95dfe5',1,'spark::model::LogicResourceUsage::LogicResourceUsage(int _l, int _f, int _b, int _d)'],['../classspark_1_1model_1_1LogicResourceUsage.html#a303a7df506637540e2b7eb4d871f9029',1,'spark::model::LogicResourceUsage::LogicResourceUsage(const LogicResourceUsage &ru)']]] +]; diff --git a/search/functions_6d.html b/search/functions_6d.html new file mode 100644 index 0000000..73fecff --- /dev/null +++ b/search/functions_6d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_6d.js b/search/functions_6d.js new file mode 100644 index 0000000..6da2dff --- /dev/null +++ b/search/functions_6d.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['main',['main',['../classSpmvManager.html#abf7df885f5ea650b0128628cad8bf33b',1,'SpmvManager.main()'],['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(): main.cpp']]], + ['makecommand',['makeCommand',['../classParallelCsrReadControl.html#a75734eee54f3dfaaabf8794ba378ccfa',1,'ParallelCsrReadControl']]], + ['makeoutput',['makeOutput',['../classParallelCsrReadControl.html#a999c16ceab5da519c9e90a6b5765359c',1,'ParallelCsrReadControl']]], + ['min',['min',['../classParallelCsrReadControl.html#af39c2cd937063656ee7d2bdb4a21e8db',1,'ParallelCsrReadControl']]], + ['mmparse',['mmparse',['../classspark_1_1io_1_1MmReader.html#a73bef88acba33d35b9f714365456ab39',1,'spark::io::MmReader']]], + ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html#a18da82e5b71af2ce6f5946f7b66f8cd5',1,'spark::io::MmReader']]], + ['mmreadmatrix',['mmreadMatrix',['../classspark_1_1io_1_1MmReader.html#ae0ed6d286d9c5c08ad3bd3e910f3554a',1,'spark::io::MmReader']]] +]; diff --git a/search/functions_6e.html b/search/functions_6e.html new file mode 100644 index 0000000..5e54741 --- /dev/null +++ b/search/functions_6e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_6e.js b/search/functions_6e.js new file mode 100644 index 0000000..f94b63e --- /dev/null +++ b/search/functions_6e.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['needtoread',['needToRead',['../classParallelCsrReadControl.html#af55c1da545422cde5c57c61a861017d8',1,'ParallelCsrReadControl']]], + ['next',['next',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#aa9e55d9a1af4b951561705869dd2e2fe',1,'spark::spmv::SpmvArchitectureSpace']]], + ['nextstate',['nextState',['../classParallelCsrReadControl.html#acac4d268696bea31cb88a0293e7484ec',1,'ParallelCsrReadControl']]] +]; diff --git a/search/functions_6f.html b/search/functions_6f.html new file mode 100644 index 0000000..9d69264 --- /dev/null +++ b/search/functions_6f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_6f.js b/search/functions_6f.js new file mode 100644 index 0000000..182b742 --- /dev/null +++ b/search/functions_6f.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['one',['one',['../classParallelCsrReadControl.html#af04777655393a3fb3dc8265c4047d0a6',1,'ParallelCsrReadControl']]], + ['operator_28_29',['operator()',['../structSpmvHash.html#a4655e26aca9f73c92dcbc679f7222e83',1,'SpmvHash::operator()()'],['../structSpmvEqual.html#aad8f140c593abd6997a30cf6833dcfc2',1,'SpmvEqual::operator()()']]], + ['operator_2a',['operator*',['../classspark_1_1model_1_1LogicResourceUsage.html#accca14ba38323db0242d77a654b22520',1,'spark::model::LogicResourceUsage::operator*(int x) const '],['../classspark_1_1model_1_1LogicResourceUsage.html#ae939cb8a86e0fe1209d312317627d3a1',1,'spark::model::LogicResourceUsage::operator*(double x) const ']]], + ['operator_2b',['operator+',['../classspark_1_1model_1_1LogicResourceUsage.html#a48bf8cd8225540f1fa0da63719657e6a',1,'spark::model::LogicResourceUsage']]], + ['operator_2b_2b',['operator++',['../structspark_1_1utils_1_1Range.html#a8623004edfe9d73657f831d1392fe579',1,'spark::utils::Range']]], + ['operator_3c',['operator<',['../classspark_1_1model_1_1LogicResourceUsage.html#aea20a053d751c2de91d491e38688f776',1,'spark::model::LogicResourceUsage::operator<()'],['../classspark_1_1model_1_1ImplementationParameters.html#acf5199cb8cb126ddb4977b02f1cebddd',1,'spark::model::ImplementationParameters::operator<()']]], + ['operator_3c_3c',['operator<<',['../namespacespark_1_1dse.html#a2cba03adcd7e6708f31a01eb270ffeb9',1,'spark::dse::operator<<(std::ostream &s, Benchmark &b)'],['../namespacespark_1_1dse.html#ae3baaf24604e126136d1d8b583fc389d',1,'spark::dse::operator<<(std::ostream &s, DseParameters &d)'],['../namespacespark_1_1spmv.html#ad1e89fa7b9bf647e70186d2dc8385961',1,'spark::spmv::operator<<()'],['../namespacespark_1_1utils.html#a58716b1e1a4e2b2a3115f339aba795ef',1,'spark::utils::operator<<()']]], + ['operator_3d_3d',['operator==',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9ff8f85bf609bf02b087b39674dc1b25',1,'spark::spmv::SimpleSpmvArchitecture::operator==()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a113cc5b7d55d561f862e007e0252cc82',1,'spark::spmv::SpmvArchitecture::operator==()']]], + ['outputfunction',['outputFunction',['../classParallelCsrReadControl.html#a9f87d1cc0071a87de47a8ede3cd8508c',1,'ParallelCsrReadControl']]], + ['outputnotstall',['outputNotStall',['../classParallelCsrReadControl.html#a5ba3304bde2ca9c746fc58f4f632092e',1,'ParallelCsrReadControl']]] +]; diff --git a/search/functions_70.html b/search/functions_70.html new file mode 100644 index 0000000..8ef7fb9 --- /dev/null +++ b/search/functions_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_70.js b/search/functions_70.js new file mode 100644 index 0000000..bd142ad --- /dev/null +++ b/search/functions_70.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['paddingkernel',['PaddingKernel',['../classPaddingKernel.html#a6087bd04eca705d5c45d7978892ba7b0',1,'PaddingKernel']]], + ['parallelcsrreadcontrol',['ParallelCsrReadControl',['../classParallelCsrReadControl.html#abcbdd7c1a9d3193fa28f097ffb47e110',1,'ParallelCsrReadControl']]], + ['parsebuildparams',['parseBuildParams',['../namespacespark_1_1userio.html#a3dd99cbd0dfbe620ddebf4f95351b15b',1,'spark::userio']]], + ['parseheader',['parseHeader',['../classspark_1_1io_1_1MmReader.html#a5f474abc81a8d634a45b80750d816df9',1,'spark::io::MmReader::parseHeader(std::string line)'],['../classspark_1_1io_1_1MmReader.html#a3575f75893a9ece651ef17b111d959fd',1,'spark::io::MmReader::parseHeader(bool pprint=false)']]], + ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#ae614b247e6e43b41b6ee2ec4565a55c6',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a12e8b6b4d9135f559d1800dacf5f25f1',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['preprocess',['preprocess',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3aed67e40e87a0ea0dd79fd30f76a7cf',1,'spark::spmv::SimpleSpmvArchitecture::preprocess()'],['../classspark_1_1sparse__linear__solvers_1_1Solver.html#ae5a1a27b9213613cf6d67dc6e635f42d',1,'spark::sparse_linear_solvers::Solver::preprocess()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4f14b957c8585ed81ff2af46ab26340f',1,'spark::spmv::SpmvArchitecture::preprocess()']]], + ['preprocessblock',['preprocessBlock',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#adefa266d246a395b8a67a83912272e2d',1,'spark::spmv::SkipEmptyRowsArchitecture::preprocessBlock()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a7cd5036aa7c21a4439b8ddfb8a969bf0',1,'spark::spmv::SpmvArchitecture::preprocessBlock()']]], + ['processrows',['processRows',['../classParallelCsrReadControl.html#a0860f8fe7c3841a51d7b9faa16b1f26a',1,'ParallelCsrReadControl']]] +]; diff --git a/search/functions_72.html b/search/functions_72.html new file mode 100644 index 0000000..71f58bb --- /dev/null +++ b/search/functions_72.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_72.js b/search/functions_72.js new file mode 100644 index 0000000..a176392 --- /dev/null +++ b/search/functions_72.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['range',['Range',['../structspark_1_1utils_1_1Range.html#af0ce17db5625ad22c87532891f4b890a',1,'spark::utils::Range::Range(int _s, int _e, int _stp)'],['../structspark_1_1utils_1_1Range.html#a6a3850b17634041447d86797929e9f2c',1,'spark::utils::Range::Range(std::string range)']]], + ['readvector',['readVector',['../classspark_1_1io_1_1MmReader.html#a3aa3d0ea6867f58d326674b632f7b045',1,'spark::io::MmReader']]], + ['resolvevectorreads',['resolveVectorReads',['../classSpmvCacheKernel.html#a8c2591875950cd9bb288c779aacccd54',1,'SpmvCacheKernel']]], + ['restart',['restart',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a50a6bb214092c694e0c3e8b9978f607c',1,'spark::spmv::SimpleSpmvArchitectureSpace::restart()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a76b80d8f6d287bf6b90f38a0ac215354',1,'spark::spmv::SpmvArchitectureSpace::restart()'],['../structspark_1_1utils_1_1Range.html#a05c07c975dd7bf3ba8a097044258aa5a',1,'spark::utils::Range::restart()']]], + ['run',['run',['../classspark_1_1dse_1_1SparkDse.html#abefe26e252597bb164ef8236e5460210',1,'spark::dse::SparkDse']]] +]; diff --git a/search/functions_73.html b/search/functions_73.html new file mode 100644 index 0000000..c80660e --- /dev/null +++ b/search/functions_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_73.js b/search/functions_73.js new file mode 100644 index 0000000..2e09e5b --- /dev/null +++ b/search/functions_73.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['selectvalues',['selectValues',['../classSpmvCacheKernel.html#a3864c0d130426bcad05724a9a864c7db',1,'SpmvCacheKernel']]], + ['setupcomputepipe',['setUpComputePipe',['../classSpmvManager.html#a8f777c0e6b5572b85bf90427b1419039',1,'SpmvManager']]], + ['setupunpaddingkernel',['setupUnpaddingKernel',['../classSpmvManager.html#a42510179831b9c539721ffbf0506c0f2',1,'SpmvManager']]], + ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae0357e972b3380edb382868d3616542d',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a254d3c473b526699bdf5d7994da756b9',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a045eb9b1b8b025ae7ebff4a4f6cd3246',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace(spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abd7023a217d39076e9c47a4226580c4f',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace()']]], + ['size_5fbytes',['size_bytes',['../Spmv_8cpp.html#a725a1b7ac05f04b3bc61b2a270346ea6',1,'Spmv.cpp']]], + ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ad7f11ef476f1343c237b4bd41f19559b',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ab8dadd53ee054e2152cd86b979b4304e',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['smallestmultiplelargerthan',['smallestMultipleLargerThan',['../classSpmvManager.html#a3297286373eb2b5536b6cc04481cc996',1,'SpmvManager']]], + ['solve',['solve',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#aeab2189d0b72aaeda51f9defb2fd64b4',1,'spark::sparse_linear_solvers::Solver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html#a3c0f45b239cb7127fe8da07673cbfd52',1,'spark::sparse_linear_solvers::EigenSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html#a55a4b35ed35b40ee3f712024d9b45206',1,'spark::sparse_linear_solvers::DfeCgSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html#adaa588ced5dd2ce56da4cc095c88c4c3',1,'spark::sparse_linear_solvers::DfeBiCgSolver::solve()']]], + ['solvebicg',['solveBICG',['../SparseLinearSolvers_8cpp.html#a0917711c5c1de1d6fc6d3f5c2fa08c47',1,'SparseLinearSolvers.cpp']]], + ['solvecg',['solveCG',['../SparseLinearSolvers_8cpp.html#a857d72c794d4097e9a37e2a1a6839567',1,'SparseLinearSolvers.cpp']]], + ['solvelu',['solveLU',['../SparseLinearSolvers_8cpp.html#abdc884f0c76856917e9821d6242ee98a',1,'SparseLinearSolvers.cpp']]], + ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ad81f39eca4950c1e4623cdb120f094b0',1,'spark::sparse::SparkCooMatrix']]], + ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html#acf3f66892ae92b0d4c4d0e250da9ebde',1,'spark::dse::SparkDse']]], + ['spmv',['Spmv',['../SpmvDeviceInterface_8h.html#a2f0caf835f75923c7b64abf5b530f56a',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterface.h'],['../SpmvDeviceInterfaceMock_8cpp.html#a56da26d4ef8ebccdac40830eae1f75d6',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int32_t *param_outResultSizes, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterfaceMock.cpp']]], + ['spmv_5fdramread',['Spmv_dramRead',['../SpmvDeviceInterface_8h.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp']]], + ['spmv_5fdramwrite',['Spmv_dramWrite',['../SpmvDeviceInterface_8h.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp']]], + ['spmvcachekernel',['SpmvCacheKernel',['../classSpmvCacheKernel.html#acd4688b7b45eb067763e70a072acc496',1,'SpmvCacheKernel']]], + ['spmvkernel',['SpmvKernel',['../classSpmvKernel.html#ad09b317bceedc13d1f50865cbdb4cd91',1,'SpmvKernel']]], + ['spmvmanager',['SpmvManager',['../classSpmvManager.html#aaeaf51093060e192ab53048bf0c2fa9d',1,'SpmvManager']]], + ['spmvreductionkernel',['SpmvReductionKernel',['../classSpmvReductionKernel.html#a6cf50bef530943f0e812c5a684b2b26a',1,'SpmvReductionKernel']]], + ['stdvectortoeigen',['stdvectorToEigen',['../namespacespark_1_1converters.html#aa6e224b8b4ce34ca7a1683910b0dd9c2',1,'spark::converters']]] +]; diff --git a/search/functions_74.html b/search/functions_74.html new file mode 100644 index 0000000..1605901 --- /dev/null +++ b/search/functions_74.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_74.js b/search/functions_74.js new file mode 100644 index 0000000..cb20244 --- /dev/null +++ b/search/functions_74.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['to_5fstring',['to_string',['../classspark_1_1model_1_1LogicResourceUsage.html#a0f6ff26d2cab74fc11bca87f60bdce35',1,'spark::model::LogicResourceUsage::to_string()'],['../classspark_1_1model_1_1ImplementationParameters.html#a0e71a3875d830daed887869a9f86c374',1,'spark::model::ImplementationParameters::to_string()'],['../structspark_1_1spmv_1_1Partition.html#a11004c0342811a57bba97bf31c823d64',1,'spark::spmv::Partition::to_string()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af12e62e4f0c6a5d0f6e37bf3a326956b',1,'spark::spmv::SimpleSpmvArchitecture::to_string()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa6bc86fc3b1f6d37836c7219d00c49a0',1,'spark::spmv::SpmvArchitecture::to_string()'],['../structspark_1_1utils_1_1Range.html#ae03ddb2296e4c08b7756adc10847b4b9',1,'spark::utils::Range::to_string()']]], + ['triplettoeigen',['tripletToEigen',['../namespacespark_1_1converters.html#ad8ff5498781446bc5c51cd52922f5d72',1,'spark::converters']]], + ['tru',['tru',['../classParallelCsrReadControl.html#ab6214aafff1d0650206637e7a9f15729',1,'ParallelCsrReadControl']]] +]; diff --git a/search/functions_75.html b/search/functions_75.html new file mode 100644 index 0000000..a6c28fa --- /dev/null +++ b/search/functions_75.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_75.js b/search/functions_75.js new file mode 100644 index 0000000..38e9b5b --- /dev/null +++ b/search/functions_75.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unpaddingkernel',['UnpaddingKernel',['../classUnpaddingKernel.html#a52a201168b15d7ab1e1378178a5abd5e',1,'UnpaddingKernel']]] +]; diff --git a/search/functions_77.html b/search/functions_77.html new file mode 100644 index 0000000..add7295 --- /dev/null +++ b/search/functions_77.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_77.js b/search/functions_77.js new file mode 100644 index 0000000..34a8108 --- /dev/null +++ b/search/functions_77.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['write_5fdse_5fresults',['write_dse_results',['../main_8cpp.html#a8d444a99dbaa5e94893a71e578e1d902',1,'main.cpp']]], + ['write_5fparams',['write_params',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9acabcfa6d09c76000290982c33a36f0',1,'spark::spmv::SimpleSpmvArchitecture::write_params()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#acb14edc8b1c5a5e961304e3bf92c97c7',1,'spark::spmv::SpmvArchitecture::write_params()']]], + ['writedataforpartition',['writeDataForPartition',['../Spmv_8cpp.html#a5aa85a542358e8677cae112694f88d78',1,'Spmv.cpp']]] +]; diff --git a/search/functions_7a.html b/search/functions_7a.html new file mode 100644 index 0000000..e23b42f --- /dev/null +++ b/search/functions_7a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_7a.js b/search/functions_7a.js new file mode 100644 index 0000000..dd8a2c4 --- /dev/null +++ b/search/functions_7a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zero',['zero',['../classParallelCsrReadControl.html#ae2dc7d8decaf5a2458d11eee8f0e5f33',1,'ParallelCsrReadControl.zero()'],['../classParallelCsrReadControl.html#a6a81725c82d1c2631d13b35ea2bce758',1,'ParallelCsrReadControl.zero(int bitWidth)']]] +]; diff --git a/search/functions_7e.html b/search/functions_7e.html new file mode 100644 index 0000000..45c26c5 --- /dev/null +++ b/search/functions_7e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_7e.js b/search/functions_7e.js new file mode 100644 index 0000000..df583cb --- /dev/null +++ b/search/functions_7e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['_7emmreader',['~MmReader',['../classspark_1_1io_1_1MmReader.html#afff251fc01bc6a47007e5b562f002ed3',1,'spark::io::MmReader']]], + ['_7espmvarchitecture',['~SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html#abec906effc222dd9f12781c75e3b40c1',1,'spark::spmv::SpmvArchitecture']]] +]; diff --git a/search/mag_sel.png b/search/mag_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..81f6040a2092402b4d98f9ffa8855d12a0d4ca17 GIT binary patch literal 563 zcmV-30?hr1P)zxx&tqG15pu7)IiiXFflOc2k;dXd>%13GZAy? zRz!q0=|E6a6vV)&ZBS~G9oe0kbqyw1*gvY`{Pop2oKq#FlzgXt@Xh-7fxh>}`Fxg> z$%N%{$!4=5nM{(;=c!aG1Ofr^Do{u%Ih{^&Fc@H2)+a-?TBXrw5DW&z%Nb6mQ!L9O zl}b@6mB?f=tX3;#vl)}ggh(Vpyh(IK z(Mb0D{l{U$FsRjP;!{($+bsaaVi8T#1c0V#qEIOCYa9@UVLV`f__E81L;?WEaRA;Y zUH;rZ;vb;mk7JX|$=i3O~&If0O@oZfLg8gfIjW=dcBsz;gI=!{-r4# z4%6v$&~;q^j7Fo67yJ(NJWuX+I~I!tj^nW3?}^9bq|<3^+vapS5sgM^x7!cs(+mMT z&y%j};&~po+YO)3hoUH4E*E;e9>?R6SS&`X)p`njycAVcg{rEb41T{~Hk(bl-7eSb zmFxA2uIqo#@R?lKm50ND`~6Nfn|-b1|L6O98vt3Tx@gKz#isxO002ovPDHLkV1kyW B_l^Jn literal 0 HcmV?d00001 diff --git a/search/namespaces_73.html b/search/namespaces_73.html new file mode 100644 index 0000000..aefeb06 --- /dev/null +++ b/search/namespaces_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/namespaces_73.js b/search/namespaces_73.js new file mode 100644 index 0000000..feabd3e --- /dev/null +++ b/search/namespaces_73.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['converters',['converters',['../namespacespark_1_1converters.html',1,'spark']]], + ['dse',['dse',['../namespacespark_1_1dse.html',1,'spark']]], + ['io',['io',['../namespacespark_1_1io.html',1,'spark']]], + ['model',['model',['../namespacespark_1_1model.html',1,'spark']]], + ['spark',['spark',['../namespacespark.html',1,'']]], + ['sparse',['sparse',['../namespacespark_1_1sparse.html',1,'spark']]], + ['sparse_5flinear_5fsolvers',['sparse_linear_solvers',['../namespacespark_1_1sparse__linear__solvers.html',1,'spark']]], + ['spmv',['spmv',['../namespacespark_1_1spmv.html',1,'spark']]], + ['userio',['userio',['../namespacespark_1_1userio.html',1,'spark']]], + ['utils',['utils',['../namespacespark_1_1utils.html',1,'spark']]] +]; diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/search/pages_73.html b/search/pages_73.html new file mode 100644 index 0000000..4f6f002 --- /dev/null +++ b/search/pages_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/pages_73.js b/search/pages_73.js new file mode 100644 index 0000000..23a40bb --- /dev/null +++ b/search/pages_73.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['spark',['spark',['../md_README.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..5b208ed --- /dev/null +++ b/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:116px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..480afa3 --- /dev/null +++ b/search/search.js @@ -0,0 +1,809 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ + 0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111101001111101111110010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111001001100101101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011100001000100101101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111101001111101111010010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111101001111101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000000000100101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + 7: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "typedefs", + 7: "pages" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var hexCode; + if (code<16) + { + hexCode="0"+code.toString(16); + } + else + { + hexCode=code.toString(16); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') + { + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; ek7RCwB~R6VQOP#AvB$vH7i{6H{96zot$7cZT<7246EF5Np6N}+$IbiG6W zg#87A+NFaX+=_^xM1#gCtshC=E{%9^uQX_%?YwXvo{#q&MnpJ8uh(O?ZRc&~_1%^SsPxG@rfElJg-?U zm!Cz-IOn(qJP3kDp-^~qt+FGbl=5jNli^Wj_xIBG{Rc0en{!oFvyoNC7{V~T8}b>| z=jL2WIReZzX(YN(_9fV;BBD$VXQIxNasAL8ATvEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/search/search_r.png b/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..97ee8b439687084201b79c6f776a41f495c6392a GIT binary patch literal 612 zcmV-q0-ODbP)PbXFRCwB?)W514K@j&X?z2*SxFI6-@HT2E2K=9X9%Pb zEK*!TBw&g(DMC;|A)uGlRkOS9vd-?zNs%bR4d$w+ox_iFnE8fvIvv7^5<(>Te12Li z7C)9srCzmK{ZcNM{YIl9j{DePFgOWiS%xG@5CnnnJa4nvY<^glbz7^|-ZY!dUkAwd z{gaTC@_>b5h~;ug#R0wRL0>o5!hxm*s0VW?8dr}O#zXTRTnrQm_Z7z1Mrnx>&p zD4qifUjzLvbVVWi?l?rUzwt^sdb~d!f_LEhsRVIXZtQ=qSxuxqm zEX#tf>$?M_Y1-LSDT)HqG?`%-%ZpY!#{N!rcNIiL;G7F0`l?)mNGTD9;f9F5Up3Kg zw}a<-JylhG&;=!>B+fZaCX+?C+kHYrP%c?X2!Zu_olK|GcS4A70HEy;vn)I0>0kLH z`jc(WIaaHc7!HS@f*^R^Znx8W=_jIl2oWJoQ*h1^$FX!>*PqR1J8k|fw}w_y}TpE>7m8DqDO<3z`OzXt$ccSejbEZCg@0000 + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_63.js b/search/typedefs_63.js new file mode 100644 index 0000000..fde4000 --- /dev/null +++ b/search/typedefs_63.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['coordtype',['CoordType',['../classspark_1_1io_1_1MmReader.html#a43348db7743f21cff1854197cf7f9819',1,'spark::io::MmReader::CoordType()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a9de150aa2a040306403bc97687b40f',1,'spark::sparse::SparkCooMatrix::CoordType()']]], + ['csrmatrix',['CsrMatrix',['../namespacespark_1_1sparse.html#a0f0d804dd8f37cb44a636bca7d03f016',1,'spark::sparse']]] +]; diff --git a/search/typedefs_65.html b/search/typedefs_65.html new file mode 100644 index 0000000..c56ae62 --- /dev/null +++ b/search/typedefs_65.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_65.js b/search/typedefs_65.js new file mode 100644 index 0000000..9629bd2 --- /dev/null +++ b/search/typedefs_65.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eigensparsematrix',['EigenSparseMatrix',['../namespacespark_1_1converters.html#a724347922bbc7e56429febfd000be78b',1,'spark::converters::EigenSparseMatrix()'],['../namespacespark_1_1spmv.html#a3235bbbc3c8db242db2f00947ec4ca9b',1,'spark::spmv::EigenSparseMatrix()']]] +]; diff --git a/search/typedefs_70.html b/search/typedefs_70.html new file mode 100644 index 0000000..32b2dfc --- /dev/null +++ b/search/typedefs_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_70.js b/search/typedefs_70.js new file mode 100644 index 0000000..34fccf0 --- /dev/null +++ b/search/typedefs_70.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['partitionedcsrmatrix',['PartitionedCsrMatrix',['../namespacespark_1_1sparse.html#a15a8e3974007d1c440410bf83232f5dd',1,'spark::sparse']]] +]; diff --git a/search/typedefs_73.html b/search/typedefs_73.html new file mode 100644 index 0000000..0bed01e --- /dev/null +++ b/search/typedefs_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_73.js b/search/typedefs_73.js new file mode 100644 index 0000000..16b3c8b --- /dev/null +++ b/search/typedefs_73.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['sparsematrix',['SparseMatrix',['../classspark_1_1io_1_1MmReader.html#a4b6628e5d0886325e152e8ffdae1964c',1,'spark::io::MmReader']]], + ['ssarch',['ssarch',['../Spmv_8cpp.html#a73ed93bfd16d2b54084241251efe53ca',1,'Spmv.cpp']]] +]; diff --git a/search/typedefs_75.html b/search/typedefs_75.html new file mode 100644 index 0000000..8350533 --- /dev/null +++ b/search/typedefs_75.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_75.js b/search/typedefs_75.js new file mode 100644 index 0000000..97034de --- /dev/null +++ b/search/typedefs_75.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['userinputparams',['UserInputParams',['../namespacespark_1_1userio.html#a61705a89ecd4794e1aaf8e56bc89a5ae',1,'spark::userio']]] +]; diff --git a/search/typedefs_76.html b/search/typedefs_76.html new file mode 100644 index 0000000..1ef0f3e --- /dev/null +++ b/search/typedefs_76.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_76.js b/search/typedefs_76.js new file mode 100644 index 0000000..85f7b36 --- /dev/null +++ b/search/typedefs_76.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vd',['Vd',['../BiConjugateGradient_8cpp.html#a61f485fb4164897d20404192b8a20927',1,'BiConjugateGradient.cpp']]] +]; diff --git a/search/variables_5f.html b/search/variables_5f.html new file mode 100644 index 0000000..fc799e5 --- /dev/null +++ b/search/variables_5f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_5f.js b/search/variables_5f.js new file mode 100644 index 0000000..52e83e8 --- /dev/null +++ b/search/variables_5f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5fattribute_5f_5f',['__attribute__',['../namespacespark_1_1spmv.html#a8ad7d0fb384bbf6ef88a68b8cad95182',1,'spark::spmv']]] +]; diff --git a/search/variables_61.html b/search/variables_61.html new file mode 100644 index 0000000..a0de7a4 --- /dev/null +++ b/search/variables_61.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_61.js b/search/variables_61.js new file mode 100644 index 0000000..2be23ee --- /dev/null +++ b/search/variables_61.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['addresst',['addressT',['../classSpmvCacheKernel.html#a33ae456838bd9708e94df43436703305',1,'SpmvCacheKernel']]] +]; diff --git a/search/variables_62.html b/search/variables_62.html new file mode 100644 index 0000000..ff41525 --- /dev/null +++ b/search/variables_62.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_62.js b/search/variables_62.js new file mode 100644 index 0000000..2ad610f --- /dev/null +++ b/search/variables_62.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['bestarchitecture',['bestArchitecture',['../classspark_1_1dse_1_1DseResult.html#a2a23395d873d124a4da624ed94ab4d76',1,'spark::dse::DseResult']]], + ['brams',['brams',['../classspark_1_1model_1_1LogicResourceUsage.html#a9e1bfd322976881da5fc6d0501ecbf32',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/search/variables_63.html b/search/variables_63.html new file mode 100644 index 0000000..422085c --- /dev/null +++ b/search/variables_63.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_63.js b/search/variables_63.js new file mode 100644 index 0000000..1956f66 --- /dev/null +++ b/search/variables_63.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['cachesize',['cacheSize',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a0fd07f4d1e241d9bb5e525fc1f9c4ab2',1,'spark::spmv::SimpleSpmvArchitecture::cacheSize()'],['../classSpmvManager.html#a9a9f9ca14bf99119d5ed0d7106acdcd9',1,'SpmvManager.cacheSize()']]], + ['cachesizer',['cacheSizeR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a5eb1ea4c3054ef0b99c199732c004195',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['cachesizerange',['cacheSizeRange',['../classspark_1_1dse_1_1DseParameters.html#a407b33c26d55c84c1436a3535576f380',1,'spark::dse::DseParameters']]], + ['colptrsize',['colptrSize',['../structPartitionWriteResult.html#a1b1d42061ca85c85c68b12e3405743e5',1,'PartitionWriteResult']]], + ['colptrstartaddress',['colptrStartAddress',['../structPartitionWriteResult.html#a744ceeec06294048f07cd552a340118f',1,'PartitionWriteResult']]], + ['crt',['crt',['../structspark_1_1utils_1_1Range.html#a07fd2cc26cde356c3f1db74bedd31eb5',1,'spark::utils::Range']]], + ['crtpos',['crtPos',['../classParallelCsrReadControl.html#ab0f5b6539f65df26eccc3c40b234752c',1,'ParallelCsrReadControl']]], + ['cyclecounter',['cycleCounter',['../classParallelCsrReadControl.html#a51cfb6d5b02eb3e5b204e4ea8f16fce4',1,'ParallelCsrReadControl']]] +]; diff --git a/search/variables_64.html b/search/variables_64.html new file mode 100644 index 0000000..df4414b --- /dev/null +++ b/search/variables_64.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_64.js b/search/variables_64.js new file mode 100644 index 0000000..9c53a8e --- /dev/null +++ b/search/variables_64.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['data',['data',['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a0b72ae9e7b1deed9b6228cf40e9f32',1,'spark::sparse::SparkCooMatrix']]], + ['dbg',['dbg',['../classParallelCsrReadControl.html#a522323c9bbe60e7a02f48e1ff6f7db06',1,'ParallelCsrReadControl']]], + ['dbg_5fpar_5fcsr_5fctl',['DBG_PAR_CSR_CTL',['../classSpmvManager.html#a234ea438d3c8363b41db2581e3d8a51a',1,'SpmvManager']]], + ['dbg_5freduction_5fkernel',['DBG_REDUCTION_KERNEL',['../classSpmvManager.html#a5c29c11c95c8f9980aa3201d8f25ff3d',1,'SpmvManager']]], + ['dbg_5fspmv_5fkernel',['DBG_SPMV_KERNEL',['../classSpmvManager.html#aece403b7ff81eeebfaf75b35aacb2b1f',1,'SpmvManager']]], + ['done',['Done',['../enumParallelCsrReadControl_1_1Mode.html#a4af99d8c25b54128c920d384091485d0',1,'ParallelCsrReadControl::Mode']]], + ['dramreductionenabled',['dramReductionEnabled',['../classSpmvManager.html#adfc3a8c884874f553215941bf86692fa',1,'SpmvManager']]], + ['dsps',['dsps',['../classspark_1_1model_1_1LogicResourceUsage.html#adb488affc0a051d6c8458d9e2a35d201',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/search/variables_65.html b/search/variables_65.html new file mode 100644 index 0000000..38eb9f6 --- /dev/null +++ b/search/variables_65.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_65.js b/search/variables_65.js new file mode 100644 index 0000000..7e93f66 --- /dev/null +++ b/search/variables_65.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['emptycycles',['emptyCycles',['../structspark_1_1spmv_1_1Partition.html#a59dfdff4762b092034d952fe2e81f95c',1,'spark::spmv::Partition']]], + ['end',['end',['../structspark_1_1utils_1_1Range.html#a014c4c4aa8e0f0c9f9aaf954d3e8fba7',1,'spark::utils::Range']]] +]; diff --git a/search/variables_66.html b/search/variables_66.html new file mode 100644 index 0000000..6e18638 --- /dev/null +++ b/search/variables_66.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_66.js b/search/variables_66.js new file mode 100644 index 0000000..f60eeac --- /dev/null +++ b/search/variables_66.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['f',['f',['../classspark_1_1io_1_1MmReader.html#a65848ca959d0961ab594205b40335072',1,'spark::io::MmReader']]], + ['ffs',['ffs',['../classspark_1_1model_1_1LogicResourceUsage.html#ad67dec36e8bd5ba1937687b538d97a8e',1,'spark::model::LogicResourceUsage']]], + ['firstreadposition',['firstReadPosition',['../classParallelCsrReadControl.html#af30ed96f729b948fec5bd989acc13a56',1,'ParallelCsrReadControl']]], + ['floating_5fpoint_5flatency',['FLOATING_POINT_LATENCY',['../classSpmvManager.html#a3a947b39653f09305c7712af18ddd113',1,'SpmvManager']]], + ['fpl',['fpL',['../classSpmvKernel.html#a0bf2a803445d2454781d5e09937de571',1,'SpmvKernel']]] +]; diff --git a/search/variables_67.html b/search/variables_67.html new file mode 100644 index 0000000..8a1f3d9 --- /dev/null +++ b/search/variables_67.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_67.js b/search/variables_67.js new file mode 100644 index 0000000..d84bdee --- /dev/null +++ b/search/variables_67.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gflopsonly',['gflopsOnly',['../classspark_1_1dse_1_1DseParameters.html#a903571a00336065eb295887170686770',1,'spark::dse::DseParameters']]] +]; diff --git a/search/variables_69.html b/search/variables_69.html new file mode 100644 index 0000000..44c2cd1 --- /dev/null +++ b/search/variables_69.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_69.js b/search/variables_69.js new file mode 100644 index 0000000..38ba303 --- /dev/null +++ b/search/variables_69.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['ilength',['iLength',['../classParallelCsrReadControl.html#a85aaa3cdd7bbfe023bc74bcd02bc21b4',1,'ParallelCsrReadControl']]], + ['ilengthready',['iLengthReady',['../classParallelCsrReadControl.html#a7ffcf81575bcc0d92af9b198653dcf28',1,'ParallelCsrReadControl']]], + ['indexwidth',['indexWidth',['../classSpmvManager.html#a01ee1f96ba381149f4233fae1c87c821',1,'SpmvManager']]], + ['indptr',['indptr',['../structspark_1_1spmv_1_1indptr__value.html#ae450af92f13728c597605f909eb7f3b6',1,'spark::spmv::indptr_value::indptr()'],['../SimpleSpmv_8hpp.html#a164fa1a90d7bd63f14e631438885cc69',1,'indptr(): SimpleSpmv.hpp']]], + ['indptrvaluessize',['indptrValuesSize',['../structPartitionWriteResult.html#a389a493dd0f322031a4b176ad7251cc1',1,'PartitionWriteResult']]], + ['indptrvaluesstartaddress',['indptrValuesStartAddress',['../structPartitionWriteResult.html#a2ca20725ee8dcb4aad19eac57bc5c957',1,'PartitionWriteResult']]], + ['indptrvector',['indptrVector',['../classSpmvCacheKernel.html#a334b1e969200dfe46d013bef0e5b1934',1,'SpmvCacheKernel']]], + ['inputwidth',['inputWidth',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a4083f351467c940c767fa9122d3a727c',1,'spark::spmv::SimpleSpmvArchitecture::inputWidth()'],['../classParallelCsrReadControl.html#a3458a62c53ce83128cedb6c7765ca6fc',1,'ParallelCsrReadControl.inputWidth()'],['../classSpmvManager.html#a778e13e71f500522f13c6207e6f4e8a4',1,'SpmvManager.inputWidth()']]], + ['inputwidthr',['inputWidthR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#ab7dd6b46e80d1fe85694b964ce761e85',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['inputwidthrange',['inputWidthRange',['../classspark_1_1dse_1_1DseParameters.html#af54d3b84a9781ce472374fb4d4dbecb1',1,'spark::dse::DseParameters']]], + ['iterationsprocessed',['iterationsProcessed',['../classParallelCsrReadControl.html#aca9dea6888fb835dc40d3df86fa60156',1,'ParallelCsrReadControl']]], + ['ivtype',['ivtype',['../classSpmvCacheKernel.html#a7fc692be3af6b331cdf30edbb6db98e6',1,'SpmvCacheKernel']]] +]; diff --git a/search/variables_6c.html b/search/variables_6c.html new file mode 100644 index 0000000..8d08e81 --- /dev/null +++ b/search/variables_6c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_6c.js b/search/variables_6c.js new file mode 100644 index 0000000..0445936 --- /dev/null +++ b/search/variables_6c.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['last',['last',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a618c39ec4cde84cb595f089fb881ce7c',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['luts',['luts',['../classspark_1_1model_1_1LogicResourceUsage.html#a620a5a18ce206d8dbc7cd5adbcb48d7b',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/search/variables_6d.html b/search/variables_6d.html new file mode 100644 index 0000000..1b8f1a8 --- /dev/null +++ b/search/variables_6d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_6d.js b/search/variables_6d.js new file mode 100644 index 0000000..58fb285 --- /dev/null +++ b/search/variables_6d.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['m',['m',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ae3892beabaaf78e2e9a67269c22c8f8e',1,'spark::sparse::SparkCooMatrix']]], + ['m_5fcolptr',['m_colptr',['../structspark_1_1spmv_1_1Partition.html#a8aa3fa9f9be247ab7e092f968122e3a7',1,'spark::spmv::Partition']]], + ['m_5fcolptr_5funpaddedlength',['m_colptr_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ac28e1c351c409032a1166678f800141b',1,'spark::spmv::Partition']]], + ['m_5findptr_5fvalues',['m_indptr_values',['../structspark_1_1spmv_1_1Partition.html#ae134d0793283258fb0f95433d5448bb2',1,'spark::spmv::Partition']]], + ['m_5findptr_5fvalues_5funpaddedlength',['m_indptr_values_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ae9b189f7ec6c8fbd47202945dc3fef23',1,'spark::spmv::Partition']]], + ['mantissawidth',['mantissaWidth',['../classSpmvManager.html#a6c6ea06d3d9cb5f752e3cbc3ca7cbafa',1,'SpmvManager']]], + ['mat',['mat',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae295666cf3885149b0e37766c4feffc7',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['matrices',['matrices',['../classspark_1_1dse_1_1DseResult.html#a797ff2ef1c189cb2cff7fa18cfede2a9',1,'spark::dse::DseResult']]], + ['matrix',['matrix',['../classspark_1_1io_1_1MmReader.html#a8bf3a76c76dad47d667f28052adbfaa5',1,'spark::io::MmReader']]], + ['matrixvalues',['matrixValues',['../classSpmvCacheKernel.html#a2c0074e62c391424c276981965dc4bf4',1,'SpmvCacheKernel']]], + ['maxrows',['maxRows',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a577fd6e73f088b437a5632ba3ca89c61',1,'spark::spmv::SimpleSpmvArchitecture::maxRows()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#acaac03fcff370b3f0945823b1f13a90f',1,'spark::spmv::SimpleSpmvArchitectureSpace::maxRows()'],['../classSpmvManager.html#a5746b324d3b38fc407d1577739b969ef',1,'SpmvManager.maxRows()']]], + ['memorybandwidth',['memoryBandwidth',['../classspark_1_1model_1_1ImplementationParameters.html#a7935fb3d5d9d782c66530a541d6f705c',1,'spark::model::ImplementationParameters']]], + ['mode',['mode',['../classParallelCsrReadControl.html#aa98eb2e85dadf134870803067fa13ad8',1,'ParallelCsrReadControl']]] +]; diff --git a/search/variables_6e.html b/search/variables_6e.html new file mode 100644 index 0000000..2eb4def --- /dev/null +++ b/search/variables_6e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_6e.js b/search/variables_6e.js new file mode 100644 index 0000000..a83d6db --- /dev/null +++ b/search/variables_6e.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['n',['n',['../structspark_1_1spmv_1_1Partition.html#a858144bacceb65f6b0c6caab04b0308b',1,'spark::spmv::Partition::n()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a582426cd2434334fe15c5f3c23aa0c54',1,'spark::sparse::SparkCooMatrix::n()']]], + ['nblocks',['nBlocks',['../structspark_1_1spmv_1_1Partition.html#a3084298925d168aafc1affa127bb4ef2',1,'spark::spmv::Partition']]], + ['ncols',['ncols',['../classspark_1_1io_1_1MmReader.html#a7b783ac977c5badcd28069cea5368adc',1,'spark::io::MmReader']]], + ['niterations',['nIterations',['../classParallelCsrReadControl.html#ad8041b856c97ae1d5ac6ea96a5cb0b04',1,'ParallelCsrReadControl']]], + ['nnzs',['nnzs',['../classspark_1_1io_1_1MmReader.html#a55b7ae127a34af4d09bca7079c443866',1,'spark::io::MmReader']]], + ['npartitions',['nPartitions',['../classParallelCsrReadControl.html#a82a4d8d9d682f6c65537975de9483540',1,'ParallelCsrReadControl']]], + ['nrows',['nrows',['../classspark_1_1io_1_1MmReader.html#a3698c442e4b847c2f1479dd11fef9a15',1,'spark::io::MmReader::nrows()'],['../classParallelCsrReadControl.html#afda30a96f0ffe1c758ce548cfd8d5907',1,'ParallelCsrReadControl.nRows()']]], + ['numpipes',['numPipes',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac51f502488f2b7d2dbffb5a9939b4271',1,'spark::spmv::SimpleSpmvArchitecture::numPipes()'],['../classSpmvManager.html#a2b1f61839183d1301ddc3975f4ad3ae9',1,'SpmvManager.numPipes()']]], + ['numpipesr',['numPipesR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a2250dba56bfc36df530fcba2ae8e5573',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['numpipesrange',['numPipesRange',['../classspark_1_1dse_1_1DseParameters.html#a312071f767470577bf393c3d190d72bd',1,'spark::dse::DseParameters']]] +]; diff --git a/search/variables_6f.html b/search/variables_6f.html new file mode 100644 index 0000000..f06e2e0 --- /dev/null +++ b/search/variables_6f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_6f.js b/search/variables_6f.js new file mode 100644 index 0000000..d893fb3 --- /dev/null +++ b/search/variables_6f.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['ocontrol',['oControl',['../classParallelCsrReadControl.html#acadabffbfd3d06c672dabfe98ee0ca23',1,'ParallelCsrReadControl']]], + ['ocontroldata',['oControlData',['../classParallelCsrReadControl.html#acfc1f32a0362606d06eeb514a7738af8',1,'ParallelCsrReadControl']]], + ['outputtingcommands',['OutputtingCommands',['../enumParallelCsrReadControl_1_1Mode.html#a1fe6df0a1446f33e43e80b9ad3e0cd49',1,'ParallelCsrReadControl::Mode']]], + ['outsize',['outSize',['../structspark_1_1spmv_1_1Partition.html#a4653f40c7d63f4c663190b209b6373d7',1,'spark::spmv::Partition::outSize()'],['../structPartitionWriteResult.html#a7cc1bba9c690f9a66fa15add6d1763e6',1,'PartitionWriteResult::outSize()']]], + ['outstartaddr',['outStartAddr',['../structPartitionWriteResult.html#a93f6f5c23c1f0f7e18f319f3e33aee61',1,'PartitionWriteResult']]], + ['outvalid',['outValid',['../classParallelCsrReadControl.html#a998688c17de6d3dee32bb3005124d484',1,'ParallelCsrReadControl']]] +]; diff --git a/search/variables_70.html b/search/variables_70.html new file mode 100644 index 0000000..439d152 --- /dev/null +++ b/search/variables_70.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_70.js b/search/variables_70.js new file mode 100644 index 0000000..ea40354 --- /dev/null +++ b/search/variables_70.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['paddingcycles',['paddingCycles',['../structspark_1_1spmv_1_1Partition.html#a611bc144e0b0f3e4075e4fa27137669f',1,'spark::spmv::Partition']]], + ['partitions',['partitions',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a90e1699cd2d8ee0abd21e4461d8c7d32',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['partitionsprocessed',['partitionsProcessed',['../classParallelCsrReadControl.html#abaf944d93404a6d08eaa4f17e8ee4d0c',1,'ParallelCsrReadControl']]], + ['path',['path',['../classspark_1_1io_1_1MmReader.html#a853387b508034ba82ede19c2500c5030',1,'spark::io::MmReader']]], + ['paths',['paths',['../classspark_1_1dse_1_1Benchmark.html#aa21c70d1c142db7c1ee3fb81fc5e81c5',1,'spark::dse::Benchmark']]], + ['prevdata',['prevData',['../classParallelCsrReadControl.html#aae3d7861bddbf53bea616be8e308afa8',1,'ParallelCsrReadControl']]] +]; diff --git a/search/variables_72.html b/search/variables_72.html new file mode 100644 index 0000000..8a4ee7b --- /dev/null +++ b/search/variables_72.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_72.js b/search/variables_72.js new file mode 100644 index 0000000..fd4e627 --- /dev/null +++ b/search/variables_72.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['readinglength',['ReadingLength',['../enumParallelCsrReadControl_1_1Mode.html#a0bf9792309f43608f812f047b288bcd9',1,'ParallelCsrReadControl::Mode']]], + ['readlength',['readLength',['../classParallelCsrReadControl.html#afe43fc900641b277ae1069dde875a88b',1,'ParallelCsrReadControl']]], + ['readmaskdata',['readMaskData',['../classParallelCsrReadControl.html#a0f2333314c34fb9b3a1cd57c7d2d6d37',1,'ParallelCsrReadControl']]], + ['reductioncycles',['reductionCycles',['../structspark_1_1spmv_1_1Partition.html#abf0e3c933b315809c50c6e68506bb174',1,'spark::spmv::Partition']]], + ['rowlengthdata',['rowLengthData',['../classParallelCsrReadControl.html#a309e5d2abd0d3bdaca25a19f280cd029',1,'ParallelCsrReadControl']]], + ['rowsprocessed',['rowsProcessed',['../classParallelCsrReadControl.html#ad0b253e90543c25af346b9afff908d87',1,'ParallelCsrReadControl']]], + ['ru',['ru',['../classspark_1_1model_1_1ImplementationParameters.html#ac82ef6a8d3fd73cd40fff27d1ec9b943',1,'spark::model::ImplementationParameters']]] +]; diff --git a/search/variables_73.html b/search/variables_73.html new file mode 100644 index 0000000..388a6d7 --- /dev/null +++ b/search/variables_73.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_73.js b/search/variables_73.js new file mode 100644 index 0000000..b7f4366 --- /dev/null +++ b/search/variables_73.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['sparse',['sparse',['../classspark_1_1io_1_1MmReader.html#abaeb856fe8052dada1094aeeba575482',1,'spark::io::MmReader']]], + ['start',['start',['../structspark_1_1utils_1_1Range.html#aa944c6fbb45db229c82ab2af62836237',1,'spark::utils::Range']]], + ['step',['step',['../structspark_1_1utils_1_1Range.html#adafa797e5802e578a9fffc6fc25b6a24',1,'spark::utils::Range']]], + ['symmetric',['symmetric',['../classspark_1_1io_1_1MmReader.html#a339fd452b0db39fdabb6fc9b9994624d',1,'spark::io::MmReader']]] +]; diff --git a/search/variables_74.html b/search/variables_74.html new file mode 100644 index 0000000..1665fb8 --- /dev/null +++ b/search/variables_74.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_74.js b/search/variables_74.js new file mode 100644 index 0000000..44634f6 --- /dev/null +++ b/search/variables_74.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['toread',['toread',['../classParallelCsrReadControl.html#af87a65fc4f7423554e3a36f0a059cbf1',1,'ParallelCsrReadControl']]], + ['totalcycles',['totalCycles',['../structspark_1_1spmv_1_1Partition.html#a2256e3b766ab51acd2be27a1975f0ed9',1,'spark::spmv::Partition']]], + ['totaloutputs',['totalOutputs',['../classParallelCsrReadControl.html#a869e17d0a43818cd085f01898143f2cc',1,'ParallelCsrReadControl']]] +]; diff --git a/search/variables_76.html b/search/variables_76.html new file mode 100644 index 0000000..8af2374 --- /dev/null +++ b/search/variables_76.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_76.js b/search/variables_76.js new file mode 100644 index 0000000..dc12861 --- /dev/null +++ b/search/variables_76.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['value',['value',['../structspark_1_1spmv_1_1indptr__value.html#ae0073c7eec3c96ddf6ce38dedc3312b1',1,'spark::spmv::indptr_value::value()'],['../SimpleSpmv_8hpp.html#aee90379adb0307effb138f4871edbc5c',1,'value(): SimpleSpmv.hpp']]], + ['vector_5fload_5fcycles',['vector_load_cycles',['../structspark_1_1spmv_1_1Partition.html#a087b0019edb1ad8ef824ed7e26e19849',1,'spark::spmv::Partition']]], + ['vectorload',['VectorLoad',['../enumParallelCsrReadControl_1_1Mode.html#aa2414caa80d02424c7a80c3946160a2d',1,'ParallelCsrReadControl::Mode']]], + ['vectorloadcommands',['vectorLoadCommands',['../classParallelCsrReadControl.html#a4627fcdaeb69d3836053e91cc70a80f2',1,'ParallelCsrReadControl']]], + ['vectorloadcycles',['vectorLoadCycles',['../classParallelCsrReadControl.html#aa609515db6c67afd973f1d15431e1684',1,'ParallelCsrReadControl']]], + ['vectorvalues',['vectorValues',['../classSpmvCacheKernel.html#a866881c55c08adf35042aeeb18c9cffd',1,'SpmvCacheKernel']]], + ['vroms',['vroms',['../classSpmvCacheKernel.html#ad7249c675981ec57613b0f3d69a39342',1,'SpmvCacheKernel']]], + ['vstartaddress',['vStartAddress',['../structPartitionWriteResult.html#a2a1d5b0084ae204040066b7fe3a33b07',1,'PartitionWriteResult']]], + ['vtype',['vtype',['../classSpmvCacheKernel.html#a4a13093fa8aa4a3a053cf3d7122c6866',1,'SpmvCacheKernel']]] +]; diff --git a/structPartitionWriteResult-members.html b/structPartitionWriteResult-members.html new file mode 100644 index 0000000..7030495 --- /dev/null +++ b/structPartitionWriteResult-members.html @@ -0,0 +1,108 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
PartitionWriteResult Member List
+
+ + + + + diff --git a/structPartitionWriteResult.html b/structPartitionWriteResult.html new file mode 100644 index 0000000..ffe327d --- /dev/null +++ b/structPartitionWriteResult.html @@ -0,0 +1,207 @@ + + + + + + +Spark: PartitionWriteResult Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
PartitionWriteResult Struct Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Attributes

int outStartAddr
 
int outSize
 
int colptrStartAddress
 
int colptrSize
 
int vStartAddress
 
int indptrValuesStartAddress
 
int indptrValuesSize
 
+

Member Data Documentation

+ +
+
+ + + + +
int PartitionWriteResult::colptrSize
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::colptrStartAddress
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::indptrValuesSize
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::indptrValuesStartAddress
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::outSize
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::outStartAddr
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::vStartAddress
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structSpmvEqual-members.html b/structSpmvEqual-members.html new file mode 100644 index 0000000..e588bd0 --- /dev/null +++ b/structSpmvEqual-members.html @@ -0,0 +1,102 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
SpmvEqual Member List
+
+
+ +

This is the complete list of members for SpmvEqual, including all inherited members.

+ + +
operator()(const std::shared_ptr< SpmvArchitecture > &a, const std::shared_ptr< SpmvArchitecture > &b) const SpmvEqualinline
+ + + + diff --git a/structSpmvEqual.html b/structSpmvEqual.html new file mode 100644 index 0000000..4524ac3 --- /dev/null +++ b/structSpmvEqual.html @@ -0,0 +1,145 @@ + + + + + + +Spark: SpmvEqual Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
SpmvEqual Struct Reference
+
+
+ + + + +

+Public Member Functions

bool operator() (const std::shared_ptr< SpmvArchitecture > &a, const std::shared_ptr< SpmvArchitecture > &b) const
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SpmvEqual::operator() (const std::shared_ptr< SpmvArchitecture > & a,
const std::shared_ptr< SpmvArchitecture > & b 
) const
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structSpmvHash-members.html b/structSpmvHash-members.html new file mode 100644 index 0000000..07c9e2f --- /dev/null +++ b/structSpmvHash-members.html @@ -0,0 +1,102 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+
+
SpmvHash Member List
+
+
+ +

This is the complete list of members for SpmvHash, including all inherited members.

+ + +
operator()(const std::shared_ptr< SpmvArchitecture > &a) const SpmvHashinline
+ + + + diff --git a/structSpmvHash.html b/structSpmvHash.html new file mode 100644 index 0000000..5c106d3 --- /dev/null +++ b/structSpmvHash.html @@ -0,0 +1,135 @@ + + + + + + +Spark: SpmvHash Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ +
+
+ +
+
SpmvHash Struct Reference
+
+
+ + + + +

+Public Member Functions

std::size_t operator() (const std::shared_ptr< SpmvArchitecture > &a) const
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
std::size_t SpmvHash::operator() (const std::shared_ptr< SpmvArchitecture > & a) const
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structspark_1_1spmv_1_1Partition-members.html b/structspark_1_1spmv_1_1Partition-members.html new file mode 100644 index 0000000..cfee795 --- /dev/null +++ b/structspark_1_1spmv_1_1Partition-members.html @@ -0,0 +1,118 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::spmv::Partition Member List
+
+ + + + + diff --git a/structspark_1_1spmv_1_1Partition.html b/structspark_1_1spmv_1_1Partition.html new file mode 100644 index 0000000..f90d5bf --- /dev/null +++ b/structspark_1_1spmv_1_1Partition.html @@ -0,0 +1,313 @@ + + + + + + +Spark: spark::spmv::Partition Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv::Partition Struct Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+ + + + +

+Public Member Functions

std::string to_string ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

int nBlocks
 
int n
 
int paddingCycles
 
int totalCycles
 
int vector_load_cycles
 
int outSize
 
int reductionCycles
 
int emptyCycles
 
int m_colptr_unpaddedLength
 
int m_indptr_values_unpaddedLength
 
std::vector< int > m_colptr
 
std::vector< indptr_value > m_indptr_values
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
std::string spark::spmv::Partition::to_string ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
int spark::spmv::Partition::emptyCycles
+
+ +
+
+ +
+
+ + + + +
std::vector<int> spark::spmv::Partition::m_colptr
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::m_colptr_unpaddedLength
+
+ +
+
+ +
+
+ + + + +
std::vector<indptr_value> spark::spmv::Partition::m_indptr_values
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::m_indptr_values_unpaddedLength
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::n
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::nBlocks
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::outSize
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::paddingCycles
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::reductionCycles
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::totalCycles
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::vector_load_cycles
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structspark_1_1spmv_1_1indptr__value-members.html b/structspark_1_1spmv_1_1indptr__value-members.html new file mode 100644 index 0000000..93cab38 --- /dev/null +++ b/structspark_1_1spmv_1_1indptr__value-members.html @@ -0,0 +1,109 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::spmv::indptr_value Member List
+
+
+ +

This is the complete list of members for spark::spmv::indptr_value, including all inherited members.

+ + + + + +
indptrspark::spmv::indptr_value
indptr_value(double _value, int _indptr)spark::spmv::indptr_valueinline
indptr_value()spark::spmv::indptr_valueinline
valuespark::spmv::indptr_value
+ + + + diff --git a/structspark_1_1spmv_1_1indptr__value.html b/structspark_1_1spmv_1_1indptr__value.html new file mode 100644 index 0000000..a73631b --- /dev/null +++ b/structspark_1_1spmv_1_1indptr__value.html @@ -0,0 +1,209 @@ + + + + + + +Spark: spark::spmv::indptr_value Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::spmv::indptr_value Struct Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+ + + + + + +

+Public Member Functions

 indptr_value (double _value, int _indptr)
 
 indptr_value ()
 
+ + + + + +

+Public Attributes

double value
 
int indptr
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
spark::spmv::indptr_value::indptr_value (double _value,
int _indptr 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::indptr_value::indptr_value ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
int spark::spmv::indptr_value::indptr
+
+ +
+
+ +
+
+ + + + +
double spark::spmv::indptr_value::value
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/structspark_1_1utils_1_1Range-members.html b/structspark_1_1utils_1_1Range-members.html new file mode 100644 index 0000000..8eff726 --- /dev/null +++ b/structspark_1_1utils_1_1Range-members.html @@ -0,0 +1,115 @@ + + + + + + +Spark: Member List + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
spark::utils::Range Member List
+
+
+ +

This is the complete list of members for spark::utils::Range, including all inherited members.

+ + + + + + + + + + + +
at_start()spark::utils::Rangeinline
crtspark::utils::Range
endspark::utils::Range
operator++()spark::utils::Rangeinline
Range(int _s, int _e, int _stp)spark::utils::Rangeinline
Range(std::string range)spark::utils::Rangeinline
restart()spark::utils::Rangeinline
startspark::utils::Range
stepspark::utils::Range
to_string()spark::utils::Rangeinline
+ + + + diff --git a/structspark_1_1utils_1_1Range.html b/structspark_1_1utils_1_1Range.html new file mode 100644 index 0000000..6b7aed2 --- /dev/null +++ b/structspark_1_1utils_1_1Range.html @@ -0,0 +1,345 @@ + + + + + + +Spark: spark::utils::Range Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
spark::utils::Range Struct Reference
+
+
+ +

#include <Utils.hpp>

+ + + + + + + + + + + + + + +

+Public Member Functions

 Range (int _s, int _e, int _stp)
 
 Range (std::string range)
 
std::string to_string ()
 
void restart ()
 
bool at_start ()
 
int operator++ ()
 
+ + + + + + + + + +

+Public Attributes

int start
 
int end
 
int step
 
int crt
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
spark::utils::Range::Range (int _s,
int _e,
int _stp 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
spark::utils::Range::Range (std::string range)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool spark::utils::Range::at_start ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::utils::Range::operator++ ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void spark::utils::Range::restart ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string spark::utils::Range::to_string ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
int spark::utils::Range::crt
+
+ +
+
+ +
+
+ + + + +
int spark::utils::Range::end
+
+ +
+
+ +
+
+ + + + +
int spark::utils::Range::start
+
+ +
+
+ +
+
+ + + + +
int spark::utils::Range::step
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+ + + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} From 1766ad43adb3f8292601fb294aa498358a9edae3 Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Mon, 30 Nov 2015 21:15:08 +0000 Subject: [PATCH 03/23] Remove doc from top level --- BiConjugateGradient_8cpp.html | 215 -- ConjugateGradient_8cpp.html | 104 - Converters_8hpp.html | 132 -- Converters_8hpp_source.html | 149 -- Dse_8cpp.html | 187 -- Dse_8hpp.html | 140 -- Dse_8hpp_source.html | 188 -- Io_8hpp.html | 127 -- Io_8hpp_source.html | 277 --- Model_8hpp.html | 121 -- Model_8hpp_source.html | 187 -- ParallelCsrReadControl_8java.html | 110 - README_8md.html | 96 - SimpleSpmv_8hpp.html | 228 -- SimpleSpmv_8hpp_source.html | 431 ---- SparseLinearSolvers_8cpp.html | 194 -- SparseLinearSolvers_8hpp.html | 125 -- SparseLinearSolvers_8hpp_source.html | 148 -- SparseMatrix_8hpp.html | 127 -- SparseMatrix_8hpp_source.html | 127 -- SpmvDeviceInterfaceMock_8cpp.html | 377 ---- SpmvDeviceInterface_8cpp.html | 194 -- SpmvDeviceInterface_8h.html | 398 ---- SpmvDeviceInterface_8h_source.html | 142 -- SpmvKernel_8java.html | 120 -- SpmvManager_8java.html | 108 - Spmv_8cpp.html | 223 -- Spmv_8hpp.html | 133 -- Spmv_8hpp_source.html | 183 -- UserInput_8hpp.html | 127 -- UserInput_8hpp_source.html | 139 -- Utils_8hpp.html | 129 -- Utils_8hpp_source.html | 165 -- annotated.html | 147 -- bc_s.png | Bin 676 -> 0 bytes bdwn.png | Bin 147 -> 0 bytes classBramSpmvReductionKernel-members.html | 102 - classBramSpmvReductionKernel.html | 165 -- classBramSpmvReductionKernel.png | Bin 581 -> 0 bytes classDramSpmvReductionKernel-members.html | 102 - classDramSpmvReductionKernel.html | 143 -- classDramSpmvReductionKernel.png | Bin 585 -> 0 bytes classPaddingKernel-members.html | 102 - classPaddingKernel.html | 143 -- classPaddingKernel.png | Bin 467 -> 0 bytes classParallelCsrReadControl-members.html | 144 -- classParallelCsrReadControl.html | 1264 ----------- classParallelCsrReadControl.png | Bin 655 -> 0 bytes classSpmvCacheKernel-members.html | 113 - classSpmvCacheKernel.html | 469 ----- classSpmvCacheKernel.png | Bin 516 -> 0 bytes classSpmvKernel-members.html | 103 - classSpmvKernel.html | 204 -- classSpmvKernel.png | Bin 425 -> 0 bytes classSpmvManager-members.html | 128 -- classSpmvManager.html | 975 --------- classSpmvManager.png | Bin 547 -> 0 bytes classSpmvReductionKernel-members.html | 102 - classSpmvReductionKernel.html | 159 -- classSpmvReductionKernel.png | Bin 539 -> 0 bytes classUnpaddingKernel-members.html | 102 - classUnpaddingKernel.html | 159 -- classUnpaddingKernel.png | Bin 473 -> 0 bytes classes.html | 128 -- classspark_1_1dse_1_1Benchmark-members.html | 109 - classspark_1_1dse_1_1Benchmark.html | 219 -- ...spark_1_1dse_1_1DseParameters-members.html | 109 - classspark_1_1dse_1_1DseParameters.html | 171 -- classspark_1_1dse_1_1DseResult-members.html | 109 - classspark_1_1dse_1_1DseResult.html | 211 -- classspark_1_1dse_1_1SparkDse-members.html | 107 - classspark_1_1dse_1_1SparkDse.html | 170 -- classspark_1_1io_1_1MmReader-members.html | 122 -- classspark_1_1io_1_1MmReader.html | 565 ----- ...l_1_1ImplementationParameters-members.html | 110 - ..._1_1model_1_1ImplementationParameters.html | 236 --- ..._1model_1_1LogicResourceUsage-members.html | 117 -- ...sspark_1_1model_1_1LogicResourceUsage.html | 405 ---- ...k_1_1sparse_1_1SparkCooMatrix-members.html | 110 - classspark_1_1sparse_1_1SparkCooMatrix.html | 227 -- ...ear__solvers_1_1DfeBiCgSolver-members.html | 108 - ...rse__linear__solvers_1_1DfeBiCgSolver.html | 168 -- ...arse__linear__solvers_1_1DfeBiCgSolver.png | Bin 907 -> 0 bytes ...inear__solvers_1_1DfeCgSolver-members.html | 108 - ...parse__linear__solvers_1_1DfeCgSolver.html | 168 -- ...sparse__linear__solvers_1_1DfeCgSolver.png | Bin 864 -> 0 bytes ...inear__solvers_1_1EigenSolver-members.html | 108 - ...parse__linear__solvers_1_1EigenSolver.html | 168 -- ...sparse__linear__solvers_1_1EigenSolver.png | Bin 855 -> 0 bytes ...se__linear__solvers_1_1Solver-members.html | 108 - ..._1_1sparse__linear__solvers_1_1Solver.html | 216 -- ...k_1_1sparse__linear__solvers_1_1Solver.png | Bin 1579 -> 0 bytes ..._1spmv_1_1FstSpmvArchitecture-members.html | 132 -- ...sspark_1_1spmv_1_1FstSpmvArchitecture.html | 329 --- classspark_1_1spmv_1_1FstSpmvArchitecture.png | Bin 1225 -> 0 bytes ...mv_1_1PrefetchingArchitecture-members.html | 135 -- ...rk_1_1spmv_1_1PrefetchingArchitecture.html | 286 --- ...ark_1_1spmv_1_1PrefetchingArchitecture.png | Bin 1721 -> 0 bytes ...pmv_1_1SimpleSpmvArchitecture-members.html | 132 -- ...ark_1_1spmv_1_1SimpleSpmvArchitecture.html | 756 ------- ...park_1_1spmv_1_1SimpleSpmvArchitecture.png | Bin 2306 -> 0 bytes ..._1SimpleSpmvArchitectureSpace-members.html | 115 - ..._1spmv_1_1SimpleSpmvArchitectureSpace.html | 392 ---- ...1_1spmv_1_1SimpleSpmvArchitectureSpace.png | Bin 1058 -> 0 bytes ..._1_1SkipEmptyRowsArchitecture-members.html | 133 -- ..._1_1spmv_1_1SkipEmptyRowsArchitecture.html | 367 ---- ...k_1_1spmv_1_1SkipEmptyRowsArchitecture.png | Bin 1728 -> 0 bytes ...k_1_1spmv_1_1SpmvArchitecture-members.html | 119 -- classspark_1_1spmv_1_1SpmvArchitecture.html | 522 ----- classspark_1_1spmv_1_1SpmvArchitecture.png | Bin 2314 -> 0 bytes ...spmv_1_1SpmvArchitectureSpace-members.html | 108 - ...park_1_1spmv_1_1SpmvArchitectureSpace.html | 207 -- ...spark_1_1spmv_1_1SpmvArchitectureSpace.png | Bin 1065 -> 0 bytes closed.png | Bin 132 -> 0 bytes dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html | 100 - dir_16dc92632bab467dc50b01bd02b3341a.html | 100 - dir_376f1c4177942cba0305052d5eaaa828.html | 100 - dir_55daf1889a6971c13f7bc2c2ab706314.html | 100 - dir_68267d1309a1af8e8297ef4c3efbcdba.html | 115 - dir_6d2d4b597c0c9fbf0dac624a287f2dec.html | 100 - dir_817fd82c291ca2ce5189d4384ec10041.html | 100 - dir_bcdd1c0198fc998763f86146a43d3c64.html | 123 -- dir_d44c64559bbebec7f509842c48db8b23.html | 100 - dir_d7c482895ed73b33d89221a7692a7a0a.html | 100 - dir_d8b7011e84264c6173d8b11c4e58b2d3.html | 108 - dir_e1e695598025e13caf4d9e666dd56479.html | 100 - doxygen.conf | 1869 ----------------- doxygen.css | 1184 ----------- doxygen.png | Bin 3779 -> 0 bytes dynsections.js | 97 - ...arallelCsrReadControl_1_1Mode-members.html | 109 - enumParallelCsrReadControl_1_1Mode.html | 169 -- files.html | 134 -- ftv2blank.png | Bin 86 -> 0 bytes ftv2cl.png | Bin 453 -> 0 bytes ftv2doc.png | Bin 746 -> 0 bytes ftv2folderclosed.png | Bin 616 -> 0 bytes ftv2folderopen.png | Bin 597 -> 0 bytes ftv2lastnode.png | Bin 86 -> 0 bytes ftv2link.png | Bin 746 -> 0 bytes ftv2mlastnode.png | Bin 246 -> 0 bytes ftv2mnode.png | Bin 246 -> 0 bytes ftv2mo.png | Bin 403 -> 0 bytes ftv2node.png | Bin 86 -> 0 bytes ftv2ns.png | Bin 388 -> 0 bytes ftv2plastnode.png | Bin 229 -> 0 bytes ftv2pnode.png | Bin 229 -> 0 bytes ftv2splitbar.png | Bin 314 -> 0 bytes ftv2vertline.png | Bin 86 -> 0 bytes functions.html | 152 -- functions_0x62.html | 143 -- functions_0x63.html | 170 -- functions_0x64.html | 175 -- functions_0x65.html | 144 -- functions_0x66.html | 152 -- functions_0x67.html | 192 -- functions_0x69.html | 178 -- functions_0x6c.html | 140 -- functions_0x6d.html | 193 -- functions_0x6e.html | 175 -- functions_0x6f.html | 180 -- functions_0x70.html | 173 -- functions_0x72.html | 169 -- functions_0x73.html | 191 -- functions_0x74.html | 151 -- functions_0x75.html | 134 -- functions_0x76.html | 158 -- functions_0x77.html | 135 -- functions_0x7a.html | 134 -- functions_0x7e.html | 137 -- functions_func.html | 516 ----- functions_type.html | 111 - functions_vars.html | 499 ----- globals.html | 256 --- globals_func.html | 239 --- globals_type.html | 108 - globals_vars.html | 108 - hierarchy.html | 141 -- index.html | 90 - jquery.js | 8 - main_8cpp.html | 208 -- md_README.html | 127 -- namespacemembers.html | 139 -- namespacemembers_func.html | 126 -- namespacemembers_type.html | 115 - namespacemembers_vars.html | 105 - namespaces.html | 110 - namespacespark.html | 120 -- namespacespark_1_1converters.html | 204 -- namespacespark_1_1dse.html | 191 -- namespacespark_1_1io.html | 108 - namespacespark_1_1model.html | 110 - namespacespark_1_1sparse.html | 141 -- ...spacespark_1_1sparse__linear__solvers.html | 114 - namespacespark_1_1spmv.html | 252 --- namespacespark_1_1userio.html | 152 -- namespacespark_1_1utils.html | 149 -- nav_f.png | Bin 153 -> 0 bytes nav_g.png | Bin 95 -> 0 bytes nav_h.png | Bin 98 -> 0 bytes open.png | Bin 123 -> 0 bytes pages.html | 95 - search/all_5f.html | 26 - search/all_5f.js | 4 - search/all_61.html | 26 - search/all_61.js | 11 - search/all_62.html | 26 - search/all_62.js | 10 - search/all_63.html | 26 - search/all_63.js | 20 - search/all_64.html | 26 - search/all_64.js | 25 - search/all_65.html | 26 - search/all_65.js | 10 - search/all_66.html | 26 - search/all_66.js | 11 - search/all_67.html | 26 - search/all_67.js | 26 - search/all_69.html | 26 - search/all_69.js | 21 - search/all_6c.html | 26 - search/all_6c.js | 9 - search/all_6d.html | 26 - search/all_6d.js | 27 - search/all_6e.html | 26 - search/all_6e.js | 16 - search/all_6f.html | 26 - search/all_6f.js | 19 - search/all_70.html | 26 - search/all_70.js | 22 - search/all_72.html | 26 - search/all_72.js | 17 - search/all_73.html | 26 - search/all_73.js | 63 - search/all_74.html | 26 - search/all_74.js | 9 - search/all_75.html | 26 - search/all_75.js | 7 - search/all_76.html | 26 - search/all_76.js | 13 - search/all_77.html | 26 - search/all_77.js | 6 - search/all_7a.html | 26 - search/all_7a.js | 4 - search/all_7e.html | 26 - search/all_7e.js | 5 - search/classes_62.html | 26 - search/classes_62.js | 5 - search/classes_64.html | 26 - search/classes_64.js | 8 - search/classes_65.html | 26 - search/classes_65.js | 4 - search/classes_66.html | 26 - search/classes_66.js | 4 - search/classes_69.html | 26 - search/classes_69.js | 5 - search/classes_6c.html | 26 - search/classes_6c.js | 4 - search/classes_6d.html | 26 - search/classes_6d.js | 5 - search/classes_70.html | 26 - search/classes_70.js | 8 - search/classes_72.html | 26 - search/classes_72.js | 4 - search/classes_73.html | 26 - search/classes_73.js | 17 - search/classes_75.html | 26 - search/classes_75.js | 4 - search/close.png | Bin 273 -> 0 bytes search/files_62.html | 26 - search/files_62.js | 4 - search/files_63.html | 26 - search/files_63.js | 5 - search/files_64.html | 26 - search/files_64.js | 5 - search/files_69.html | 26 - search/files_69.js | 4 - search/files_6d.html | 26 - search/files_6d.js | 5 - search/files_70.html | 26 - search/files_70.js | 4 - search/files_72.html | 26 - search/files_72.js | 4 - search/files_73.html | 26 - search/files_73.js | 14 - search/files_75.html | 26 - search/files_75.js | 5 - search/functions_5f.html | 26 - search/functions_5f.js | 4 - search/functions_61.html | 26 - search/functions_61.js | 10 - search/functions_62.html | 26 - search/functions_62.js | 6 - search/functions_63.html | 26 - search/functions_63.js | 8 - search/functions_64.html | 26 - search/functions_64.js | 11 - search/functions_65.html | 26 - search/functions_65.js | 6 - search/functions_66.html | 26 - search/functions_66.js | 5 - search/functions_67.html | 26 - search/functions_67.js | 25 - search/functions_69.html | 26 - search/functions_69.js | 6 - search/functions_6c.html | 26 - search/functions_6c.js | 6 - search/functions_6d.html | 26 - search/functions_6d.js | 10 - search/functions_6e.html | 26 - search/functions_6e.js | 6 - search/functions_6f.html | 26 - search/functions_6f.js | 13 - search/functions_70.html | 26 - search/functions_70.js | 11 - search/functions_72.html | 26 - search/functions_72.js | 8 - search/functions_73.html | 26 - search/functions_73.js | 25 - search/functions_74.html | 26 - search/functions_74.js | 6 - search/functions_75.html | 26 - search/functions_75.js | 4 - search/functions_77.html | 26 - search/functions_77.js | 6 - search/functions_7a.html | 26 - search/functions_7a.js | 4 - search/functions_7e.html | 26 - search/functions_7e.js | 5 - search/mag_sel.png | Bin 563 -> 0 bytes search/namespaces_73.html | 26 - search/namespaces_73.js | 13 - search/nomatches.html | 12 - search/pages_73.html | 26 - search/pages_73.js | 4 - search/search.css | 271 --- search/search.js | 809 ------- search/search_l.png | Bin 604 -> 0 bytes search/search_m.png | Bin 158 -> 0 bytes search/search_r.png | Bin 612 -> 0 bytes search/typedefs_63.html | 26 - search/typedefs_63.js | 5 - search/typedefs_65.html | 26 - search/typedefs_65.js | 4 - search/typedefs_70.html | 26 - search/typedefs_70.js | 4 - search/typedefs_73.html | 26 - search/typedefs_73.js | 5 - search/typedefs_75.html | 26 - search/typedefs_75.js | 4 - search/typedefs_76.html | 26 - search/typedefs_76.js | 4 - search/variables_5f.html | 26 - search/variables_5f.js | 4 - search/variables_61.html | 26 - search/variables_61.js | 4 - search/variables_62.html | 26 - search/variables_62.js | 5 - search/variables_63.html | 26 - search/variables_63.js | 11 - search/variables_64.html | 26 - search/variables_64.js | 11 - search/variables_65.html | 26 - search/variables_65.js | 5 - search/variables_66.html | 26 - search/variables_66.js | 8 - search/variables_67.html | 26 - search/variables_67.js | 4 - search/variables_69.html | 26 - search/variables_69.js | 15 - search/variables_6c.html | 26 - search/variables_6c.js | 5 - search/variables_6d.html | 26 - search/variables_6d.js | 16 - search/variables_6e.html | 26 - search/variables_6e.js | 13 - search/variables_6f.html | 26 - search/variables_6f.js | 9 - search/variables_70.html | 26 - search/variables_70.js | 9 - search/variables_72.html | 26 - search/variables_72.js | 10 - search/variables_73.html | 26 - search/variables_73.js | 7 - search/variables_74.html | 26 - search/variables_74.js | 6 - search/variables_76.html | 26 - search/variables_76.js | 12 - structPartitionWriteResult-members.html | 108 - structPartitionWriteResult.html | 207 -- structSpmvEqual-members.html | 102 - structSpmvEqual.html | 145 -- structSpmvHash-members.html | 102 - structSpmvHash.html | 135 -- structspark_1_1spmv_1_1Partition-members.html | 118 -- structspark_1_1spmv_1_1Partition.html | 313 --- ...park_1_1spmv_1_1indptr__value-members.html | 109 - structspark_1_1spmv_1_1indptr__value.html | 209 -- structspark_1_1utils_1_1Range-members.html | 115 - structspark_1_1utils_1_1Range.html | 345 --- sync_off.png | Bin 853 -> 0 bytes sync_on.png | Bin 845 -> 0 bytes tab_a.png | Bin 142 -> 0 bytes tab_b.png | Bin 169 -> 0 bytes tab_h.png | Bin 177 -> 0 bytes tab_s.png | Bin 184 -> 0 bytes tabs.css | 60 - 407 files changed, 37942 deletions(-) delete mode 100644 BiConjugateGradient_8cpp.html delete mode 100644 ConjugateGradient_8cpp.html delete mode 100644 Converters_8hpp.html delete mode 100644 Converters_8hpp_source.html delete mode 100644 Dse_8cpp.html delete mode 100644 Dse_8hpp.html delete mode 100644 Dse_8hpp_source.html delete mode 100644 Io_8hpp.html delete mode 100644 Io_8hpp_source.html delete mode 100644 Model_8hpp.html delete mode 100644 Model_8hpp_source.html delete mode 100644 ParallelCsrReadControl_8java.html delete mode 100644 README_8md.html delete mode 100644 SimpleSpmv_8hpp.html delete mode 100644 SimpleSpmv_8hpp_source.html delete mode 100644 SparseLinearSolvers_8cpp.html delete mode 100644 SparseLinearSolvers_8hpp.html delete mode 100644 SparseLinearSolvers_8hpp_source.html delete mode 100644 SparseMatrix_8hpp.html delete mode 100644 SparseMatrix_8hpp_source.html delete mode 100644 SpmvDeviceInterfaceMock_8cpp.html delete mode 100644 SpmvDeviceInterface_8cpp.html delete mode 100644 SpmvDeviceInterface_8h.html delete mode 100644 SpmvDeviceInterface_8h_source.html delete mode 100644 SpmvKernel_8java.html delete mode 100644 SpmvManager_8java.html delete mode 100644 Spmv_8cpp.html delete mode 100644 Spmv_8hpp.html delete mode 100644 Spmv_8hpp_source.html delete mode 100644 UserInput_8hpp.html delete mode 100644 UserInput_8hpp_source.html delete mode 100644 Utils_8hpp.html delete mode 100644 Utils_8hpp_source.html delete mode 100644 annotated.html delete mode 100644 bc_s.png delete mode 100644 bdwn.png delete mode 100644 classBramSpmvReductionKernel-members.html delete mode 100644 classBramSpmvReductionKernel.html delete mode 100644 classBramSpmvReductionKernel.png delete mode 100644 classDramSpmvReductionKernel-members.html delete mode 100644 classDramSpmvReductionKernel.html delete mode 100644 classDramSpmvReductionKernel.png delete mode 100644 classPaddingKernel-members.html delete mode 100644 classPaddingKernel.html delete mode 100644 classPaddingKernel.png delete mode 100644 classParallelCsrReadControl-members.html delete mode 100644 classParallelCsrReadControl.html delete mode 100644 classParallelCsrReadControl.png delete mode 100644 classSpmvCacheKernel-members.html delete mode 100644 classSpmvCacheKernel.html delete mode 100644 classSpmvCacheKernel.png delete mode 100644 classSpmvKernel-members.html delete mode 100644 classSpmvKernel.html delete mode 100644 classSpmvKernel.png delete mode 100644 classSpmvManager-members.html delete mode 100644 classSpmvManager.html delete mode 100644 classSpmvManager.png delete mode 100644 classSpmvReductionKernel-members.html delete mode 100644 classSpmvReductionKernel.html delete mode 100644 classSpmvReductionKernel.png delete mode 100644 classUnpaddingKernel-members.html delete mode 100644 classUnpaddingKernel.html delete mode 100644 classUnpaddingKernel.png delete mode 100644 classes.html delete mode 100644 classspark_1_1dse_1_1Benchmark-members.html delete mode 100644 classspark_1_1dse_1_1Benchmark.html delete mode 100644 classspark_1_1dse_1_1DseParameters-members.html delete mode 100644 classspark_1_1dse_1_1DseParameters.html delete mode 100644 classspark_1_1dse_1_1DseResult-members.html delete mode 100644 classspark_1_1dse_1_1DseResult.html delete mode 100644 classspark_1_1dse_1_1SparkDse-members.html delete mode 100644 classspark_1_1dse_1_1SparkDse.html delete mode 100644 classspark_1_1io_1_1MmReader-members.html delete mode 100644 classspark_1_1io_1_1MmReader.html delete mode 100644 classspark_1_1model_1_1ImplementationParameters-members.html delete mode 100644 classspark_1_1model_1_1ImplementationParameters.html delete mode 100644 classspark_1_1model_1_1LogicResourceUsage-members.html delete mode 100644 classspark_1_1model_1_1LogicResourceUsage.html delete mode 100644 classspark_1_1sparse_1_1SparkCooMatrix-members.html delete mode 100644 classspark_1_1sparse_1_1SparkCooMatrix.html delete mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html delete mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html delete mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.png delete mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeCgSolver-members.html delete mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html delete mode 100644 classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.png delete mode 100644 classspark_1_1sparse__linear__solvers_1_1EigenSolver-members.html delete mode 100644 classspark_1_1sparse__linear__solvers_1_1EigenSolver.html delete mode 100644 classspark_1_1sparse__linear__solvers_1_1EigenSolver.png delete mode 100644 classspark_1_1sparse__linear__solvers_1_1Solver-members.html delete mode 100644 classspark_1_1sparse__linear__solvers_1_1Solver.html delete mode 100644 classspark_1_1sparse__linear__solvers_1_1Solver.png delete mode 100644 classspark_1_1spmv_1_1FstSpmvArchitecture-members.html delete mode 100644 classspark_1_1spmv_1_1FstSpmvArchitecture.html delete mode 100644 classspark_1_1spmv_1_1FstSpmvArchitecture.png delete mode 100644 classspark_1_1spmv_1_1PrefetchingArchitecture-members.html delete mode 100644 classspark_1_1spmv_1_1PrefetchingArchitecture.html delete mode 100644 classspark_1_1spmv_1_1PrefetchingArchitecture.png delete mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html delete mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitecture.html delete mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitecture.png delete mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html delete mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html delete mode 100644 classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.png delete mode 100644 classspark_1_1spmv_1_1SkipEmptyRowsArchitecture-members.html delete mode 100644 classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html delete mode 100644 classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.png delete mode 100644 classspark_1_1spmv_1_1SpmvArchitecture-members.html delete mode 100644 classspark_1_1spmv_1_1SpmvArchitecture.html delete mode 100644 classspark_1_1spmv_1_1SpmvArchitecture.png delete mode 100644 classspark_1_1spmv_1_1SpmvArchitectureSpace-members.html delete mode 100644 classspark_1_1spmv_1_1SpmvArchitectureSpace.html delete mode 100644 classspark_1_1spmv_1_1SpmvArchitectureSpace.png delete mode 100644 closed.png delete mode 100644 dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html delete mode 100644 dir_16dc92632bab467dc50b01bd02b3341a.html delete mode 100644 dir_376f1c4177942cba0305052d5eaaa828.html delete mode 100644 dir_55daf1889a6971c13f7bc2c2ab706314.html delete mode 100644 dir_68267d1309a1af8e8297ef4c3efbcdba.html delete mode 100644 dir_6d2d4b597c0c9fbf0dac624a287f2dec.html delete mode 100644 dir_817fd82c291ca2ce5189d4384ec10041.html delete mode 100644 dir_bcdd1c0198fc998763f86146a43d3c64.html delete mode 100644 dir_d44c64559bbebec7f509842c48db8b23.html delete mode 100644 dir_d7c482895ed73b33d89221a7692a7a0a.html delete mode 100644 dir_d8b7011e84264c6173d8b11c4e58b2d3.html delete mode 100644 dir_e1e695598025e13caf4d9e666dd56479.html delete mode 100644 doxygen.conf delete mode 100644 doxygen.css delete mode 100644 doxygen.png delete mode 100644 dynsections.js delete mode 100644 enumParallelCsrReadControl_1_1Mode-members.html delete mode 100644 enumParallelCsrReadControl_1_1Mode.html delete mode 100644 files.html delete mode 100644 ftv2blank.png delete mode 100644 ftv2cl.png delete mode 100644 ftv2doc.png delete mode 100644 ftv2folderclosed.png delete mode 100644 ftv2folderopen.png delete mode 100644 ftv2lastnode.png delete mode 100644 ftv2link.png delete mode 100644 ftv2mlastnode.png delete mode 100644 ftv2mnode.png delete mode 100644 ftv2mo.png delete mode 100644 ftv2node.png delete mode 100644 ftv2ns.png delete mode 100644 ftv2plastnode.png delete mode 100644 ftv2pnode.png delete mode 100644 ftv2splitbar.png delete mode 100644 ftv2vertline.png delete mode 100644 functions.html delete mode 100644 functions_0x62.html delete mode 100644 functions_0x63.html delete mode 100644 functions_0x64.html delete mode 100644 functions_0x65.html delete mode 100644 functions_0x66.html delete mode 100644 functions_0x67.html delete mode 100644 functions_0x69.html delete mode 100644 functions_0x6c.html delete mode 100644 functions_0x6d.html delete mode 100644 functions_0x6e.html delete mode 100644 functions_0x6f.html delete mode 100644 functions_0x70.html delete mode 100644 functions_0x72.html delete mode 100644 functions_0x73.html delete mode 100644 functions_0x74.html delete mode 100644 functions_0x75.html delete mode 100644 functions_0x76.html delete mode 100644 functions_0x77.html delete mode 100644 functions_0x7a.html delete mode 100644 functions_0x7e.html delete mode 100644 functions_func.html delete mode 100644 functions_type.html delete mode 100644 functions_vars.html delete mode 100644 globals.html delete mode 100644 globals_func.html delete mode 100644 globals_type.html delete mode 100644 globals_vars.html delete mode 100644 hierarchy.html delete mode 100644 index.html delete mode 100644 jquery.js delete mode 100644 main_8cpp.html delete mode 100644 md_README.html delete mode 100644 namespacemembers.html delete mode 100644 namespacemembers_func.html delete mode 100644 namespacemembers_type.html delete mode 100644 namespacemembers_vars.html delete mode 100644 namespaces.html delete mode 100644 namespacespark.html delete mode 100644 namespacespark_1_1converters.html delete mode 100644 namespacespark_1_1dse.html delete mode 100644 namespacespark_1_1io.html delete mode 100644 namespacespark_1_1model.html delete mode 100644 namespacespark_1_1sparse.html delete mode 100644 namespacespark_1_1sparse__linear__solvers.html delete mode 100644 namespacespark_1_1spmv.html delete mode 100644 namespacespark_1_1userio.html delete mode 100644 namespacespark_1_1utils.html delete mode 100644 nav_f.png delete mode 100644 nav_g.png delete mode 100644 nav_h.png delete mode 100644 open.png delete mode 100644 pages.html delete mode 100644 search/all_5f.html delete mode 100644 search/all_5f.js delete mode 100644 search/all_61.html delete mode 100644 search/all_61.js delete mode 100644 search/all_62.html delete mode 100644 search/all_62.js delete mode 100644 search/all_63.html delete mode 100644 search/all_63.js delete mode 100644 search/all_64.html delete mode 100644 search/all_64.js delete mode 100644 search/all_65.html delete mode 100644 search/all_65.js delete mode 100644 search/all_66.html delete mode 100644 search/all_66.js delete mode 100644 search/all_67.html delete mode 100644 search/all_67.js delete mode 100644 search/all_69.html delete mode 100644 search/all_69.js delete mode 100644 search/all_6c.html delete mode 100644 search/all_6c.js delete mode 100644 search/all_6d.html delete mode 100644 search/all_6d.js delete mode 100644 search/all_6e.html delete mode 100644 search/all_6e.js delete mode 100644 search/all_6f.html delete mode 100644 search/all_6f.js delete mode 100644 search/all_70.html delete mode 100644 search/all_70.js delete mode 100644 search/all_72.html delete mode 100644 search/all_72.js delete mode 100644 search/all_73.html delete mode 100644 search/all_73.js delete mode 100644 search/all_74.html delete mode 100644 search/all_74.js delete mode 100644 search/all_75.html delete mode 100644 search/all_75.js delete mode 100644 search/all_76.html delete mode 100644 search/all_76.js delete mode 100644 search/all_77.html delete mode 100644 search/all_77.js delete mode 100644 search/all_7a.html delete mode 100644 search/all_7a.js delete mode 100644 search/all_7e.html delete mode 100644 search/all_7e.js delete mode 100644 search/classes_62.html delete mode 100644 search/classes_62.js delete mode 100644 search/classes_64.html delete mode 100644 search/classes_64.js delete mode 100644 search/classes_65.html delete mode 100644 search/classes_65.js delete mode 100644 search/classes_66.html delete mode 100644 search/classes_66.js delete mode 100644 search/classes_69.html delete mode 100644 search/classes_69.js delete mode 100644 search/classes_6c.html delete mode 100644 search/classes_6c.js delete mode 100644 search/classes_6d.html delete mode 100644 search/classes_6d.js delete mode 100644 search/classes_70.html delete mode 100644 search/classes_70.js delete mode 100644 search/classes_72.html delete mode 100644 search/classes_72.js delete mode 100644 search/classes_73.html delete mode 100644 search/classes_73.js delete mode 100644 search/classes_75.html delete mode 100644 search/classes_75.js delete mode 100644 search/close.png delete mode 100644 search/files_62.html delete mode 100644 search/files_62.js delete mode 100644 search/files_63.html delete mode 100644 search/files_63.js delete mode 100644 search/files_64.html delete mode 100644 search/files_64.js delete mode 100644 search/files_69.html delete mode 100644 search/files_69.js delete mode 100644 search/files_6d.html delete mode 100644 search/files_6d.js delete mode 100644 search/files_70.html delete mode 100644 search/files_70.js delete mode 100644 search/files_72.html delete mode 100644 search/files_72.js delete mode 100644 search/files_73.html delete mode 100644 search/files_73.js delete mode 100644 search/files_75.html delete mode 100644 search/files_75.js delete mode 100644 search/functions_5f.html delete mode 100644 search/functions_5f.js delete mode 100644 search/functions_61.html delete mode 100644 search/functions_61.js delete mode 100644 search/functions_62.html delete mode 100644 search/functions_62.js delete mode 100644 search/functions_63.html delete mode 100644 search/functions_63.js delete mode 100644 search/functions_64.html delete mode 100644 search/functions_64.js delete mode 100644 search/functions_65.html delete mode 100644 search/functions_65.js delete mode 100644 search/functions_66.html delete mode 100644 search/functions_66.js delete mode 100644 search/functions_67.html delete mode 100644 search/functions_67.js delete mode 100644 search/functions_69.html delete mode 100644 search/functions_69.js delete mode 100644 search/functions_6c.html delete mode 100644 search/functions_6c.js delete mode 100644 search/functions_6d.html delete mode 100644 search/functions_6d.js delete mode 100644 search/functions_6e.html delete mode 100644 search/functions_6e.js delete mode 100644 search/functions_6f.html delete mode 100644 search/functions_6f.js delete mode 100644 search/functions_70.html delete mode 100644 search/functions_70.js delete mode 100644 search/functions_72.html delete mode 100644 search/functions_72.js delete mode 100644 search/functions_73.html delete mode 100644 search/functions_73.js delete mode 100644 search/functions_74.html delete mode 100644 search/functions_74.js delete mode 100644 search/functions_75.html delete mode 100644 search/functions_75.js delete mode 100644 search/functions_77.html delete mode 100644 search/functions_77.js delete mode 100644 search/functions_7a.html delete mode 100644 search/functions_7a.js delete mode 100644 search/functions_7e.html delete mode 100644 search/functions_7e.js delete mode 100644 search/mag_sel.png delete mode 100644 search/namespaces_73.html delete mode 100644 search/namespaces_73.js delete mode 100644 search/nomatches.html delete mode 100644 search/pages_73.html delete mode 100644 search/pages_73.js delete mode 100644 search/search.css delete mode 100644 search/search.js delete mode 100644 search/search_l.png delete mode 100644 search/search_m.png delete mode 100644 search/search_r.png delete mode 100644 search/typedefs_63.html delete mode 100644 search/typedefs_63.js delete mode 100644 search/typedefs_65.html delete mode 100644 search/typedefs_65.js delete mode 100644 search/typedefs_70.html delete mode 100644 search/typedefs_70.js delete mode 100644 search/typedefs_73.html delete mode 100644 search/typedefs_73.js delete mode 100644 search/typedefs_75.html delete mode 100644 search/typedefs_75.js delete mode 100644 search/typedefs_76.html delete mode 100644 search/typedefs_76.js delete mode 100644 search/variables_5f.html delete mode 100644 search/variables_5f.js delete mode 100644 search/variables_61.html delete mode 100644 search/variables_61.js delete mode 100644 search/variables_62.html delete mode 100644 search/variables_62.js delete mode 100644 search/variables_63.html delete mode 100644 search/variables_63.js delete mode 100644 search/variables_64.html delete mode 100644 search/variables_64.js delete mode 100644 search/variables_65.html delete mode 100644 search/variables_65.js delete mode 100644 search/variables_66.html delete mode 100644 search/variables_66.js delete mode 100644 search/variables_67.html delete mode 100644 search/variables_67.js delete mode 100644 search/variables_69.html delete mode 100644 search/variables_69.js delete mode 100644 search/variables_6c.html delete mode 100644 search/variables_6c.js delete mode 100644 search/variables_6d.html delete mode 100644 search/variables_6d.js delete mode 100644 search/variables_6e.html delete mode 100644 search/variables_6e.js delete mode 100644 search/variables_6f.html delete mode 100644 search/variables_6f.js delete mode 100644 search/variables_70.html delete mode 100644 search/variables_70.js delete mode 100644 search/variables_72.html delete mode 100644 search/variables_72.js delete mode 100644 search/variables_73.html delete mode 100644 search/variables_73.js delete mode 100644 search/variables_74.html delete mode 100644 search/variables_74.js delete mode 100644 search/variables_76.html delete mode 100644 search/variables_76.js delete mode 100644 structPartitionWriteResult-members.html delete mode 100644 structPartitionWriteResult.html delete mode 100644 structSpmvEqual-members.html delete mode 100644 structSpmvEqual.html delete mode 100644 structSpmvHash-members.html delete mode 100644 structSpmvHash.html delete mode 100644 structspark_1_1spmv_1_1Partition-members.html delete mode 100644 structspark_1_1spmv_1_1Partition.html delete mode 100644 structspark_1_1spmv_1_1indptr__value-members.html delete mode 100644 structspark_1_1spmv_1_1indptr__value.html delete mode 100644 structspark_1_1utils_1_1Range-members.html delete mode 100644 structspark_1_1utils_1_1Range.html delete mode 100644 sync_off.png delete mode 100644 sync_on.png delete mode 100644 tab_a.png delete mode 100644 tab_b.png delete mode 100644 tab_h.png delete mode 100644 tab_s.png delete mode 100644 tabs.css diff --git a/BiConjugateGradient_8cpp.html b/BiConjugateGradient_8cpp.html deleted file mode 100644 index 2adb57a..0000000 --- a/BiConjugateGradient_8cpp.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - -Spark: src/bicg/src/BiConjugateGradient.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
BiConjugateGradient.cpp File Reference
-
-
-
#include <Spark/SparseLinearSolvers.hpp>
-#include <Spark/Spmv.hpp>
-#include <Spark/SimpleSpmv.hpp>
-#include <iostream>
-#include <stdexcept>
-
- - - -

-Typedefs

using Vd = Eigen::VectorXd
 
- - - - - - - -

-Functions

Vd cpuReferenceUnprecon (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd cpuReferencePrecon (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd dfeImplUnprecon (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
-

Typedef Documentation

- -
-
- - - - -
using Vd = Eigen::VectorXd
-
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
Eigen::VectorXd cpuReferencePrecon (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
Vd cpuReferenceUnprecon (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
Eigen::VectorXd dfeImplUnprecon (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
- -
-
-
- - - - diff --git a/ConjugateGradient_8cpp.html b/ConjugateGradient_8cpp.html deleted file mode 100644 index ca4b931..0000000 --- a/ConjugateGradient_8cpp.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - -Spark: src/cg/src/ConjugateGradient.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
ConjugateGradient.cpp File Reference
-
-
-
#include <Eigen/Sparse>
-#include <Spark/SparseLinearSolvers.hpp>
-#include <Maxfiles.h>
-#include <iostream>
-
- - - - diff --git a/Converters_8hpp.html b/Converters_8hpp.html deleted file mode 100644 index 29e7e0b..0000000 --- a/Converters_8hpp.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -Spark: include/Spark/Converters.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
Converters.hpp File Reference
-
-
-
#include <stdexcept>
-#include <memory>
-#include <Spark/SparseMatrix.hpp>
-#include <Eigen/Sparse>
-
-

Go to the source code of this file.

- - - - - - -

-Namespaces

namespace  spark
 
namespace  spark::converters
 
- - - -

-Typedefs

using spark::converters::EigenSparseMatrix = std::unique_ptr< Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >>
 
- - - - - - - -

-Functions

EigenSparseMatrix spark::converters::tripletToEigen (spark::sparse::SparkCooMatrix< double > mat)
 
Eigen::VectorXd spark::converters::stdvectorToEigen (std::vector< double > v)
 
std::vector< double > spark::converters::eigenVectorToStdVector (const Eigen::VectorXd &v)
 
-
- - - - diff --git a/Converters_8hpp_source.html b/Converters_8hpp_source.html deleted file mode 100644 index 6daebac..0000000 --- a/Converters_8hpp_source.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -Spark: include/Spark/Converters.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
Converters.hpp
-
-
-Go to the documentation of this file.
1 #ifndef CONVERTERS_HPP_QNX3RWUJ
-
2 #define CONVERTERS_HPP_QNX3RWUJ
-
3 
-
4 #include <stdexcept>
-
5 #include <memory>
-
6 
-
7 #include <Spark/SparseMatrix.hpp>
-
8 #include <Eigen/Sparse>
-
9 #include <Spark/SparseMatrix.hpp>
-
10 
-
11 namespace spark {
-
12  namespace converters {
-
13 
-
14  using EigenSparseMatrix = std::unique_ptr<Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>>;
-
15 
-
16  // convert a Spark COO matrix to an Eigen Sparse Matrix
- -
18  auto coo = mat.data;
-
19  EigenSparseMatrix m(new Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>(mat.n, mat.m));
-
20  std::vector<Eigen::Triplet<double>> trips;
-
21  for (size_t i = 0; i < coo.size(); i++)
-
22  trips.push_back(
-
23  Eigen::Triplet<double>(
-
24  std::get<0>(coo[i]),
-
25  std::get<1>(coo[i]),
-
26  std::get<2>(coo[i])));
-
27  m->setFromTriplets(trips.begin(), trips.end());
-
28  return m;
-
29  }
-
30 
-
31  inline Eigen::VectorXd stdvectorToEigen(std::vector<double> v) {
-
32  Eigen::VectorXd m(v.size());
-
33  for (size_t i = 0; i < v.size(); i++)
-
34  m[i] = v[i];
-
35  return m;
-
36  }
-
37 
-
38  inline std::vector<double> eigenVectorToStdVector(const Eigen::VectorXd& v) {
-
39  std::vector<double> m(v.size());
-
40  for (int i = 0; i < v.size(); i++)
-
41  m[i] = v[i];
-
42  return m;
-
43  }
-
44 
-
45  }
-
46 }
-
47 
-
48 
-
49 #endif /* end of include guard: CONVERTERS_HPP_QNX3RWUJ */
-
- - - - diff --git a/Dse_8cpp.html b/Dse_8cpp.html deleted file mode 100644 index 2919efc..0000000 --- a/Dse_8cpp.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - -Spark: src/dse/Dse.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
Dse.cpp File Reference
-
-
-
#include <iostream>
-#include <Spark/Dse.hpp>
-#include <unordered_map>
-#include <Spark/Converters.hpp>
-
- - - - - -

-Classes

struct  SpmvHash
 
struct  SpmvEqual
 
- - - - - -

-Functions

std::shared_ptr< SpmvArchitecture > better (std::shared_ptr< SpmvArchitecture > a1, std::shared_ptr< SpmvArchitecture > a2)
 
std::shared_ptr< SpmvArchitecture > dse_run (std::string basename, SpmvArchitectureSpace *af, const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat, const DseParameters &params)
 
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
std::shared_ptr<SpmvArchitecture> better (std::shared_ptr< SpmvArchitecture > a1,
std::shared_ptr< SpmvArchitecture > a2 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
std::shared_ptr<SpmvArchitecture> dse_run (std::string basename,
SpmvArchitectureSpace * af,
const Eigen::SparseMatrix< double, Eigen::RowMajor > & mat,
const DseParameters & params 
)
-
- -
-
-
- - - - diff --git a/Dse_8hpp.html b/Dse_8hpp.html deleted file mode 100644 index c27ab03..0000000 --- a/Dse_8hpp.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Spark: include/Spark/Dse.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
Dse.hpp File Reference
-
-
-
#include <memory>
-#include <Spark/Spmv.hpp>
-#include <Spark/SimpleSpmv.hpp>
-#include <Spark/Utils.hpp>
-#include <Spark/Io.hpp>
-#include <chrono>
-#include <stdexcept>
-#include <sstream>
-
-

Go to the source code of this file.

- - - - - - - - - - -

-Classes

class  spark::dse::Benchmark
 
class  spark::dse::DseParameters
 
class  spark::dse::DseResult
 
class  spark::dse::SparkDse
 
- - - - - -

-Namespaces

namespace  spark
 
namespace  spark::dse
 
- - - - - -

-Functions

std::ostream & spark::dse::operator<< (std::ostream &s, Benchmark &b)
 
std::ostream & spark::dse::operator<< (std::ostream &s, DseParameters &d)
 
-
- - - - diff --git a/Dse_8hpp_source.html b/Dse_8hpp_source.html deleted file mode 100644 index 5b25fbf..0000000 --- a/Dse_8hpp_source.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - -Spark: include/Spark/Dse.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
Dse.hpp
-
-
-Go to the documentation of this file.
1 #ifndef DSE_H
-
2 #define DSE_H
-
3 
-
4 #include <memory>
-
5 #include <Spark/Spmv.hpp>
-
6 #include <Spark/SimpleSpmv.hpp>
-
7 #include <Spark/Utils.hpp>
-
8 #include <Spark/Io.hpp>
-
9 #include <chrono>
-
10 #include <stdexcept>
-
11 #include <sstream>
-
12 
-
13 namespace spark {
-
14  namespace dse {
-
15 
-
16  // a benchmark to use for the DSE
-
17  class Benchmark {
-
18  std::vector<std::string> paths;
-
19  public:
-
20  std::string get_matrix_path(int id) const {
-
21  if (id < paths.size())
-
22  return paths[id];
-
23  std::stringstream ss;
-
24  ss << "Benchmark::Index out of range " << id;
-
25  throw std::invalid_argument(ss.str());
-
26  }
-
27 
-
28  void add_matrix_path(std::string path) {
-
29  paths.push_back(path);
-
30  }
-
31 
-
32  int get_benchmark_size() const {
-
33  return paths.size();
-
34  }
-
35  };
-
36 
-
37  inline std::ostream& operator<<(std::ostream& s, Benchmark& b) {
-
38  s << "Benchmark(" << std::endl;
-
39  for (int i = 0; i < b.get_benchmark_size(); i++)
-
40  s << " " << b.get_matrix_path(i) << std::endl;
-
41  s << ")" << std::endl;
-
42  return s;
-
43  }
-
44 
-
45  // the parameters and ranges to use for DSE
-
46  class DseParameters {
-
47  public:
-
48  bool gflopsOnly;
- - - -
52  };
-
53 
-
54  inline std::ostream& operator<<(std::ostream& s, DseParameters& d) {
-
55  s << "DseParams(" << std::endl;
-
56  s << " numPipes = " << d.numPipesRange << std::endl;
-
57  s << " inputWidth = " << d.inputWidthRange << std::endl;
-
58  s << " cacheSize = " << d.cacheSizeRange << std::endl;
-
59  s << ")" << std::endl;
-
60  return s;
-
61  }
-
62 
-
63  class DseResult {
-
64  public:
-
65  std::shared_ptr<spark::spmv::SpmvArchitecture> bestArchitecture;
-
66  std::vector<std::string> matrices;
-
67 
-
68  DseResult(std::string path, std::shared_ptr<spark::spmv::SpmvArchitecture> arch) {
-
69  matrices.push_back(path);
-
70  bestArchitecture = arch;
-
71  }
-
72  DseResult(std::shared_ptr<spark::spmv::SpmvArchitecture> arch) {
-
73  bestArchitecture = arch;
-
74  }
-
75  };
-
76 
-
77  class SparkDse {
-
78  public:
-
79  SparkDse() {}
-
80  // returns the best architecture
-
81  std::vector<DseResult> run (
-
82  const Benchmark& benchmark,
-
83  const DseParameters& dseParams);
-
84  };
-
85  }
-
86 }
-
87 
-
88 #endif /* end of include guard: DSE_H */
-
- - - - diff --git a/Io_8hpp.html b/Io_8hpp.html deleted file mode 100644 index 767cc61..0000000 --- a/Io_8hpp.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -Spark: include/Spark/Io.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
Io.hpp File Reference
-
-
-
#include <vector>
-#include <utility>
-#include <string>
-#include <sstream>
-#include <stdexcept>
-#include <fstream>
-#include <chrono>
-#include <Spark/SparseMatrix.hpp>
-#include <dfesnippets/Timing.hpp>
-
-

Go to the source code of this file.

- - - - -

-Classes

class  spark::io::MmReader< value_type >
 
- - - - - -

-Namespaces

namespace  spark
 
namespace  spark::io
 
-
- - - - diff --git a/Io_8hpp_source.html b/Io_8hpp_source.html deleted file mode 100644 index 0dd63ac..0000000 --- a/Io_8hpp_source.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - -Spark: include/Spark/Io.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
Io.hpp
-
-
-Go to the documentation of this file.
1 #ifndef IO_HPP_QPBO8W0X
-
2 #define IO_HPP_QPBO8W0X
-
3 
-
4 #include <vector>
-
5 #include <utility>
-
6 #include <string>
-
7 #include <sstream>
-
8 #include <stdexcept>
-
9 #include <fstream>
-
10 #include <chrono>
-
11 
-
12 #include <Spark/SparseMatrix.hpp>
-
13 
-
14 #include <dfesnippets/Timing.hpp>
-
15 
-
16 namespace spark {
-
17  namespace io {
-
18 
-
19  template<typename value_type>
-
20  class MmReader {
-
21 
-
22  bool sparse = false, symmetric = false, matrix = false;
-
23  int ncols, nrows, nnzs = -1;
-
24 
- - -
27 
-
28  typename SparseMatrix::CoordType mmparse(const std::string line) {
-
29  std::stringstream ss{line};
-
30  int x, y;
-
31  value_type val;
-
32  ss >> x >> y >> val;
-
33  return std::make_tuple(x - 1, y - 1, val);
-
34  }
-
35 
-
36  void parseHeader(std::string line) {
-
37  // is this dense / sparse ?
-
38  sparse = true;
-
39  if (line.find("coordinate") != std::string::npos) {
-
40  sparse = true;
-
41  } else if (line.find("array") != std::string::npos) {
-
42  sparse = false;
-
43  } else {
-
44  throw std::invalid_argument("Cannot parse header, requires either 'coordinate' or 'matrix' type");
-
45  }
-
46 
-
47  if (line[0] =='%' && line[1] == '%') {
-
48  if (line.find("matrix") != std::string::npos) {
-
49  symmetric = line.find("symmetric") != std::string::npos;
-
50  } else
-
51  throw std::invalid_argument("Unsupported file type: " + line);
-
52  }
-
53  }
-
54 
-
55  bool parseHeader(bool pprint=false) {
-
56  std::string line;
-
57  if (!getline(*f, line))
-
58  throw std::invalid_argument("File " + path + " is empty");
-
59 
-
60  parseHeader(line);
-
61 
-
62  // skip comments
-
63  while (getline(*f, line) && line[0] == '%')
-
64  continue;
-
65 
-
66  // read the dimensions
-
67  std::stringstream ss;
-
68  ss << line;
-
69  ss >> nrows >> ncols;
-
70  if (sparse)
-
71  ss >> nnzs;
-
72  matrix = ncols > 1;
-
73 
-
74  if (pprint) {
-
75  std::cout << "sparse: " << sparse << std::endl;
-
76  std::cout << "symmetric: " << symmetric << std::endl;
-
77  std::cout << "matrix: " << matrix << std::endl;
-
78  std::cout << "ncols: " << ncols << std::endl;
-
79  std::cout << "nrows: " << nrows << std::endl;
-
80  std::cout << "nnzs: " << nnzs << std::endl;
-
81  }
-
82  }
-
83 
-
84  std::ifstream* f;
-
85  std::string path;
-
86 
-
87  public:
-
88 
-
89  MmReader(std::string _path) : path(_path) {
-
90  f = new std::ifstream{_path};
-
91  if (!f->is_open())
-
92  throw std::invalid_argument("Could not open file path " + path);
-
93  }
-
94 
-
95  virtual ~MmReader() {
-
96  delete f;
-
97  }
-
98 
-
99  std::vector<double> readVector() {
-
100  parseHeader();
-
101  if (matrix)
-
102  throw std::invalid_argument("Object has > 1 columns ==> Use readMatrix");
-
103  if (sparse)
-
104  throw std::invalid_argument("Sparse vectors not supported");
-
105 
-
106  std::cout << "Reading vector" << std::endl;
-
107 
-
108  std::vector<std::tuple<int, double>> tpls;
-
109  double val;
-
110 
-
111  std::vector<double> res;
-
112  while (*f >> val )
-
113  res.push_back(val);
-
114 
-
115  //tpls.push_back(std::make_tuple(i, val));
-
116  //std::sort(tpls.begin(), tpls.end(),
-
117  //[](std::tuple<int, double> x, std::tuple<int, double> y) {
-
118  //return std::get<0>(x) < std::get<0>(y);
-
119  //}
-
120  //);
-
121 
-
122  //for (int i = 0; i < res.size(); i++)
-
123  //res[i] = std::get<1>(tpls[i]);
-
124 
-
125  return res;
-
126  }
-
127 
-
128  // Read the given file as a MM format description of a sparse matrix.
-
129  // Returns a COO representation of the matrix.
-
130  // NOTE:
-
131  // - the values will be adjusted to 0 based indexing
-
132  // - for symmetric matrices, the symmetric entries are also included
-
133  // - Triplets will be sorted in lexicographical order of their coordinates (row, column)
- -
135  parseHeader();
-
136 
-
137  if (!matrix)
-
138  throw std::invalid_argument("Matrix has only one column ==> Use readVector");
-
139 
-
140  // skip comments
-
141  std::vector<CoordType> values;
-
142  std::string line;
-
143  for (int i = 0; i < nnzs; i++) {
-
144  if (!getline(*f, line))
-
145  throw std::invalid_argument("File has less than given nonzeros!");
-
146  auto tpl = mmparse(line);
-
147  values.push_back(tpl);
-
148  auto row = std::get<0>(tpl);
-
149  auto col = std::get<1>(tpl);
-
150  if (symmetric && row != col)
-
151  values.push_back(
-
152  std::make_tuple(
-
153  std::get<1>(tpl),
-
154  std::get<0>(tpl),
-
155  std::get<2>(tpl)));
-
156  }
-
157 
-
158  auto start = std::chrono::high_resolution_clock::now();
-
159  std::sort(values.begin(), values.end(),
-
160  [](CoordType x, CoordType y) {
-
161  return
-
162  std::get<0>(x) < std::get<0>(y) ||
-
163  (std::get<0>(x) == std::get<0>(y) && std::get<1>(x) < std::get<1>(y));
-
164  });
-
165  dfesnippets::timing::print_clock_diff("Sorting took: ", start);
-
166 
- -
168  m.data = values;
-
169  return m;
-
170  }
-
171  };
-
172  }
-
173 }
-
174 
-
175 
-
176 
-
177 #endif /* end of include guard: IO_HPP_QPBO8W0X */
-
- - - - diff --git a/Model_8hpp.html b/Model_8hpp.html deleted file mode 100644 index ea675b0..0000000 --- a/Model_8hpp.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - -Spark: include/Spark/Model.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
Model.hpp File Reference
-
-
-
#include <sstream>
-
-

Go to the source code of this file.

- - - - - - -

-Classes

class  spark::model::LogicResourceUsage
 
class  spark::model::ImplementationParameters
 
- - - - - -

-Namespaces

namespace  spark
 
namespace  spark::model
 
-
- - - - diff --git a/Model_8hpp_source.html b/Model_8hpp_source.html deleted file mode 100644 index 720ce96..0000000 --- a/Model_8hpp_source.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - -Spark: include/Spark/Model.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
Model.hpp
-
-
-Go to the documentation of this file.
1 #ifndef MODEL_H
-
2 #define MODEL_H
-
3 
-
4 #include <sstream>
-
5 
-
6 namespace spark {
-
7  namespace model {
-
8 
- -
10  public:
-
11  int luts, ffs, brams, dsps;
-
12 
-
13  LogicResourceUsage() : luts(0), ffs(0), dsps(0), brams(0) {}
-
14 
-
15  LogicResourceUsage(int _l, int _f, int _b, int _d) :
-
16  luts(_l), ffs(_f), brams(_b), dsps(_d) {}
-
17 
- -
19  luts = ru.luts;
-
20  ffs = ru.ffs;
-
21  dsps = ru.dsps;
-
22  brams = ru.brams;
-
23  }
-
24 
-
25  std::string to_string() {
-
26  std::stringstream s;
-
27  s << luts << " " << ffs << " " << " " << dsps << " " << brams;
-
28  return s.str();
-
29  }
-
30 
- -
32  return LogicResourceUsage(luts + ru.luts, ffs + ru.ffs, brams + ru.brams, dsps + ru.dsps);
-
33  }
-
34 
-
35  const LogicResourceUsage operator*(int x) const {
-
36  return LogicResourceUsage(x * luts, x * ffs, x * brams, x * dsps);
-
37  }
-
38 
-
39  const LogicResourceUsage operator*(double x) const {
-
40  return LogicResourceUsage(x * (double)luts, x * (double)ffs, x * (double)brams, x * (double)dsps);
-
41  }
-
42 
-
43  const bool operator<(const LogicResourceUsage& ru) const {
-
44  return
-
45  luts < ru.luts &&
-
46  ffs < ru.ffs &&
-
47  dsps < ru.dsps &&
-
48  brams < ru.brams;
-
49  }
-
50  };
-
51 
-
52  // models the implementation parameters which are constrained (e.g. by
-
53  // physical properties, such as lut usage, or by the compiler, such as the
-
54  // number of streams)
- -
56  public:
-
57 
- -
59 
-
60  // params belows not being used currently
-
61  double memoryBandwidth; // <-- would be nice to have this
-
62  //int streams;
-
63  //int clockFrequency;
-
64  //int memoryClockFrequency;
-
65 
-
66  ImplementationParameters(const LogicResourceUsage& _ru, double _memoryBandwidth) : ru(_ru), memoryBandwidth(_memoryBandwidth) {}
-
67 
-
68  std::string to_string() {
-
69  std::stringstream s;
-
70  s << ru.to_string() << " " << memoryBandwidth;
-
71  return s.str();
-
72  }
-
73 
-
74  bool operator<(const ImplementationParameters& other) const {
-
75  return
-
76  ru < other.ru &&
- -
78  //stream < other.streams &&
-
79  //clockFrequency < other.clockFrequency &&
-
80  //memoryClockFrequency < other.memoryClockFrequency;
-
81  }
-
82  };
-
83 
-
84 
-
85  }
-
86 }
-
87 #endif /* end of include guard: MODEL_H */
-
- - - - diff --git a/ParallelCsrReadControl_8java.html b/ParallelCsrReadControl_8java.html deleted file mode 100644 index abe98a8..0000000 --- a/ParallelCsrReadControl_8java.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -Spark: src/spmv/src/ParallelCsrReadControl.java File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
ParallelCsrReadControl.java File Reference
-
-
- - - - - - -

-Classes

class  ParallelCsrReadControl
 
enum  ParallelCsrReadControl.Mode
 
-
- - - - diff --git a/README_8md.html b/README_8md.html deleted file mode 100644 index 6c58457..0000000 --- a/README_8md.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - -Spark: README.md File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
README.md File Reference
-
-
-
- - - - diff --git a/SimpleSpmv_8hpp.html b/SimpleSpmv_8hpp.html deleted file mode 100644 index 5d6ea13..0000000 --- a/SimpleSpmv_8hpp.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - -Spark: include/Spark/SimpleSpmv.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SimpleSpmv.hpp File Reference
-
-
-
#include <sstream>
-#include <Spark/Spmv.hpp>
-#include <Spark/Utils.hpp>
-#include <Spark/Model.hpp>
-#include <Spark/device/SpmvDeviceInterface.h>
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - -

-Classes

struct  spark::spmv::indptr_value
 
struct  spark::spmv::Partition
 
class  spark::spmv::SimpleSpmvArchitecture
 
class  spark::spmv::SimpleSpmvArchitectureSpace< T >
 
class  spark::spmv::FstSpmvArchitecture
 
class  spark::spmv::SkipEmptyRowsArchitecture
 
class  spark::spmv::PrefetchingArchitecture
 
- - - - - -

-Namespaces

namespace  spark
 
namespace  spark::spmv
 
- - - -

-Typedefs

using spark::spmv::EigenSparseMatrix = Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >
 
- - - - - - - -

-Functions

struct spark::spmv::indptr_value spark::spmv::__attribute__ ((packed))
 
 indptr_value (double _value, int _indptr)
 
 indptr_value ()
 
- - - - - - - -

-Variables

double value
 
int indptr
 
struct spark::spmv::Partition spark::spmv::__attribute__
 
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
__attribute__::indptr_value (double _value,
int _indptr 
)
-
- -
-
- -
-
- - - - - - - -
__attribute__::indptr_value ()
-
- -
-
-

Variable Documentation

- -
-
- - - - -
int indptr
-
- -
-
- -
-
- - - - -
double value
-
- -
-
-
- - - - diff --git a/SimpleSpmv_8hpp_source.html b/SimpleSpmv_8hpp_source.html deleted file mode 100644 index d71e566..0000000 --- a/SimpleSpmv_8hpp_source.html +++ /dev/null @@ -1,431 +0,0 @@ - - - - - - -Spark: include/Spark/SimpleSpmv.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
SimpleSpmv.hpp
-
-
-Go to the documentation of this file.
1 #ifndef SIMPLESPMV_H
-
2 #define SIMPLESPMV_H
-
3 
-
4 #include <sstream>
-
5 
-
6 #include <Spark/Spmv.hpp>
-
7 #include <Spark/Utils.hpp>
-
8 #include <Spark/Model.hpp>
- -
10 
-
11 
-
12 namespace spark {
-
13  namespace spmv {
-
14 
-
15  using EigenSparseMatrix = Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>;
-
16 
-
17  // pack values and colptr to reduce number of streams
-
18 #pragma pack(1)
-
19  struct indptr_value {
-
20  double value;
-
21  int indptr;
-
22  indptr_value(double _value, int _indptr) : value(_value), indptr(_indptr) {}
-
23  indptr_value() : value(0), indptr(0) {}
-
24  } __attribute__((packed));
-
25 #pragma pack()
-
26 
-
27  struct Partition {
- - - - -
32  std::vector<int> m_colptr;
-
33  std::vector<indptr_value> m_indptr_values;
-
34 
-
35  std::string to_string() {
-
36  std::stringstream s;
-
37  s << "Vector load cycles " << vector_load_cycles << std::endl;
-
38  s << "Padding cycles = " << paddingCycles << std::endl;
-
39  s << "Total cycles = " << totalCycles << std::endl;
-
40  s << "Nrows = " << n << std::endl;
-
41  s << "Partitions = " << nBlocks << std::endl;
-
42  s << "Reduction cycles = " << reductionCycles << std::endl;
-
43  std::cout << "Empty cycles = " << emptyCycles << std::endl;
-
44  return s.str();
-
45  }
-
46  };
-
47 
-
48  // A parameterised, generic architecture for SpMV. Supported parameters are:
-
49  // - input width
-
50  // - number of pipes
-
51  // - cache size per pipe
-
52  // - TODO data type
- -
54  // architecture specific properties
-
55  protected:
-
56 
-
57  // design parameters
- -
59 
- -
61  std::vector<Partition> partitions;
-
62 
-
63  virtual int countComputeCycles(uint32_t* v, int size, int inputWidth);
-
64 
-
65  virtual bool equals(const SpmvArchitecture& a) const override {
-
66  const SimpleSpmvArchitecture* other = dynamic_cast<const SimpleSpmvArchitecture*>(&a);
-
67  return other != nullptr && *other == *this;
-
68  }
-
69 
-
70  public:
-
71 
-
72  bool operator==(const SimpleSpmvArchitecture& other) const {
-
73  return
-
74  cacheSize == other.cacheSize &&
-
75  inputWidth == other.inputWidth &&
-
76  numPipes == other.numPipes &&
-
77  maxRows == other.maxRows;
-
78  }
-
79 
-
80  virtual boost::property_tree::ptree write_params() override {
-
81  boost::property_tree::ptree tree;
-
82  tree.put("num_pipes", numPipes);
-
83  tree.put("cache_size", cacheSize);
-
84  tree.put("input_width", inputWidth);
-
85  tree.put("max_rows", maxRows);
-
86  return tree;
-
87  }
-
88 
- - - - - -
94 
-
95  SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
-
96  cacheSize(_cacheSize),
-
97  inputWidth(_inputWidth),
-
98  numPipes(_numPipes),
-
99  maxRows(_maxRows) {}
-
100 
-
101  virtual double getEstimatedClockCycles() {
-
102  auto res = std::max_element(partitions.begin(), partitions.end(),
-
103  [](const Partition& a, const Partition& b) {
-
104  return a.totalCycles < b.totalCycles;
-
105  });
-
106  return res->totalCycles;
-
107  }
-
108 
-
109  virtual double getGFlopsCount() {
-
110  return 2 * this->mat.nonZeros() / 1E9;
-
111  }
-
112 
-
113  // NOTE: only call this after a call to preprocessMatrix
- -
115  // XXX bram usage for altera in double precision only (512 deep, 40 bits wide, so need 2 BRAMs)
-
116  //int brams = (double)cacheSize * (double)inputWidth / 512.0 * 2.0;
-
117  using namespace spark::model;
-
118 
-
119  // XXX these should be architecture params
-
120  int maxRows = (this->mat.rows() / 512) * 512;
-
121  const int virtex6EntriesPerBram = 512;
-
122 
-
123  LogicResourceUsage interPartitionReductionKernel(2768,1505, maxRows / virtex6EntriesPerBram, 0);
-
124  LogicResourceUsage paddingKernel{400, 500, 0, 0};
-
125  LogicResourceUsage spmvKernelPerInput{1466, 2060, cacheSize / virtex6EntriesPerBram, 10}; // includes cache
-
126  LogicResourceUsage sm{800, 500, 0, 0};
-
127 
-
128  LogicResourceUsage spmvPerPipe =
-
129  interPartitionReductionKernel +
-
130  paddingKernel +
-
131  spmvKernelPerInput * inputWidth +
-
132  sm;
-
133 
-
134  LogicResourceUsage memoryPerPipe{3922, 8393, 160, 0};
-
135  LogicResourceUsage memory{24000, 32000, 0, 0};
-
136 
-
137  //LogicResourceUsage designOther{};
-
138  LogicResourceUsage designUsage = (spmvPerPipe + memoryPerPipe) * numPipes + memory;
-
139 
-
140  double memoryBandwidth =(double)inputWidth * numPipes * getFrequency() * 12.0 / 1E9;
-
141  ImplementationParameters ip{designUsage, memoryBandwidth};
-
142  //ip.clockFrequency = getFrequency() / 1E6; // MHz
-
143  return ip;
-
144  }
-
145 
-
146  virtual std::string to_string() {
-
147  std::stringstream s;
-
148  s << get_name();
-
149  s << " " << cacheSize;
-
150  s << " " << inputWidth;
-
151  s << " " << numPipes;
-
152  s << " " << getEstimatedClockCycles();
-
153  s << " " << getEstimatedGFlops();
-
154  return s.str();
-
155  }
-
156 
-
157  virtual void preprocess(const EigenSparseMatrix& mat) override;
-
158 
-
159  virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) override;
-
160 
-
161  virtual std::string get_name() override {
-
162  return std::string("Simple");
-
163  }
-
164 
-
165  private:
-
166  std::vector<EigenSparseMatrix> do_partition(
-
167  const EigenSparseMatrix& mat,
-
168  int numPipes);
-
169 
- -
171  const Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>& mat,
-
172  int blockSize,
-
173  int inputWidth);
-
174  };
-
175 
-
176  template<typename T>
- -
178  // NOTE any raw pointers returned through the API of this class
-
179  // are assumed to be wrapped in smart pointers by the base class
-
180  spark::utils::Range cacheSizeR{1024, 4096, 512};
-
181  spark::utils::Range inputWidthR{8, 100, 8};
-
182  spark::utils::Range numPipesR{1, 6, 1};
-
183  int maxRows;
-
184 
-
185  bool last = false;
-
186 
-
187  public:
-
188 
- -
190  spark::utils::Range numPipesRange,
-
191  spark::utils::Range inputWidthRange,
-
192  spark::utils::Range cacheSizeRange,
-
193  int _maxRows) {
-
194  cacheSizeR = cacheSizeRange;
-
195  inputWidthR = inputWidthRange;
-
196  numPipesR = numPipesRange;
-
197  maxRows = _maxRows;
-
198  }
-
199 
- -
201  }
-
202 
-
203  protected:
-
204  void restart() override {
-
205  cacheSizeR.restart();
-
206  inputWidthR.restart();
-
207  numPipesR.restart();
-
208  last = false;
-
209  }
-
210 
-
211  T* doNext(){
-
212  if (last)
-
213  return nullptr;
-
214 
-
215  T* result = new T(cacheSizeR.crt, inputWidthR.crt, numPipesR.crt, maxRows);
-
216 
-
217  ++cacheSizeR;
-
218  if (cacheSizeR.at_start()) {
-
219  ++inputWidthR;
-
220  if (inputWidthR.at_start()) {
-
221  ++numPipesR;
-
222  if (numPipesR.at_start())
-
223  last = true;
-
224  }
-
225  }
-
226 
-
227  return result;
-
228  }
-
229  };
-
230 
-
231 
-
232  // FST based architecture, for now we assume it's the same though it probably isn't
- -
234  protected:
-
235 
-
236  virtual int countComputeCycles(uint32_t* v, int size, int inputWidth) override {
-
237  int cycles = 0;
-
238  for (int i = 0; i < size; i++) {
-
239  int toread = v[i] - (i > 0 ? v[i - 1] : 0);
-
240  do {
-
241  toread -= std::min(toread, inputWidth);
-
242  cycles++;
-
243  } while (toread > 0);
-
244  }
-
245  return cycles;
-
246  }
-
247 
-
248  public:
- -
250 
-
251  FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
-
252  SimpleSpmvArchitecture(_cacheSize, _inputWidth, _numPipes, _maxRows) {}
-
253 
-
254  virtual std::string get_name() override {
-
255  return std::string("Fst");
-
256  }
-
257 
-
258  };
-
259 
-
260  // Model for an architecture which can skip sequences of empty rows
- -
262  protected:
-
263 
-
264  std::vector<uint32_t> encodeEmptyRows(std::vector<uint32_t> pin, bool encode) {
-
265  std::vector<uint32_t> encoded;
-
266  if (!encode) {
-
267  return pin;
-
268  }
-
269 
-
270  int emptyRunLength = 0;
-
271  for (size_t i = 0; i < pin.size(); i++) {
-
272  uint32_t rowLength = pin[i] - (i == 0 ? 0 : pin[i - 1]);
-
273  if (rowLength == 0) {
-
274  emptyRunLength++;
-
275  } else {
-
276  if (emptyRunLength != 0) {
-
277  encoded.push_back(emptyRunLength | (1 << 31));
-
278  }
-
279  emptyRunLength = 0;
-
280  encoded.push_back(pin[i]);
-
281  }
-
282  }
-
283 
-
284  if (emptyRunLength != 0) {
-
285  encoded.push_back(emptyRunLength | (1 << 31));
-
286  }
-
287 
-
288  return encoded;
-
289  }
-
290 
- -
292  const spark::sparse::CsrMatrix& in,
-
293  int blockNumber,
-
294  int nBlocks) override {
-
295  bool encode = blockNumber != 0 && blockNumber != nBlocks - 1;
-
296  return std::make_tuple(
-
297  encodeEmptyRows(std::get<0>(in), encode),
-
298  std::get<1>(in),
-
299  std::get<2>(in));
-
300  }
-
301 
-
302  public:
- -
304 
-
305  SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
-
306  SimpleSpmvArchitecture(_cacheSize, _inputWidth, _numPipes, maxRows) {}
-
307 
-
308  virtual std::string get_name() override {
-
309  return std::string("SkipEmpty");
-
310  }
-
311  };
-
312 
- -
314  protected:
-
315 
-
316  public:
- -
318 
-
319  PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
-
320  SkipEmptyRowsArchitecture(_cacheSize, _inputWidth, _numPipes, _maxRows) {}
-
321 
-
322  virtual std::string get_name() override {
-
323  return std::string("PrefetchingArchitecture");
-
324  }
-
325  };
-
326 
-
327  }
-
328 }
-
329 
-
330 
-
331 #endif /* end of include guard: SIMPLESPMV_H */
-
- - - - diff --git a/SparseLinearSolvers_8cpp.html b/SparseLinearSolvers_8cpp.html deleted file mode 100644 index efa9960..0000000 --- a/SparseLinearSolvers_8cpp.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - -Spark: src/SparseLinearSolvers.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SparseLinearSolvers.cpp File Reference
-
-
-
#include <Spark/SparseLinearSolvers.hpp>
-#include <iostream>
-#include <Eigen/Sparse>
-
- - - - - - - -

-Functions

Eigen::VectorXd solveBICG (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd solveLU (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd solveCG (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
Eigen::VectorXd solveBICG (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
Eigen::VectorXd solveCG (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
Eigen::VectorXd solveLU (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
- -
-
-
- - - - diff --git a/SparseLinearSolvers_8hpp.html b/SparseLinearSolvers_8hpp.html deleted file mode 100644 index 0d82bf1..0000000 --- a/SparseLinearSolvers_8hpp.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - -Spark: include/Spark/SparseLinearSolvers.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SparseLinearSolvers.hpp File Reference
-
-
-
#include <Eigen/Sparse>
-
-

Go to the source code of this file.

- - - - - - - - - - -

-Classes

class  spark::sparse_linear_solvers::Solver
 
class  spark::sparse_linear_solvers::EigenSolver
 
class  spark::sparse_linear_solvers::DfeCgSolver
 
class  spark::sparse_linear_solvers::DfeBiCgSolver
 
- - - - - -

-Namespaces

namespace  spark
 
namespace  spark::sparse_linear_solvers
 
-
- - - - diff --git a/SparseLinearSolvers_8hpp_source.html b/SparseLinearSolvers_8hpp_source.html deleted file mode 100644 index d334fb9..0000000 --- a/SparseLinearSolvers_8hpp_source.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - - -Spark: include/Spark/SparseLinearSolvers.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
SparseLinearSolvers.hpp
-
-
-Go to the documentation of this file.
1 #ifndef SPARSE_LINEAR_SOLVERS_HPP
-
2 #define SPARSE_LINEAR_SOLVERS_HPP
-
3 
-
4 #include <Eigen/Sparse>
-
5 
-
6 namespace spark {
-
7  namespace sparse_linear_solvers {
-
8 
-
9  class Solver {
-
10  public:
-
11  virtual void analyze(
-
12  const Eigen::SparseMatrix<double> &A) {
-
13  }
-
14 
-
15  virtual void preprocess(
-
16  const Eigen::SparseMatrix<double> &A) {
-
17  }
-
18 
-
19  virtual Eigen::VectorXd solve(
-
20  const Eigen::SparseMatrix<double>& A,
-
21  const Eigen::VectorXd& b) = 0;
-
22  };
-
23 
-
24  class EigenSolver: public Solver {
-
25  public:
-
26  virtual Eigen::VectorXd solve(
-
27  const Eigen::SparseMatrix<double>& A,
-
28  const Eigen::VectorXd& b);
-
29  };
-
30 
-
31  class DfeCgSolver: public Solver {
-
32  public:
-
33  virtual Eigen::VectorXd solve(
-
34  const Eigen::SparseMatrix<double>& A,
-
35  const Eigen::VectorXd& b);
-
36  };
-
37 
-
38  class DfeBiCgSolver: public Solver {
-
39  public:
-
40  virtual Eigen::VectorXd solve(
-
41  const Eigen::SparseMatrix<double>& A,
-
42  const Eigen::VectorXd& b);
-
43  };
-
44  }
-
45 }
-
46 
-
47 #endif /* end of include guard: SPARSE_LINEAR_SOLVERS_HPP */
-
48 
-
- - - - diff --git a/SparseMatrix_8hpp.html b/SparseMatrix_8hpp.html deleted file mode 100644 index 710397b..0000000 --- a/SparseMatrix_8hpp.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -Spark: include/Spark/SparseMatrix.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SparseMatrix.hpp File Reference
-
-
-
#include <Eigen/Sparse>
-
-

Go to the source code of this file.

- - - - -

-Classes

class  spark::sparse::SparkCooMatrix< value_type >
 
- - - - - -

-Namespaces

namespace  spark
 
namespace  spark::sparse
 
- - - - - -

-Typedefs

using spark::sparse::CsrMatrix = std::tuple< std::vector< uint32_t >, std::vector< int >, std::vector< double >>
 
using spark::sparse::PartitionedCsrMatrix = std::vector< CsrMatrix >
 
-
- - - - diff --git a/SparseMatrix_8hpp_source.html b/SparseMatrix_8hpp_source.html deleted file mode 100644 index 90ebf43..0000000 --- a/SparseMatrix_8hpp_source.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -Spark: include/Spark/SparseMatrix.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
SparseMatrix.hpp
-
-
-Go to the documentation of this file.
1 #ifndef SPARSEMATRIX_HPP_1BWMMLC8
-
2 #define SPARSEMATRIX_HPP_1BWMMLC8
-
3 
-
4 #include <Eigen/Sparse>
-
5 
-
6 namespace spark {
-
7  namespace sparse {
-
8 
-
9  using CsrMatrix = std::tuple<std::vector<uint32_t>, std::vector<int>, std::vector<double>>;
-
10 
-
11  using PartitionedCsrMatrix = std::vector<CsrMatrix>;
-
12 
-
13  template<typename value_type>
- -
15 
-
16  public:
-
17  using CoordType = std::tuple<int, int, value_type>;
-
18 
-
19  int n, m;
-
20  std::vector<CoordType> data;
-
21 
-
22  SparkCooMatrix(int _n, int _m) : n(_n), m(_m) {}
-
23  };
-
24  }
-
25 }
-
26 
-
27 #endif /* end of include guard: SPARSEMATRIX_HPP_1BWMMLC8 */
-
- - - - diff --git a/SpmvDeviceInterfaceMock_8cpp.html b/SpmvDeviceInterfaceMock_8cpp.html deleted file mode 100644 index e70ffb3..0000000 --- a/SpmvDeviceInterfaceMock_8cpp.html +++ /dev/null @@ -1,377 +0,0 @@ - - - - - - -Spark: src/device/SpmvDeviceInterfaceMock.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SpmvDeviceInterfaceMock.cpp File Reference
-
-
- - - - - - - - - - - - - - - - - - - - -

-Functions

int getSpmv_PartitionSize ()
 
int getSpmv_InputWidth ()
 
int getSpmv_NumPipes ()
 
int getSpmv_MaxRows ()
 
bool getDramReductionEnabled ()
 
void Spmv_dramWrite (int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
 Basic static function for the interface 'dramWrite'. More...
 
void Spmv_dramRead (int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
 Basic static function for the interface 'dramRead'. More...
 
void Spmv (int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int32_t *param_outResultSizes, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
 
-

Function Documentation

- -
-
- - - - - - - -
bool getDramReductionEnabled ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_InputWidth ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_MaxRows ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_NumPipes ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_PartitionSize ()
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Spmv (int64_t param_nIterations,
int64_t param_nPartitions,
int64_t param_vectorLoadCycles,
const int64_t * param_colPtrStartAddresses,
const int32_t * param_colptrSizes,
const int64_t * param_indptrValuesAddresses,
const int32_t * param_indptrValuesSizes,
const int32_t * param_nrows,
const int32_t * param_outResultSizes,
const int64_t * param_outStartAddresses,
const int32_t * param_reductionCycles,
const int32_t * param_totalCycles,
const int64_t * param_vStartAddresses 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void Spmv_dramRead (int64_t param_size_bytes,
int64_t param_start_bytes,
uint8_t * outstream_tocpu 
)
-
- -

Basic static function for the interface 'dramRead'.

-
Parameters
- - - - -
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[out]outstream_tocpuThe stream should be of size param_size_bytes bytes.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void Spmv_dramWrite (int64_t param_size_bytes,
int64_t param_start_bytes,
const uint8_t * instream_fromcpu 
)
-
- -

Basic static function for the interface 'dramWrite'.

-
Parameters
- - - - -
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[in]instream_fromcpuThe stream should be of size param_size_bytes bytes.
-
-
- -
-
-
- - - - diff --git a/SpmvDeviceInterface_8cpp.html b/SpmvDeviceInterface_8cpp.html deleted file mode 100644 index fa45fb2..0000000 --- a/SpmvDeviceInterface_8cpp.html +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - -Spark: src/spmv/src/SpmvDeviceInterface.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SpmvDeviceInterface.cpp File Reference
-
-
-
#include <Spark/device/SpmvDeviceInterface.h>
-#include <Spmv.h>
-
- - - - - - - - - - - -

-Functions

int getSpmv_InputWidth ()
 
int getSpmv_NumPipes ()
 
int getSpmv_MaxRows ()
 
int getSpmv_PartitionSize ()
 
bool getDramReductionEnabled ()
 
-

Function Documentation

- -
-
- - - - - - - -
bool getDramReductionEnabled ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_InputWidth ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_MaxRows ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_NumPipes ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_PartitionSize ()
-
- -
-
-
- - - - diff --git a/SpmvDeviceInterface_8h.html b/SpmvDeviceInterface_8h.html deleted file mode 100644 index 5035aa6..0000000 --- a/SpmvDeviceInterface_8h.html +++ /dev/null @@ -1,398 +0,0 @@ - - - - - - -Spark: include/Spark/device/SpmvDeviceInterface.h File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SpmvDeviceInterface.h File Reference
-
-
-
#include <cstdint>
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - -

-Functions

int getSpmv_PartitionSize ()
 
int getSpmv_InputWidth ()
 
int getSpmv_NumPipes ()
 
int getSpmv_MaxRows ()
 
bool getDramReductionEnabled ()
 
void Spmv_dramWrite (int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
 Basic static function for the interface 'dramWrite'. More...
 
void Spmv_dramRead (int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
 Basic static function for the interface 'dramRead'. More...
 
void Spmv (int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
 Basic static function for the interface 'default'. More...
 
-

Function Documentation

- -
-
- - - - - - - -
bool getDramReductionEnabled ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_InputWidth ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_MaxRows ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_NumPipes ()
-
- -
-
- -
-
- - - - - - - -
int getSpmv_PartitionSize ()
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Spmv (int64_t param_nIterations,
int64_t param_nPartitions,
int64_t param_vectorLoadCycles,
const int64_t * param_colPtrStartAddresses,
const int32_t * param_colptrSizes,
const int64_t * param_indptrValuesAddresses,
const int32_t * param_indptrValuesSizes,
const int32_t * param_nrows,
const int64_t * param_outStartAddresses,
const int32_t * param_reductionCycles,
const int32_t * param_totalCycles,
const int64_t * param_vStartAddresses 
)
-
- -

Basic static function for the interface 'default'.

-
Parameters
- - - - - - - - - - - - - - - - - - -
[in]param_nIterationsInterface Parameter "nIterations".
[in]param_nPartitionsInterface Parameter "nPartitions".
[in]param_vectorLoadCyclesInterface Parameter "vectorLoadCycles".
[in]param_vectorSizeInterface Parameter "vectorSize".
[in]param_colPtrStartAddressesInterface Parameter array colPtrStartAddresses[] should be of size 1.
[in]param_colptrSizesInterface Parameter array colptrSizes[] should be of size 1.
[in]param_colptrUnpaddedlengthsInterface Parameter array colptrUnpaddedlengths[] should be of size 1.
[in]param_indptrValuesAddressesInterface Parameter array indptrValuesAddresses[] should be of size 1.
[in]param_indptrValuesSizesInterface Parameter array indptrValuesSizes[] should be of size 1.
[in]param_indptrValuesUnpaddedLengthsInterface Parameter array indptrValuesUnpaddedLengths[] should be of size 1.
[in]param_nrowsInterface Parameter array nrows[] should be of size 1.
[in]param_outResultSizesInterface Parameter array outResultSizes[] should be of size 1.
[in]param_outStartAddressesInterface Parameter array outStartAddresses[] should be of size 1.
[in]param_paddingCyclesInterface Parameter array paddingCycles[] should be of size 1.
[in]param_reductionCyclesInterface Parameter array reductionCycles[] should be of size 1.
[in]param_totalCyclesInterface Parameter array totalCycles[] should be of size 1.
[in]param_vStartAddressesInterface Parameter array vStartAddresses[] should be of size 1.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void Spmv_dramRead (int64_t param_size_bytes,
int64_t param_start_bytes,
uint8_t * outstream_tocpu 
)
-
- -

Basic static function for the interface 'dramRead'.

-
Parameters
- - - - -
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[out]outstream_tocpuThe stream should be of size param_size_bytes bytes.
-
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void Spmv_dramWrite (int64_t param_size_bytes,
int64_t param_start_bytes,
const uint8_t * instream_fromcpu 
)
-
- -

Basic static function for the interface 'dramWrite'.

-
Parameters
- - - - -
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[in]instream_fromcpuThe stream should be of size param_size_bytes bytes.
-
-
- -
-
-
- - - - diff --git a/SpmvDeviceInterface_8h_source.html b/SpmvDeviceInterface_8h_source.html deleted file mode 100644 index 419d879..0000000 --- a/SpmvDeviceInterface_8h_source.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Spark: include/Spark/device/SpmvDeviceInterface.h Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
SpmvDeviceInterface.h
-
-
-Go to the documentation of this file.
1 #ifdef __cplusplus
-
2 extern "C" {
-
3 #endif /* __cplusplus */
-
4 #include <cstdint>
-
5 
-
6 // access device parameters
- - -
9 int getSpmv_NumPipes();
-
10 int getSpmv_MaxRows();
- -
12 
-
13 
-
21 void Spmv_dramWrite(
-
22  int64_t param_size_bytes,
-
23  int64_t param_start_bytes,
-
24  const uint8_t *instream_fromcpu);
-
25 
-
26 
-
34 void Spmv_dramRead(
-
35  int64_t param_size_bytes,
-
36  int64_t param_start_bytes,
-
37  uint8_t *outstream_tocpu);
-
38 
-
39 
-
61 void Spmv(
-
62  int64_t param_nIterations,
-
63  int64_t param_nPartitions,
-
64  int64_t param_vectorLoadCycles,
-
65  const int64_t *param_colPtrStartAddresses,
-
66  const int32_t *param_colptrSizes,
-
67  const int64_t *param_indptrValuesAddresses,
-
68  const int32_t *param_indptrValuesSizes,
-
69  const int32_t *param_nrows,
-
70  const int64_t *param_outStartAddresses,
-
71  const int32_t *param_reductionCycles,
-
72  const int32_t *param_totalCycles,
-
73  const int64_t *param_vStartAddresses);
-
74 
-
75 #ifdef __cplusplus
-
76 }
-
77 #endif /* __cplusplus */
-
- - - - diff --git a/SpmvKernel_8java.html b/SpmvKernel_8java.html deleted file mode 100644 index 3c16919..0000000 --- a/SpmvKernel_8java.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -Spark: src/spmv/src/SpmvKernel.java File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SpmvKernel.java File Reference
-
-
- - - - - - - - - - - - - - - - -

-Classes

class  SpmvKernel
 
class  SpmvCacheKernel
 
class  SpmvReductionKernel
 
class  DramSpmvReductionKernel
 
class  BramSpmvReductionKernel
 
class  PaddingKernel
 
class  UnpaddingKernel
 
-
- - - - diff --git a/SpmvManager_8java.html b/SpmvManager_8java.html deleted file mode 100644 index ec6b7a1..0000000 --- a/SpmvManager_8java.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -Spark: src/spmv/src/SpmvManager.java File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
SpmvManager.java File Reference
-
-
- - - - -

-Classes

class  SpmvManager
 
-
- - - - diff --git a/Spmv_8cpp.html b/Spmv_8cpp.html deleted file mode 100644 index 70fbfb0..0000000 --- a/Spmv_8cpp.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - -Spark: src/spmv/src/Spmv.cpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
Spmv.cpp File Reference
-
-
-
#include <Spark/Spmv.hpp>
-#include <Spark/SimpleSpmv.hpp>
-#include <Spark/Converters.hpp>
-#include <iostream>
-#include <tuple>
-#include <dfesnippets/VectorUtils.hpp>
-#include <dfesnippets/Timing.hpp>
-#include <Spark/device/SpmvDeviceInterface.h>
-
- - - -

-Classes

struct  PartitionWriteResult
 
- - - -

-Typedefs

using ssarch = spark::spmv::SimpleSpmvArchitecture
 
- - - - - - - - -

-Functions

template<typename T >
long size_bytes (const std::vector< T > &v)
 
int align (int bytes, int to)
 
PartitionWriteResult writeDataForPartition (int offset, const Partition &br, const std::vector< double > &v)
 
-

Typedef Documentation

- -
-
- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
int align (int bytes,
int to 
)
-
- -
-
- -
-
-
-template<typename T >
- - - - - - - - -
long size_bytes (const std::vector< T > & v)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
PartitionWriteResult writeDataForPartition (int offset,
const Partition & br,
const std::vector< double > & v 
)
-
- -
-
-
- - - - diff --git a/Spmv_8hpp.html b/Spmv_8hpp.html deleted file mode 100644 index 74d5cf2..0000000 --- a/Spmv_8hpp.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - -Spark: include/Spark/Spmv.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
Spmv.hpp File Reference
-
-
-
#include <Spark/SparseMatrix.hpp>
-#include <Spark/Model.hpp>
-#include <boost/property_tree/ptree.hpp>
-#include <Eigen/Sparse>
-
-

Go to the source code of this file.

- - - - - - -

-Classes

class  spark::spmv::SpmvArchitecture
 
class  spark::spmv::SpmvArchitectureSpace
 
- - - - - -

-Namespaces

namespace  spark
 
namespace  spark::spmv
 
- - - - - - -

-Functions

std::ostream & spark::spmv::operator<< (std::ostream &s, SpmvArchitecture &a)
 
template<typename T >
void spark::spmv::align (std::vector< T > &v, int widthInBytes)
 
-
- - - - diff --git a/Spmv_8hpp_source.html b/Spmv_8hpp_source.html deleted file mode 100644 index b1d55e2..0000000 --- a/Spmv_8hpp_source.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - -Spark: include/Spark/Spmv.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
Spmv.hpp
-
-
-Go to the documentation of this file.
1 #ifndef SPMV_H
-
2 #define SPMV_H
-
3 
-
4 #include <Spark/SparseMatrix.hpp>
-
5 #include <Spark/Model.hpp>
-
6 #include <boost/property_tree/ptree.hpp>
-
7 #include <Eigen/Sparse>
-
8 
-
9 namespace spark {
-
10  namespace spmv {
-
11 
-
12  // A generic architecture for SpMV
- -
14 
-
15  public:
-
16  double getEstimatedGFlops() {
- -
18  }
-
19 
-
20  double getFrequency() {
-
21  return 100 * 1E6;
-
22  }
-
23 
-
24  virtual double getEstimatedClockCycles() = 0;
-
25  virtual double getGFlopsCount() = 0;
-
26  virtual std::string to_string() = 0;
- -
28  virtual void preprocess(const Eigen::SparseMatrix<double, Eigen::RowMajor>& mat) = 0;
-
29  virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) = 0;
-
30  virtual std::string get_name() = 0;
-
31  virtual boost::property_tree::ptree write_params() = 0;
-
32  bool operator==(const SpmvArchitecture& other) {
-
33  return equals(other);
-
34  }
-
35 
-
36  virtual ~SpmvArchitecture() {}
-
37 
-
38  protected:
- -
40  const spark::sparse::CsrMatrix& in,
-
41  int blockNumber,
-
42  int nBlocks) {
-
43  return in;
-
44  }
-
45  virtual bool equals(const SpmvArchitecture& a) const = 0;
-
46  };
-
47 
-
48  inline std::ostream& operator<<(std::ostream& s, SpmvArchitecture& a) {
-
49  s << " Estimated clock cycles = " << a.getEstimatedClockCycles();
-
50  return s;
-
51  }
-
52 
-
53  // An ArchitectureSpace provides a simple way to iterate over the design space
-
54  // of an architecture, abstracting the details of the architecture's parameters
-
55  // XXX actually implemnt the STL iterator (if it makes sense?)
- -
57  public:
-
58  std::shared_ptr<SpmvArchitecture> next() {
-
59  return std::shared_ptr<SpmvArchitecture>(doNext());
-
60  }
-
61 
-
62  // restart the exploration process
-
63  virtual void restart() = 0;
-
64 
-
65  protected:
-
66  // returns nullptr if at end
-
67  virtual SpmvArchitecture* doNext() = 0;
-
68  };
-
69 
-
70  template<typename T>
-
71  void align(std::vector<T>& v, int widthInBytes) {
-
72  int limit = widthInBytes / sizeof(T);
-
73  while ((v.size() * sizeof(T)) % widthInBytes != 0 && limit != 0) {
-
74  v.push_back(T{});
-
75  limit--;
-
76  }
-
77  }
-
78 
-
79 }
-
80 }
-
81 
-
82 
-
83 #endif /* end of include guard: SPMV_H */
-
- - - - diff --git a/UserInput_8hpp.html b/UserInput_8hpp.html deleted file mode 100644 index ddd6aee..0000000 --- a/UserInput_8hpp.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -Spark: include/Spark/UserInput.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
UserInput.hpp File Reference
-
-
-
#include <vector>
-#include <boost/algorithm/string.hpp>
-#include <unordered_map>
-
-

Go to the source code of this file.

- - - - - - -

-Namespaces

namespace  spark
 
namespace  spark::userio
 
- - - -

-Typedefs

using spark::userio::UserInputParams = std::unordered_map< std::string, int >
 
- - - -

-Functions

UserInputParams spark::userio::parseBuildParams (std::string params)
 
-
- - - - diff --git a/UserInput_8hpp_source.html b/UserInput_8hpp_source.html deleted file mode 100644 index bfc9acb..0000000 --- a/UserInput_8hpp_source.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -Spark: include/Spark/UserInput.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
UserInput.hpp
-
-
-Go to the documentation of this file.
1 #ifndef USERINPUT_H
-
2 
-
3 #define USERINPUT_H
-
4 
-
5 #include <vector>
-
6 #include <boost/algorithm/string.hpp>
-
7 #include <unordered_map>
-
8 
-
9 namespace spark {
-
10  namespace userio {
-
11 
-
12  using UserInputParams = std::unordered_map<std::string, int>;
-
13 
-
14  inline UserInputParams parseBuildParams(std::string params) {
-
15  std::string delimiters("= ");
-
16  std::vector<std::string> parts;
-
17  boost::split(parts, params, boost::is_any_of(delimiters));
-
18  for (auto s : parts)
-
19  std::cout << s << std::endl;
-
20  // TODO need a more flexible approach
-
21  // for now we assume we have -> param + int value pairs
-
22  UserInputParams buildParams;
-
23 
-
24  bool param_name = true;
-
25  std::cout << "parts size " << parts.size() << std::endl;
-
26  for (int i = 0; i < parts.size(); i+=2) {
-
27  buildParams.insert(std::make_pair(parts[i], std::stoi(parts[i + 1])));
-
28  }
-
29 
-
30  return buildParams;
-
31  }
-
32 
-
33  }
-
34 };
-
35 
-
36 
-
37 
-
38 
-
39 #endif /* end of include guard: USERINPUT_H */
-
- - - - diff --git a/Utils_8hpp.html b/Utils_8hpp.html deleted file mode 100644 index d25831b..0000000 --- a/Utils_8hpp.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - -Spark: include/Spark/Utils.hpp File Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
Utils.hpp File Reference
-
-
-
#include <string>
-#include <vector>
-#include <sstream>
-#include <iostream>
-#include <boost/algorithm/string.hpp>
-
-

Go to the source code of this file.

- - - - -

-Classes

struct  spark::utils::Range
 
- - - - - -

-Namespaces

namespace  spark
 
namespace  spark::utils
 
- - - -

-Functions

std::ostream & spark::utils::operator<< (std::ostream &s, const Range &r)
 
-
- - - - diff --git a/Utils_8hpp_source.html b/Utils_8hpp_source.html deleted file mode 100644 index cbd7dac..0000000 --- a/Utils_8hpp_source.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -Spark: include/Spark/Utils.hpp Source File - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
Utils.hpp
-
-
-Go to the documentation of this file.
1 #ifndef UTILS_HPP_DASDASD
-
2 #define UTILS_HPP_DASDASD
-
3 
-
4 #include <string>
-
5 #include <vector>
-
6 #include <sstream>
-
7 #include <iostream>
-
8 
-
9 #include <boost/algorithm/string.hpp>
-
10 
-
11 namespace spark {
-
12  namespace utils {
-
13  struct Range {
-
14  int start, end, step, crt;
-
15  Range(int _s, int _e, int _stp) : start(_s), end(_e), step(_stp), crt(_s) {}
-
16  Range(std::string range) {
-
17  std::vector<std::string> strs;
-
18  if (range.find(",") != std::string::npos) {
-
19  // assume a (start, end, step) range format
-
20  boost::split(strs, range, boost::is_any_of(","));
-
21  start = std::stoi(strs[0]);
-
22  end = std::stoi(strs[1]);
-
23  step = std::stoi(strs[2]);
-
24  } else {
-
25  // assume a single element range (start, start + 1, 1)
-
26  start = std::stoi(range);
-
27  end = start + 1;
-
28  step = 1;
-
29  }
-
30 
-
31  crt = start;
-
32  }
-
33 
-
34  std::string to_string() {
-
35  std::stringstream ss;
-
36  ss << start << ", " << end << ", " << step;
-
37  return ss.str();
-
38  }
-
39 
-
40  void restart() {
-
41  crt = start;
-
42  }
-
43 
-
44  bool at_start() {
-
45  return crt == start;
-
46  }
-
47 
-
48  int operator++() {
-
49  crt = crt + step;
-
50  if (crt == end) {
-
51  crt = start;
-
52  }
-
53  return crt;
-
54  }
-
55  };
-
56 
-
57  inline std::ostream& operator<<(std::ostream& s, const Range& r) {
-
58  std::cout << "Range{";
-
59  std::cout << r.start << "," << r.end << "," << r.step << "}";
-
60  return s;
-
61  }
-
62  }
-
63 }
-
64 
-
65 #endif /* end of include guard: UTILS_H */
-
- - - - diff --git a/annotated.html b/annotated.html deleted file mode 100644 index 6de2542..0000000 --- a/annotated.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - - - -Spark: Class List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - -
- - - - -
- -
- -
-
-
Class List
-
- - - - - diff --git a/bc_s.png b/bc_s.png deleted file mode 100644 index 224b29aa9847d5a4b3902efd602b7ddf7d33e6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT diff --git a/bdwn.png b/bdwn.png deleted file mode 100644 index 940a0b950443a0bb1b216ac03c45b8a16c955452..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
BramSpmvReductionKernel Member List
-
-
- -

This is the complete list of members for BramSpmvReductionKernel, including all inherited members.

- - -
BramSpmvReductionKernel(KernelParameters parameters, int fpl, int maxRows, boolean dbg)BramSpmvReductionKernelinlineprotected
- - - - diff --git a/classBramSpmvReductionKernel.html b/classBramSpmvReductionKernel.html deleted file mode 100644 index 7d46603..0000000 --- a/classBramSpmvReductionKernel.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -Spark: BramSpmvReductionKernel Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
BramSpmvReductionKernel Class Reference
-
-
-
-Inheritance diagram for BramSpmvReductionKernel:
-
-
- - - -
- - - - -

-Protected Member Functions

 BramSpmvReductionKernel (KernelParameters parameters, int fpl, int maxRows, boolean dbg)
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
BramSpmvReductionKernel.BramSpmvReductionKernel (KernelParameters parameters,
int fpl,
int maxRows,
boolean dbg 
)
-
-inlineprotected
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classBramSpmvReductionKernel.png b/classBramSpmvReductionKernel.png deleted file mode 100644 index c02c70344562171b5b7f32350c93710da4ad3860..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^OMy6mgBeKruX1$)QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;O$K zUz{4!FBR+fS(P2V;1(|0skVQ{OkaLA&&k5mCOvVE@S4QWH!b@>>Z$X~KWyB?H}i;5 z>Yn-8FKcR-KK`1_ciOio{i5Hi=uEEDTXKw6rmLOa+c<6hIism*ujbjVh(6s}wddBo z%5t0c?;rk~v+TI)OMAGfiJG2vHpecV$th!)Q_1LaURfu8y?Tb-p-;L$8P29hxb-tv z2u@?LYf)|BPvm^y9KrNM04MkG`>iI%v*maaiVg`KXy3r{K{0w+7?VWd&!-u09=xl222d_5@2JD}H>ucD&sC84fn7!Q4RVB{%wRYmQ$6J=X{5efOqU*P@ zKKpg&&pW={GFsKiJ}tFLwUYn-rCU|$k$$fy1g&Yld{Zpi|887GS^Tup)sxK6*B!IT z{CV2F$~VS(-By{jId3Z7O}q6eCwA5sn>Ws~%l7Ql5B3f_*?i9?YMX7GU7xydbGYq2TS>lY4BKm7{|^Cr v|3mpShWiRSj5QqI4D!>SZ<%@X$sfjJF{ybOCEH7Yan9iB>gTe~DWM4fh+z(J diff --git a/classDramSpmvReductionKernel-members.html b/classDramSpmvReductionKernel-members.html deleted file mode 100644 index 15943c6..0000000 --- a/classDramSpmvReductionKernel-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
DramSpmvReductionKernel Member List
-
-
- -

This is the complete list of members for DramSpmvReductionKernel, including all inherited members.

- - -
DramSpmvReductionKernel(KernelParameters parameters)DramSpmvReductionKernelinlineprotected
- - - - diff --git a/classDramSpmvReductionKernel.html b/classDramSpmvReductionKernel.html deleted file mode 100644 index 6ed552c..0000000 --- a/classDramSpmvReductionKernel.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -Spark: DramSpmvReductionKernel Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
DramSpmvReductionKernel Class Reference
-
-
-
-Inheritance diagram for DramSpmvReductionKernel:
-
-
- - - -
- - - - -

-Protected Member Functions

 DramSpmvReductionKernel (KernelParameters parameters)
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - -
DramSpmvReductionKernel.DramSpmvReductionKernel (KernelParameters parameters)
-
-inlineprotected
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classDramSpmvReductionKernel.png b/classDramSpmvReductionKernel.png deleted file mode 100644 index c51a5ccbb9927c24b56505664636031e71cbe934..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^%YZn5gBeIJnfuQXNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~-tcsB45?szJNM$GW(6Ks|G29E|NFyT z1tz?Dms8fYIkP&dSE&Esh43?Hp0Q6}a+A~7^OKT^>Pc?)v$_XUr`-=fQnegb#G%=KkBbZ05~B2@IQsXEDUJs5OYY8h;f&FyZ&& zyALnl^iB|wc45!tJ9}Et{3l!caW99zk;&ILTVAH%6cx&3OytO~q8TtM)dNX_0)vHx!m9JKx4ZNCX61_M- z`zr5x@RXch4X8DWA&2PUve!l1OmddLy z@BS*d#IoagaDC)L&Id>NO&RSRGngs_fj(XHdh5)aZ)zC7tV-jwnS9j(81D?8u6{1- HoD!M - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
PaddingKernel Member List
-
-
- -

This is the complete list of members for PaddingKernel, including all inherited members.

- - -
PaddingKernel(KernelParameters parameters)PaddingKernelinlineprotected
- - - - diff --git a/classPaddingKernel.html b/classPaddingKernel.html deleted file mode 100644 index 7fcb4dd..0000000 --- a/classPaddingKernel.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -Spark: PaddingKernel Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
PaddingKernel Class Reference
-
-
-
-Inheritance diagram for PaddingKernel:
-
-
- - - -
- - - - -

-Protected Member Functions

 PaddingKernel (KernelParameters parameters)
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - -
PaddingKernel.PaddingKernel (KernelParameters parameters)
-
-inlineprotected
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classPaddingKernel.png b/classPaddingKernel.png deleted file mode 100644 index a827051d731dbd4da8c454e933521aad07de323a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^@jx8F!3-oljzkIpDTx4|5ZC|z{{xvX-h3_XKQsZz z0^Bu^K|kP61Pa|0(gEAX(H>;L`t-+rIg z0*+&^u52kT-|{9yQAaRnzM(NU%j6{nZSj+8_Pw3&&hH#|#{QxG#7333MTh1y&09LB z?)?1{`}lib(`yr>40LDhzV~H$NNUh&+kZtzE-(MMd|maq?JlN2?+4jmO>=p3ev|ZF z%R2$~lfLjB*7vjnVfhcUXC7rNXk~X$IQZ|la#>@-|6uuD4qN_TzkdD$vy8zX2D`)j z4~$W$&+q@Fr8OonB=XodoIn2O<%Y(sQzt%MCuwyiXXc)$TasTn0=BPw|Knh6eO*t? z&X-2pchy%e6Pmlva#7UY&(Almd>eNv_L{!uRl%#%-o5*8wraN7ZmIuW&)44!%m43mnI0J5JI`QOe;_|i>^Q&2Mav0V+XFuXV}QZa)z4*}Q$iB}Ne|>S diff --git a/classParallelCsrReadControl-members.html b/classParallelCsrReadControl-members.html deleted file mode 100644 index b2fed6e..0000000 --- a/classParallelCsrReadControl-members.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
ParallelCsrReadControl Member List
-
-
- -

This is the complete list of members for ParallelCsrReadControl, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
buildReadMask(DFEsmValue canread)ParallelCsrReadControlinlinepackage
canRead()ParallelCsrReadControlinlinepackage
cat(DFEsmValue...args)ParallelCsrReadControlinlinepackage
cat(DFEsmValue left, DFEsmValue right)ParallelCsrReadControlinlinepackage
crtPosParallelCsrReadControlprivate
cycleCounterParallelCsrReadControlprivate
dbgParallelCsrReadControlprivate
firstReadPositionParallelCsrReadControlprivate
fls()ParallelCsrReadControlinlinepackage
iLengthParallelCsrReadControlprivate
iLengthReadyParallelCsrReadControlpackage
inputWidthParallelCsrReadControlprivate
iterationsProcessedParallelCsrReadControlprivate
makeCommand(DFEsmValue p_crtPos, DFEsmValue p_toread, DFEsmValue p_rowLengthData, DFEsmValue p_firstReadPosition, DFEsmValue p_cycleCounter)ParallelCsrReadControlinlinepackage
makeOutput(DFEsmValue readEnable, DFEsmValue rowFinished, DFEsmValue readMask, DFEsmValue rowLength, DFEsmValue cycleCounterP, DFEsmValue firstReadPositionP, DFEsmValue vectorLoad)ParallelCsrReadControlinlinepackage
min(DFEsmValue a, DFEsmValue b)ParallelCsrReadControlinlinepackage
modeParallelCsrReadControlprivate
needToRead()ParallelCsrReadControlinlinepackage
nextState()ParallelCsrReadControlinlineprotected
nIterationsParallelCsrReadControlpackage
nPartitionsParallelCsrReadControlpackage
nRowsParallelCsrReadControlpackage
oControlParallelCsrReadControlprivate
oControlDataParallelCsrReadControlprivate
one()ParallelCsrReadControlinlinepackage
outputFunction()ParallelCsrReadControlinlineprotected
outputNotStall()ParallelCsrReadControlinlinepackage
outValidParallelCsrReadControlprivate
ParallelCsrReadControl(DFEManager owner, int inputWidth, boolean dbg)ParallelCsrReadControlinline
partitionsProcessedParallelCsrReadControlpackage
prevDataParallelCsrReadControlpackage
processRows(DFEsmValue r, DFEsmValue requestRead)ParallelCsrReadControlinlinepackage
readLengthParallelCsrReadControlpackage
readMaskDataParallelCsrReadControlprivate
rowLengthDataParallelCsrReadControlpackage
rowsProcessedParallelCsrReadControlprivate
toreadParallelCsrReadControlpackage
totalOutputsParallelCsrReadControlpackage
tru()ParallelCsrReadControlinlinepackage
vectorLoadCommandsParallelCsrReadControlpackage
vectorLoadCyclesParallelCsrReadControlprivate
zero()ParallelCsrReadControlinlinepackage
zero(int bitWidth)ParallelCsrReadControlinlinepackage
- - - - diff --git a/classParallelCsrReadControl.html b/classParallelCsrReadControl.html deleted file mode 100644 index 425e403..0000000 --- a/classParallelCsrReadControl.html +++ /dev/null @@ -1,1264 +0,0 @@ - - - - - - -Spark: ParallelCsrReadControl Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
- -
-
-Inheritance diagram for ParallelCsrReadControl:
-
-
- - - -
- - - - -

-Classes

enum  Mode
 
- - - -

-Public Member Functions

 ParallelCsrReadControl (DFEManager owner, int inputWidth, boolean dbg)
 
- - - - - -

-Protected Member Functions

void nextState ()
 
void outputFunction ()
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Package Functions

DFEsmValue outputNotStall ()
 
DFEsmValue needToRead ()
 
DFEsmValue canRead ()
 
void processRows (DFEsmValue r, DFEsmValue requestRead)
 
void makeCommand (DFEsmValue p_crtPos, DFEsmValue p_toread, DFEsmValue p_rowLengthData, DFEsmValue p_firstReadPosition, DFEsmValue p_cycleCounter)
 
void makeOutput (DFEsmValue readEnable, DFEsmValue rowFinished, DFEsmValue readMask, DFEsmValue rowLength, DFEsmValue cycleCounterP, DFEsmValue firstReadPositionP, DFEsmValue vectorLoad)
 
DFEsmValue min (DFEsmValue a, DFEsmValue b)
 
DFEsmValue buildReadMask (DFEsmValue canread)
 
DFEsmValue fls ()
 
DFEsmValue tru ()
 
DFEsmValue one ()
 
DFEsmValue zero ()
 
DFEsmValue zero (int bitWidth)
 
DFEsmValue cat (DFEsmValue...args)
 
DFEsmValue cat (DFEsmValue left, DFEsmValue right)
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Package Attributes

final DFEsmInput nRows
 
final DFEsmInput nPartitions
 
final DFEsmInput nIterations
 
final DFEsmStateValue prevData
 
final DFEsmStateValue readLength
 
final DFEsmStateValue iLengthReady
 
final DFEsmStateValue rowLengthData
 
final DFEsmStateValue vectorLoadCommands
 
final DFEsmStateValue partitionsProcessed
 
final DFEsmStateValue totalOutputs
 
final DFEsmStateValue toread
 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Private Attributes

final DFEsmStateEnum< Mode > mode
 
final DFEsmPullInput iLength
 
final DFEsmInput vectorLoadCycles
 
final DFEsmPushOutput oControl
 
final DFEsmStateValue oControlData
 
final DFEsmStateValue outValid
 
final DFEsmStateValue readMaskData
 
final DFEsmStateValue cycleCounter
 
final DFEsmStateValue firstReadPosition
 
final DFEsmStateValue rowsProcessed
 
final DFEsmStateValue iterationsProcessed
 
final DFEsmStateValue crtPos
 
final int inputWidth
 
final boolean dbg
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
ParallelCsrReadControl.ParallelCsrReadControl (DFEManager owner,
int inputWidth,
boolean dbg 
)
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
DFEsmValue ParallelCsrReadControl.buildReadMask (DFEsmValue canread)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - -
DFEsmValue ParallelCsrReadControl.canRead ()
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
DFEsmValue ParallelCsrReadControl.cat (DFEsmValue... args)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
DFEsmValue ParallelCsrReadControl.cat (DFEsmValue left,
DFEsmValue right 
)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - -
DFEsmValue ParallelCsrReadControl.fls ()
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ParallelCsrReadControl.makeCommand (DFEsmValue p_crtPos,
DFEsmValue p_toread,
DFEsmValue p_rowLengthData,
DFEsmValue p_firstReadPosition,
DFEsmValue p_cycleCounter 
)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void ParallelCsrReadControl.makeOutput (DFEsmValue readEnable,
DFEsmValue rowFinished,
DFEsmValue readMask,
DFEsmValue rowLength,
DFEsmValue cycleCounterP,
DFEsmValue firstReadPositionP,
DFEsmValue vectorLoad 
)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
DFEsmValue ParallelCsrReadControl.min (DFEsmValue a,
DFEsmValue b 
)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - -
DFEsmValue ParallelCsrReadControl.needToRead ()
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void ParallelCsrReadControl.nextState ()
-
-inlineprotected
-
- -
-
- -
-
- - - - - -
- - - - - - - -
DFEsmValue ParallelCsrReadControl.one ()
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void ParallelCsrReadControl.outputFunction ()
-
-inlineprotected
-
- -
-
- -
-
- - - - - -
- - - - - - - -
DFEsmValue ParallelCsrReadControl.outputNotStall ()
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void ParallelCsrReadControl.processRows (DFEsmValue r,
DFEsmValue requestRead 
)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - -
DFEsmValue ParallelCsrReadControl.tru ()
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - -
DFEsmValue ParallelCsrReadControl.zero ()
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
DFEsmValue ParallelCsrReadControl.zero (int bitWidth)
-
-inlinepackage
-
- -
-
-

Member Data Documentation

- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.crtPos
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.cycleCounter
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final boolean ParallelCsrReadControl.dbg
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.firstReadPosition
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmPullInput ParallelCsrReadControl.iLength
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.iLengthReady
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final int ParallelCsrReadControl.inputWidth
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.iterationsProcessed
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateEnum<Mode> ParallelCsrReadControl.mode
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmInput ParallelCsrReadControl.nIterations
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmInput ParallelCsrReadControl.nPartitions
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmInput ParallelCsrReadControl.nRows
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmPushOutput ParallelCsrReadControl.oControl
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.oControlData
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.outValid
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.partitionsProcessed
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.prevData
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.readLength
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.readMaskData
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.rowLengthData
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.rowsProcessed
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.toread
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.totalOutputs
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmStateValue ParallelCsrReadControl.vectorLoadCommands
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEsmInput ParallelCsrReadControl.vectorLoadCycles
-
-private
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classParallelCsrReadControl.png b/classParallelCsrReadControl.png deleted file mode 100644 index 9b8f7874f03c33746e885698c2de752fa6e622ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmeAS@N?(olHy`uVBq!ia0vp^6M;B@gBeKbZAu4{3=#o8A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;K^^T_vf#cX9D;zQ*-&AIxE?qHdt=V{d?HUbpJidX4|TLqn5QC$7p` zquc4?QYLhu{{`!YsoRvR_Le!{>U+VvMesLuDf~Z+J|RFPJIW(Qhj-^)Pt4`njxgN@xNANwF*8 diff --git a/classSpmvCacheKernel-members.html b/classSpmvCacheKernel-members.html deleted file mode 100644 index 5f3eb27..0000000 --- a/classSpmvCacheKernel-members.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SpmvCacheKernel Member List
-
-
- -

This is the complete list of members for SpmvCacheKernel, including all inherited members.

- - - - - - - - - - - - - -
addressTSpmvCacheKernelprivate
getMatrixValues()SpmvCacheKernelinlinepackage
getVectorValues()SpmvCacheKernelinlinepackage
indptrVectorSpmvCacheKernelprivate
ivtypeSpmvCacheKernelpackage
matrixValuesSpmvCacheKernelprivate
resolveVectorReads(DFEVector< DFEVar > reads)SpmvCacheKernelinlinepackage
selectValues(DFEVector< DFEVar > in, DFEVar readMask)SpmvCacheKernelinlinepackage
SpmvCacheKernel(KernelLib owner, DFEVar vRomLoadEnable, DFEVar cacheReadEnable, DFEVar readMask, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth)SpmvCacheKernelinlineprotected
vectorValuesSpmvCacheKernelprivate
vromsSpmvCacheKernelprivate
vtypeSpmvCacheKernelprivate
- - - - diff --git a/classSpmvCacheKernel.html b/classSpmvCacheKernel.html deleted file mode 100644 index 7b9eccf..0000000 --- a/classSpmvCacheKernel.html +++ /dev/null @@ -1,469 +0,0 @@ - - - - - - -Spark: SpmvCacheKernel Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
- -
-
-Inheritance diagram for SpmvCacheKernel:
-
-
- - - -
- - - - -

-Protected Member Functions

 SpmvCacheKernel (KernelLib owner, DFEVar vRomLoadEnable, DFEVar cacheReadEnable, DFEVar readMask, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth)
 
- - - - - - - - - -

-Package Functions

DFEVector< DFEVar > getMatrixValues ()
 
DFEVector< DFEVar > getVectorValues ()
 
DFEVector< DFEVar > selectValues (DFEVector< DFEVar > in, DFEVar readMask)
 
DFEVector< DFEVar > resolveVectorReads (DFEVector< DFEVar > reads)
 
- - - -

-Package Attributes

final DFEVectorType< DFEVar > ivtype
 
- - - - - - - - - - - - - -

-Private Attributes

final DFEVectorType< DFEVar > vtype
 
final List< Memory< DFEVar > > vroms
 
final DFEType addressT
 
final DFEVector< DFEVar > matrixValues
 
final DFEVector< DFEVar > vectorValues
 
final DFEVector< DFEVar > indptrVector
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpmvCacheKernel.SpmvCacheKernel (KernelLib owner,
DFEVar vRomLoadEnable,
DFEVar cacheReadEnable,
DFEVar readMask,
int inputWidth,
int cacheSize,
int indexWidth,
int mantissaWidth 
)
-
-inlineprotected
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
DFEVector<DFEVar> SpmvCacheKernel.getMatrixValues ()
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - -
DFEVector<DFEVar> SpmvCacheKernel.getVectorValues ()
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
DFEVector<DFEVar> SpmvCacheKernel.resolveVectorReads (DFEVector< DFEVar > reads)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
DFEVector<DFEVar> SpmvCacheKernel.selectValues (DFEVector< DFEVar > in,
DFEVar readMask 
)
-
-inlinepackage
-
- -
-
-

Member Data Documentation

- -
-
- - - - - -
- - - - -
final DFEType SpmvCacheKernel.addressT
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEVector<DFEVar> SpmvCacheKernel.indptrVector
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEVectorType<DFEVar> SpmvCacheKernel.ivtype
-
-package
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEVector<DFEVar> SpmvCacheKernel.matrixValues
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEVector<DFEVar> SpmvCacheKernel.vectorValues
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final List<Memory<DFEVar> > SpmvCacheKernel.vroms
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final DFEVectorType<DFEVar> SpmvCacheKernel.vtype
-
-private
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classSpmvCacheKernel.png b/classSpmvCacheKernel.png deleted file mode 100644 index 49fe08e8d13a4c684ecd97f236788db3301a4b4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i`mP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004#NkllyXhQ?TBn2Fr5HLVLYJeJ!fJh9OBh)e~xjZu(9gKsz#{K8f-JYFxWX zs??-DiSqLZuV1o?8oHdQ#Z=W^TeX*{`E+*?e(AmL^QEJ^XI3NDujH^Ky{$==Bu`DM zBzbBW)y%B70RE^CKz9wHem*0xL#PXM0Co)Zr*e2w0bDhy0G^su08dRSfTt!Ez*Cb7 z;HgOk@YJLN+{?_YyD)&xnp6N!ji#=t1#qI~c-gbIt|zIecTcp(kJRhXHL0N^JiPpF zv&3rJ^Ik-EYDM4X30LW;Bb3w^1Iw?^?134ih6Xk za<~{yjq-Jctg5J~bBkuagVNE=raNlA=te8ck(Q%LHOTLjAcs}8iz*B6BAlX935$sU0000 - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SpmvKernel Member List
-
-
- -

This is the complete list of members for SpmvKernel, including all inherited members.

- - - -
fpLSpmvKernelprivatestatic
SpmvKernel(KernelParameters parameters, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth, boolean dbg)SpmvKernelinlineprotected
- - - - diff --git a/classSpmvKernel.html b/classSpmvKernel.html deleted file mode 100644 index 7f63af8..0000000 --- a/classSpmvKernel.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - -Spark: SpmvKernel Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
- -
-
-Inheritance diagram for SpmvKernel:
-
-
- - - -
- - - - -

-Protected Member Functions

 SpmvKernel (KernelParameters parameters, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth, boolean dbg)
 
- - - -

-Static Private Attributes

static final int fpL = 16
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
SpmvKernel.SpmvKernel (KernelParameters parameters,
int inputWidth,
int cacheSize,
int indexWidth,
int mantissaWidth,
boolean dbg 
)
-
-inlineprotected
-
- -
-
-

Member Data Documentation

- -
-
- - - - - -
- - - - -
final int SpmvKernel.fpL = 16
-
-staticprivate
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classSpmvKernel.png b/classSpmvKernel.png deleted file mode 100644 index 57cf5d7157930ecdae54806ce205b770f1270a10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPOVBBm#UwT>t<74`jZ0^R=}9&;%e0 zj1L?*z}k679?0b=3GxeO04f53tEWPY7#J8WJY5_^Dj46+b==mhz{8*}UHo6VUa_Ic zOFQNA_e|@nlPnaEy%QAt$PyU(HJLLs^m&EQv8#D&+Y|h6-2Yv@koBAT>AK_F=N>0m{-BQ{p`&bx_4^#xs^ZU_o?J$REuVEpv) zu_?ZHul!#2^pbbpOD&tbXS}NHpZ+Rjl6b`4%3!RcctGZ%rI_Hy$Nct*1~RR_&lQ2; O%HZkh=d#Wzp$P!&Ft!!| diff --git a/classSpmvManager-members.html b/classSpmvManager-members.html deleted file mode 100644 index c6f3fd9..0000000 --- a/classSpmvManager-members.html +++ /dev/null @@ -1,128 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SpmvManager Member List
-
-
- -

This is the complete list of members for SpmvManager, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
addComputePipe(int id, int inputWidth)SpmvManagerinlinepackage
addPaddingKernel(String stream)SpmvManagerinlinepackage
addUnpaddingKernel(String stream, int bitwidth, int id)SpmvManagerinlinepackage
cacheSizeSpmvManagerprivate
DBG_PAR_CSR_CTLSpmvManagerprivatestatic
DBG_REDUCTION_KERNELSpmvManagerprivatestatic
DBG_SPMV_KERNELSpmvManagerprivatestatic
dramReductionEnabledSpmvManagerprivatestatic
FLOATING_POINT_LATENCYSpmvManagerprivatestatic
getComputeKernel(int id)SpmvManagerinlinepackage
getFanoutName(int id)SpmvManagerinlinepackage
getPaddingCycles(InterfaceParam outSizeBytes, InterfaceParam outWidthBytes)SpmvManagerinlineprivate
getPaddingKernel(String id)SpmvManagerinlinepackage
getReadControl(int id)SpmvManagerinlinepackage
getReductionKernel(int id)SpmvManagerinlinepackage
getUnpaddingKernel(String stream)SpmvManagerinlinepackage
indexWidthSpmvManagerprivatestatic
inputWidthSpmvManagerprivate
interfaceDefault()SpmvManagerinlineprivate
main(String[] args)SpmvManagerinlinestatic
mantissaWidthSpmvManagerprivatestatic
maxRowsSpmvManagerprivate
numPipesSpmvManagerprivate
setUpComputePipe(EngineInterface ei, int id, InterfaceParam vectorLoadCycles, InterfaceParam nPartitions, InterfaceParam n, InterfaceParam outResultStartAddress, InterfaceParam outResultSize, InterfaceParam vStartAddress, InterfaceParam colPtrStartAddress, InterfaceParam colptrSize, InterfaceParam indptrValuesStartAddress, InterfaceParam indptrValuesSize, InterfaceParam totalCycles, InterfaceParam reductionCycles, InterfaceParam nIterations)SpmvManagerinlinepackage
setupUnpaddingKernel(EngineInterface ei, String kernelId, String memoryStream, InterfaceParam size, InterfaceParam inputWidthBytes, InterfaceParam iterations, InterfaceParam startAddress)SpmvManagerinlineprivate
smallestMultipleLargerThan(InterfaceParam x, long y)SpmvManagerinlineprivate
SpmvManager(SpmvEngineParams ep)SpmvManagerinlinepackage
- - - - diff --git a/classSpmvManager.html b/classSpmvManager.html deleted file mode 100644 index e25671b..0000000 --- a/classSpmvManager.html +++ /dev/null @@ -1,975 +0,0 @@ - - - - - - -Spark: SpmvManager Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
- -
-
-Inheritance diagram for SpmvManager:
-
-
- - - -
- - - - -

-Static Public Member Functions

static void main (String[] args)
 
- - - - - - - - - - - - - - - - - - - - - - - -

-Package Functions

 SpmvManager (SpmvEngineParams ep)
 
void addComputePipe (int id, int inputWidth)
 
DFELink addPaddingKernel (String stream)
 
DFELink addUnpaddingKernel (String stream, int bitwidth, int id)
 
String getComputeKernel (int id)
 
String getReductionKernel (int id)
 
String getPaddingKernel (String id)
 
String getReadControl (int id)
 
String getFanoutName (int id)
 
String getUnpaddingKernel (String stream)
 
void setUpComputePipe (EngineInterface ei, int id, InterfaceParam vectorLoadCycles, InterfaceParam nPartitions, InterfaceParam n, InterfaceParam outResultStartAddress, InterfaceParam outResultSize, InterfaceParam vStartAddress, InterfaceParam colPtrStartAddress, InterfaceParam colptrSize, InterfaceParam indptrValuesStartAddress, InterfaceParam indptrValuesSize, InterfaceParam totalCycles, InterfaceParam reductionCycles, InterfaceParam nIterations)
 
- - - - - - - - - -

-Private Member Functions

void setupUnpaddingKernel (EngineInterface ei, String kernelId, String memoryStream, InterfaceParam size, InterfaceParam inputWidthBytes, InterfaceParam iterations, InterfaceParam startAddress)
 
InterfaceParam smallestMultipleLargerThan (InterfaceParam x, long y)
 
InterfaceParam getPaddingCycles (InterfaceParam outSizeBytes, InterfaceParam outWidthBytes)
 
EngineInterface interfaceDefault ()
 
- - - - - - - - - -

-Private Attributes

final int cacheSize
 
final int inputWidth
 
final int maxRows
 
final int numPipes
 
- - - - - - - - - - - - - - - -

-Static Private Attributes

static final int mantissaWidth = 53
 
static final int indexWidth = 32
 
static final int FLOATING_POINT_LATENCY = 16
 
static final boolean DBG_PAR_CSR_CTL = false
 
static final boolean DBG_SPMV_KERNEL = false
 
static final boolean DBG_REDUCTION_KERNEL = false
 
static final boolean dramReductionEnabled = true
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - -
SpmvManager.SpmvManager (SpmvEngineParams ep)
-
-inlinepackage
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
void SpmvManager.addComputePipe (int id,
int inputWidth 
)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
DFELink SpmvManager.addPaddingKernel (String stream)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
DFELink SpmvManager.addUnpaddingKernel (String stream,
int bitwidth,
int id 
)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
String SpmvManager.getComputeKernel (int id)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
String SpmvManager.getFanoutName (int id)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
InterfaceParam SpmvManager.getPaddingCycles (InterfaceParam outSizeBytes,
InterfaceParam outWidthBytes 
)
-
-inlineprivate
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
String SpmvManager.getPaddingKernel (String id)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
String SpmvManager.getReadControl (int id)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
String SpmvManager.getReductionKernel (int id)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
String SpmvManager.getUnpaddingKernel (String stream)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - -
EngineInterface SpmvManager.interfaceDefault ()
-
-inlineprivate
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
static void SpmvManager.main (String[] args)
-
-inlinestatic
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void SpmvManager.setUpComputePipe (EngineInterface ei,
int id,
InterfaceParam vectorLoadCycles,
InterfaceParam nPartitions,
InterfaceParam n,
InterfaceParam outResultStartAddress,
InterfaceParam outResultSize,
InterfaceParam vStartAddress,
InterfaceParam colPtrStartAddress,
InterfaceParam colptrSize,
InterfaceParam indptrValuesStartAddress,
InterfaceParam indptrValuesSize,
InterfaceParam totalCycles,
InterfaceParam reductionCycles,
InterfaceParam nIterations 
)
-
-inlinepackage
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void SpmvManager.setupUnpaddingKernel (EngineInterface ei,
String kernelId,
String memoryStream,
InterfaceParam size,
InterfaceParam inputWidthBytes,
InterfaceParam iterations,
InterfaceParam startAddress 
)
-
-inlineprivate
-
-

An unpadding kernel reads a stream from memory and discards the bytes which were added to pad the data to a multiple of BURST_SIZE_BYTES.

-
Parameters
- - - - -
sizesize in number of elements of the stream
memoryStreamthe stream from memory to unpad
inputWidthBytesthe number of bytes the kernel should read (and write) every cycle
-
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
InterfaceParam SpmvManager.smallestMultipleLargerThan (InterfaceParam x,
long y 
)
-
-inlineprivate
-
- -
-
-

Member Data Documentation

- -
-
- - - - - -
- - - - -
final int SpmvManager.cacheSize
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final boolean SpmvManager.DBG_PAR_CSR_CTL = false
-
-staticprivate
-
- -
-
- -
-
- - - - - -
- - - - -
final boolean SpmvManager.DBG_REDUCTION_KERNEL = false
-
-staticprivate
-
- -
-
- -
-
- - - - - -
- - - - -
final boolean SpmvManager.DBG_SPMV_KERNEL = false
-
-staticprivate
-
- -
-
- -
-
- - - - - -
- - - - -
final boolean SpmvManager.dramReductionEnabled = true
-
-staticprivate
-
- -
-
- -
-
- - - - - -
- - - - -
final int SpmvManager.FLOATING_POINT_LATENCY = 16
-
-staticprivate
-
- -
-
- -
-
- - - - - -
- - - - -
final int SpmvManager.indexWidth = 32
-
-staticprivate
-
- -
-
- -
-
- - - - - -
- - - - -
final int SpmvManager.inputWidth
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final int SpmvManager.mantissaWidth = 53
-
-staticprivate
-
- -
-
- -
-
- - - - - -
- - - - -
final int SpmvManager.maxRows
-
-private
-
- -
-
- -
-
- - - - - -
- - - - -
final int SpmvManager.numPipes
-
-private
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classSpmvManager.png b/classSpmvManager.png deleted file mode 100644 index d86ac1b1309958e5b902526682d8496c2f47d1b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 547 zcmV+;0^I$HP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d00059NklO$T>S>W@$NKzXipN>%k-6|@Id^!t-y%z?@_S>{Vum$H|ovwh~e?LPzg zmb!FYvLn}A3J>m9jrDu`x&@pwYvbW<>zY9g$ zR9#4VA9P0uVV=K7wQ79nsp#H(vg-e=SWVSEc{B80zmJ1_zMj47Iyc$+OsJ}k>MKDa zA`=Agwq5`;Gz;{4O(M+#{c`4zrh&e&>J|uKObY}sqy+*P(gFbtX@LNSv_JquS|ETS zEl~Os5t$(b;CU?&z>xk5l*$93tFkoWTLh)?`7!3il`jBYbwGJ`8>YoPNb;Z@x@|OT zGxoK3c9Xi=<%9F11!My^V;jqQnK0f}F_@zuu^m7bf7u)?cfw`WMGuSNS(cvQytDF+ za|tTNa1V;kw_Q_JCm;de+|Lamgn9oS)v7xMrOK*tn$=X@?alBXx5e3`9|bk}dMu)g l3v7KR0EYCHAQ6!X`T - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SpmvReductionKernel Member List
-
-
- -

This is the complete list of members for SpmvReductionKernel, including all inherited members.

- - -
SpmvReductionKernel(KernelParameters parameters, int fpl, int maxRows)SpmvReductionKernelinlineprotected
- - - - diff --git a/classSpmvReductionKernel.html b/classSpmvReductionKernel.html deleted file mode 100644 index 3ebe27b..0000000 --- a/classSpmvReductionKernel.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -Spark: SpmvReductionKernel Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SpmvReductionKernel Class Reference
-
-
-
-Inheritance diagram for SpmvReductionKernel:
-
-
- - - -
- - - - -

-Protected Member Functions

 SpmvReductionKernel (KernelParameters parameters, int fpl, int maxRows)
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
SpmvReductionKernel.SpmvReductionKernel (KernelParameters parameters,
int fpl,
int maxRows 
)
-
-inlineprotected
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classSpmvReductionKernel.png b/classSpmvReductionKernel.png deleted file mode 100644 index 0a468e327ad1825014a9e00aee7055edb4df075f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^9Y7qw!3-q7a-LNJQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;#OHD#{yZ(5+eaJ56y$Gmro_1RW_{q;lAL8+v0mZ);KN^&Pwa?-D+8*A-^4mqJ<^x5R_v`xw_e2zAKY?&=Z7xU+bT<0c-DGTsI& zM~1*AhD9ulE}TpqLM#HR9130n4pS5wG~g2dxsRO5VNGV3Uk*`deIjfpL$G@y^KL%> z`^=kfs94Qh*0|@yj63u8i@f;SG57sX5f!G1G1tQHIGj4>a(_F!+`(V50{&YnPn|K< zw@dBg+iX9p>}J~4^3Vyj5ppt3zZdkK+QPeY_tp7n@oRW5EC@fd`}28@vU3l^V&xNF zJy$p%rY_8K;k)Cjv{z2Mw%Tf66Bej_zTI(2!tqVkjD{~v|5#n=cz3>LGur}j_sieb zt^TImQFgY@l5a`su62@CxpB(+v*jM-&jEVr|8FLcPqiCo%+!6L?~)yCef?ng8DLB@ Nc)I$ztaD0e0sx{Y>#zU- diff --git a/classUnpaddingKernel-members.html b/classUnpaddingKernel-members.html deleted file mode 100644 index 0f71fcf..0000000 --- a/classUnpaddingKernel-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
UnpaddingKernel Member List
-
-
- -

This is the complete list of members for UnpaddingKernel, including all inherited members.

- - -
UnpaddingKernel(KernelParameters parameters, int bitWidth, int id)UnpaddingKernelinlineprotected
- - - - diff --git a/classUnpaddingKernel.html b/classUnpaddingKernel.html deleted file mode 100644 index c6d357f..0000000 --- a/classUnpaddingKernel.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -Spark: UnpaddingKernel Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
UnpaddingKernel Class Reference
-
-
-
-Inheritance diagram for UnpaddingKernel:
-
-
- - - -
- - - - -

-Protected Member Functions

 UnpaddingKernel (KernelParameters parameters, int bitWidth, int id)
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
UnpaddingKernel.UnpaddingKernel (KernelParameters parameters,
int bitWidth,
int id 
)
-
-inlineprotected
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classUnpaddingKernel.png b/classUnpaddingKernel.png deleted file mode 100644 index a542a698e8c4a6ab398e9bc1904e96f60a7136b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473 zcmV;~0Ve*5P)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004KNklV!KN<(caSJ#l;aU!0HhP20)fUk&%gn_8429Y*ZRS*89trQ(r zUYq8+?YPj{W_8bd#=e)sK9}HYn`M83OEC;DnTx(Rk|^XN9oGBKXEPqVDDHNno>`mmW? zCu|uAjJ#(nkDF6l9d6YNTbtnAwih<@uTB}(cGxACuG^SjS&w&e-m`YPwUo^{^yI4_ zT0?d{xwsS?YXkcC^(V|b&!W$4=eIS`y+2%A?R|g? - - - - - -Spark: Class Index - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - -
- - - - -
- -
- -
-
-
Class Index
-
- - - - - diff --git a/classspark_1_1dse_1_1Benchmark-members.html b/classspark_1_1dse_1_1Benchmark-members.html deleted file mode 100644 index 67028c2..0000000 --- a/classspark_1_1dse_1_1Benchmark-members.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::dse::Benchmark Member List
-
-
- -

This is the complete list of members for spark::dse::Benchmark, including all inherited members.

- - - - - -
add_matrix_path(std::string path)spark::dse::Benchmarkinline
get_benchmark_size() const spark::dse::Benchmarkinline
get_matrix_path(int id) const spark::dse::Benchmarkinline
pathsspark::dse::Benchmarkprivate
- - - - diff --git a/classspark_1_1dse_1_1Benchmark.html b/classspark_1_1dse_1_1Benchmark.html deleted file mode 100644 index 49eeec6..0000000 --- a/classspark_1_1dse_1_1Benchmark.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - -Spark: spark::dse::Benchmark Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::dse::Benchmark Class Reference
-
-
- -

#include <Dse.hpp>

- - - - - - - - -

-Public Member Functions

std::string get_matrix_path (int id) const
 
void add_matrix_path (std::string path)
 
int get_benchmark_size () const
 
- - - -

-Private Attributes

std::vector< std::string > paths
 
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
void spark::dse::Benchmark::add_matrix_path (std::string path)
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
int spark::dse::Benchmark::get_benchmark_size () const
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
std::string spark::dse::Benchmark::get_matrix_path (int id) const
-
-inline
-
- -
-
-

Member Data Documentation

- -
-
- - - - - -
- - - - -
std::vector<std::string> spark::dse::Benchmark::paths
-
-private
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1dse_1_1DseParameters-members.html b/classspark_1_1dse_1_1DseParameters-members.html deleted file mode 100644 index 0fad4b3..0000000 --- a/classspark_1_1dse_1_1DseParameters-members.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::dse::DseParameters Member List
-
- - - - - diff --git a/classspark_1_1dse_1_1DseParameters.html b/classspark_1_1dse_1_1DseParameters.html deleted file mode 100644 index 65f26ca..0000000 --- a/classspark_1_1dse_1_1DseParameters.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - -Spark: spark::dse::DseParameters Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::dse::DseParameters Class Reference
-
-
- -

#include <Dse.hpp>

- - - - - - - - - - -

-Public Attributes

bool gflopsOnly
 
spark::utils::Range numPipesRange {1, 4, 1}
 
spark::utils::Range inputWidthRange {1, 3, 1}
 
spark::utils::Range cacheSizeRange {1024, 2048, 1024}
 
-

Member Data Documentation

- -
-
- - - - -
spark::utils::Range spark::dse::DseParameters::cacheSizeRange {1024, 2048, 1024}
-
- -
-
- -
-
- - - - -
bool spark::dse::DseParameters::gflopsOnly
-
- -
-
- -
-
- - - - -
spark::utils::Range spark::dse::DseParameters::inputWidthRange {1, 3, 1}
-
- -
-
- -
-
- - - - -
spark::utils::Range spark::dse::DseParameters::numPipesRange {1, 4, 1}
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1dse_1_1DseResult-members.html b/classspark_1_1dse_1_1DseResult-members.html deleted file mode 100644 index cb3ea22..0000000 --- a/classspark_1_1dse_1_1DseResult-members.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::dse::DseResult Member List
-
-
- -

This is the complete list of members for spark::dse::DseResult, including all inherited members.

- - - - - -
bestArchitecturespark::dse::DseResult
DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)spark::dse::DseResultinline
DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)spark::dse::DseResultinline
matricesspark::dse::DseResult
- - - - diff --git a/classspark_1_1dse_1_1DseResult.html b/classspark_1_1dse_1_1DseResult.html deleted file mode 100644 index 19b5bcb..0000000 --- a/classspark_1_1dse_1_1DseResult.html +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - -Spark: spark::dse::DseResult Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::dse::DseResult Class Reference
-
-
- -

#include <Dse.hpp>

- - - - - - -

-Public Member Functions

 DseResult (std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
 
 DseResult (std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
 
- - - - - -

-Public Attributes

std::shared_ptr
-< spark::spmv::SpmvArchitecture > 
bestArchitecture
 
std::vector< std::string > matrices
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
spark::dse::DseResult::DseResult (std::string path,
std::shared_ptr< spark::spmv::SpmvArchitecture > arch 
)
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
spark::dse::DseResult::DseResult (std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
-
-inline
-
- -
-
-

Member Data Documentation

- -
-
- - - - -
std::shared_ptr<spark::spmv::SpmvArchitecture> spark::dse::DseResult::bestArchitecture
-
- -
-
- -
-
- - - - -
std::vector<std::string> spark::dse::DseResult::matrices
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1dse_1_1SparkDse-members.html b/classspark_1_1dse_1_1SparkDse-members.html deleted file mode 100644 index e3d403a..0000000 --- a/classspark_1_1dse_1_1SparkDse-members.html +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::dse::SparkDse Member List
-
-
- -

This is the complete list of members for spark::dse::SparkDse, including all inherited members.

- - - -
run(const Benchmark &benchmark, const DseParameters &dseParams)spark::dse::SparkDse
SparkDse()spark::dse::SparkDseinline
- - - - diff --git a/classspark_1_1dse_1_1SparkDse.html b/classspark_1_1dse_1_1SparkDse.html deleted file mode 100644 index c8868a3..0000000 --- a/classspark_1_1dse_1_1SparkDse.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -Spark: spark::dse::SparkDse Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::dse::SparkDse Class Reference
-
-
- -

#include <Dse.hpp>

- - - - - - -

-Public Member Functions

 SparkDse ()
 
std::vector< DseResult > run (const Benchmark &benchmark, const DseParameters &dseParams)
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
spark::dse::SparkDse::SparkDse ()
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
std::vector< DseResult > spark::dse::SparkDse::run (const Benchmark & benchmark,
const DseParameters & dseParams 
)
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/classspark_1_1io_1_1MmReader-members.html b/classspark_1_1io_1_1MmReader-members.html deleted file mode 100644 index 6881b80..0000000 --- a/classspark_1_1io_1_1MmReader-members.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::io::MmReader< value_type > Member List
-
- - - - - diff --git a/classspark_1_1io_1_1MmReader.html b/classspark_1_1io_1_1MmReader.html deleted file mode 100644 index 2a73e99..0000000 --- a/classspark_1_1io_1_1MmReader.html +++ /dev/null @@ -1,565 +0,0 @@ - - - - - - -Spark: spark::io::MmReader< value_type > Class Template Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::io::MmReader< value_type > Class Template Reference
-
-
- -

#include <Io.hpp>

- - - - - - - - - - -

-Public Member Functions

 MmReader (std::string _path)
 
virtual ~MmReader ()
 
std::vector< double > readVector ()
 
spark::sparse::SparkCooMatrix
-< value_type > 
mmreadMatrix (std::string path)
 
- - - - - -

-Private Types

using SparseMatrix = spark::sparse::SparkCooMatrix< value_type >
 
using CoordType = typename SparseMatrix::CoordType
 
- - - - - - - -

-Private Member Functions

SparseMatrix::CoordType mmparse (const std::string line)
 
void parseHeader (std::string line)
 
bool parseHeader (bool pprint=false)
 
- - - - - - - - - - - - - - - - - -

-Private Attributes

bool sparse = false
 
bool symmetric = false
 
bool matrix = false
 
int ncols
 
int nrows
 
int nnzs = -1
 
std::ifstream * f
 
std::string path
 
-

Member Typedef Documentation

- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
using spark::io::MmReader< value_type >::CoordType = typename SparseMatrix::CoordType
-
-private
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
using spark::io::MmReader< value_type >::SparseMatrix = spark::sparse::SparkCooMatrix<value_type>
-
-private
-
- -
-
-

Constructor & Destructor Documentation

- -
-
-
-template<typename value_type >
- - - - - -
- - - - - - - - -
spark::io::MmReader< value_type >::MmReader (std::string _path)
-
-inline
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - - - - -
virtual spark::io::MmReader< value_type >::~MmReader ()
-
-inlinevirtual
-
- -
-
-

Member Function Documentation

- -
-
-
-template<typename value_type >
- - - - - -
- - - - - - - - -
SparseMatrix::CoordType spark::io::MmReader< value_type >::mmparse (const std::string line)
-
-inlineprivate
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - - - - - -
spark::sparse::SparkCooMatrix<value_type> spark::io::MmReader< value_type >::mmreadMatrix (std::string path)
-
-inline
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - - - - - -
void spark::io::MmReader< value_type >::parseHeader (std::string line)
-
-inlineprivate
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - - - - - -
bool spark::io::MmReader< value_type >::parseHeader (bool pprint = false)
-
-inlineprivate
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - - - - -
std::vector<double> spark::io::MmReader< value_type >::readVector ()
-
-inline
-
- -
-
-

Member Data Documentation

- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
std::ifstream* spark::io::MmReader< value_type >::f
-
-private
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
bool spark::io::MmReader< value_type >::matrix = false
-
-private
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
int spark::io::MmReader< value_type >::ncols
-
-private
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
int spark::io::MmReader< value_type >::nnzs = -1
-
-private
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
int spark::io::MmReader< value_type >::nrows
-
-private
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
std::string spark::io::MmReader< value_type >::path
-
-private
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
bool spark::io::MmReader< value_type >::sparse = false
-
-private
-
- -
-
- -
-
-
-template<typename value_type >
- - - - - -
- - - - -
bool spark::io::MmReader< value_type >::symmetric = false
-
-private
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1model_1_1ImplementationParameters-members.html b/classspark_1_1model_1_1ImplementationParameters-members.html deleted file mode 100644 index d81fe75..0000000 --- a/classspark_1_1model_1_1ImplementationParameters-members.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::model::ImplementationParameters Member List
-
-
- -

This is the complete list of members for spark::model::ImplementationParameters, including all inherited members.

- - - - - - -
ImplementationParameters(const LogicResourceUsage &_ru, double _memoryBandwidth)spark::model::ImplementationParametersinline
memoryBandwidthspark::model::ImplementationParameters
operator<(const ImplementationParameters &other) const spark::model::ImplementationParametersinline
ruspark::model::ImplementationParameters
to_string()spark::model::ImplementationParametersinline
- - - - diff --git a/classspark_1_1model_1_1ImplementationParameters.html b/classspark_1_1model_1_1ImplementationParameters.html deleted file mode 100644 index 48a31e5..0000000 --- a/classspark_1_1model_1_1ImplementationParameters.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - - - -Spark: spark::model::ImplementationParameters Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::model::ImplementationParameters Class Reference
-
-
- -

#include <Model.hpp>

- - - - - - - - -

-Public Member Functions

 ImplementationParameters (const LogicResourceUsage &_ru, double _memoryBandwidth)
 
std::string to_string ()
 
bool operator< (const ImplementationParameters &other) const
 
- - - - - -

-Public Attributes

LogicResourceUsage ru
 
double memoryBandwidth
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
spark::model::ImplementationParameters::ImplementationParameters (const LogicResourceUsage & _ru,
double _memoryBandwidth 
)
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
bool spark::model::ImplementationParameters::operator< (const ImplementationParameters & other) const
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
std::string spark::model::ImplementationParameters::to_string ()
-
-inline
-
- -
-
-

Member Data Documentation

- -
-
- - - - -
double spark::model::ImplementationParameters::memoryBandwidth
-
- -
-
- -
-
- - - - -
LogicResourceUsage spark::model::ImplementationParameters::ru
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1model_1_1LogicResourceUsage-members.html b/classspark_1_1model_1_1LogicResourceUsage-members.html deleted file mode 100644 index 4c02ef9..0000000 --- a/classspark_1_1model_1_1LogicResourceUsage-members.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::model::LogicResourceUsage Member List
-
- - - - - diff --git a/classspark_1_1model_1_1LogicResourceUsage.html b/classspark_1_1model_1_1LogicResourceUsage.html deleted file mode 100644 index c127f61..0000000 --- a/classspark_1_1model_1_1LogicResourceUsage.html +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - -Spark: spark::model::LogicResourceUsage Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::model::LogicResourceUsage Class Reference
-
-
- -

#include <Model.hpp>

- - - - - - - - - - - - - - - - - - -

-Public Member Functions

 LogicResourceUsage ()
 
 LogicResourceUsage (int _l, int _f, int _b, int _d)
 
 LogicResourceUsage (const LogicResourceUsage &ru)
 
std::string to_string ()
 
const LogicResourceUsage operator+ (const LogicResourceUsage &ru) const
 
const LogicResourceUsage operator* (int x) const
 
const LogicResourceUsage operator* (double x) const
 
const bool operator< (const LogicResourceUsage &ru) const
 
- - - - - - - - - -

-Public Attributes

int luts
 
int ffs
 
int brams
 
int dsps
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
spark::model::LogicResourceUsage::LogicResourceUsage ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
spark::model::LogicResourceUsage::LogicResourceUsage (int _l,
int _f,
int _b,
int _d 
)
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
spark::model::LogicResourceUsage::LogicResourceUsage (const LogicResourceUsage & ru)
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
const LogicResourceUsage spark::model::LogicResourceUsage::operator* (int x) const
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
const LogicResourceUsage spark::model::LogicResourceUsage::operator* (double x) const
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
const LogicResourceUsage spark::model::LogicResourceUsage::operator+ (const LogicResourceUsage & ru) const
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
const bool spark::model::LogicResourceUsage::operator< (const LogicResourceUsage & ru) const
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
std::string spark::model::LogicResourceUsage::to_string ()
-
-inline
-
- -
-
-

Member Data Documentation

- -
-
- - - - -
int spark::model::LogicResourceUsage::brams
-
- -
-
- -
-
- - - - -
int spark::model::LogicResourceUsage::dsps
-
- -
-
- -
-
- - - - -
int spark::model::LogicResourceUsage::ffs
-
- -
-
- -
-
- - - - -
int spark::model::LogicResourceUsage::luts
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1sparse_1_1SparkCooMatrix-members.html b/classspark_1_1sparse_1_1SparkCooMatrix-members.html deleted file mode 100644 index ea2de37..0000000 --- a/classspark_1_1sparse_1_1SparkCooMatrix-members.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::sparse::SparkCooMatrix< value_type > Member List
-
- - - - - diff --git a/classspark_1_1sparse_1_1SparkCooMatrix.html b/classspark_1_1sparse_1_1SparkCooMatrix.html deleted file mode 100644 index c15c31f..0000000 --- a/classspark_1_1sparse_1_1SparkCooMatrix.html +++ /dev/null @@ -1,227 +0,0 @@ - - - - - - -Spark: spark::sparse::SparkCooMatrix< value_type > Class Template Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::sparse::SparkCooMatrix< value_type > Class Template Reference
-
-
- -

#include <SparseMatrix.hpp>

- - - - -

-Public Types

using CoordType = std::tuple< int, int, value_type >
 
- - - -

-Public Member Functions

 SparkCooMatrix (int _n, int _m)
 
- - - - - - - -

-Public Attributes

int n
 
int m
 
std::vector< CoordType > data
 
-

Member Typedef Documentation

- -
-
-
-template<typename value_type>
- - - - -
using spark::sparse::SparkCooMatrix< value_type >::CoordType = std::tuple<int, int, value_type>
-
- -
-
-

Constructor & Destructor Documentation

- -
-
-
-template<typename value_type>
- - - - - -
- - - - - - - - - - - - - - - - - - -
spark::sparse::SparkCooMatrix< value_type >::SparkCooMatrix (int _n,
int _m 
)
-
-inline
-
- -
-
-

Member Data Documentation

- -
-
-
-template<typename value_type>
- - - - -
std::vector<CoordType> spark::sparse::SparkCooMatrix< value_type >::data
-
- -
-
- -
-
-
-template<typename value_type>
- - - - -
int spark::sparse::SparkCooMatrix< value_type >::m
-
- -
-
- -
-
-
-template<typename value_type>
- - - - -
int spark::sparse::SparkCooMatrix< value_type >::n
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html b/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html deleted file mode 100644 index 216c393..0000000 --- a/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::sparse_linear_solvers::DfeBiCgSolver Member List
-
-
- -

This is the complete list of members for spark::sparse_linear_solvers::DfeBiCgSolver, including all inherited members.

- - - - -
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)spark::sparse_linear_solvers::DfeBiCgSolvervirtual
- - - - diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html b/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html deleted file mode 100644 index afe1b50..0000000 --- a/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - -Spark: spark::sparse_linear_solvers::DfeBiCgSolver Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::sparse_linear_solvers::DfeBiCgSolver Class Reference
-
-
- -

#include <SparseLinearSolvers.hpp>

-
-Inheritance diagram for spark::sparse_linear_solvers::DfeBiCgSolver:
-
-
- - -spark::sparse_linear_solvers::Solver - -
- - - - - - - - - -

-Public Member Functions

virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
- Public Member Functions inherited from spark::sparse_linear_solvers::Solver
virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
Eigen::VectorXd spark::sparse_linear_solvers::DfeBiCgSolver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
-virtual
-
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.png b/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.png deleted file mode 100644 index 713a05b8579b2b0f45356f650bdd7a0002d8c4c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 907 zcmeAS@N?(olHy`uVBq!ia0y~yVB`R@12~w0ZQd`TJl0 z9TtNg{Y{FwX4Ts^PrbzA?etIQWc@~+(@C*nIx3l_9L)-vNdjz+K~GWzI#uE?wm;6j z&&~Jp<9G9$wJa>2_b%-`pH(<(FXNF@mbw3JH|DRe{CD{~o7+?2wH>!2YD}K(+ps_9 zs#?{~&kLD7*{qm1E}y&k{Kn!3F7qxKUs5l0`MR=V>-}3V9$A$rob=FdusHns`Znci zx35l9(vm}Wm3_Nx4JG|1*TDu}kP2V_^mnjhT6W%6iUUeUzZQ_)}+?ORkQcRB`-`_-$FjvD-fNR7pL(du`>b_lY%UGy03$ zZue|m8?#L~0t9YubGg=eKeu;rUX_B=VxRcx#Wne6V)OmZ?EQR;QKI2SPgB - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::sparse_linear_solvers::DfeCgSolver Member List
-
-
- -

This is the complete list of members for spark::sparse_linear_solvers::DfeCgSolver, including all inherited members.

- - - - -
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)spark::sparse_linear_solvers::DfeCgSolvervirtual
- - - - diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html b/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html deleted file mode 100644 index f076f01..0000000 --- a/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - -Spark: spark::sparse_linear_solvers::DfeCgSolver Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::sparse_linear_solvers::DfeCgSolver Class Reference
-
-
- -

#include <SparseLinearSolvers.hpp>

-
-Inheritance diagram for spark::sparse_linear_solvers::DfeCgSolver:
-
-
- - -spark::sparse_linear_solvers::Solver - -
- - - - - - - - - -

-Public Member Functions

virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
- Public Member Functions inherited from spark::sparse_linear_solvers::Solver
virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
Eigen::VectorXd spark::sparse_linear_solvers::DfeCgSolver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
-virtual
-
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.png b/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.png deleted file mode 100644 index dc67ab899a6dd2bfb72cc4b86f90c25452cf6099..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmV-m1E2hfP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0008-NklSg}Y_P)&MCim6F2 zNip>aeUhY4v^qZaz2T77f1hRd+w_w3NMoPP;xzj%`mLhr{pVHSckI`H`>>8tdB^U3 zZESpO%za^h*d`af#JzNoB&Q4dJ=dIa4w$1Q>HM^e?45o@>r)lUU-{_9_0mC-ysqib znD)}2vX)W3(96wPm97mK-`;uC`wo)ib))l-E^5}YXS6RA6RFHC8ylZCOl~$8-4E2h zgCsd!PrY8@i+J5)yAkhprn{R>nDU&T$Ni>*BvpER?klQ+(YW&)^u9>PS0{zBgCu!9 zn)yYtcH}gSu4aBYk&RD#<{y(Fk8pE1%-OkikR+$!`~KGJ^OG03B>lC1g?<}9{rAp8 zGfDa;&ApeTn40vG6jPI4l45G5UzTNwDu6%K7eH8rrvLhij31hQg%6A$n|{uGfT)`E z05LV`0b**>1H{y%2Z*Uj4-iw69w4SBJwQxNdVrXk^Z+q6=>cMD(gVcQqzCvbrIb=w zkpO~f(gVcQqz8zpG5yEYSsfqyjvd~k`h8X2t&Hvj{aJc|N4i0uzY5yYxAhai>7?JP zwf=m&?tk9vCQ!$yykqyiHa0#s=Dx5$Y?F&_P+n0_qav2g_cEwWW6w3GoQ<l72ar5l(VbEq@16=Eq7dgQ1=t*`zK)>xyF)IO_ZkhqymLDkqef?*9|FE1D qJwPB$dVrXk^Z+rn(x;SCRQ&_^Dm5f+e$`C?0000 - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::sparse_linear_solvers::EigenSolver Member List
-
-
- -

This is the complete list of members for spark::sparse_linear_solvers::EigenSolver, including all inherited members.

- - - - -
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)spark::sparse_linear_solvers::EigenSolvervirtual
- - - - diff --git a/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html b/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html deleted file mode 100644 index 34ba163..0000000 --- a/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - -Spark: spark::sparse_linear_solvers::EigenSolver Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::sparse_linear_solvers::EigenSolver Class Reference
-
-
- -

#include <SparseLinearSolvers.hpp>

-
-Inheritance diagram for spark::sparse_linear_solvers::EigenSolver:
-
-
- - -spark::sparse_linear_solvers::Solver - -
- - - - - - - - - -

-Public Member Functions

virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
- Public Member Functions inherited from spark::sparse_linear_solvers::Solver
virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
Eigen::VectorXd spark::sparse_linear_solvers::EigenSolver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
-virtual
-
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/classspark_1_1sparse__linear__solvers_1_1EigenSolver.png b/classspark_1_1sparse__linear__solvers_1_1EigenSolver.png deleted file mode 100644 index 5d03df221755bb1dab559f0396d6727822738b23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^KY=)agBeJ^X;N+hQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;x9aey&W{f4wei;;GiS zIMLJXW<6Kjf8BUf*Pt?0V&1pwCo`{Ya6iSJ_v^5gnOWQqvkJ>WZ+wpVjd$KMIEQ?>qtg`aJgW9^+Uw?d)j+^vPvhLtdv#hH3(~g^X z{^EEx&pSxR=lLWN?#nw>jvjhd6FE&)iQ%8*J_aYHHJ{h7UvcfQReUe|R=Mjx=e%XO zXfT)g$e|KG0q)C|4nS=T8wm>R@1GLH#VO?A09SqE=k2MH%<{+km_Nn5GyeW`=iB2=NR=itewBa`rLM}wg2BO{CR#~UW=7V{qc8|o@Rz&#`;g%b5~rMJ9Tc-jGvDB z&z3ImReWB#D?@`l`$`D zw - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::sparse_linear_solvers::Solver Member List
-
-
- -

This is the complete list of members for spark::sparse_linear_solvers::Solver, including all inherited members.

- - - - -
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)=0spark::sparse_linear_solvers::Solverpure virtual
- - - - diff --git a/classspark_1_1sparse__linear__solvers_1_1Solver.html b/classspark_1_1sparse__linear__solvers_1_1Solver.html deleted file mode 100644 index 26f7f6e..0000000 --- a/classspark_1_1sparse__linear__solvers_1_1Solver.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - -Spark: spark::sparse_linear_solvers::Solver Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::sparse_linear_solvers::Solver Class Referenceabstract
-
-
- -

#include <SparseLinearSolvers.hpp>

-
-Inheritance diagram for spark::sparse_linear_solvers::Solver:
-
-
- - -spark::sparse_linear_solvers::DfeBiCgSolver -spark::sparse_linear_solvers::DfeCgSolver -spark::sparse_linear_solvers::EigenSolver - -
- - - - - - - - -

-Public Member Functions

virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)=0
 
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
virtual void spark::sparse_linear_solvers::Solver::analyze (const Eigen::SparseMatrix< double > & A)
-
-inlinevirtual
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
virtual void spark::sparse_linear_solvers::Solver::preprocess (const Eigen::SparseMatrix< double > & A)
-
-inlinevirtual
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
virtual Eigen::VectorXd spark::sparse_linear_solvers::Solver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
-
-pure virtual
-
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1sparse__linear__solvers_1_1Solver.png b/classspark_1_1sparse__linear__solvers_1_1Solver.png deleted file mode 100644 index f8cb4daa2f2a4c1e989c82dd22aff377fa209b16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1579 zcmbVMc~H|w6ix_)fP?@lagD7WG0Bj*>SovyZgQOcHXz|+c%r*?dbwn)KUb2 zKycSnPCg(I1PNeo7z9`c(cm0l)9^m+=PZ><0XVxLyiD#X0?_BlX0zpTdAfiJi}UgH z1p$Y)2e;qP3Dw z@LKYyw7D}&PG(S?!C?F9h=_&laCfvGn?A`l#7czkB`nUOq-$ywJ3rJ{z2%nD#6v_U zk6Dds&-XH4557sy=R?bi7!D+>?7aa&zl)cDWbSO!f=AE?!|^FgW-Y006%Q})qez+x zJ7mjNpI!Uobt;Z2u9j$<8xu|n??aXe{%KY|({R)Mp&6h{*W-E5D|P83o_5*~-k|9P zJ+Yd+j|C6Yt@8 z4C`8KvISO~G2XhF9_UuEcKFpl543YT-Ha;LcJdcdYhaHIczWX=gBZQZSA_)b)q%2p+SabG zuLMX6c~|lb1Xj***N4bj>Y3y!sk|k%8<_nYumoNx#tqO`Fr+CX3o|_clnkCO=eX_w z48zX`5odS-aGoJe* zXZDJAXJmt%i(z0$4XiUyUsVR`q#C!|SzlHuM}PL4JSUijit{jPSFVbwUS4&bk=nix zhh4}0&loteNk&&1YEEU5!2c&f`c?gbCgic9Bn)LLI~TwJCnfBCzYl76K%^h)s*w*W z$Pn3h62&Eb5!{nK<%bd~>K1y5_8u*_$If?2BC%gJhzO#+H>8-z?hNF&kt-4Ct&<*W zchWq`f;|)(tv1miW1vbx??{Ulc-eoCiuzO6YrgVn{Totf7EWVe7;Z^ip8HJFkj5nw;iVvQduw8R+lzxUL_`A zf=AvNAqltp!cLjTrVf`T9|^^brZn@`b6O_+F4v7zuk{n3w9a_mUF=$17{%V&W2!vh z+$MDGT3tp@EQTdH=VvmysRt6869`o=ZXw*$i^$f~nM;JhN|q+KOj8IJ~tT&Fuq@BR+{IH;)la#A`qinV(KFgPRMg%5q`RJ z$UgQls&J$)wykAhkae~&fjYJOkaEw5;G0T!(mco($kqCIyWciiSkDu?%J864Igy}U zGVY>1Y=9iP&lij8S6(%B*E}xP2TCN)0V4G@HM9k;&DsjI+s;)&MMfAF_aLMG#VTM zr_t6gRAOd%TGDGs4n5kx_~^??DRzJW8%U@|geS+KQC#DK>mxLpCd&?a%xIuFV55<- zao8i+x0=?up5R3}$la{lsa$V4r nFpOhlVHk#@0(3aWdQ0A_rZ#*EXX6I^>>yWXPp1aQkSl)y#)#rx diff --git a/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html b/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html deleted file mode 100644 index 2dccf51..0000000 --- a/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::spmv::FstSpmvArchitecture Member List
-
-
- -

This is the complete list of members for spark::spmv::FstSpmvArchitecture, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth) overridespark::spmv::FstSpmvArchitectureinlineprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
FstSpmvArchitecture()spark::spmv::FstSpmvArchitectureinline
FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::FstSpmvArchitectureinline
get_name() overridespark::spmv::FstSpmvArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)spark::spmv::SpmvArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
- - - - diff --git a/classspark_1_1spmv_1_1FstSpmvArchitecture.html b/classspark_1_1spmv_1_1FstSpmvArchitecture.html deleted file mode 100644 index a3ff95d..0000000 --- a/classspark_1_1spmv_1_1FstSpmvArchitecture.html +++ /dev/null @@ -1,329 +0,0 @@ - - - - - - -Spark: spark::spmv::FstSpmvArchitecture Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv::FstSpmvArchitecture Class Reference
-
-
- -

#include <SimpleSpmv.hpp>

-
-Inheritance diagram for spark::spmv::FstSpmvArchitecture:
-
-
- - -spark::spmv::SimpleSpmvArchitecture -spark::spmv::SpmvArchitecture - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 FstSpmvArchitecture ()
 
 FstSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
-spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
- - - - - - - - - -

-Protected Member Functions

virtual int countComputeCycles (uint32_t *v, int size, int inputWidth) override
 
- Protected Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
virtual bool equals (const SpmvArchitecture &a) const override
 
- Protected Member Functions inherited from spark::spmv::SpmvArchitecture
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
 
- - - - - - - - - - - - - - -

-Additional Inherited Members

- Protected Attributes inherited from spark::spmv::SimpleSpmvArchitecture
const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
virtual int spark::spmv::FstSpmvArchitecture::countComputeCycles (uint32_t * v,
int size,
int inputWidth 
)
-
-inlineoverrideprotectedvirtual
-
- -

Reimplemented from spark::spmv::SimpleSpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual std::string spark::spmv::FstSpmvArchitecture::get_name ()
-
-inlineoverridevirtual
-
- -

Reimplemented from spark::spmv::SimpleSpmvArchitecture.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1spmv_1_1FstSpmvArchitecture.png b/classspark_1_1spmv_1_1FstSpmvArchitecture.png deleted file mode 100644 index c815234e1d6165d49a997b7a587f871e70e281c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1225 zcmeAS@N?(olHy`uVBq!ia0vp^_kg&AgBeKf&s&-gq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYLB0OCjLn;{G&b_$qu@;Z3xOLF~|C94? zwIoP;+}=5NqJzxFsq+$g#LdoW-`^)zt znrD0eO@G$A)p!3h-aGv#&v#eykLrr`#`nM5J+hW}H%O~aF7Zv>S+UDa^8E}>zWL|( zl>dtjo9^kksq%?GvwG*POS{u&Qd`acdr{itW9x_iYWC zda>)TTG90=E4O_fRX11fdindz--~y--&#pM-5IgJcCpm@S`ov=`?bzp+9tE?t#tU} z)k@{1ca1;&RSl_rG3R;r4u?rnRlo24eqsFCTG{j0La})&doS*&m}IgJ$m(6ys_wZs z>o_n}W`{BS58`jAG&R5X*wFO;oeJx_XKE%tUVDzyV4axUffZ2|42!cKGWM)$Wj9zw zNZ^BU?(J=7waq+dg>w5(asvnUS2=ypOX6O?%t$UpP&D%VBUR8a;vSR&tp5!GLy1z+)DHOT{@PStxDq4 z3=5K+nt5{hlrtTXJs(3V_)NlrL+6C^ZvAk}@v6D1XJSmJeyi}#-sPv)beBt%d^n}H zZEJ{U{?R(&DX*nGHy!@-$<0e^@tqbc!Kt}deOKFk`1Y>VPp0=%%$oZuJ1^?2+P54M z8S*0OFFp7!f9t)(ksPpZ-C2&gn*wWcyG0(hH0U z%ieBvPvgvoo|k|jJ;`KM*&bjBX0m?J|H?2Uy!f%LT=3_!z1uIJJ!5Wp@6{ZJ$3#a3 zJhJSAy)@5i3msSkkIDQG`)oQkm(D!;t-iqv8XNOlKAV4RFe+*&_mes}Mcn>ywd_Z` z!j@t?KJU%54RrSa1_qm~1ebO+s|7hr9lUwZHjQ08cS+P22_5xs3 zyb*oAc7Kh^-B7m6JG>Iyw{~}~oB7c1Qt#H%OD0{vXYYRQvwn^#H2@2F7f+FF9q8mhvmY{+nCQtJ_yG@^=jvulr=(r2SI~`g - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::spmv::PrefetchingArchitecture Member List
-
-
- -

This is the complete list of members for spark::spmv::PrefetchingArchitecture, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth)spark::spmv::SimpleSpmvArchitectureprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
encodeEmptyRows(std::vector< uint32_t > pin, bool encode)spark::spmv::SkipEmptyRowsArchitectureinlineprotected
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
get_name() overridespark::spmv::PrefetchingArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
PrefetchingArchitecture()spark::spmv::PrefetchingArchitectureinline
PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::PrefetchingArchitectureinline
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) overridespark::spmv::SkipEmptyRowsArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
SkipEmptyRowsArchitecture()spark::spmv::SkipEmptyRowsArchitectureinline
SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SkipEmptyRowsArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
- - - - diff --git a/classspark_1_1spmv_1_1PrefetchingArchitecture.html b/classspark_1_1spmv_1_1PrefetchingArchitecture.html deleted file mode 100644 index af81e9a..0000000 --- a/classspark_1_1spmv_1_1PrefetchingArchitecture.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - -Spark: spark::spmv::PrefetchingArchitecture Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv::PrefetchingArchitecture Class Reference
-
-
- -

#include <SimpleSpmv.hpp>

-
-Inheritance diagram for spark::spmv::PrefetchingArchitecture:
-
-
- - -spark::spmv::SkipEmptyRowsArchitecture -spark::spmv::SimpleSpmvArchitecture -spark::spmv::SpmvArchitecture - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 PrefetchingArchitecture ()
 
 PrefetchingArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SkipEmptyRowsArchitecture
 SkipEmptyRowsArchitecture ()
 
 SkipEmptyRowsArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
- Public Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
-spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
- - - - - - - - - - - - - - - - - - - -

-Additional Inherited Members

- Protected Member Functions inherited from spark::spmv::SkipEmptyRowsArchitecture
std::vector< uint32_t > encodeEmptyRows (std::vector< uint32_t > pin, bool encode)
 
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) override
 
- Protected Attributes inherited from spark::spmv::SimpleSpmvArchitecture
const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
virtual std::string spark::spmv::PrefetchingArchitecture::get_name ()
-
-inlineoverridevirtual
-
- -

Reimplemented from spark::spmv::SkipEmptyRowsArchitecture.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1spmv_1_1PrefetchingArchitecture.png b/classspark_1_1spmv_1_1PrefetchingArchitecture.png deleted file mode 100644 index dc4ec72f7c36ee57d5a4ad01d2a59fa3cdecc080..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1721 zcma)-2~d+)5XXZEwLqnSC}$G|2NfC*(10Lv!-v6AS9CqS{IQ1#b^qbE&8=o_e($NpC!LAzDKELC^+kS z-_(?S5*Ht0(^6C=St>)$M8d7vbwRj{y3ZvgQ|3z+VWqU2(JE-S7B#uXazX9CzRt+A zUHcBKI_<`XVCliIV|`P4F@OceUJdpoWWypN4bt=D5(P@0E}ry0osB!g_|Rp~A>N{1 z%#|mm0!W2DMawT7rk%s`&^5zk80=$jFpo;sIlu#7`CGy&wJ;VnVSLT@5!0iP30?)8 z{TgNmu*;j)hadJ-jRsJMYY7W`l@%{nY&)Soq>`2{`JHWkS@(4YvEI^!v*@+2Oc;)B zvCV$CqLKb_#Xzb>sio@V56Wo|Y1&m(S+5Om{0Lb@rzXb1@cA6K;%PFkAZB=JXd-cK z<;G=g*J1PKBj(BD?!di+XXmwTOT>QjmSH~OmZ4U@dv@(^>2^}J(U2g6oT|4B#9vW{ zaO=&KkqoijUclGY#MTbey7lL$Ux&e{jig04m~qPZ!3P1VS`^hF4mh zpz87c*0V%`{crI-COiE3x@Oq_;P9`Yuzmj&0YPpHAZTKli-RGFL`n&0sH>+i881a^ z!sY7aWybnpwXogDyEoU9h7UtW<<_82+QH0h_Utzs?M9J})2;am*EY7ZT`xMT{q5xQ370B-_qGV=)nO$3T-i zm{W}~QPzd0H=Vuf1*C^F5N_sx@s`U?b?tV}y@@tnaZfI&D7Va%1+xNDaKR8Rp_xL@ zqgOk-;0}f5?b?mlsR*m>`M!~zlGl6i-1f=g&xPRyRv$Ai)~6UH`oFPw#=NT>vd^~0 z#-B0;Lix8MX6GHY4YW8l_*Suo3XaJ_;i!yA)lW?Mz_ED5FC(3z(B4N0Ne+WiS;QN~ zmyvu{Z=(CG2;jhx9ed(}Qf97Q?MUDCp3`du8UCDrm|M|bnjhT@URGfD z`h88wV>3D?%S|m_Ym$^I2G=yt`N*^!X?v{U+3pz_cM_Ip7lqcptglgYUWwOIB;ej$ zwLwpopS_)m(~l#lLu$F^%ev_-5wb*lmwWGrDP|`$t)` zdaZ}xd*;{6tsp;%xkX3W@&su=r0iu^q^3-;&CY0yu>47CE1e3Fg+tAw0^ZH8<{eeE czK~_@iu2_A2aBT?!G8t<_#XFRc}0EwJ4?h}s{jB1 diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html b/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html deleted file mode 100644 index a5e51cc..0000000 --- a/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::spmv::SimpleSpmvArchitecture Member List
-
-
- -

This is the complete list of members for spark::spmv::SimpleSpmvArchitecture, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth)spark::spmv::SimpleSpmvArchitectureprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
do_blocking(const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > &mat, int blockSize, int inputWidth)spark::spmv::SimpleSpmvArchitectureprivate
do_partition(const EigenSparseMatrix &mat, int numPipes)spark::spmv::SimpleSpmvArchitectureprivate
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
get_name() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)spark::spmv::SpmvArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
- - - - diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html b/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html deleted file mode 100644 index 471a9a1..0000000 --- a/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html +++ /dev/null @@ -1,756 +0,0 @@ - - - - - - -Spark: spark::spmv::SimpleSpmvArchitecture Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv::SimpleSpmvArchitecture Class Reference
-
-
- -

#include <SimpleSpmv.hpp>

-
-Inheritance diagram for spark::spmv::SimpleSpmvArchitecture:
-
-
- - -spark::spmv::SpmvArchitecture -spark::spmv::FstSpmvArchitecture -spark::spmv::SkipEmptyRowsArchitecture -spark::spmv::PrefetchingArchitecture - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
-spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
- - - - - - - - -

-Protected Member Functions

virtual int countComputeCycles (uint32_t *v, int size, int inputWidth)
 
virtual bool equals (const SpmvArchitecture &a) const override
 
- Protected Member Functions inherited from spark::spmv::SpmvArchitecture
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
 
- - - - - - - - - - - - - -

-Protected Attributes

const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
- - - - - -

-Private Member Functions

std::vector< EigenSparseMatrix > do_partition (const EigenSparseMatrix &mat, int numPipes)
 
Partition do_blocking (const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > &mat, int blockSize, int inputWidth)
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
int ssarch::countComputeCycles (uint32_t * v,
int size,
int inputWidth 
)
-
-protectedvirtual
-
- -

Reimplemented in spark::spmv::FstSpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - - -
Eigen::VectorXd ssarch::dfespmv (Eigen::VectorXd x)
-
-overridevirtual
-
- -

Implements spark::spmv::SpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
spark::spmv::Partition ssarch::do_blocking (const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > & mat,
int blockSize,
int inputWidth 
)
-
-private
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
std::vector< EigenSparseMatrix > ssarch::do_partition (const EigenSparseMatrix & mat,
int numPipes 
)
-
-private
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
virtual bool spark::spmv::SimpleSpmvArchitecture::equals (const SpmvArchitecture & a) const
-
-inlineoverrideprotectedvirtual
-
- -

Implements spark::spmv::SpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual std::string spark::spmv::SimpleSpmvArchitecture::get_name ()
-
-inlineoverridevirtual
-
-
- -
-
- - - - - -
- - - - - - - -
virtual double spark::spmv::SimpleSpmvArchitecture::getEstimatedClockCycles ()
-
-inlinevirtual
-
- -

Implements spark::spmv::SpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual double spark::spmv::SimpleSpmvArchitecture::getGFlopsCount ()
-
-inlinevirtual
-
- -

Implements spark::spmv::SpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual spark::model::ImplementationParameters spark::spmv::SimpleSpmvArchitecture::getImplementationParameters ()
-
-inlinevirtual
-
- -

Implements spark::spmv::SpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - - -
bool spark::spmv::SimpleSpmvArchitecture::operator== (const SimpleSpmvArchitecture & other) const
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
void ssarch::preprocess (const EigenSparseMatrix & mat)
-
-overridevirtual
-
- -
-
- -
-
- - - - - -
- - - - - - - -
virtual std::string spark::spmv::SimpleSpmvArchitecture::to_string ()
-
-inlinevirtual
-
- -

Implements spark::spmv::SpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual boost::property_tree::ptree spark::spmv::SimpleSpmvArchitecture::write_params ()
-
-inlineoverridevirtual
-
- -

Implements spark::spmv::SpmvArchitecture.

- -
-
-

Member Data Documentation

- -
-
- - - - - -
- - - - -
const int spark::spmv::SimpleSpmvArchitecture::cacheSize
-
-protected
-
- -
-
- -
-
- - - - - -
- - - - -
const int spark::spmv::SimpleSpmvArchitecture::inputWidth
-
-protected
-
- -
-
- -
-
- - - - - -
- - - - -
EigenSparseMatrix spark::spmv::SimpleSpmvArchitecture::mat
-
-protected
-
- -
-
- -
-
- - - - - -
- - - - -
const int spark::spmv::SimpleSpmvArchitecture::maxRows
-
-protected
-
- -
-
- -
-
- - - - - -
- - - - -
const int spark::spmv::SimpleSpmvArchitecture::numPipes
-
-protected
-
- -
-
- -
-
- - - - - -
- - - - -
std::vector<Partition> spark::spmv::SimpleSpmvArchitecture::partitions
-
-protected
-
- -
-
-
The documentation for this class was generated from the following files: -
- - - - diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitecture.png b/classspark_1_1spmv_1_1SimpleSpmvArchitecture.png deleted file mode 100644 index c1f11bf591cfbb7a90b6355eecd30492edc6ca5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2306 zcmb`JeN>WJ9>*~gt+bufw5#T8E#zn>jlEboq-bq{MMhwnrIwYW2u#8QzT`_iM!_K=OJ@ocoN8O zz64nx-=?M}tGq5Z=+lNlz#oJ`ixwXBQ=%_4bQ!x7Lrk_9;f@rQdfQtm+736&hh(t7 zcw2#$Y;2t~y+C(<-3tq9eT{0e$9k59!_FbG1VmLNyEz7AuY??2Vt(6zmT4ux>;&$OpnU`vM zo9$DHwxqg6w>h6X8e$-LV&fo>+`ESxP^aJYXUNT7C*@VXC9@-G+m;Gz53RSa@F~FS z;B3ZsKuE`u6ouL&{tnG{$ZFCv@bJry(YG1p7}g&%_9EDfENFpa9Y3=D`XG0}aHWs^9NZ=w zu-y4NLDy(;JO+fFy_=Y|0h)5Ca&ouT*nI|v9OeL)=N?EbASGbO?o$8v=_Wx$(aAik z!0_g_SO4O+`%6)^D#^_8t8}GcVDv{XM_MO+JJA#0Y3#c1CzSzFcvlx85T3_t4T8NK)7b&P>m& z^Mr4o-P0edz{wSJQ;rP3UmqvNf`ZmF%7%>~9ovJI1|Bj!3|&E)cOjxjj^#?US(c#M zU6a0bZZ#GXe~*_7>e-c{YP;jN3X_ul>;zn(2=T0XARvY5w~cQ56i9E3zUiq#oas`P zr+tWj=l`nJIp)zZUp;$Zvg2!IfbeD>-{f4512zr6n5`A`!AA2hZRQ*z8Ct4820M_P za3CtGp#|>7fRu89vNN@y);W&s6a5xzW!{PvOJSB{SRWYNeGw${dBx9-7TM5m2Yz~4 zPs?(E2yplQPY4*p_!KLU-mo7p+?W4%$V|WLI*1!wcZ7f&bUMdNWApcPN|2r_H0!Yt zY}lnaKnTHMp$?2~1TP}c%B1;9C#@VAA5#VLj-Y};vS=dPXy1QLP`72>_qrLSB)}$l zF7?cx#C*crWjx^C^|sfUVJu#lez=@N#d(y<$mn)}rXQMpP0{Nqy{B-%vnbMzw|#wK zX=YTw*2F8pniA@{u8<5tSM1;rL$H@2PvMb48Br>WSIefV)3~97$(&ZHriVCXYM;~5 zP=&jr`2>?s^a<%WoW;O+(s$ZCDw=4 z_#W1rg_gTFXLejyP_aX0vc53$tyvqEgg5Z6OeE*{z9dAoNM&wwQUbP z`j~57!t$ye-&ea37qC2wXxobKlXK(f%M+yxWck7V<@NnpVi zwGtyn0N!!2-f4J&U>$4~W#_Cv`PRQggeEnA4{r)5>xa zo^)UuP^bf5NcGPWB+ng1o(taT!MAs2>b^Gl2EV^w23P{y@O>{%&qSc2T!Zb z!pvv5@xTJ>lPdhH?svmfdI6#?T+EjwE~|g@+)y@NE9hO(X`t3eWz>_Oh{?XZ8M)d{ z^0-@;bNg}QS^jMZfJtY55SEnUwTB(me*>UE+fM8QJv>AR^K$4^ diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html b/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html deleted file mode 100644 index 60fa7fa..0000000 --- a/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::spmv::SimpleSpmvArchitectureSpace< T > Member List
-
- - - - - diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html b/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html deleted file mode 100644 index b2570a9..0000000 --- a/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - -Spark: spark::spmv::SimpleSpmvArchitectureSpace< T > Class Template Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv::SimpleSpmvArchitectureSpace< T > Class Template Reference
-
-
- -

#include <SimpleSpmv.hpp>

-
-Inheritance diagram for spark::spmv::SimpleSpmvArchitectureSpace< T >:
-
-
- - -spark::spmv::SpmvArchitectureSpace - -
- - - - - - - - - -

-Public Member Functions

 SimpleSpmvArchitectureSpace (spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)
 
 SimpleSpmvArchitectureSpace ()
 
- Public Member Functions inherited from spark::spmv::SpmvArchitectureSpace
std::shared_ptr< SpmvArchitecture > next ()
 
- - - - - -

-Protected Member Functions

void restart () override
 
T * doNext ()
 
- - - - - - - - - - - -

-Private Attributes

spark::utils::Range cacheSizeR {1024, 4096, 512}
 
spark::utils::Range inputWidthR {8, 100, 8}
 
spark::utils::Range numPipesR {1, 6, 1}
 
int maxRows
 
bool last = false
 
-

Constructor & Destructor Documentation

- -
-
-
-template<typename T >
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
spark::spmv::SimpleSpmvArchitectureSpace< T >::SimpleSpmvArchitectureSpace (spark::utils::Range numPipesRange,
spark::utils::Range inputWidthRange,
spark::utils::Range cacheSizeRange,
int _maxRows 
)
-
-inline
-
- -
-
- -
-
-
-template<typename T >
- - - - - -
- - - - - - - -
spark::spmv::SimpleSpmvArchitectureSpace< T >::SimpleSpmvArchitectureSpace ()
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
-
-template<typename T >
- - - - - -
- - - - - - - -
T* spark::spmv::SimpleSpmvArchitectureSpace< T >::doNext ()
-
-inlineprotectedvirtual
-
-
- -
-
-
-template<typename T >
- - - - - -
- - - - - - - -
void spark::spmv::SimpleSpmvArchitectureSpace< T >::restart ()
-
-inlineoverrideprotectedvirtual
-
-
-

Member Data Documentation

- -
-
-
-template<typename T >
- - - - - -
- - - - -
spark::utils::Range spark::spmv::SimpleSpmvArchitectureSpace< T >::cacheSizeR {1024, 4096, 512}
-
-private
-
- -
-
- -
-
-
-template<typename T >
- - - - - -
- - - - -
spark::utils::Range spark::spmv::SimpleSpmvArchitectureSpace< T >::inputWidthR {8, 100, 8}
-
-private
-
- -
-
- -
-
-
-template<typename T >
- - - - - -
- - - - -
bool spark::spmv::SimpleSpmvArchitectureSpace< T >::last = false
-
-private
-
- -
-
- -
-
-
-template<typename T >
- - - - - -
- - - - -
int spark::spmv::SimpleSpmvArchitectureSpace< T >::maxRows
-
-private
-
- -
-
- -
-
-
-template<typename T >
- - - - - -
- - - - -
spark::utils::Range spark::spmv::SimpleSpmvArchitectureSpace< T >::numPipesR {1, 6, 1}
-
-private
-
- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.png b/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.png deleted file mode 100644 index 651f4ff49a3495391a9a31c983e3d7dac7ca61cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1058 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM12~w0Wa25~pFm0?z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op4;)Ij%DpLK%l)w-kD<&W&XvwnSgOOEA^vpsHh>hT#t8xLQf#BaJJ z+j!g4TkIQs-)!f&Il*21OUtv9{cDe2cS!%Tv&bjIJVM}A)E3Q^_nvx6*I!$C+-dF- zd6oQGFAklU_G(pI+oc&6XZo*S=KJ^7?#a7^{E~A&n|GK=ah}cmwQE*R#*KIS-xq$= zGhXt`tR~jh`O~w8bv-$|%Z^{Wn|hr4{ez~M+kda_e&g8sZ_Y%OTKD_>lUh_XgM=n6 z@#yFDyi~sw7HIHL6kiyX?Rz!qbqvG*DRvA&4BV=U4G!}1og4{kRagXGuxbc0>P&56 zNK%z=@bKhN2ohrIn9{9AsL9^&Rr>*Lat^Zd>e}84b zG$VVC?Y%v6hwmh<-0s+5c5XJe!QdE!}?wBJyJJnpx&^GmY;*9l%r?cNkvEJEnYJKQ-_v>p*X6kaj zW#e|btl;jq{Pef^)|v12zguvATaN!W|9MW*b%Gj)U(`h^bLDPPww-b~!+OfGBZ+l; zeyNr2Z+ljIB6j_~7jr(dZ)}jfe0gJBri#h(m#?!ny;fYl9+o)ntW%pm-FCsB51htk<3DI17<}3TVy*9H?U;C~J%+L&;u6{1-oD!M - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::spmv::SkipEmptyRowsArchitecture Member List
-
-
- -

This is the complete list of members for spark::spmv::SkipEmptyRowsArchitecture, including all inherited members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth)spark::spmv::SimpleSpmvArchitectureprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
encodeEmptyRows(std::vector< uint32_t > pin, bool encode)spark::spmv::SkipEmptyRowsArchitectureinlineprotected
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
get_name() overridespark::spmv::SkipEmptyRowsArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) overridespark::spmv::SkipEmptyRowsArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
SkipEmptyRowsArchitecture()spark::spmv::SkipEmptyRowsArchitectureinline
SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SkipEmptyRowsArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
- - - - diff --git a/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html b/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html deleted file mode 100644 index c1f6e89..0000000 --- a/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - -Spark: spark::spmv::SkipEmptyRowsArchitecture Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv::SkipEmptyRowsArchitecture Class Reference
-
-
- -

#include <SimpleSpmv.hpp>

-
-Inheritance diagram for spark::spmv::SkipEmptyRowsArchitecture:
-
-
- - -spark::spmv::SimpleSpmvArchitecture -spark::spmv::SpmvArchitecture -spark::spmv::PrefetchingArchitecture - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

 SkipEmptyRowsArchitecture ()
 
 SkipEmptyRowsArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
-spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
- - - - - - - - - - -

-Protected Member Functions

std::vector< uint32_t > encodeEmptyRows (std::vector< uint32_t > pin, bool encode)
 
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) override
 
- Protected Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
virtual int countComputeCycles (uint32_t *v, int size, int inputWidth)
 
virtual bool equals (const SpmvArchitecture &a) const override
 
- - - - - - - - - - - - - - -

-Additional Inherited Members

- Protected Attributes inherited from spark::spmv::SimpleSpmvArchitecture
const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
std::vector<uint32_t> spark::spmv::SkipEmptyRowsArchitecture::encodeEmptyRows (std::vector< uint32_t > pin,
bool encode 
)
-
-inlineprotected
-
- -
-
- -
-
- - - - - -
- - - - - - - -
virtual std::string spark::spmv::SkipEmptyRowsArchitecture::get_name ()
-
-inlineoverridevirtual
-
- -

Reimplemented from spark::spmv::SimpleSpmvArchitecture.

- -

Reimplemented in spark::spmv::PrefetchingArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
virtual spark::sparse::CsrMatrix spark::spmv::SkipEmptyRowsArchitecture::preprocessBlock (const spark::sparse::CsrMatrix & in,
int blockNumber,
int nBlocks 
)
-
-inlineoverrideprotectedvirtual
-
- -

Reimplemented from spark::spmv::SpmvArchitecture.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.png b/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.png deleted file mode 100644 index 6fe420795c4a266bc465b1595df1b4afe77cdad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1728 zcmb7FdoBrTELSu7ofHnLu~@s4y#m|?o-65FhmBsy*_S(laE zTIw)E;&qz|Q!a^V8q(bM{_33Ge>?B@oagd=&i9Y+^L#$f^Q0a><_cb?vkn9TfzfVG zUVxPWQm3{G&}&z}Hv|6j{gS%6I+fIZ7;sgK@jB)W0v`Q5 z-Obp2AkZ35w39tHUTG@tL*^uWgY(wyY=xp}S1UNzz3*<$myDFO@}f5oQ?s#~kl-Ee zPG}vp7LJi1bYc|^&RLGY(I{nNx5;%_dCW&aQkYDM5yRd-FY{mFwYf2poq){oI+{TG?LX7E zq$AjINP#*3AQP1As*&<^zpiZ9e8)_@VEwo7cdPW<(!lMn4foke?+8GzNcyX0IjI}k zYyK3N)@y(apU^+r;dV#B=&CV%wsVeSEwE>t-fi-F!E7c1#VD$79$apb?OqsM`%RVZ zH?weicJA%CS>@2efsv%>if%FLqZQZRmlP9Qg*hD9!|NRCkIz@ec&f^JvRfAtb(M6b z5it`?CSHY{8#8yR)d*Fzmzko9XYNZpqsDSPOX zE!ol~s$uNI%jyF?CD@c1yX71+WLa<1gV8486Uo8Q%@hUg=g(#WlP5Rv$linvl~ZWO zil-JiJOn-A{U1SJz#AdM$CZCT4}+L{(Irt~237=SzdfK-=I?Z;+*n_S_G< zB-NKvxX4-FU|Zl;p5>vMj*>gK%A=#ggaZ#g&kx_R3B!qnnIrMyMT4$Z$1P1CCwJUi z>QhoDXGt?+@|T{d(fZ`QOV!D+g19QvKHKK%=K>GVL9{Zx2)b zfiz*kTMDB_55FO^j5p%buTriB)Suwob$zcInwm7`3l?n?r9R6(7Z$v6?S(G2B9?Jm zF1Ol}-ey^@SK1d|h-4Jg zG+5Th+l`Ka*Ik2kHOan_DJzzAC14n>89%ADtso8)k^*$)9|9UidvOB*x8lAv~Idd}1sp~_~&Dxwwo)&o^HM9ab zw)_+mZMffsDAdcUJ%0p=B7QlqpvIeL>lUJ-n=a+-vvQLfUGFk#s?d>bS(&I$iBu{+ zO?=L$Kk7Vg(Nn`!bYNGI - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::spmv::SpmvArchitecture Member List
-
-
- -

This is the complete list of members for spark::spmv::SpmvArchitecture, including all inherited members.

- - - - - - - - - - - - - - - -
dfespmv(Eigen::VectorXd x)=0spark::spmv::SpmvArchitecturepure virtual
equals(const SpmvArchitecture &a) const =0spark::spmv::SpmvArchitectureprotectedpure virtual
get_name()=0spark::spmv::SpmvArchitecturepure virtual
getEstimatedClockCycles()=0spark::spmv::SpmvArchitecturepure virtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()=0spark::spmv::SpmvArchitecturepure virtual
getImplementationParameters()=0spark::spmv::SpmvArchitecturepure virtual
operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)spark::spmv::SpmvArchitectureinlineprotectedvirtual
to_string()=0spark::spmv::SpmvArchitecturepure virtual
write_params()=0spark::spmv::SpmvArchitecturepure virtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
- - - - diff --git a/classspark_1_1spmv_1_1SpmvArchitecture.html b/classspark_1_1spmv_1_1SpmvArchitecture.html deleted file mode 100644 index 8430e04..0000000 --- a/classspark_1_1spmv_1_1SpmvArchitecture.html +++ /dev/null @@ -1,522 +0,0 @@ - - - - - - -Spark: spark::spmv::SpmvArchitecture Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv::SpmvArchitecture Class Referenceabstract
-
-
- -

#include <Spmv.hpp>

-
-Inheritance diagram for spark::spmv::SpmvArchitecture:
-
-
- - -spark::spmv::SimpleSpmvArchitecture -spark::spmv::FstSpmvArchitecture -spark::spmv::SkipEmptyRowsArchitecture -spark::spmv::PrefetchingArchitecture - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual double getEstimatedClockCycles ()=0
 
virtual double getGFlopsCount ()=0
 
virtual std::string to_string ()=0
 
virtual
-spark::model::ImplementationParameters 
getImplementationParameters ()=0
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x)=0
 
virtual std::string get_name ()=0
 
virtual boost::property_tree::ptree write_params ()=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
- - - - - -

-Protected Member Functions

virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
 
virtual bool equals (const SpmvArchitecture &a) const =0
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - -
virtual spark::spmv::SpmvArchitecture::~SpmvArchitecture ()
-
-inlinevirtual
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
virtual Eigen::VectorXd spark::spmv::SpmvArchitecture::dfespmv (Eigen::VectorXd x)
-
-pure virtual
-
- -

Implemented in spark::spmv::SimpleSpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - - -
virtual bool spark::spmv::SpmvArchitecture::equals (const SpmvArchitecture & a) const
-
-protectedpure virtual
-
- -

Implemented in spark::spmv::SimpleSpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual std::string spark::spmv::SpmvArchitecture::get_name ()
-
-pure virtual
-
-
- -
-
- - - - - -
- - - - - - - -
virtual double spark::spmv::SpmvArchitecture::getEstimatedClockCycles ()
-
-pure virtual
-
- -

Implemented in spark::spmv::SimpleSpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
double spark::spmv::SpmvArchitecture::getEstimatedGFlops ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
double spark::spmv::SpmvArchitecture::getFrequency ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
virtual double spark::spmv::SpmvArchitecture::getGFlopsCount ()
-
-pure virtual
-
- -

Implemented in spark::spmv::SimpleSpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual spark::model::ImplementationParameters spark::spmv::SpmvArchitecture::getImplementationParameters ()
-
-pure virtual
-
- -

Implemented in spark::spmv::SimpleSpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - - -
bool spark::spmv::SpmvArchitecture::operator== (const SpmvArchitecture & other)
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
virtual void spark::spmv::SpmvArchitecture::preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > & mat)
-
-pure virtual
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
virtual spark::sparse::CsrMatrix spark::spmv::SpmvArchitecture::preprocessBlock (const spark::sparse::CsrMatrix & in,
int blockNumber,
int nBlocks 
)
-
-inlineprotectedvirtual
-
- -

Reimplemented in spark::spmv::SkipEmptyRowsArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual std::string spark::spmv::SpmvArchitecture::to_string ()
-
-pure virtual
-
- -

Implemented in spark::spmv::SimpleSpmvArchitecture.

- -
-
- -
-
- - - - - -
- - - - - - - -
virtual boost::property_tree::ptree spark::spmv::SpmvArchitecture::write_params ()
-
-pure virtual
-
- -

Implemented in spark::spmv::SimpleSpmvArchitecture.

- -
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1spmv_1_1SpmvArchitecture.png b/classspark_1_1spmv_1_1SpmvArchitecture.png deleted file mode 100644 index ba2cf1d84906726e31eb26e724d646b534d9248d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2314 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 - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::spmv::SpmvArchitectureSpace Member List
-
-
- -

This is the complete list of members for spark::spmv::SpmvArchitectureSpace, including all inherited members.

- - - - -
doNext()=0spark::spmv::SpmvArchitectureSpaceprotectedpure virtual
next()spark::spmv::SpmvArchitectureSpaceinline
restart()=0spark::spmv::SpmvArchitectureSpacepure virtual
- - - - diff --git a/classspark_1_1spmv_1_1SpmvArchitectureSpace.html b/classspark_1_1spmv_1_1SpmvArchitectureSpace.html deleted file mode 100644 index bc58daf..0000000 --- a/classspark_1_1spmv_1_1SpmvArchitectureSpace.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - -Spark: spark::spmv::SpmvArchitectureSpace Class Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv::SpmvArchitectureSpace Class Referenceabstract
-
-
- -

#include <Spmv.hpp>

-
-Inheritance diagram for spark::spmv::SpmvArchitectureSpace:
-
-
- - -spark::spmv::SimpleSpmvArchitectureSpace< T > - -
- - - - - - -

-Public Member Functions

std::shared_ptr< SpmvArchitecture > next ()
 
virtual void restart ()=0
 
- - - -

-Protected Member Functions

virtual SpmvArchitecture * doNext ()=0
 
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
virtual SpmvArchitecture* spark::spmv::SpmvArchitectureSpace::doNext ()
-
-protectedpure virtual
-
-
- -
-
- - - - - -
- - - - - - - -
std::shared_ptr<SpmvArchitecture> spark::spmv::SpmvArchitectureSpace::next ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
virtual void spark::spmv::SpmvArchitectureSpace::restart ()
-
-pure virtual
-
-
-
The documentation for this class was generated from the following file: -
- - - - diff --git a/classspark_1_1spmv_1_1SpmvArchitectureSpace.png b/classspark_1_1spmv_1_1SpmvArchitectureSpace.png deleted file mode 100644 index 51861730be057d4fbe9b97472733b89c239abcc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1065 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM12~w0Wa25~pFm0?z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opMPpzYHryN6mY4e47C$_EDTl)6*$JM>B zH@?4rM!q^uvUG{nd8WTJbh2b?1l|{^zqM}3vD|UC$IVVXJ|p1GhpkVXd0*b@$=&(Q zF-Q2fu9Ml5i=4I#D?cSm#52#mnEiCdg}e<4SGHyZ2kkvQ*Q{=RaDS_nr@hBLlZ&kr zb+3l<@-8(joFTt{x9p$WwI}W#y!T?xXZFHe6QNm`zm%HZys+VJ{5$8zv1uM(bARlr zYI|~)F;?oaqpDKFQlQY9C(Phb zMhkQ*abLa{T($Mu{w3~fxBgQNRMk}V3|3Y2?3&V|q8TJKX^DrY$0Vh_>LDsG+fIEp zE`J>->o&>cx<&P#O1rk5M}zX4J+dCB+7|yPbejG1&hovyJ$}s$hud53u}xH2ys}Wa zJhPMs3FQM7dO1-r+K_RV|FcK-d@-NgouJ*U4; zxZ>uMasRQ{hTCsvF7Mh^X!~vL%%92D*A{#?bNf8iD(LPf*H_0?HkE#G+;jS;`kAiH z)i;GVJ$>+~$IbcHx(gv!jwRe$<)w8Omqi@c%yEBe_nG)NcxbK+G z`i zO08VcTehUVNFulW(hQ3;{o(hQ*sWh!DPMGbwYk;vKaM(+Brjjy7?-JHvi#-itWB>K zm#_c6@S~pbl3!+b)~U^(ZoA-aL3yNc)Y_EWTdi-u)3c7NU>ARK>gDS4$OPq+J^ej) zMLYIRQn`E8yjcYr^pliTJT*OYVO)4j*m7Qt%3gIX>iIAJ$Y$$FtC(l!1M@Y5r>mdK II;Vst0Gu}JuK)l5 diff --git a/closed.png b/closed.png deleted file mode 100644 index 98cc2c909da37a6df914fbf67780eebd99c597f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT diff --git a/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html b/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html deleted file mode 100644 index c18c055..0000000 --- a/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -Spark: src/bicg/src Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
src Directory Reference
-
-
- - - - -

-Files

file  BiConjugateGradient.cpp
 
-
- - - - diff --git a/dir_16dc92632bab467dc50b01bd02b3341a.html b/dir_16dc92632bab467dc50b01bd02b3341a.html deleted file mode 100644 index 76fdef4..0000000 --- a/dir_16dc92632bab467dc50b01bd02b3341a.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -Spark: src/device Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
device Directory Reference
-
-
- - - - -

-Files

file  SpmvDeviceInterfaceMock.cpp
 
-
- - - - diff --git a/dir_376f1c4177942cba0305052d5eaaa828.html b/dir_376f1c4177942cba0305052d5eaaa828.html deleted file mode 100644 index 8449aab..0000000 --- a/dir_376f1c4177942cba0305052d5eaaa828.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -Spark: src/cg/src Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
src Directory Reference
-
-
- - - - -

-Files

file  ConjugateGradient.cpp
 
-
- - - - diff --git a/dir_55daf1889a6971c13f7bc2c2ab706314.html b/dir_55daf1889a6971c13f7bc2c2ab706314.html deleted file mode 100644 index 897c693..0000000 --- a/dir_55daf1889a6971c13f7bc2c2ab706314.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -Spark: src/cg Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
cg Directory Reference
-
-
- - - - -

-Directories

directory  src
 
-
- - - - diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html deleted file mode 100644 index 52c6219..0000000 --- a/dir_68267d1309a1af8e8297ef4c3efbcdba.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -Spark: src Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
src Directory Reference
-
-
- - - - - - - - - - - - -

-Directories

directory  bicg
 
directory  cg
 
directory  device
 
directory  dse
 
directory  spmv
 
- - - - - -

-Files

file  main.cpp
 
file  SparseLinearSolvers.cpp
 
-
- - - - diff --git a/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html b/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html deleted file mode 100644 index 3ad2ec5..0000000 --- a/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -Spark: src/bicg Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
bicg Directory Reference
-
-
- - - - -

-Directories

directory  src
 
-
- - - - diff --git a/dir_817fd82c291ca2ce5189d4384ec10041.html b/dir_817fd82c291ca2ce5189d4384ec10041.html deleted file mode 100644 index 662a280..0000000 --- a/dir_817fd82c291ca2ce5189d4384ec10041.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -Spark: src/spmv Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
spmv Directory Reference
-
-
- - - - -

-Directories

directory  src
 
-
- - - - diff --git a/dir_bcdd1c0198fc998763f86146a43d3c64.html b/dir_bcdd1c0198fc998763f86146a43d3c64.html deleted file mode 100644 index eae8bcf..0000000 --- a/dir_bcdd1c0198fc998763f86146a43d3c64.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - - - -Spark: include/Spark Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
Spark Directory Reference
-
-
- - - - -

-Directories

directory  device
 
- - - - - - - - - - - - - - - - - - - - - -

-Files

file  Converters.hpp [code]
 
file  Dse.hpp [code]
 
file  Io.hpp [code]
 
file  Model.hpp [code]
 
file  SimpleSpmv.hpp [code]
 
file  SparseLinearSolvers.hpp [code]
 
file  SparseMatrix.hpp [code]
 
file  Spmv.hpp [code]
 
file  UserInput.hpp [code]
 
file  Utils.hpp [code]
 
-
- - - - diff --git a/dir_d44c64559bbebec7f509842c48db8b23.html b/dir_d44c64559bbebec7f509842c48db8b23.html deleted file mode 100644 index 05a5edd..0000000 --- a/dir_d44c64559bbebec7f509842c48db8b23.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -Spark: include Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
include Directory Reference
-
-
- - - - -

-Directories

directory  Spark
 
-
- - - - diff --git a/dir_d7c482895ed73b33d89221a7692a7a0a.html b/dir_d7c482895ed73b33d89221a7692a7a0a.html deleted file mode 100644 index a2a5798..0000000 --- a/dir_d7c482895ed73b33d89221a7692a7a0a.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -Spark: src/dse Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
dse Directory Reference
-
-
- - - - -

-Files

file  Dse.cpp
 
-
- - - - diff --git a/dir_d8b7011e84264c6173d8b11c4e58b2d3.html b/dir_d8b7011e84264c6173d8b11c4e58b2d3.html deleted file mode 100644 index 1cdafaf..0000000 --- a/dir_d8b7011e84264c6173d8b11c4e58b2d3.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -Spark: src/spmv/src Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
src Directory Reference
-
-
- - - - - - - - - - - - -

-Files

file  ParallelCsrReadControl.java
 
file  Spmv.cpp
 
file  SpmvDeviceInterface.cpp
 
file  SpmvKernel.java
 
file  SpmvManager.java
 
-
- - - - diff --git a/dir_e1e695598025e13caf4d9e666dd56479.html b/dir_e1e695598025e13caf4d9e666dd56479.html deleted file mode 100644 index 72f18ac..0000000 --- a/dir_e1e695598025e13caf4d9e666dd56479.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - -Spark: include/Spark/device Directory Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- - -
-
-
-
device Directory Reference
-
-
- - - - -

-Files

file  SpmvDeviceInterface.h [code]
 
-
- - - - diff --git a/doxygen.conf b/doxygen.conf deleted file mode 100644 index 2ec9ec3..0000000 --- a/doxygen.conf +++ /dev/null @@ -1,1869 +0,0 @@ -# Doxyfile 1.8.3.1 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" "). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or sequence of words) that should -# identify the project. Note that if you do not use Doxywizard you need -# to put quotes around the project name if it contains spaces. - -PROJECT_NAME = "Spark" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. Note that you specify absolute paths here, but also -# relative paths, which will be relative from the directory where doxygen is -# started. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 4 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding -# "class=itcl::class" will allow you to use the command class in the -# itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, -# and language is one of the parsers supported by doxygen: IDL, Java, -# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, -# C++. For instance to make doxygen treat .inc files as Fortran files (default -# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note -# that for custom extensions you also need to set FILE_PATTERNS otherwise the -# files are not read by doxygen. - -EXTENSION_MAPPING = - -# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all -# comments according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you -# can mix doxygen, HTML, and XML commands with Markdown formatting. -# Disable only in case of backward compatibilities issues. - -MARKDOWN_SUPPORT = YES - -# When enabled doxygen tries to link words that correspond to documented classes, -# or namespaces to their corresponding documentation. Such a link can be -# prevented in individual cases by by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES (the -# default) will make doxygen replace the get and set methods by a property in -# the documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and -# unions with only public data fields will be shown inline in the documentation -# of the scope in which they are defined (i.e. file, namespace, or group -# documentation), provided this scope is documented. If set to NO (the default), -# structs, classes, and unions are shown on a separate page (for HTML and Man -# pages) or section (for LaTeX and RTF). - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -SYMBOL_CACHE_SIZE = 0 - -# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be -# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given -# their name and scope. Since this can be an expensive process and often the -# same symbol appear multiple times in the code, doxygen keeps a cache of -# pre-resolved symbols. If the cache is too small doxygen will become slower. -# If the cache is too large, memory is wasted. The cache size is given by this -# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal -# scope will be included in the documentation. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if section-label ... \endif -# and \cond section-label ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files -# containing the references data. This must be a list of .bib files. The -# .bib extension is automatically appended if omitted. Using this command -# requires the bibtex tool to be installed. See also -# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style -# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this -# feature you need bibtex and perl available in the search path. Do not use -# file names with spaces, bibtex cannot handle them. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = "include" "src" "README.md" - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = YES - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page (index.html). -# This can be useful if you have a project on for instance GitHub and want reuse -# the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C, C++ and Fortran comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is advised to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when -# changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If left blank doxygen will -# generate a default style sheet. Note that it is recommended to use -# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this -# tag will in the future become obsolete. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional -# user-defined cascading style sheet that is included after the standard -# style sheets created by doxygen. Using this option one can overrule -# certain style aspects. This is preferred over using HTML_STYLESHEET -# since it does not replace the standard style sheet and is therefor more -# robust against future updates. Doxygen will copy the style sheet file to -# the output directory. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the style sheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of -# entries shown in the various tree structured indices initially; the user -# can expand and collapse entries dynamically later on. Doxygen will expand -# the tree to such a level that at most the specified number of entries are -# visible (unless a fully collapsed tree already exceeds this amount). -# So setting the number of entries 1 will produce a full collapsed tree by -# default. 0 is a special value representing an infinite number of entries -# and will result in a full expanded tree by default. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely -# identify the documentation publisher. This should be a reverse domain-name -# style string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) -# at top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. Since the tabs have the same information as the -# navigation tree you can set this option to NO if you already set -# GENERATE_TREEVIEW to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. -# Since the tree basically has the same information as the tab index you -# could consider to set DISABLE_INDEX to NO when enabling this option. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you may also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and -# SVG. The default value is HTML-CSS, which is slower, but has the best -# compatibility. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to -# the MathJax Content Delivery Network so you can quickly see the result without -# installing MathJax. -# However, it is strongly recommended to install a local -# copy of MathJax from http://www.mathjax.org before deployment. - -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest - -# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension -# names that should be enabled during MathJax rendering. - -MATHJAX_EXTENSIONS = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. -# There are two flavours of web server based search depending on the -# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for -# searching and an index file used by the script. When EXTERNAL_SEARCH is -# enabled the indexing and searching needs to be provided by external tools. -# See the manual for details. - -SERVER_BASED_SEARCH = NO - -# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP -# script for searching. Instead the search results are written to an XML file -# which needs to be processed by an external indexer. Doxygen will invoke an -# external search engine pointed to by the SEARCHENGINE_URL option to obtain -# the search results. Doxygen ships with an example indexer (doxyindexer) and -# search engine (doxysearch.cgi) which are based on the open source search engine -# library Xapian. See the manual for configuration details. - -EXTERNAL_SEARCH = NO - -# The SEARCHENGINE_URL should point to a search engine hosted by a web server -# which will returned the search results when EXTERNAL_SEARCH is enabled. -# Doxygen ships with an example search engine (doxysearch) which is based on -# the open source search engine library Xapian. See the manual for configuration -# details. - -SEARCHENGINE_URL = - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed -# search data is written to a file for indexing by an external tool. With the -# SEARCHDATA_FILE tag the name of this file can be specified. - -SEARCHDATA_FILE = searchdata.xml - -# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the -# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is -# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple -# projects and redirect the results back to the right project. - -EXTERNAL_SEARCH_ID = - -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen -# projects other than the one defined by this configuration file, but that are -# all added to the same external search index. Each project needs to have a -# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id -# of to a relative location where the documentation can be found. -# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ... - -EXTRA_SEARCH_MAPPINGS = - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = YES - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See -# http://en.wikipedia.org/wiki/BibTeX for more info. - -LATEX_BIB_STYLE = plain - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load style sheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. -# This is useful -# if you want to understand what is going on. -# On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. For each -# tag file the location of the external documentation should be added. The -# format of a tag file without this location is as follows: -# -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths -# or URLs. Note that each tag file must have a unique name (where the name does -# NOT include the path). If a tag file is not located in the directory in which -# doxygen is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will use the Helvetica font for all dot files that -# doxygen generates. When you want a differently looking font you can specify -# the font name using DOT_FONTNAME. You need to make sure dot is able to find -# the font, which can be done by putting it in a standard location or by setting -# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the -# directory containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the Helvetica font. -# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to -# set the path where dot can find it. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside -# the class node. If there are many fields or methods and many nodes the -# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS -# threshold limits the number of items for each type to make the size more -# managable. Set this to 0 for no limit. Note that the threshold may be -# exceeded by 50% before the limit is enforced. - -UML_LIMIT_NUM_FIELDS = 10 - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. If you choose svg you need to set -# HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible in IE 9+ (other browsers do not have this requirement). - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# Note that this requires a modern browser other than Internet Explorer. -# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you -# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files -# visible. Older versions of IE do not have SVG support. - -INTERACTIVE_SVG = NO - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/doxygen.css b/doxygen.css deleted file mode 100644 index dabaff2..0000000 --- a/doxygen.css +++ /dev/null @@ -1,1184 +0,0 @@ -/* The standard CSS for doxygen 1.8.3.1 */ - -body, table, div, p, dl { - font: 400 14px/19px Roboto,sans-serif; -} - -/* @group Heading Levels */ - -h1.groupheader { - font-size: 150%; -} - -.title { - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2.groupheader { - border-bottom: 1px solid #879ECB; - color: #354C7B; - font-size: 150%; - font-weight: normal; - margin-top: 1.75em; - padding-top: 8px; - padding-bottom: 4px; - width: 100%; -} - -h3.groupheader { - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - -webkit-transition: text-shadow 0.5s linear; - -moz-transition: text-shadow 0.5s linear; - -ms-transition: text-shadow 0.5s linear; - -o-transition: text-shadow 0.5s linear; - transition: text-shadow 0.5s linear; - margin-right: 15px; -} - -h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { - text-shadow: 0 0 15px cyan; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd, p.starttd { - margin-top: 2px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code, a.code:visited { - color: #4665A2; -} - -a.codeRef, a.codeRef:visited { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; - font-family: monospace, fixed; - font-size: 105%; -} - -div.fragment { - padding: 4px; - margin: 4px; - background-color: #FBFCFD; - border: 1px solid #C4CFE5; -} - -div.line { - font-family: monospace, fixed; - font-size: 13px; - min-height: 13px; - line-height: 1.0; - text-wrap: unrestricted; - white-space: -moz-pre-wrap; /* Moz */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ - white-space: pre-wrap; /* CSS3 */ - word-wrap: break-word; /* IE 5.5+ */ - text-indent: -53px; - padding-left: 53px; - padding-bottom: 0px; - margin: 0px; - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -div.line.glow { - background-color: cyan; - box-shadow: 0 0 10px cyan; -} - - -span.lineno { - padding-right: 4px; - text-align: right; - border-right: 2px solid #0F0; - background-color: #E8E8E8; - white-space: pre; -} -span.lineno a { - background-color: #D8D8D8; -} - -span.lineno a:hover { - background-color: #C8C8C8; -} - -div.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background-color: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 12px; - margin-right: 8px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; - white-space: nowrap; - vertical-align: top; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -blockquote { - background-color: #F7F8FB; - border-left: 2px solid #9CAFD4; - margin: 0 24px 0 4px; - padding: 0 12px 0 16px; -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.memberdecls td, .fieldtable tr { - -webkit-transition-property: background-color, box-shadow; - -webkit-transition-duration: 0.5s; - -moz-transition-property: background-color, box-shadow; - -moz-transition-duration: 0.5s; - -ms-transition-property: background-color, box-shadow; - -ms-transition-duration: 0.5s; - -o-transition-property: background-color, box-shadow; - -o-transition-duration: 0.5s; - transition-property: background-color, box-shadow; - transition-duration: 0.5s; -} - -.memberdecls td.glow, .fieldtable tr.glow { - background-color: cyan; - box-shadow: 0 0 15px cyan; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memSeparator { - border-bottom: 1px solid #DEE4F0; - line-height: 1px; - margin: 0px; - padding: 0px; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; - font-size: 80%; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; - -webkit-transition: box-shadow 0.5s linear; - -moz-transition: box-shadow 0.5s linear; - -ms-transition: box-shadow 0.5s linear; - -o-transition: box-shadow 0.5s linear; - transition: box-shadow 0.5s linear; - display: table !important; - width: 100%; -} - -.memitem.glow { - box-shadow: 0 0 15px cyan; -} - -.memname { - font-weight: bold; - margin-left: 6px; -} - -.memname td { - vertical-align: bottom; -} - -.memproto, dl.reflist dt { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 4px; - border-top-left-radius: 4px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - -} - -.memdoc, dl.reflist dd { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 10px 2px 10px; - background-color: #FBFCFD; - border-top-width: 0; - background-image:url('nav_g.png'); - background-repeat:repeat-x; - background-color: #FFFFFF; - /* opera specific markup */ - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-bottomright: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -dl.reflist dt { - padding: 5px; -} - -dl.reflist dd { - margin: 0px 0px 10px 0px; - padding: 5px; -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} -.paramname code { - line-height: 14px; -} - -.params, .retval, .exception, .tparams { - margin-left: 0px; - padding-left: 0px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - -table.mlabels { - border-spacing: 0px; -} - -td.mlabels-left { - width: 100%; - padding: 0px; -} - -td.mlabels-right { - vertical-align: bottom; - padding: 0px; - white-space: nowrap; -} - -span.mlabels { - margin-left: 8px; -} - -span.mlabel { - background-color: #728DC1; - border-top:1px solid #5373B4; - border-left:1px solid #5373B4; - border-right:1px solid #C4CFE5; - border-bottom:1px solid #C4CFE5; - text-shadow: none; - color: white; - margin-right: 4px; - padding: 2px 3px; - border-radius: 3px; - font-size: 7pt; - white-space: nowrap; - vertical-align: middle; -} - - - -/* @end */ - -/* these are for tree view when not used as main index */ - -div.directory { - margin: 10px 0px; - border-top: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - width: 100%; -} - -.directory table { - border-collapse:collapse; -} - -.directory td { - margin: 0px; - padding: 0px; - vertical-align: top; -} - -.directory td.entry { - white-space: nowrap; - padding-right: 6px; -} - -.directory td.entry a { - outline:none; -} - -.directory td.entry a img { - border: none; -} - -.directory td.desc { - width: 100%; - padding-left: 6px; - padding-right: 6px; - padding-top: 3px; - border-left: 1px solid rgba(0,0,0,0.05); -} - -.directory tr.even { - padding-left: 6px; - background-color: #F7F8FB; -} - -.directory img { - vertical-align: -30%; -} - -.directory .levels { - white-space: nowrap; - width: 100%; - text-align: right; - font-size: 9pt; -} - -.directory .levels span { - cursor: pointer; - padding-left: 2px; - padding-right: 2px; - color: #3D578C; -} - -div.dynheader { - margin-top: 8px; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable { - border-collapse:collapse; - margin-top: 4px; - margin-bottom: 4px; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; -} - -table.fieldtable { - /*width: 100%;*/ - margin-bottom: 10px; - border: 1px solid #A8B8D9; - border-spacing: 0px; - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); - box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); -} - -.fieldtable td, .fieldtable th { - padding: 3px 7px 2px; -} - -.fieldtable td.fieldtype, .fieldtable td.fieldname { - white-space: nowrap; - border-right: 1px solid #A8B8D9; - border-bottom: 1px solid #A8B8D9; - vertical-align: top; -} - -.fieldtable td.fieldname { - padding-top: 5px; -} - -.fieldtable td.fielddoc { - border-bottom: 1px solid #A8B8D9; - /*width: 100%;*/ -} - -.fieldtable td.fielddoc p:first-child { - margin-top: 2px; -} - -.fieldtable td.fielddoc p:last-child { - margin-bottom: 2px; -} - -.fieldtable tr:last-child td { - border-bottom: none; -} - -.fieldtable th { - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - font-size: 90%; - color: #253555; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; - -moz-border-radius-topleft: 4px; - -moz-border-radius-topright: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - border-bottom: 1px solid #A8B8D9; -} - - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - background-position: 0 -5px; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; - color: #283A5D; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -div.ingroups -{ - font-size: 8pt; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -dl -{ - padding: 0 0 0 10px; -} - -/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ -dl.section -{ - margin-left: 0px; - padding-left: 0px; -} - -dl.note -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00D000; -} - -dl.deprecated -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #505050; -} - -dl.todo -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #00C0E0; -} - -dl.test -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #3030E0; -} - -dl.bug -{ - margin-left:-7px; - padding-left: 3px; - border-left:4px solid; - border-color: #C08050; -} - -dl.section dd { - margin-bottom: 6px; -} - - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - -div.zoom -{ - border: 1px solid #90A5CE; -} - -dl.citelist { - margin-bottom:50px; -} - -dl.citelist dt { - color:#334975; - float:left; - font-weight:bold; - margin-right:10px; - padding:5px; -} - -dl.citelist dd { - margin:2px 0; - padding:5px 0; -} - -div.toc { - padding: 14px 25px; - background-color: #F4F6FA; - border: 1px solid #D8DFEE; - border-radius: 7px 7px 7px 7px; - float: right; - height: auto; - margin: 0 20px 10px 10px; - width: 200px; -} - -div.toc li { - background: url("bdwn.png") no-repeat scroll 0 5px transparent; - font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; - margin-top: 5px; - padding-left: 10px; - padding-top: 2px; -} - -div.toc h3 { - font: bold 12px/1.2 Arial,FreeSans,sans-serif; - color: #4665A2; - border-bottom: 0 none; - margin: 0; -} - -div.toc ul { - list-style: none outside none; - border: medium none; - padding: 0px; -} - -div.toc li.level1 { - margin-left: 0px; -} - -div.toc li.level2 { - margin-left: 15px; -} - -div.toc li.level3 { - margin-left: 30px; -} - -div.toc li.level4 { - margin-left: 45px; -} - -.inherit_header { - font-weight: bold; - color: gray; - cursor: pointer; - -webkit-touch-callout: none; - -webkit-user-select: none; - -khtml-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.inherit_header td { - padding: 6px 0px 2px 5px; -} - -.inherit { - display: none; -} - -tr.heading h2 { - margin-top: 12px; - margin-bottom: 4px; -} - -@media print -{ - #top { display: none; } - #side-nav { display: none; } - #nav-path { display: none; } - body { overflow:visible; } - h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } - .summary { display: none; } - .memitem { page-break-inside: avoid; } - #doc-content - { - margin-left:0 !important; - height:auto !important; - width:auto !important; - overflow:inherit; - display:inline; - } -} - diff --git a/doxygen.png b/doxygen.png deleted file mode 100644 index 3ff17d807fd8aa003bed8bb2a69e8f0909592fd1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3779 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 diff --git a/dynsections.js b/dynsections.js deleted file mode 100644 index ed092c7..0000000 --- a/dynsections.js +++ /dev/null @@ -1,97 +0,0 @@ -function toggleVisibility(linkObj) -{ - var base = $(linkObj).attr('id'); - var summary = $('#'+base+'-summary'); - var content = $('#'+base+'-content'); - var trigger = $('#'+base+'-trigger'); - var src=$(trigger).attr('src'); - if (content.is(':visible')===true) { - content.hide(); - summary.show(); - $(linkObj).addClass('closed').removeClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); - } else { - content.show(); - summary.hide(); - $(linkObj).removeClass('closed').addClass('opened'); - $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); - } - return false; -} - -function updateStripes() -{ - $('table.directory tr'). - removeClass('even').filter(':visible:even').addClass('even'); -} -function toggleLevel(level) -{ - $('table.directory tr').each(function(){ - var l = this.id.split('_').length-1; - var i = $('#img'+this.id.substring(3)); - var a = $('#arr'+this.id.substring(3)); - if (l - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
ParallelCsrReadControl.Mode Member List
-
- - - - - diff --git a/enumParallelCsrReadControl_1_1Mode.html b/enumParallelCsrReadControl_1_1Mode.html deleted file mode 100644 index ebcceae..0000000 --- a/enumParallelCsrReadControl_1_1Mode.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - -Spark: ParallelCsrReadControl.Mode Enum Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
ParallelCsrReadControl.Mode Enum Reference
-
-
- - - - - - - - - - -

-Public Attributes

 VectorLoad
 
 ReadingLength
 
 OutputtingCommands
 
 Done
 
-

Member Data Documentation

- -
-
- - - - -
ParallelCsrReadControl.Mode.Done
-
- -
-
- -
-
- - - - -
ParallelCsrReadControl.Mode.OutputtingCommands
-
- -
-
- -
-
- - - - -
ParallelCsrReadControl.Mode.ReadingLength
-
- -
-
- -
-
- - - - -
ParallelCsrReadControl.Mode.VectorLoad
-
- -
-
-
The documentation for this enum was generated from the following file: -
- - - - diff --git a/files.html b/files.html deleted file mode 100644 index 3322e0b..0000000 --- a/files.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -Spark: File List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - -
- - - - -
- -
- -
-
-
File List
-
- - - - - diff --git a/ftv2blank.png b/ftv2blank.png deleted file mode 100644 index 63c605bb4c3d941c921a4b6cfa74951e946bcb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka diff --git a/ftv2cl.png b/ftv2cl.png deleted file mode 100644 index 132f6577bf7f085344904602815a260d29f55d9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmV;$0XqJPP)VBF;ev;toEj8_OB0EQg5eYilIj#JZG_m^33l3^k4mtzx!TVD?g)Y$ zrvwRDSqT!wLIM$dWCIa$vtxE|mzbTzu-y&$FvF6WA2a{Wr1g}`WdPT-0JzEZ0IxAv z-Z+ejZc&H;I5-pb_SUB}04j0^V)3t{`z<7asDl2Tw3w3sP%)0^8$bhEg)IOTBcRXv zFfq~3&gvJ$F-U7mpBW8z1GY~HK&7h4^YI~Orv~wLnC0PP_dAkv;nzX{9Q|8Gv=2ca z@v)c9T;D#h`TZ2X&&$ff2wedmot995de~-s3I)yauahg;7qn*?1n?F$e+PwP37}~; z1NKUk7reVK^7A;$QRW7qAx40HHUZ<|k3U%nz(Ec`#i+q9K!dgcROAlCS?`L= v>#=f?wF5ZND!1uAfQsk;KN^4&*8~0npJiJ%2dj9(00000NkvXXu0mjfWVFf_ diff --git a/ftv2doc.png b/ftv2doc.png deleted file mode 100644 index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/ftv2folderclosed.png b/ftv2folderclosed.png deleted file mode 100644 index bb8ab35edce8e97554e360005ee9fc5bffb36e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA diff --git a/ftv2lastnode.png b/ftv2lastnode.png deleted file mode 100644 index 63c605bb4c3d941c921a4b6cfa74951e946bcb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka diff --git a/ftv2link.png b/ftv2link.png deleted file mode 100644 index 17edabff95f7b8da13c9516a04efe05493c29501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t diff --git a/ftv2mlastnode.png b/ftv2mlastnode.png deleted file mode 100644 index 0b63f6d38c4b9ec907b820192ebe9724ed6eca22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 diff --git a/ftv2mnode.png b/ftv2mnode.png deleted file mode 100644 index 0b63f6d38c4b9ec907b820192ebe9724ed6eca22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 diff --git a/ftv2mo.png b/ftv2mo.png deleted file mode 100644 index 4bfb80f76e65815989a9350ad79d8ce45380e2b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 403 zcmV;E0c`$>P)${!fXv7NWJ%@%u4(KapRY>T6_x;E zxE7kt!}Tiw8@d9Sd`rTGum>z#Q14vIm`wm1#-byD1muMi02@YNO5LRF0o!Y{`a!Ya z{^&p0Su|s705&2QxmqdexG+-zNKL3f@8gTQSJrKByfo+oNJ^-{|Mn||Q5SDwjQVsS zr1}7o5-QMs>gYIMD>GRw@$lT`z4r-_m{5U#cR{urD_)TOeY)(UD|qZ^&y`IVijqk~ xs(9-kWFr7E^!lgi8GsFK5kOY_{Xbgf0^etEU%fLevs?fG002ovPDHLkV1nB&vX1}& diff --git a/ftv2node.png b/ftv2node.png deleted file mode 100644 index 63c605bb4c3d941c921a4b6cfa74951e946bcb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka diff --git a/ftv2ns.png b/ftv2ns.png deleted file mode 100644 index 72e3d71c2892d6f00e259facebc88b45f6db2e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 388 zcmV-~0ek+5P)f+++#cT|!CkD&4pnIkeMEUEM*>`*9>+Juji$!h-mW%M^8s9957{3nvbrz^&=u<~TAUrFROkmt%^F~Ez+-c53Lv%iH3d38!Rv?K zrb&MYAhp;Gf<}wS;9ZZq2@;!uYG;=Z>~GKE^{HD4keu}lnyqhc>kWX^tQn|warJ~h zT+rtMkdz6aHoN%z(o|&wpu@@OpJnF_z{PA)6(FHw02iHslz^(N{4*+K9)QJHR87wT iTyp>aXaF{u2lxRou|^4tux6eB0000^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K diff --git a/ftv2pnode.png b/ftv2pnode.png deleted file mode 100644 index c6ee22f937a07d1dbfc27c669d11f8ed13e2f152..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K diff --git a/ftv2splitbar.png b/ftv2splitbar.png deleted file mode 100644 index fe895f2c58179b471a22d8320b39a4bd7312ec8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T diff --git a/ftv2vertline.png b/ftv2vertline.png deleted file mode 100644 index 63c605bb4c3d941c921a4b6cfa74951e946bcb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka diff --git a/functions.html b/functions.html deleted file mode 100644 index fcda033..0000000 --- a/functions.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- a -

-
- - - - diff --git a/functions_0x62.html b/functions_0x62.html deleted file mode 100644 index 8727ead..0000000 --- a/functions_0x62.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- b -

-
- - - - diff --git a/functions_0x63.html b/functions_0x63.html deleted file mode 100644 index 964a838..0000000 --- a/functions_0x63.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- c -

-
- - - - diff --git a/functions_0x64.html b/functions_0x64.html deleted file mode 100644 index a970fac..0000000 --- a/functions_0x64.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- d -

-
- - - - diff --git a/functions_0x65.html b/functions_0x65.html deleted file mode 100644 index 76e8227..0000000 --- a/functions_0x65.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- e -

-
- - - - diff --git a/functions_0x66.html b/functions_0x66.html deleted file mode 100644 index 4c26030..0000000 --- a/functions_0x66.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- f -

-
- - - - diff --git a/functions_0x67.html b/functions_0x67.html deleted file mode 100644 index 588945e..0000000 --- a/functions_0x67.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- g -

-
- - - - diff --git a/functions_0x69.html b/functions_0x69.html deleted file mode 100644 index 2b026be..0000000 --- a/functions_0x69.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- i -

-
- - - - diff --git a/functions_0x6c.html b/functions_0x6c.html deleted file mode 100644 index d470d7d..0000000 --- a/functions_0x6c.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- l -

-
- - - - diff --git a/functions_0x6d.html b/functions_0x6d.html deleted file mode 100644 index 54872f9..0000000 --- a/functions_0x6d.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- m -

-
- - - - diff --git a/functions_0x6e.html b/functions_0x6e.html deleted file mode 100644 index bdd703f..0000000 --- a/functions_0x6e.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- n -

-
- - - - diff --git a/functions_0x6f.html b/functions_0x6f.html deleted file mode 100644 index e629549..0000000 --- a/functions_0x6f.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- o -

-
- - - - diff --git a/functions_0x70.html b/functions_0x70.html deleted file mode 100644 index 5249744..0000000 --- a/functions_0x70.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- p -

-
- - - - diff --git a/functions_0x72.html b/functions_0x72.html deleted file mode 100644 index 872111e..0000000 --- a/functions_0x72.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- r -

-
- - - - diff --git a/functions_0x73.html b/functions_0x73.html deleted file mode 100644 index 1371cfb..0000000 --- a/functions_0x73.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- s -

-
- - - - diff --git a/functions_0x74.html b/functions_0x74.html deleted file mode 100644 index dc1615d..0000000 --- a/functions_0x74.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- t -

-
- - - - diff --git a/functions_0x75.html b/functions_0x75.html deleted file mode 100644 index c962e3d..0000000 --- a/functions_0x75.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- u -

-
- - - - diff --git a/functions_0x76.html b/functions_0x76.html deleted file mode 100644 index 63f7db9..0000000 --- a/functions_0x76.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- v -

-
- - - - diff --git a/functions_0x77.html b/functions_0x77.html deleted file mode 100644 index 174df71..0000000 --- a/functions_0x77.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- w -

-
- - - - diff --git a/functions_0x7a.html b/functions_0x7a.html deleted file mode 100644 index 36ecb98..0000000 --- a/functions_0x7a.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- z -

-
- - - - diff --git a/functions_0x7e.html b/functions_0x7e.html deleted file mode 100644 index 2f36efa..0000000 --- a/functions_0x7e.html +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - -Spark: Class Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all class members with links to the classes they belong to:
- -

- ~ -

-
- - - - diff --git a/functions_func.html b/functions_func.html deleted file mode 100644 index 98081eb..0000000 --- a/functions_func.html +++ /dev/null @@ -1,516 +0,0 @@ - - - - - - -Spark: Class Members - Functions - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- u -

- - -

- w -

- - -

- z -

- - -

- ~ -

-
- - - - diff --git a/functions_type.html b/functions_type.html deleted file mode 100644 index 87fd1f2..0000000 --- a/functions_type.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - -Spark: Class Members - Typedefs - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - -
- - - - -
- -
- - - - - - diff --git a/functions_vars.html b/functions_vars.html deleted file mode 100644 index e7298de..0000000 --- a/functions_vars.html +++ /dev/null @@ -1,499 +0,0 @@ - - - - - - -Spark: Class Members - Variables - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- g -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- n -

- - -

- o -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- v -

-
- - - - diff --git a/globals.html b/globals.html deleted file mode 100644 index 4d133bf..0000000 --- a/globals.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - -Spark: File Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-
Here is a list of all file members with links to the files they belong to:
- -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- g -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- s -

- - -

- v -

- - -

- w -

-
- - - - diff --git a/globals_func.html b/globals_func.html deleted file mode 100644 index bfd56f8..0000000 --- a/globals_func.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - -Spark: File Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - -
- - - - -
- -
- -
-  - -

- a -

- - -

- b -

- - -

- c -

- - -

- d -

- - -

- g -

- - -

- i -

- - -

- l -

- - -

- m -

- - -

- s -

- - -

- w -

-
- - - - diff --git a/globals_type.html b/globals_type.html deleted file mode 100644 index 91eef0c..0000000 --- a/globals_type.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -Spark: File Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - -
- - - - -
- -
- -
-  -
- - - - diff --git a/globals_vars.html b/globals_vars.html deleted file mode 100644 index ec302b6..0000000 --- a/globals_vars.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -Spark: File Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - -
- - - - -
- -
- -
-  -
- - - - diff --git a/hierarchy.html b/hierarchy.html deleted file mode 100644 index 5d9dc55..0000000 --- a/hierarchy.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -Spark: Class Hierarchy - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - -
- - - - -
- -
- -
-
-
Class Hierarchy
-
- - - - - diff --git a/index.html b/index.html deleted file mode 100644 index 17e6ffb..0000000 --- a/index.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - -Spark: Main Page - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - -
- - - - -
- -
- -
-
-
Spark Documentation
-
-
-
- - - - diff --git a/jquery.js b/jquery.js deleted file mode 100644 index 63939e7..0000000 --- a/jquery.js +++ /dev/null @@ -1,8 +0,0 @@ -/*! jQuery v1.7.1 jquery.com | jquery.org/license */ -(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")), -f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c) -{if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); diff --git a/main_8cpp.html b/main_8cpp.html deleted file mode 100644 index 358d225..0000000 --- a/main_8cpp.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -Spark: src/main.cpp File Reference - - - - - - - - - -
-
-
- - - - - -
-
Spark -
-
- - - - - - - - - - -
- -
- - - -
- -
-
main.cpp File Reference
-
-
-
#include <Spark/Dse.hpp>
-#include <boost/filesystem.hpp>
-#include <boost/program_options.hpp>
-#include <boost/property_tree/json_parser.hpp>
-#include <boost/property_tree/ptree.hpp>
-#include <iostream>
-#include <string>
-#include <chrono>
-#include <sstream>
-
- - - - - - - - - -

-Functions

spark::dse::DseParameters loadParams (const boost::filesystem::path &parf)
 
spark::dse::Benchmark loadBenchmark (const boost::filesystem::path &p)
 
void write_dse_results (const std::vector< spark::dse::DseResult > &results, double took)
 
int main (int argc, char **argv)
 
-

Function Documentation

- -
-
- - - - - - - - -
spark::dse::Benchmark loadBenchmark (const boost::filesystem::path & p)
-
- -
-
- -
-
- - - - - - - - -
spark::dse::DseParameters loadParams (const boost::filesystem::path & parf)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int main (int argc,
char ** argv 
)
-
- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void write_dse_results (const std::vector< spark::dse::DseResult > & results,
double took 
)
-
- -
-
-
- - - - diff --git a/md_README.html b/md_README.html deleted file mode 100644 index 8da8c37..0000000 --- a/md_README.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - -Spark: spark - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - -
- -
- -
-
-
-
spark
-
-
-

spark is a tool for exploring customised architectures for sparse linear algebra. It focuses on micro-architectural optimsations for iterative solvers and the sparse matrix vector multiplication kernel.

-

Installation

-

``` git clone https://github.com/paul-g/spark.git git submodule update –init cd spark && mkdir build && cd build && cmake .. make -C main ```

-

Requires

-

All builds are performed on the local machine which must have:

-
    -
  1. Maxeler MaxCompiler 2013.2.2 or higher
  2. -
  3. g++ 4.9.2 or higher
  4. -
  5. Boost 1.55 or higher
  6. -
-

Usage

-

DSE flow

-

First, compile the DSE program:

-

```` mkdir build && cd build && cmake .. && make main ````

-

You can then use the DSE flow through scripts/spark.py.

-

``` bash-4.1$ python spark.py -h usage: spark.py [-h] [-d] -t {dfe,sim} -p PARAM_FILE -b BENCHMARK_DIR [-m MAX_BUILDS]

-

Run Spark DSE flow

-

optional arguments: -h, –help show this help message and exit -d, –dse -t {dfe,sim}, –target {dfe,sim} -p PARAM_FILE, –param-file PARAM_FILE -b BENCHMARK_DIR, –benchmark-dir BENCHMARK_DIR -m MAX_BUILDS, –max-builds MAX_BUILDS ```

-

spark.py automates:

-
    -
  1. DSE process based on a set of benchmark matrices
  2. -
  3. generating simulation and hardware configurations
  4. -
  5. running and benchmarking simulation and hardware configurations
  6. -
-

CMake Flow

-

Once a simulation / hardware library has been generated through the DSE flow, it will be available in lib-generated.

-

From here you can use also CMake directly to rebuild the client targets, for example test_spmv_sim. Just build the corresponding Makefile target:

-

``` make -C build test_spmv_sim ```

-

Running tests

-

Tests are provided for both software, hardware simulation and hardware runs. These should always pass on the master branch. Beware though that it's not practical to test every design parameter configuration, so awkward issues may arise.

-

First, compile the test binaries (e.g.): make -C build test_spmv_sim Then you can:

-
    -
  1. Run unit tests with ctest -R unit
  2. -
  3. Run hardware simulation tests with ctest -R sim
  4. -
  5. Run hardware tests with ctest -R hw
  6. -
-

Note Some simulation tests may take a long time to run (`~60s), particularly if a large architecture is simulated.

-
- - - - diff --git a/namespacemembers.html b/namespacemembers.html deleted file mode 100644 index 70a41f1..0000000 --- a/namespacemembers.html +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - -Spark: Namespace Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - -
- - - - -
- -
- -
-
Here is a list of all namespace members with links to the namespace documentation for each member:
-
- - - - diff --git a/namespacemembers_func.html b/namespacemembers_func.html deleted file mode 100644 index 0d2d9fc..0000000 --- a/namespacemembers_func.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - -Spark: Namespace Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - -
- - - - -
- -
- -
-  -
- - - - diff --git a/namespacemembers_type.html b/namespacemembers_type.html deleted file mode 100644 index 4910257..0000000 --- a/namespacemembers_type.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -Spark: Namespace Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - -
- - - - -
- -
- -
-  -
- - - - diff --git a/namespacemembers_vars.html b/namespacemembers_vars.html deleted file mode 100644 index 7fb214e..0000000 --- a/namespacemembers_vars.html +++ /dev/null @@ -1,105 +0,0 @@ - - - - - - -Spark: Namespace Members - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - -
- - - - -
- -
- -
-  -
- - - - diff --git a/namespaces.html b/namespaces.html deleted file mode 100644 index 519a52b..0000000 --- a/namespaces.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -Spark: Namespace List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - -
- - - - -
- -
- -
-
-
Namespace List
-
-
-
Here is a list of all namespaces with brief descriptions:
-
- - - - diff --git a/namespacespark.html b/namespacespark.html deleted file mode 100644 index 8d9840f..0000000 --- a/namespacespark.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - -Spark: spark Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
spark Namespace Reference
-
-
- - - - - - - - - - - - - - - - - - - - -

-Namespaces

namespace  converters
 
namespace  dse
 
namespace  io
 
namespace  model
 
namespace  sparse
 
namespace  sparse_linear_solvers
 
namespace  spmv
 
namespace  userio
 
namespace  utils
 
-
- - - - diff --git a/namespacespark_1_1converters.html b/namespacespark_1_1converters.html deleted file mode 100644 index 2141f31..0000000 --- a/namespacespark_1_1converters.html +++ /dev/null @@ -1,204 +0,0 @@ - - - - - - -Spark: spark::converters Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::converters Namespace Reference
-
-
- - - - -

-Typedefs

using EigenSparseMatrix = std::unique_ptr< Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >>
 
- - - - - - - -

-Functions

EigenSparseMatrix tripletToEigen (spark::sparse::SparkCooMatrix< double > mat)
 
Eigen::VectorXd stdvectorToEigen (std::vector< double > v)
 
std::vector< double > eigenVectorToStdVector (const Eigen::VectorXd &v)
 
-

Typedef Documentation

- -
-
- - - - -
using spark::converters::EigenSparseMatrix = typedef std::unique_ptr<Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>>
-
- -
-
-

Function Documentation

- -
-
- - - - - -
- - - - - - - - -
std::vector<double> spark::converters::eigenVectorToStdVector (const Eigen::VectorXd & v)
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
Eigen::VectorXd spark::converters::stdvectorToEigen (std::vector< double > v)
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
EigenSparseMatrix spark::converters::tripletToEigen (spark::sparse::SparkCooMatrix< double > mat)
-
-inline
-
- -
-
-
- - - - diff --git a/namespacespark_1_1dse.html b/namespacespark_1_1dse.html deleted file mode 100644 index 9e978df..0000000 --- a/namespacespark_1_1dse.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - - - -Spark: spark::dse Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::dse Namespace Reference
-
-
- - - - - - - - - - -

-Classes

class  Benchmark
 
class  DseParameters
 
class  DseResult
 
class  SparkDse
 
- - - - - -

-Functions

std::ostream & operator<< (std::ostream &s, Benchmark &b)
 
std::ostream & operator<< (std::ostream &s, DseParameters &d)
 
-

Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
std::ostream& spark::dse::operator<< (std::ostream & s,
Benchmark & b 
)
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
std::ostream& spark::dse::operator<< (std::ostream & s,
DseParameters & d 
)
-
-inline
-
- -
-
-
- - - - diff --git a/namespacespark_1_1io.html b/namespacespark_1_1io.html deleted file mode 100644 index c5b4bfd..0000000 --- a/namespacespark_1_1io.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -Spark: spark::io Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::io Namespace Reference
-
-
- - - - -

-Classes

class  MmReader
 
-
- - - - diff --git a/namespacespark_1_1model.html b/namespacespark_1_1model.html deleted file mode 100644 index c00dc30..0000000 --- a/namespacespark_1_1model.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - -Spark: spark::model Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::model Namespace Reference
-
-
- - - - - - -

-Classes

class  LogicResourceUsage
 
class  ImplementationParameters
 
-
- - - - diff --git a/namespacespark_1_1sparse.html b/namespacespark_1_1sparse.html deleted file mode 100644 index 3155f6d..0000000 --- a/namespacespark_1_1sparse.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - -Spark: spark::sparse Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::sparse Namespace Reference
-
-
- - - - -

-Classes

class  SparkCooMatrix
 
- - - - - -

-Typedefs

using CsrMatrix = std::tuple< std::vector< uint32_t >, std::vector< int >, std::vector< double >>
 
using PartitionedCsrMatrix = std::vector< CsrMatrix >
 
-

Typedef Documentation

- -
-
- - - - -
using spark::sparse::CsrMatrix = typedef std::tuple<std::vector<uint32_t>, std::vector<int>, std::vector<double>>
-
- -
-
- -
-
- - - - -
using spark::sparse::PartitionedCsrMatrix = typedef std::vector<CsrMatrix>
-
- -
-
-
- - - - diff --git a/namespacespark_1_1sparse__linear__solvers.html b/namespacespark_1_1sparse__linear__solvers.html deleted file mode 100644 index 0ebc7e2..0000000 --- a/namespacespark_1_1sparse__linear__solvers.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - -Spark: spark::sparse_linear_solvers Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::sparse_linear_solvers Namespace Reference
-
-
- - - - - - - - - - -

-Classes

class  Solver
 
class  EigenSolver
 
class  DfeCgSolver
 
class  DfeBiCgSolver
 
-
- - - - diff --git a/namespacespark_1_1spmv.html b/namespacespark_1_1spmv.html deleted file mode 100644 index 048d532..0000000 --- a/namespacespark_1_1spmv.html +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - -Spark: spark::spmv Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv Namespace Reference
-
-
- - - - - - - - - - - - - - - - - - - - -

-Classes

struct  indptr_value
 
struct  Partition
 
class  SimpleSpmvArchitecture
 
class  SimpleSpmvArchitectureSpace
 
class  FstSpmvArchitecture
 
class  SkipEmptyRowsArchitecture
 
class  PrefetchingArchitecture
 
class  SpmvArchitecture
 
class  SpmvArchitectureSpace
 
- - - -

-Typedefs

using EigenSparseMatrix = Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >
 
- - - - - - - - -

-Functions

struct spark::spmv::indptr_value __attribute__ ((packed))
 
std::ostream & operator<< (std::ostream &s, SpmvArchitecture &a)
 
template<typename T >
void align (std::vector< T > &v, int widthInBytes)
 
- - - -

-Variables

struct spark::spmv::Partition __attribute__
 
-

Typedef Documentation

- -
-
- - - - -
using spark::spmv::EigenSparseMatrix = typedef Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>
-
- -
-
-

Function Documentation

- -
-
- - - - - - - - -
struct spark::spmv::indptr_value spark::spmv::__attribute__ ((packed) )
-
- -
-
- -
-
-
-template<typename T >
- - - - - - - - - - - - - - - - - - -
void spark::spmv::align (std::vector< T > & v,
int widthInBytes 
)
-
- -
-
- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
std::ostream& spark::spmv::operator<< (std::ostream & s,
SpmvArchitecture & a 
)
-
-inline
-
- -
-
-

Variable Documentation

- -
-
- - - - -
struct spark::spmv::Partition spark::spmv::__attribute__
-
- -
-
-
- - - - diff --git a/namespacespark_1_1userio.html b/namespacespark_1_1userio.html deleted file mode 100644 index 1abd37a..0000000 --- a/namespacespark_1_1userio.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -Spark: spark::userio Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::userio Namespace Reference
-
-
- - - - -

-Typedefs

using UserInputParams = std::unordered_map< std::string, int >
 
- - - -

-Functions

UserInputParams parseBuildParams (std::string params)
 
-

Typedef Documentation

- -
-
- - - - -
using spark::userio::UserInputParams = typedef std::unordered_map<std::string, int>
-
- -
-
-

Function Documentation

- -
-
- - - - - -
- - - - - - - - -
UserInputParams spark::userio::parseBuildParams (std::string params)
-
-inline
-
- -
-
-
- - - - diff --git a/namespacespark_1_1utils.html b/namespacespark_1_1utils.html deleted file mode 100644 index 483f324..0000000 --- a/namespacespark_1_1utils.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - -Spark: spark::utils Namespace Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::utils Namespace Reference
-
-
- - - - -

-Classes

struct  Range
 
- - - -

-Functions

std::ostream & operator<< (std::ostream &s, const Range &r)
 
-

Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
std::ostream& spark::utils::operator<< (std::ostream & s,
const Range & r 
)
-
-inline
-
- -
-
-
- - - - diff --git a/nav_f.png b/nav_f.png deleted file mode 100644 index 72a58a529ed3a9ed6aa0c51a79cf207e026deee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U diff --git a/nav_g.png b/nav_g.png deleted file mode 100644 index 2093a237a94f6c83e19ec6e5fd42f7ddabdafa81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM - - - - - -Spark: Related Pages - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - -
- - - - -
- -
- -
-
-
Related Pages
-
-
-
Here is a list of all related documentation pages:
- - -
\spark
-
-
- - - - diff --git a/search/all_5f.html b/search/all_5f.html deleted file mode 100644 index 879d792..0000000 --- a/search/all_5f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_5f.js b/search/all_5f.js deleted file mode 100644 index e671369..0000000 --- a/search/all_5f.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_5f_5fattribute_5f_5f',['__attribute__',['../namespacespark_1_1spmv.html#a8ad7d0fb384bbf6ef88a68b8cad95182',1,'spark::spmv::__attribute__()'],['../namespacespark_1_1spmv.html#a8ed4b5e7d25d6d210e3f1b7f09a84c7a',1,'spark::spmv::__attribute__((packed))']]] -]; diff --git a/search/all_61.html b/search/all_61.html deleted file mode 100644 index f85089b..0000000 --- a/search/all_61.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_61.js b/search/all_61.js deleted file mode 100644 index 11fa3f7..0000000 --- a/search/all_61.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['add_5fmatrix_5fpath',['add_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a18854065058a9f70a0fbb4127212d81f',1,'spark::dse::Benchmark']]], - ['addcomputepipe',['addComputePipe',['../classSpmvManager.html#ac993f1b6041594ae5bd7211d4f498702',1,'SpmvManager']]], - ['addpaddingkernel',['addPaddingKernel',['../classSpmvManager.html#ab025ef7147d5d645028cc92b7d1a513f',1,'SpmvManager']]], - ['addresst',['addressT',['../classSpmvCacheKernel.html#a33ae456838bd9708e94df43436703305',1,'SpmvCacheKernel']]], - ['addunpaddingkernel',['addUnpaddingKernel',['../classSpmvManager.html#ae2858b4c2bd5a17d5710d0d34429e2b3',1,'SpmvManager']]], - ['align',['align',['../namespacespark_1_1spmv.html#abaf9d6fbe5cd5df67ea6314fccd769e0',1,'spark::spmv::align()'],['../Spmv_8cpp.html#af110ee89567b09ff002ff971364c551d',1,'align(): Spmv.cpp']]], - ['analyze',['analyze',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#a5922d0592d66ae9966bfbf4bb78a1c55',1,'spark::sparse_linear_solvers::Solver']]], - ['at_5fstart',['at_start',['../structspark_1_1utils_1_1Range.html#a2e5c2a068b494d96fa3bb9bc81f3b98b',1,'spark::utils::Range']]] -]; diff --git a/search/all_62.html b/search/all_62.html deleted file mode 100644 index f25fa2c..0000000 --- a/search/all_62.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_62.js b/search/all_62.js deleted file mode 100644 index c9c3f5e..0000000 --- a/search/all_62.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['benchmark',['Benchmark',['../classspark_1_1dse_1_1Benchmark.html',1,'spark::dse']]], - ['bestarchitecture',['bestArchitecture',['../classspark_1_1dse_1_1DseResult.html#a2a23395d873d124a4da624ed94ab4d76',1,'spark::dse::DseResult']]], - ['better',['better',['../Dse_8cpp.html#ac63ef9b091049d2a25c5941b73512252',1,'Dse.cpp']]], - ['biconjugategradient_2ecpp',['BiConjugateGradient.cpp',['../BiConjugateGradient_8cpp.html',1,'']]], - ['brams',['brams',['../classspark_1_1model_1_1LogicResourceUsage.html#a9e1bfd322976881da5fc6d0501ecbf32',1,'spark::model::LogicResourceUsage']]], - ['bramspmvreductionkernel',['BramSpmvReductionKernel',['../classBramSpmvReductionKernel.html',1,'BramSpmvReductionKernel'],['../classBramSpmvReductionKernel.html#a68264df2094dfb810030e2147b3cacaa',1,'BramSpmvReductionKernel.BramSpmvReductionKernel()']]], - ['buildreadmask',['buildReadMask',['../classParallelCsrReadControl.html#ac16da093fd2a7f25322d24d8be66593f',1,'ParallelCsrReadControl']]] -]; diff --git a/search/all_63.html b/search/all_63.html deleted file mode 100644 index e7f34db..0000000 --- a/search/all_63.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_63.js b/search/all_63.js deleted file mode 100644 index 75a53ce..0000000 --- a/search/all_63.js +++ /dev/null @@ -1,20 +0,0 @@ -var searchData= -[ - ['cachesize',['cacheSize',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a0fd07f4d1e241d9bb5e525fc1f9c4ab2',1,'spark::spmv::SimpleSpmvArchitecture::cacheSize()'],['../classSpmvManager.html#a9a9f9ca14bf99119d5ed0d7106acdcd9',1,'SpmvManager.cacheSize()']]], - ['cachesizer',['cacheSizeR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a5eb1ea4c3054ef0b99c199732c004195',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], - ['cachesizerange',['cacheSizeRange',['../classspark_1_1dse_1_1DseParameters.html#a407b33c26d55c84c1436a3535576f380',1,'spark::dse::DseParameters']]], - ['canread',['canRead',['../classParallelCsrReadControl.html#a2aa999eee54eca7e025dcb2be11dc900',1,'ParallelCsrReadControl']]], - ['cat',['cat',['../classParallelCsrReadControl.html#aff22ed75d30f759a6fa33b1d8a20b602',1,'ParallelCsrReadControl.cat(DFEsmValue...args)'],['../classParallelCsrReadControl.html#ac1026ad92d6b9e38d84c81aaced9c3b7',1,'ParallelCsrReadControl.cat(DFEsmValue left, DFEsmValue right)']]], - ['colptrsize',['colptrSize',['../structPartitionWriteResult.html#a1b1d42061ca85c85c68b12e3405743e5',1,'PartitionWriteResult']]], - ['colptrstartaddress',['colptrStartAddress',['../structPartitionWriteResult.html#a744ceeec06294048f07cd552a340118f',1,'PartitionWriteResult']]], - ['conjugategradient_2ecpp',['ConjugateGradient.cpp',['../ConjugateGradient_8cpp.html',1,'']]], - ['converters_2ehpp',['Converters.hpp',['../Converters_8hpp.html',1,'']]], - ['coordtype',['CoordType',['../classspark_1_1io_1_1MmReader.html#a43348db7743f21cff1854197cf7f9819',1,'spark::io::MmReader::CoordType()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a9de150aa2a040306403bc97687b40f',1,'spark::sparse::SparkCooMatrix::CoordType()']]], - ['countcomputecycles',['countComputeCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ab2b61b0a02aa4dfa40a38ad98a84bbb4',1,'spark::spmv::SimpleSpmvArchitecture::countComputeCycles()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a328db4b67f8f9c6763117c8a82f81577',1,'spark::spmv::FstSpmvArchitecture::countComputeCycles()']]], - ['cpureferenceprecon',['cpuReferencePrecon',['../BiConjugateGradient_8cpp.html#ab1ada1c516bfa9599e8e43b4b9666a10',1,'BiConjugateGradient.cpp']]], - ['cpureferenceunprecon',['cpuReferenceUnprecon',['../BiConjugateGradient_8cpp.html#aa6ded0f7e5d8161252912d0eb17f27c0',1,'BiConjugateGradient.cpp']]], - ['crt',['crt',['../structspark_1_1utils_1_1Range.html#a07fd2cc26cde356c3f1db74bedd31eb5',1,'spark::utils::Range']]], - ['crtpos',['crtPos',['../classParallelCsrReadControl.html#ab0f5b6539f65df26eccc3c40b234752c',1,'ParallelCsrReadControl']]], - ['csrmatrix',['CsrMatrix',['../namespacespark_1_1sparse.html#a0f0d804dd8f37cb44a636bca7d03f016',1,'spark::sparse']]], - ['cyclecounter',['cycleCounter',['../classParallelCsrReadControl.html#a51cfb6d5b02eb3e5b204e4ea8f16fce4',1,'ParallelCsrReadControl']]] -]; diff --git a/search/all_64.html b/search/all_64.html deleted file mode 100644 index 360601f..0000000 --- a/search/all_64.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_64.js b/search/all_64.js deleted file mode 100644 index 86bc2cb..0000000 --- a/search/all_64.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['data',['data',['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a0b72ae9e7b1deed9b6228cf40e9f32',1,'spark::sparse::SparkCooMatrix']]], - ['dbg',['dbg',['../classParallelCsrReadControl.html#a522323c9bbe60e7a02f48e1ff6f7db06',1,'ParallelCsrReadControl']]], - ['dbg_5fpar_5fcsr_5fctl',['DBG_PAR_CSR_CTL',['../classSpmvManager.html#a234ea438d3c8363b41db2581e3d8a51a',1,'SpmvManager']]], - ['dbg_5freduction_5fkernel',['DBG_REDUCTION_KERNEL',['../classSpmvManager.html#a5c29c11c95c8f9980aa3201d8f25ff3d',1,'SpmvManager']]], - ['dbg_5fspmv_5fkernel',['DBG_SPMV_KERNEL',['../classSpmvManager.html#aece403b7ff81eeebfaf75b35aacb2b1f',1,'SpmvManager']]], - ['dfebicgsolver',['DfeBiCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html',1,'spark::sparse_linear_solvers']]], - ['dfecgsolver',['DfeCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html',1,'spark::sparse_linear_solvers']]], - ['dfeimplunprecon',['dfeImplUnprecon',['../BiConjugateGradient_8cpp.html#ac3a55e37d1559a049fcef0af776feb3b',1,'BiConjugateGradient.cpp']]], - ['dfespmv',['dfespmv',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a8c7ca2d2ac7284e46506f23728dde499',1,'spark::spmv::SimpleSpmvArchitecture::dfespmv()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1d557e23529a5040a858beafb9971acc',1,'spark::spmv::SpmvArchitecture::dfespmv()']]], - ['do_5fblocking',['do_blocking',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aedb22fc8e413dd6bc2c54d74bf03ed2d',1,'spark::spmv::SimpleSpmvArchitecture']]], - ['do_5fpartition',['do_partition',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac3cd16da984d35b091f0833edd919a56',1,'spark::spmv::SimpleSpmvArchitecture']]], - ['done',['Done',['../enumParallelCsrReadControl_1_1Mode.html#a4af99d8c25b54128c920d384091485d0',1,'ParallelCsrReadControl::Mode']]], - ['donext',['doNext',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abde19171c284739290c7a7c145d7deb7',1,'spark::spmv::SimpleSpmvArchitectureSpace::doNext()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a414ec6872fdf32550af1a6efbb4394d5',1,'spark::spmv::SpmvArchitectureSpace::doNext()']]], - ['dramreductionenabled',['dramReductionEnabled',['../classSpmvManager.html#adfc3a8c884874f553215941bf86692fa',1,'SpmvManager']]], - ['dramspmvreductionkernel',['DramSpmvReductionKernel',['../classDramSpmvReductionKernel.html',1,'DramSpmvReductionKernel'],['../classDramSpmvReductionKernel.html#a85cd96e69eec800ebfdea2c7bb6f7376',1,'DramSpmvReductionKernel.DramSpmvReductionKernel()']]], - ['dse_2ecpp',['Dse.cpp',['../Dse_8cpp.html',1,'']]], - ['dse_2ehpp',['Dse.hpp',['../Dse_8hpp.html',1,'']]], - ['dse_5frun',['dse_run',['../Dse_8cpp.html#a50c99f119df5ba972bbebeef76239c2e',1,'Dse.cpp']]], - ['dseparameters',['DseParameters',['../classspark_1_1dse_1_1DseParameters.html',1,'spark::dse']]], - ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html',1,'spark::dse']]], - ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html#a1d1342fbcf4346f77de3cb29c23622ba',1,'spark::dse::DseResult::DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)'],['../classspark_1_1dse_1_1DseResult.html#ac8b6f838e0112d684058ee911b9e2ab5',1,'spark::dse::DseResult::DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)']]], - ['dsps',['dsps',['../classspark_1_1model_1_1LogicResourceUsage.html#adb488affc0a051d6c8458d9e2a35d201',1,'spark::model::LogicResourceUsage']]] -]; diff --git a/search/all_65.html b/search/all_65.html deleted file mode 100644 index c2f4fcd..0000000 --- a/search/all_65.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_65.js b/search/all_65.js deleted file mode 100644 index 5948c07..0000000 --- a/search/all_65.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['eigensolver',['EigenSolver',['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html',1,'spark::sparse_linear_solvers']]], - ['eigensparsematrix',['EigenSparseMatrix',['../namespacespark_1_1converters.html#a724347922bbc7e56429febfd000be78b',1,'spark::converters::EigenSparseMatrix()'],['../namespacespark_1_1spmv.html#a3235bbbc3c8db242db2f00947ec4ca9b',1,'spark::spmv::EigenSparseMatrix()']]], - ['eigenvectortostdvector',['eigenVectorToStdVector',['../namespacespark_1_1converters.html#a78a095076b8d4daa406d3dc9bca7504c',1,'spark::converters']]], - ['emptycycles',['emptyCycles',['../structspark_1_1spmv_1_1Partition.html#a59dfdff4762b092034d952fe2e81f95c',1,'spark::spmv::Partition']]], - ['encodeemptyrows',['encodeEmptyRows',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#a0336d2d0c76a4ad1586b904bafaefb3d',1,'spark::spmv::SkipEmptyRowsArchitecture']]], - ['end',['end',['../structspark_1_1utils_1_1Range.html#a014c4c4aa8e0f0c9f9aaf954d3e8fba7',1,'spark::utils::Range']]], - ['equals',['equals',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac9cd3ac1f8a7ff7c2634d707a2d33356',1,'spark::spmv::SimpleSpmvArchitecture::equals()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa3aebf2b76c95d7b96e37865637a1104',1,'spark::spmv::SpmvArchitecture::equals()']]] -]; diff --git a/search/all_66.html b/search/all_66.html deleted file mode 100644 index a9ac881..0000000 --- a/search/all_66.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_66.js b/search/all_66.js deleted file mode 100644 index 3bd01fc..0000000 --- a/search/all_66.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['f',['f',['../classspark_1_1io_1_1MmReader.html#a65848ca959d0961ab594205b40335072',1,'spark::io::MmReader']]], - ['ffs',['ffs',['../classspark_1_1model_1_1LogicResourceUsage.html#ad67dec36e8bd5ba1937687b538d97a8e',1,'spark::model::LogicResourceUsage']]], - ['firstreadposition',['firstReadPosition',['../classParallelCsrReadControl.html#af30ed96f729b948fec5bd989acc13a56',1,'ParallelCsrReadControl']]], - ['floating_5fpoint_5flatency',['FLOATING_POINT_LATENCY',['../classSpmvManager.html#a3a947b39653f09305c7712af18ddd113',1,'SpmvManager']]], - ['fls',['fls',['../classParallelCsrReadControl.html#aa9acfae4966606e3e5645eb1592f5736',1,'ParallelCsrReadControl']]], - ['fpl',['fpL',['../classSpmvKernel.html#a0bf2a803445d2454781d5e09937de571',1,'SpmvKernel']]], - ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#ab1db27169d0bc9921d4c5048592e3d24',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#add2548a017451c5caae61cd3e9021467',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], - ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html',1,'spark::spmv']]] -]; diff --git a/search/all_67.html b/search/all_67.html deleted file mode 100644 index 747fb51..0000000 --- a/search/all_67.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_67.js b/search/all_67.js deleted file mode 100644 index 2a7f01d..0000000 --- a/search/all_67.js +++ /dev/null @@ -1,26 +0,0 @@ -var searchData= -[ - ['get_5fbenchmark_5fsize',['get_benchmark_size',['../classspark_1_1dse_1_1Benchmark.html#a1692f6d32fb3d2a6de8ad8c85cf7fc39',1,'spark::dse::Benchmark']]], - ['get_5fmatrix_5fpath',['get_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a42578888522f08d21a620fa6ce17cfb3',1,'spark::dse::Benchmark']]], - ['get_5fname',['get_name',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac91efdbe0c3de7a45edde0052f478638',1,'spark::spmv::SimpleSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a90397fa9aa179cb86021fac39afc3f27',1,'spark::spmv::FstSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ae9604bff9ee8258920e8b599e0bb1a1d',1,'spark::spmv::SkipEmptyRowsArchitecture::get_name()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a91515587bbfe2ac62a891f17363d508f',1,'spark::spmv::PrefetchingArchitecture::get_name()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4dfdec260889947cf9844eed98e5dbbe',1,'spark::spmv::SpmvArchitecture::get_name()']]], - ['getcomputekernel',['getComputeKernel',['../classSpmvManager.html#a6776e0fc817b9cce1698ad46bef5c1ad',1,'SpmvManager']]], - ['getdramreductionenabled',['getDramReductionEnabled',['../SpmvDeviceInterface_8h.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterface.cpp']]], - ['getestimatedclockcycles',['getEstimatedClockCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ad109173c60a0469e99d188010e09fa9c',1,'spark::spmv::SimpleSpmvArchitecture::getEstimatedClockCycles()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#af60acfd57143cbb06c582bd6c1e6a3a9',1,'spark::spmv::SpmvArchitecture::getEstimatedClockCycles()']]], - ['getestimatedgflops',['getEstimatedGFlops',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a745a51a90e0d0e027be6f927e41e267a',1,'spark::spmv::SpmvArchitecture']]], - ['getfanoutname',['getFanoutName',['../classSpmvManager.html#aa4b9b4fd7299e8967130613ce89df06e',1,'SpmvManager']]], - ['getfrequency',['getFrequency',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a3eafac9b3bffd4a17d86a6f99eb97503',1,'spark::spmv::SpmvArchitecture']]], - ['getgflopscount',['getGFlopsCount',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a1b45bc81758c2e9ef21e6620d8fbd4db',1,'spark::spmv::SimpleSpmvArchitecture::getGFlopsCount()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1be404ebea121baa4b28f1548ad6207d',1,'spark::spmv::SpmvArchitecture::getGFlopsCount()']]], - ['getimplementationparameters',['getImplementationParameters',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3c5900f38fdfafa6481508d9c90819ff',1,'spark::spmv::SimpleSpmvArchitecture::getImplementationParameters()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a31274a6b708f9db92d810d2a161d812a',1,'spark::spmv::SpmvArchitecture::getImplementationParameters()']]], - ['getmatrixvalues',['getMatrixValues',['../classSpmvCacheKernel.html#a1c512fd317ade4f64a5e7f7215dd0c53',1,'SpmvCacheKernel']]], - ['getpaddingcycles',['getPaddingCycles',['../classSpmvManager.html#a64afe0643711d9cd06053a68f187f8da',1,'SpmvManager']]], - ['getpaddingkernel',['getPaddingKernel',['../classSpmvManager.html#a0cc931d1320ec4754066dacceeaff9c0',1,'SpmvManager']]], - ['getreadcontrol',['getReadControl',['../classSpmvManager.html#aca5d9419bca8dbc02b44df878cac0009',1,'SpmvManager']]], - ['getreductionkernel',['getReductionKernel',['../classSpmvManager.html#a0e7f3c94df7eafa7a899a2447f16155d',1,'SpmvManager']]], - ['getspmv_5finputwidth',['getSpmv_InputWidth',['../SpmvDeviceInterface_8h.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterface.cpp']]], - ['getspmv_5fmaxrows',['getSpmv_MaxRows',['../SpmvDeviceInterface_8h.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterface.cpp']]], - ['getspmv_5fnumpipes',['getSpmv_NumPipes',['../SpmvDeviceInterface_8h.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterface.cpp']]], - ['getspmv_5fpartitionsize',['getSpmv_PartitionSize',['../SpmvDeviceInterface_8h.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterface.cpp']]], - ['getunpaddingkernel',['getUnpaddingKernel',['../classSpmvManager.html#aff135aa6706cfaf3cea42f1353dd3ea7',1,'SpmvManager']]], - ['getvectorvalues',['getVectorValues',['../classSpmvCacheKernel.html#a937fcc2032a9fc1e390bef6cb425fd55',1,'SpmvCacheKernel']]], - ['gflopsonly',['gflopsOnly',['../classspark_1_1dse_1_1DseParameters.html#a903571a00336065eb295887170686770',1,'spark::dse::DseParameters']]] -]; diff --git a/search/all_69.html b/search/all_69.html deleted file mode 100644 index 192e4ba..0000000 --- a/search/all_69.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_69.js b/search/all_69.js deleted file mode 100644 index 839a71f..0000000 --- a/search/all_69.js +++ /dev/null @@ -1,21 +0,0 @@ -var searchData= -[ - ['ilength',['iLength',['../classParallelCsrReadControl.html#a85aaa3cdd7bbfe023bc74bcd02bc21b4',1,'ParallelCsrReadControl']]], - ['ilengthready',['iLengthReady',['../classParallelCsrReadControl.html#a7ffcf81575bcc0d92af9b198653dcf28',1,'ParallelCsrReadControl']]], - ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html',1,'spark::model']]], - ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html#af2b90d99043967462da25c003c7f7e17',1,'spark::model::ImplementationParameters']]], - ['indexwidth',['indexWidth',['../classSpmvManager.html#a01ee1f96ba381149f4233fae1c87c821',1,'SpmvManager']]], - ['indptr',['indptr',['../structspark_1_1spmv_1_1indptr__value.html#ae450af92f13728c597605f909eb7f3b6',1,'spark::spmv::indptr_value::indptr()'],['../SimpleSpmv_8hpp.html#a164fa1a90d7bd63f14e631438885cc69',1,'indptr(): SimpleSpmv.hpp']]], - ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html',1,'spark::spmv']]], - ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html#abf5ac17c5a8b83c68b8e421c9fb2b9f4',1,'spark::spmv::indptr_value::indptr_value(double _value, int _indptr)'],['../structspark_1_1spmv_1_1indptr__value.html#a1bb3b22d80c09f283b847a1fb907a462',1,'spark::spmv::indptr_value::indptr_value()'],['../SimpleSpmv_8hpp.html#ac37db725a01a5625a6a32d51d7fd3e78',1,'indptr_value(double _value, int _indptr): SimpleSpmv.hpp'],['../SimpleSpmv_8hpp.html#a84d257f77f20931d14a7e5abb9d099c8',1,'indptr_value(): SimpleSpmv.hpp']]], - ['indptrvaluessize',['indptrValuesSize',['../structPartitionWriteResult.html#a389a493dd0f322031a4b176ad7251cc1',1,'PartitionWriteResult']]], - ['indptrvaluesstartaddress',['indptrValuesStartAddress',['../structPartitionWriteResult.html#a2ca20725ee8dcb4aad19eac57bc5c957',1,'PartitionWriteResult']]], - ['indptrvector',['indptrVector',['../classSpmvCacheKernel.html#a334b1e969200dfe46d013bef0e5b1934',1,'SpmvCacheKernel']]], - ['inputwidth',['inputWidth',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a4083f351467c940c767fa9122d3a727c',1,'spark::spmv::SimpleSpmvArchitecture::inputWidth()'],['../classParallelCsrReadControl.html#a3458a62c53ce83128cedb6c7765ca6fc',1,'ParallelCsrReadControl.inputWidth()'],['../classSpmvManager.html#a778e13e71f500522f13c6207e6f4e8a4',1,'SpmvManager.inputWidth()']]], - ['inputwidthr',['inputWidthR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#ab7dd6b46e80d1fe85694b964ce761e85',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], - ['inputwidthrange',['inputWidthRange',['../classspark_1_1dse_1_1DseParameters.html#af54d3b84a9781ce472374fb4d4dbecb1',1,'spark::dse::DseParameters']]], - ['interfacedefault',['interfaceDefault',['../classSpmvManager.html#ad0360a20a24483e22664a4bda8428ec6',1,'SpmvManager']]], - ['io_2ehpp',['Io.hpp',['../Io_8hpp.html',1,'']]], - ['iterationsprocessed',['iterationsProcessed',['../classParallelCsrReadControl.html#aca9dea6888fb835dc40d3df86fa60156',1,'ParallelCsrReadControl']]], - ['ivtype',['ivtype',['../classSpmvCacheKernel.html#a7fc692be3af6b331cdf30edbb6db98e6',1,'SpmvCacheKernel']]] -]; diff --git a/search/all_6c.html b/search/all_6c.html deleted file mode 100644 index ae8bc48..0000000 --- a/search/all_6c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_6c.js b/search/all_6c.js deleted file mode 100644 index 08cd25b..0000000 --- a/search/all_6c.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['last',['last',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a618c39ec4cde84cb595f089fb881ce7c',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], - ['loadbenchmark',['loadBenchmark',['../main_8cpp.html#a75bc35b120d6b6f0834ae4d32856036c',1,'main.cpp']]], - ['loadparams',['loadParams',['../main_8cpp.html#a84bdcf570024843f14fc9624770bf035',1,'main.cpp']]], - ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html#a5b88cae38db7b5ab535f4a17fa643a15',1,'spark::model::LogicResourceUsage::LogicResourceUsage()'],['../classspark_1_1model_1_1LogicResourceUsage.html#a64aef671cc1360f9c760eddecc95dfe5',1,'spark::model::LogicResourceUsage::LogicResourceUsage(int _l, int _f, int _b, int _d)'],['../classspark_1_1model_1_1LogicResourceUsage.html#a303a7df506637540e2b7eb4d871f9029',1,'spark::model::LogicResourceUsage::LogicResourceUsage(const LogicResourceUsage &ru)']]], - ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html',1,'spark::model']]], - ['luts',['luts',['../classspark_1_1model_1_1LogicResourceUsage.html#a620a5a18ce206d8dbc7cd5adbcb48d7b',1,'spark::model::LogicResourceUsage']]] -]; diff --git a/search/all_6d.html b/search/all_6d.html deleted file mode 100644 index ee90718..0000000 --- a/search/all_6d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_6d.js b/search/all_6d.js deleted file mode 100644 index 1599052..0000000 --- a/search/all_6d.js +++ /dev/null @@ -1,27 +0,0 @@ -var searchData= -[ - ['m',['m',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ae3892beabaaf78e2e9a67269c22c8f8e',1,'spark::sparse::SparkCooMatrix']]], - ['m_5fcolptr',['m_colptr',['../structspark_1_1spmv_1_1Partition.html#a8aa3fa9f9be247ab7e092f968122e3a7',1,'spark::spmv::Partition']]], - ['m_5fcolptr_5funpaddedlength',['m_colptr_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ac28e1c351c409032a1166678f800141b',1,'spark::spmv::Partition']]], - ['m_5findptr_5fvalues',['m_indptr_values',['../structspark_1_1spmv_1_1Partition.html#ae134d0793283258fb0f95433d5448bb2',1,'spark::spmv::Partition']]], - ['m_5findptr_5fvalues_5funpaddedlength',['m_indptr_values_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ae9b189f7ec6c8fbd47202945dc3fef23',1,'spark::spmv::Partition']]], - ['main',['main',['../classSpmvManager.html#abf7df885f5ea650b0128628cad8bf33b',1,'SpmvManager.main()'],['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(): main.cpp']]], - ['main_2ecpp',['main.cpp',['../main_8cpp.html',1,'']]], - ['makecommand',['makeCommand',['../classParallelCsrReadControl.html#a75734eee54f3dfaaabf8794ba378ccfa',1,'ParallelCsrReadControl']]], - ['makeoutput',['makeOutput',['../classParallelCsrReadControl.html#a999c16ceab5da519c9e90a6b5765359c',1,'ParallelCsrReadControl']]], - ['mantissawidth',['mantissaWidth',['../classSpmvManager.html#a6c6ea06d3d9cb5f752e3cbc3ca7cbafa',1,'SpmvManager']]], - ['mat',['mat',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae295666cf3885149b0e37766c4feffc7',1,'spark::spmv::SimpleSpmvArchitecture']]], - ['matrices',['matrices',['../classspark_1_1dse_1_1DseResult.html#a797ff2ef1c189cb2cff7fa18cfede2a9',1,'spark::dse::DseResult']]], - ['matrix',['matrix',['../classspark_1_1io_1_1MmReader.html#a8bf3a76c76dad47d667f28052adbfaa5',1,'spark::io::MmReader']]], - ['matrixvalues',['matrixValues',['../classSpmvCacheKernel.html#a2c0074e62c391424c276981965dc4bf4',1,'SpmvCacheKernel']]], - ['maxrows',['maxRows',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a577fd6e73f088b437a5632ba3ca89c61',1,'spark::spmv::SimpleSpmvArchitecture::maxRows()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#acaac03fcff370b3f0945823b1f13a90f',1,'spark::spmv::SimpleSpmvArchitectureSpace::maxRows()'],['../classSpmvManager.html#a5746b324d3b38fc407d1577739b969ef',1,'SpmvManager.maxRows()']]], - ['memorybandwidth',['memoryBandwidth',['../classspark_1_1model_1_1ImplementationParameters.html#a7935fb3d5d9d782c66530a541d6f705c',1,'spark::model::ImplementationParameters']]], - ['min',['min',['../classParallelCsrReadControl.html#af39c2cd937063656ee7d2bdb4a21e8db',1,'ParallelCsrReadControl']]], - ['mmparse',['mmparse',['../classspark_1_1io_1_1MmReader.html#a73bef88acba33d35b9f714365456ab39',1,'spark::io::MmReader']]], - ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html#a18da82e5b71af2ce6f5946f7b66f8cd5',1,'spark::io::MmReader']]], - ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html',1,'spark::io']]], - ['mmreadmatrix',['mmreadMatrix',['../classspark_1_1io_1_1MmReader.html#ae0ed6d286d9c5c08ad3bd3e910f3554a',1,'spark::io::MmReader']]], - ['mode',['mode',['../classParallelCsrReadControl.html#aa98eb2e85dadf134870803067fa13ad8',1,'ParallelCsrReadControl']]], - ['mode',['Mode',['../enumParallelCsrReadControl_1_1Mode.html',1,'ParallelCsrReadControl']]], - ['model_2ehpp',['Model.hpp',['../Model_8hpp.html',1,'']]] -]; diff --git a/search/all_6e.html b/search/all_6e.html deleted file mode 100644 index e0fd765..0000000 --- a/search/all_6e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_6e.js b/search/all_6e.js deleted file mode 100644 index 40eb596..0000000 --- a/search/all_6e.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['n',['n',['../structspark_1_1spmv_1_1Partition.html#a858144bacceb65f6b0c6caab04b0308b',1,'spark::spmv::Partition::n()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a582426cd2434334fe15c5f3c23aa0c54',1,'spark::sparse::SparkCooMatrix::n()']]], - ['nblocks',['nBlocks',['../structspark_1_1spmv_1_1Partition.html#a3084298925d168aafc1affa127bb4ef2',1,'spark::spmv::Partition']]], - ['ncols',['ncols',['../classspark_1_1io_1_1MmReader.html#a7b783ac977c5badcd28069cea5368adc',1,'spark::io::MmReader']]], - ['needtoread',['needToRead',['../classParallelCsrReadControl.html#af55c1da545422cde5c57c61a861017d8',1,'ParallelCsrReadControl']]], - ['next',['next',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#aa9e55d9a1af4b951561705869dd2e2fe',1,'spark::spmv::SpmvArchitectureSpace']]], - ['nextstate',['nextState',['../classParallelCsrReadControl.html#acac4d268696bea31cb88a0293e7484ec',1,'ParallelCsrReadControl']]], - ['niterations',['nIterations',['../classParallelCsrReadControl.html#ad8041b856c97ae1d5ac6ea96a5cb0b04',1,'ParallelCsrReadControl']]], - ['nnzs',['nnzs',['../classspark_1_1io_1_1MmReader.html#a55b7ae127a34af4d09bca7079c443866',1,'spark::io::MmReader']]], - ['npartitions',['nPartitions',['../classParallelCsrReadControl.html#a82a4d8d9d682f6c65537975de9483540',1,'ParallelCsrReadControl']]], - ['nrows',['nrows',['../classspark_1_1io_1_1MmReader.html#a3698c442e4b847c2f1479dd11fef9a15',1,'spark::io::MmReader::nrows()'],['../classParallelCsrReadControl.html#afda30a96f0ffe1c758ce548cfd8d5907',1,'ParallelCsrReadControl.nRows()']]], - ['numpipes',['numPipes',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac51f502488f2b7d2dbffb5a9939b4271',1,'spark::spmv::SimpleSpmvArchitecture::numPipes()'],['../classSpmvManager.html#a2b1f61839183d1301ddc3975f4ad3ae9',1,'SpmvManager.numPipes()']]], - ['numpipesr',['numPipesR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a2250dba56bfc36df530fcba2ae8e5573',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], - ['numpipesrange',['numPipesRange',['../classspark_1_1dse_1_1DseParameters.html#a312071f767470577bf393c3d190d72bd',1,'spark::dse::DseParameters']]] -]; diff --git a/search/all_6f.html b/search/all_6f.html deleted file mode 100644 index 5e86b03..0000000 --- a/search/all_6f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_6f.js b/search/all_6f.js deleted file mode 100644 index 30ed723..0000000 --- a/search/all_6f.js +++ /dev/null @@ -1,19 +0,0 @@ -var searchData= -[ - ['ocontrol',['oControl',['../classParallelCsrReadControl.html#acadabffbfd3d06c672dabfe98ee0ca23',1,'ParallelCsrReadControl']]], - ['ocontroldata',['oControlData',['../classParallelCsrReadControl.html#acfc1f32a0362606d06eeb514a7738af8',1,'ParallelCsrReadControl']]], - ['one',['one',['../classParallelCsrReadControl.html#af04777655393a3fb3dc8265c4047d0a6',1,'ParallelCsrReadControl']]], - ['operator_28_29',['operator()',['../structSpmvHash.html#a4655e26aca9f73c92dcbc679f7222e83',1,'SpmvHash::operator()()'],['../structSpmvEqual.html#aad8f140c593abd6997a30cf6833dcfc2',1,'SpmvEqual::operator()()']]], - ['operator_2a',['operator*',['../classspark_1_1model_1_1LogicResourceUsage.html#accca14ba38323db0242d77a654b22520',1,'spark::model::LogicResourceUsage::operator*(int x) const '],['../classspark_1_1model_1_1LogicResourceUsage.html#ae939cb8a86e0fe1209d312317627d3a1',1,'spark::model::LogicResourceUsage::operator*(double x) const ']]], - ['operator_2b',['operator+',['../classspark_1_1model_1_1LogicResourceUsage.html#a48bf8cd8225540f1fa0da63719657e6a',1,'spark::model::LogicResourceUsage']]], - ['operator_2b_2b',['operator++',['../structspark_1_1utils_1_1Range.html#a8623004edfe9d73657f831d1392fe579',1,'spark::utils::Range']]], - ['operator_3c',['operator<',['../classspark_1_1model_1_1LogicResourceUsage.html#aea20a053d751c2de91d491e38688f776',1,'spark::model::LogicResourceUsage::operator<()'],['../classspark_1_1model_1_1ImplementationParameters.html#acf5199cb8cb126ddb4977b02f1cebddd',1,'spark::model::ImplementationParameters::operator<()']]], - ['operator_3c_3c',['operator<<',['../namespacespark_1_1dse.html#a2cba03adcd7e6708f31a01eb270ffeb9',1,'spark::dse::operator<<(std::ostream &s, Benchmark &b)'],['../namespacespark_1_1dse.html#ae3baaf24604e126136d1d8b583fc389d',1,'spark::dse::operator<<(std::ostream &s, DseParameters &d)'],['../namespacespark_1_1spmv.html#ad1e89fa7b9bf647e70186d2dc8385961',1,'spark::spmv::operator<<()'],['../namespacespark_1_1utils.html#a58716b1e1a4e2b2a3115f339aba795ef',1,'spark::utils::operator<<()']]], - ['operator_3d_3d',['operator==',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9ff8f85bf609bf02b087b39674dc1b25',1,'spark::spmv::SimpleSpmvArchitecture::operator==()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a113cc5b7d55d561f862e007e0252cc82',1,'spark::spmv::SpmvArchitecture::operator==()']]], - ['outputfunction',['outputFunction',['../classParallelCsrReadControl.html#a9f87d1cc0071a87de47a8ede3cd8508c',1,'ParallelCsrReadControl']]], - ['outputnotstall',['outputNotStall',['../classParallelCsrReadControl.html#a5ba3304bde2ca9c746fc58f4f632092e',1,'ParallelCsrReadControl']]], - ['outputtingcommands',['OutputtingCommands',['../enumParallelCsrReadControl_1_1Mode.html#a1fe6df0a1446f33e43e80b9ad3e0cd49',1,'ParallelCsrReadControl::Mode']]], - ['outsize',['outSize',['../structspark_1_1spmv_1_1Partition.html#a4653f40c7d63f4c663190b209b6373d7',1,'spark::spmv::Partition::outSize()'],['../structPartitionWriteResult.html#a7cc1bba9c690f9a66fa15add6d1763e6',1,'PartitionWriteResult::outSize()']]], - ['outstartaddr',['outStartAddr',['../structPartitionWriteResult.html#a93f6f5c23c1f0f7e18f319f3e33aee61',1,'PartitionWriteResult']]], - ['outvalid',['outValid',['../classParallelCsrReadControl.html#a998688c17de6d3dee32bb3005124d484',1,'ParallelCsrReadControl']]] -]; diff --git a/search/all_70.html b/search/all_70.html deleted file mode 100644 index 799c1a2..0000000 --- a/search/all_70.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_70.js b/search/all_70.js deleted file mode 100644 index 5bc327b..0000000 --- a/search/all_70.js +++ /dev/null @@ -1,22 +0,0 @@ -var searchData= -[ - ['paddingcycles',['paddingCycles',['../structspark_1_1spmv_1_1Partition.html#a611bc144e0b0f3e4075e4fa27137669f',1,'spark::spmv::Partition']]], - ['paddingkernel',['PaddingKernel',['../classPaddingKernel.html',1,'PaddingKernel'],['../classPaddingKernel.html#a6087bd04eca705d5c45d7978892ba7b0',1,'PaddingKernel.PaddingKernel()']]], - ['parallelcsrreadcontrol',['ParallelCsrReadControl',['../classParallelCsrReadControl.html',1,'ParallelCsrReadControl'],['../classParallelCsrReadControl.html#abcbdd7c1a9d3193fa28f097ffb47e110',1,'ParallelCsrReadControl.ParallelCsrReadControl()']]], - ['parallelcsrreadcontrol_2ejava',['ParallelCsrReadControl.java',['../ParallelCsrReadControl_8java.html',1,'']]], - ['parsebuildparams',['parseBuildParams',['../namespacespark_1_1userio.html#a3dd99cbd0dfbe620ddebf4f95351b15b',1,'spark::userio']]], - ['parseheader',['parseHeader',['../classspark_1_1io_1_1MmReader.html#a5f474abc81a8d634a45b80750d816df9',1,'spark::io::MmReader::parseHeader(std::string line)'],['../classspark_1_1io_1_1MmReader.html#a3575f75893a9ece651ef17b111d959fd',1,'spark::io::MmReader::parseHeader(bool pprint=false)']]], - ['partition',['Partition',['../structspark_1_1spmv_1_1Partition.html',1,'spark::spmv']]], - ['partitionedcsrmatrix',['PartitionedCsrMatrix',['../namespacespark_1_1sparse.html#a15a8e3974007d1c440410bf83232f5dd',1,'spark::sparse']]], - ['partitions',['partitions',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a90e1699cd2d8ee0abd21e4461d8c7d32',1,'spark::spmv::SimpleSpmvArchitecture']]], - ['partitionsprocessed',['partitionsProcessed',['../classParallelCsrReadControl.html#abaf944d93404a6d08eaa4f17e8ee4d0c',1,'ParallelCsrReadControl']]], - ['partitionwriteresult',['PartitionWriteResult',['../structPartitionWriteResult.html',1,'']]], - ['path',['path',['../classspark_1_1io_1_1MmReader.html#a853387b508034ba82ede19c2500c5030',1,'spark::io::MmReader']]], - ['paths',['paths',['../classspark_1_1dse_1_1Benchmark.html#aa21c70d1c142db7c1ee3fb81fc5e81c5',1,'spark::dse::Benchmark']]], - ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html',1,'spark::spmv']]], - ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#ae614b247e6e43b41b6ee2ec4565a55c6',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a12e8b6b4d9135f559d1800dacf5f25f1',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], - ['preprocess',['preprocess',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3aed67e40e87a0ea0dd79fd30f76a7cf',1,'spark::spmv::SimpleSpmvArchitecture::preprocess()'],['../classspark_1_1sparse__linear__solvers_1_1Solver.html#ae5a1a27b9213613cf6d67dc6e635f42d',1,'spark::sparse_linear_solvers::Solver::preprocess()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4f14b957c8585ed81ff2af46ab26340f',1,'spark::spmv::SpmvArchitecture::preprocess()']]], - ['preprocessblock',['preprocessBlock',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#adefa266d246a395b8a67a83912272e2d',1,'spark::spmv::SkipEmptyRowsArchitecture::preprocessBlock()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a7cd5036aa7c21a4439b8ddfb8a969bf0',1,'spark::spmv::SpmvArchitecture::preprocessBlock()']]], - ['prevdata',['prevData',['../classParallelCsrReadControl.html#aae3d7861bddbf53bea616be8e308afa8',1,'ParallelCsrReadControl']]], - ['processrows',['processRows',['../classParallelCsrReadControl.html#a0860f8fe7c3841a51d7b9faa16b1f26a',1,'ParallelCsrReadControl']]] -]; diff --git a/search/all_72.html b/search/all_72.html deleted file mode 100644 index 347b9f6..0000000 --- a/search/all_72.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_72.js b/search/all_72.js deleted file mode 100644 index d51533a..0000000 --- a/search/all_72.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['range',['Range',['../structspark_1_1utils_1_1Range.html',1,'spark::utils']]], - ['range',['Range',['../structspark_1_1utils_1_1Range.html#af0ce17db5625ad22c87532891f4b890a',1,'spark::utils::Range::Range(int _s, int _e, int _stp)'],['../structspark_1_1utils_1_1Range.html#a6a3850b17634041447d86797929e9f2c',1,'spark::utils::Range::Range(std::string range)']]], - ['readinglength',['ReadingLength',['../enumParallelCsrReadControl_1_1Mode.html#a0bf9792309f43608f812f047b288bcd9',1,'ParallelCsrReadControl::Mode']]], - ['readlength',['readLength',['../classParallelCsrReadControl.html#afe43fc900641b277ae1069dde875a88b',1,'ParallelCsrReadControl']]], - ['readmaskdata',['readMaskData',['../classParallelCsrReadControl.html#a0f2333314c34fb9b3a1cd57c7d2d6d37',1,'ParallelCsrReadControl']]], - ['readme_2emd',['README.md',['../README_8md.html',1,'']]], - ['readvector',['readVector',['../classspark_1_1io_1_1MmReader.html#a3aa3d0ea6867f58d326674b632f7b045',1,'spark::io::MmReader']]], - ['reductioncycles',['reductionCycles',['../structspark_1_1spmv_1_1Partition.html#abf0e3c933b315809c50c6e68506bb174',1,'spark::spmv::Partition']]], - ['resolvevectorreads',['resolveVectorReads',['../classSpmvCacheKernel.html#a8c2591875950cd9bb288c779aacccd54',1,'SpmvCacheKernel']]], - ['restart',['restart',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a50a6bb214092c694e0c3e8b9978f607c',1,'spark::spmv::SimpleSpmvArchitectureSpace::restart()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a76b80d8f6d287bf6b90f38a0ac215354',1,'spark::spmv::SpmvArchitectureSpace::restart()'],['../structspark_1_1utils_1_1Range.html#a05c07c975dd7bf3ba8a097044258aa5a',1,'spark::utils::Range::restart()']]], - ['rowlengthdata',['rowLengthData',['../classParallelCsrReadControl.html#a309e5d2abd0d3bdaca25a19f280cd029',1,'ParallelCsrReadControl']]], - ['rowsprocessed',['rowsProcessed',['../classParallelCsrReadControl.html#ad0b253e90543c25af346b9afff908d87',1,'ParallelCsrReadControl']]], - ['ru',['ru',['../classspark_1_1model_1_1ImplementationParameters.html#ac82ef6a8d3fd73cd40fff27d1ec9b943',1,'spark::model::ImplementationParameters']]], - ['run',['run',['../classspark_1_1dse_1_1SparkDse.html#abefe26e252597bb164ef8236e5460210',1,'spark::dse::SparkDse']]] -]; diff --git a/search/all_73.html b/search/all_73.html deleted file mode 100644 index 9abac91..0000000 --- a/search/all_73.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_73.js b/search/all_73.js deleted file mode 100644 index 9aecf04..0000000 --- a/search/all_73.js +++ /dev/null @@ -1,63 +0,0 @@ -var searchData= -[ - ['converters',['converters',['../namespacespark_1_1converters.html',1,'spark']]], - ['dse',['dse',['../namespacespark_1_1dse.html',1,'spark']]], - ['io',['io',['../namespacespark_1_1io.html',1,'spark']]], - ['spark',['spark',['../md_README.html',1,'']]], - ['model',['model',['../namespacespark_1_1model.html',1,'spark']]], - ['selectvalues',['selectValues',['../classSpmvCacheKernel.html#a3864c0d130426bcad05724a9a864c7db',1,'SpmvCacheKernel']]], - ['setupcomputepipe',['setUpComputePipe',['../classSpmvManager.html#a8f777c0e6b5572b85bf90427b1419039',1,'SpmvManager']]], - ['setupunpaddingkernel',['setupUnpaddingKernel',['../classSpmvManager.html#a42510179831b9c539721ffbf0506c0f2',1,'SpmvManager']]], - ['simplespmv_2ehpp',['SimpleSpmv.hpp',['../SimpleSpmv_8hpp.html',1,'']]], - ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html',1,'spark::spmv']]], - ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae0357e972b3380edb382868d3616542d',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a254d3c473b526699bdf5d7994da756b9',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], - ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html',1,'spark::spmv']]], - ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a045eb9b1b8b025ae7ebff4a4f6cd3246',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace(spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abd7023a217d39076e9c47a4226580c4f',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace()']]], - ['size_5fbytes',['size_bytes',['../Spmv_8cpp.html#a725a1b7ac05f04b3bc61b2a270346ea6',1,'Spmv.cpp']]], - ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ad7f11ef476f1343c237b4bd41f19559b',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ab8dadd53ee054e2152cd86b979b4304e',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], - ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html',1,'spark::spmv']]], - ['smallestmultiplelargerthan',['smallestMultipleLargerThan',['../classSpmvManager.html#a3297286373eb2b5536b6cc04481cc996',1,'SpmvManager']]], - ['solve',['solve',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#aeab2189d0b72aaeda51f9defb2fd64b4',1,'spark::sparse_linear_solvers::Solver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html#a3c0f45b239cb7127fe8da07673cbfd52',1,'spark::sparse_linear_solvers::EigenSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html#a55a4b35ed35b40ee3f712024d9b45206',1,'spark::sparse_linear_solvers::DfeCgSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html#adaa588ced5dd2ce56da4cc095c88c4c3',1,'spark::sparse_linear_solvers::DfeBiCgSolver::solve()']]], - ['solvebicg',['solveBICG',['../SparseLinearSolvers_8cpp.html#a0917711c5c1de1d6fc6d3f5c2fa08c47',1,'SparseLinearSolvers.cpp']]], - ['solvecg',['solveCG',['../SparseLinearSolvers_8cpp.html#a857d72c794d4097e9a37e2a1a6839567',1,'SparseLinearSolvers.cpp']]], - ['solvelu',['solveLU',['../SparseLinearSolvers_8cpp.html#abdc884f0c76856917e9821d6242ee98a',1,'SparseLinearSolvers.cpp']]], - ['solver',['Solver',['../classspark_1_1sparse__linear__solvers_1_1Solver.html',1,'spark::sparse_linear_solvers']]], - ['spark',['spark',['../namespacespark.html',1,'']]], - ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html',1,'spark::sparse']]], - ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ad81f39eca4950c1e4623cdb120f094b0',1,'spark::sparse::SparkCooMatrix']]], - ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html#acf3f66892ae92b0d4c4d0e250da9ebde',1,'spark::dse::SparkDse']]], - ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html',1,'spark::dse']]], - ['sparse',['sparse',['../namespacespark_1_1sparse.html',1,'spark']]], - ['sparse',['sparse',['../classspark_1_1io_1_1MmReader.html#abaeb856fe8052dada1094aeeba575482',1,'spark::io::MmReader']]], - ['sparse_5flinear_5fsolvers',['sparse_linear_solvers',['../namespacespark_1_1sparse__linear__solvers.html',1,'spark']]], - ['sparselinearsolvers_2ecpp',['SparseLinearSolvers.cpp',['../SparseLinearSolvers_8cpp.html',1,'']]], - ['sparselinearsolvers_2ehpp',['SparseLinearSolvers.hpp',['../SparseLinearSolvers_8hpp.html',1,'']]], - ['sparsematrix',['SparseMatrix',['../classspark_1_1io_1_1MmReader.html#a4b6628e5d0886325e152e8ffdae1964c',1,'spark::io::MmReader']]], - ['sparsematrix_2ehpp',['SparseMatrix.hpp',['../SparseMatrix_8hpp.html',1,'']]], - ['spmv',['Spmv',['../SpmvDeviceInterface_8h.html#a2f0caf835f75923c7b64abf5b530f56a',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterface.h'],['../SpmvDeviceInterfaceMock_8cpp.html#a56da26d4ef8ebccdac40830eae1f75d6',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int32_t *param_outResultSizes, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterfaceMock.cpp']]], - ['spmv',['spmv',['../namespacespark_1_1spmv.html',1,'spark']]], - ['spmv_2ecpp',['Spmv.cpp',['../Spmv_8cpp.html',1,'']]], - ['spmv_2ehpp',['Spmv.hpp',['../Spmv_8hpp.html',1,'']]], - ['spmv_5fdramread',['Spmv_dramRead',['../SpmvDeviceInterface_8h.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp']]], - ['spmv_5fdramwrite',['Spmv_dramWrite',['../SpmvDeviceInterface_8h.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp']]], - ['spmvarchitecture',['SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html',1,'spark::spmv']]], - ['spmvarchitecturespace',['SpmvArchitectureSpace',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html',1,'spark::spmv']]], - ['spmvcachekernel',['SpmvCacheKernel',['../classSpmvCacheKernel.html',1,'SpmvCacheKernel'],['../classSpmvCacheKernel.html#acd4688b7b45eb067763e70a072acc496',1,'SpmvCacheKernel.SpmvCacheKernel()']]], - ['spmvdeviceinterface_2ecpp',['SpmvDeviceInterface.cpp',['../SpmvDeviceInterface_8cpp.html',1,'']]], - ['spmvdeviceinterface_2eh',['SpmvDeviceInterface.h',['../SpmvDeviceInterface_8h.html',1,'']]], - ['spmvdeviceinterfacemock_2ecpp',['SpmvDeviceInterfaceMock.cpp',['../SpmvDeviceInterfaceMock_8cpp.html',1,'']]], - ['spmvequal',['SpmvEqual',['../structSpmvEqual.html',1,'']]], - ['spmvhash',['SpmvHash',['../structSpmvHash.html',1,'']]], - ['spmvkernel',['SpmvKernel',['../classSpmvKernel.html',1,'SpmvKernel'],['../classSpmvKernel.html#ad09b317bceedc13d1f50865cbdb4cd91',1,'SpmvKernel.SpmvKernel()']]], - ['spmvkernel_2ejava',['SpmvKernel.java',['../SpmvKernel_8java.html',1,'']]], - ['spmvmanager',['SpmvManager',['../classSpmvManager.html',1,'SpmvManager'],['../classSpmvManager.html#aaeaf51093060e192ab53048bf0c2fa9d',1,'SpmvManager.SpmvManager()']]], - ['spmvmanager_2ejava',['SpmvManager.java',['../SpmvManager_8java.html',1,'']]], - ['spmvreductionkernel',['SpmvReductionKernel',['../classSpmvReductionKernel.html',1,'SpmvReductionKernel'],['../classSpmvReductionKernel.html#a6cf50bef530943f0e812c5a684b2b26a',1,'SpmvReductionKernel.SpmvReductionKernel()']]], - ['ssarch',['ssarch',['../Spmv_8cpp.html#a73ed93bfd16d2b54084241251efe53ca',1,'Spmv.cpp']]], - ['start',['start',['../structspark_1_1utils_1_1Range.html#aa944c6fbb45db229c82ab2af62836237',1,'spark::utils::Range']]], - ['stdvectortoeigen',['stdvectorToEigen',['../namespacespark_1_1converters.html#aa6e224b8b4ce34ca7a1683910b0dd9c2',1,'spark::converters']]], - ['step',['step',['../structspark_1_1utils_1_1Range.html#adafa797e5802e578a9fffc6fc25b6a24',1,'spark::utils::Range']]], - ['symmetric',['symmetric',['../classspark_1_1io_1_1MmReader.html#a339fd452b0db39fdabb6fc9b9994624d',1,'spark::io::MmReader']]], - ['userio',['userio',['../namespacespark_1_1userio.html',1,'spark']]], - ['utils',['utils',['../namespacespark_1_1utils.html',1,'spark']]] -]; diff --git a/search/all_74.html b/search/all_74.html deleted file mode 100644 index c646aef..0000000 --- a/search/all_74.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_74.js b/search/all_74.js deleted file mode 100644 index ec177a7..0000000 --- a/search/all_74.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['to_5fstring',['to_string',['../classspark_1_1model_1_1LogicResourceUsage.html#a0f6ff26d2cab74fc11bca87f60bdce35',1,'spark::model::LogicResourceUsage::to_string()'],['../classspark_1_1model_1_1ImplementationParameters.html#a0e71a3875d830daed887869a9f86c374',1,'spark::model::ImplementationParameters::to_string()'],['../structspark_1_1spmv_1_1Partition.html#a11004c0342811a57bba97bf31c823d64',1,'spark::spmv::Partition::to_string()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af12e62e4f0c6a5d0f6e37bf3a326956b',1,'spark::spmv::SimpleSpmvArchitecture::to_string()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa6bc86fc3b1f6d37836c7219d00c49a0',1,'spark::spmv::SpmvArchitecture::to_string()'],['../structspark_1_1utils_1_1Range.html#ae03ddb2296e4c08b7756adc10847b4b9',1,'spark::utils::Range::to_string()']]], - ['toread',['toread',['../classParallelCsrReadControl.html#af87a65fc4f7423554e3a36f0a059cbf1',1,'ParallelCsrReadControl']]], - ['totalcycles',['totalCycles',['../structspark_1_1spmv_1_1Partition.html#a2256e3b766ab51acd2be27a1975f0ed9',1,'spark::spmv::Partition']]], - ['totaloutputs',['totalOutputs',['../classParallelCsrReadControl.html#a869e17d0a43818cd085f01898143f2cc',1,'ParallelCsrReadControl']]], - ['triplettoeigen',['tripletToEigen',['../namespacespark_1_1converters.html#ad8ff5498781446bc5c51cd52922f5d72',1,'spark::converters']]], - ['tru',['tru',['../classParallelCsrReadControl.html#ab6214aafff1d0650206637e7a9f15729',1,'ParallelCsrReadControl']]] -]; diff --git a/search/all_75.html b/search/all_75.html deleted file mode 100644 index 550133a..0000000 --- a/search/all_75.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_75.js b/search/all_75.js deleted file mode 100644 index 1563c61..0000000 --- a/search/all_75.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['unpaddingkernel',['UnpaddingKernel',['../classUnpaddingKernel.html',1,'UnpaddingKernel'],['../classUnpaddingKernel.html#a52a201168b15d7ab1e1378178a5abd5e',1,'UnpaddingKernel.UnpaddingKernel()']]], - ['userinput_2ehpp',['UserInput.hpp',['../UserInput_8hpp.html',1,'']]], - ['userinputparams',['UserInputParams',['../namespacespark_1_1userio.html#a61705a89ecd4794e1aaf8e56bc89a5ae',1,'spark::userio']]], - ['utils_2ehpp',['Utils.hpp',['../Utils_8hpp.html',1,'']]] -]; diff --git a/search/all_76.html b/search/all_76.html deleted file mode 100644 index 50b86da..0000000 --- a/search/all_76.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_76.js b/search/all_76.js deleted file mode 100644 index 8ae8702..0000000 --- a/search/all_76.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['value',['value',['../structspark_1_1spmv_1_1indptr__value.html#ae0073c7eec3c96ddf6ce38dedc3312b1',1,'spark::spmv::indptr_value::value()'],['../SimpleSpmv_8hpp.html#aee90379adb0307effb138f4871edbc5c',1,'value(): SimpleSpmv.hpp']]], - ['vd',['Vd',['../BiConjugateGradient_8cpp.html#a61f485fb4164897d20404192b8a20927',1,'BiConjugateGradient.cpp']]], - ['vector_5fload_5fcycles',['vector_load_cycles',['../structspark_1_1spmv_1_1Partition.html#a087b0019edb1ad8ef824ed7e26e19849',1,'spark::spmv::Partition']]], - ['vectorload',['VectorLoad',['../enumParallelCsrReadControl_1_1Mode.html#aa2414caa80d02424c7a80c3946160a2d',1,'ParallelCsrReadControl::Mode']]], - ['vectorloadcommands',['vectorLoadCommands',['../classParallelCsrReadControl.html#a4627fcdaeb69d3836053e91cc70a80f2',1,'ParallelCsrReadControl']]], - ['vectorloadcycles',['vectorLoadCycles',['../classParallelCsrReadControl.html#aa609515db6c67afd973f1d15431e1684',1,'ParallelCsrReadControl']]], - ['vectorvalues',['vectorValues',['../classSpmvCacheKernel.html#a866881c55c08adf35042aeeb18c9cffd',1,'SpmvCacheKernel']]], - ['vroms',['vroms',['../classSpmvCacheKernel.html#ad7249c675981ec57613b0f3d69a39342',1,'SpmvCacheKernel']]], - ['vstartaddress',['vStartAddress',['../structPartitionWriteResult.html#a2a1d5b0084ae204040066b7fe3a33b07',1,'PartitionWriteResult']]], - ['vtype',['vtype',['../classSpmvCacheKernel.html#a4a13093fa8aa4a3a053cf3d7122c6866',1,'SpmvCacheKernel']]] -]; diff --git a/search/all_77.html b/search/all_77.html deleted file mode 100644 index 55d7142..0000000 --- a/search/all_77.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_77.js b/search/all_77.js deleted file mode 100644 index 34a8108..0000000 --- a/search/all_77.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['write_5fdse_5fresults',['write_dse_results',['../main_8cpp.html#a8d444a99dbaa5e94893a71e578e1d902',1,'main.cpp']]], - ['write_5fparams',['write_params',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9acabcfa6d09c76000290982c33a36f0',1,'spark::spmv::SimpleSpmvArchitecture::write_params()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#acb14edc8b1c5a5e961304e3bf92c97c7',1,'spark::spmv::SpmvArchitecture::write_params()']]], - ['writedataforpartition',['writeDataForPartition',['../Spmv_8cpp.html#a5aa85a542358e8677cae112694f88d78',1,'Spmv.cpp']]] -]; diff --git a/search/all_7a.html b/search/all_7a.html deleted file mode 100644 index 5d99ff7..0000000 --- a/search/all_7a.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_7a.js b/search/all_7a.js deleted file mode 100644 index dd8a2c4..0000000 --- a/search/all_7a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['zero',['zero',['../classParallelCsrReadControl.html#ae2dc7d8decaf5a2458d11eee8f0e5f33',1,'ParallelCsrReadControl.zero()'],['../classParallelCsrReadControl.html#a6a81725c82d1c2631d13b35ea2bce758',1,'ParallelCsrReadControl.zero(int bitWidth)']]] -]; diff --git a/search/all_7e.html b/search/all_7e.html deleted file mode 100644 index 71f33b1..0000000 --- a/search/all_7e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/all_7e.js b/search/all_7e.js deleted file mode 100644 index df583cb..0000000 --- a/search/all_7e.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['_7emmreader',['~MmReader',['../classspark_1_1io_1_1MmReader.html#afff251fc01bc6a47007e5b562f002ed3',1,'spark::io::MmReader']]], - ['_7espmvarchitecture',['~SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html#abec906effc222dd9f12781c75e3b40c1',1,'spark::spmv::SpmvArchitecture']]] -]; diff --git a/search/classes_62.html b/search/classes_62.html deleted file mode 100644 index 04a59d2..0000000 --- a/search/classes_62.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_62.js b/search/classes_62.js deleted file mode 100644 index d447c84..0000000 --- a/search/classes_62.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['benchmark',['Benchmark',['../classspark_1_1dse_1_1Benchmark.html',1,'spark::dse']]], - ['bramspmvreductionkernel',['BramSpmvReductionKernel',['../classBramSpmvReductionKernel.html',1,'']]] -]; diff --git a/search/classes_64.html b/search/classes_64.html deleted file mode 100644 index 4092564..0000000 --- a/search/classes_64.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_64.js b/search/classes_64.js deleted file mode 100644 index a5362c2..0000000 --- a/search/classes_64.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['dfebicgsolver',['DfeBiCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html',1,'spark::sparse_linear_solvers']]], - ['dfecgsolver',['DfeCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html',1,'spark::sparse_linear_solvers']]], - ['dramspmvreductionkernel',['DramSpmvReductionKernel',['../classDramSpmvReductionKernel.html',1,'']]], - ['dseparameters',['DseParameters',['../classspark_1_1dse_1_1DseParameters.html',1,'spark::dse']]], - ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html',1,'spark::dse']]] -]; diff --git a/search/classes_65.html b/search/classes_65.html deleted file mode 100644 index 4f441f9..0000000 --- a/search/classes_65.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_65.js b/search/classes_65.js deleted file mode 100644 index c400400..0000000 --- a/search/classes_65.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['eigensolver',['EigenSolver',['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html',1,'spark::sparse_linear_solvers']]] -]; diff --git a/search/classes_66.html b/search/classes_66.html deleted file mode 100644 index b83e593..0000000 --- a/search/classes_66.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_66.js b/search/classes_66.js deleted file mode 100644 index c071a37..0000000 --- a/search/classes_66.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html',1,'spark::spmv']]] -]; diff --git a/search/classes_69.html b/search/classes_69.html deleted file mode 100644 index 7a0d013..0000000 --- a/search/classes_69.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_69.js b/search/classes_69.js deleted file mode 100644 index 7308ebc..0000000 --- a/search/classes_69.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html',1,'spark::model']]], - ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html',1,'spark::spmv']]] -]; diff --git a/search/classes_6c.html b/search/classes_6c.html deleted file mode 100644 index a16bb58..0000000 --- a/search/classes_6c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_6c.js b/search/classes_6c.js deleted file mode 100644 index 764cb62..0000000 --- a/search/classes_6c.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html',1,'spark::model']]] -]; diff --git a/search/classes_6d.html b/search/classes_6d.html deleted file mode 100644 index 12b1c83..0000000 --- a/search/classes_6d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_6d.js b/search/classes_6d.js deleted file mode 100644 index 56dcdcf..0000000 --- a/search/classes_6d.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html',1,'spark::io']]], - ['mode',['Mode',['../enumParallelCsrReadControl_1_1Mode.html',1,'ParallelCsrReadControl']]] -]; diff --git a/search/classes_70.html b/search/classes_70.html deleted file mode 100644 index 7c5b3e5..0000000 --- a/search/classes_70.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_70.js b/search/classes_70.js deleted file mode 100644 index 30babaa..0000000 --- a/search/classes_70.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['paddingkernel',['PaddingKernel',['../classPaddingKernel.html',1,'']]], - ['parallelcsrreadcontrol',['ParallelCsrReadControl',['../classParallelCsrReadControl.html',1,'']]], - ['partition',['Partition',['../structspark_1_1spmv_1_1Partition.html',1,'spark::spmv']]], - ['partitionwriteresult',['PartitionWriteResult',['../structPartitionWriteResult.html',1,'']]], - ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html',1,'spark::spmv']]] -]; diff --git a/search/classes_72.html b/search/classes_72.html deleted file mode 100644 index 03a7720..0000000 --- a/search/classes_72.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_72.js b/search/classes_72.js deleted file mode 100644 index 535570e..0000000 --- a/search/classes_72.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['range',['Range',['../structspark_1_1utils_1_1Range.html',1,'spark::utils']]] -]; diff --git a/search/classes_73.html b/search/classes_73.html deleted file mode 100644 index f447c45..0000000 --- a/search/classes_73.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_73.js b/search/classes_73.js deleted file mode 100644 index 93fb3c0..0000000 --- a/search/classes_73.js +++ /dev/null @@ -1,17 +0,0 @@ -var searchData= -[ - ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html',1,'spark::spmv']]], - ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html',1,'spark::spmv']]], - ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html',1,'spark::spmv']]], - ['solver',['Solver',['../classspark_1_1sparse__linear__solvers_1_1Solver.html',1,'spark::sparse_linear_solvers']]], - ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html',1,'spark::sparse']]], - ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html',1,'spark::dse']]], - ['spmvarchitecture',['SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html',1,'spark::spmv']]], - ['spmvarchitecturespace',['SpmvArchitectureSpace',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html',1,'spark::spmv']]], - ['spmvcachekernel',['SpmvCacheKernel',['../classSpmvCacheKernel.html',1,'']]], - ['spmvequal',['SpmvEqual',['../structSpmvEqual.html',1,'']]], - ['spmvhash',['SpmvHash',['../structSpmvHash.html',1,'']]], - ['spmvkernel',['SpmvKernel',['../classSpmvKernel.html',1,'']]], - ['spmvmanager',['SpmvManager',['../classSpmvManager.html',1,'']]], - ['spmvreductionkernel',['SpmvReductionKernel',['../classSpmvReductionKernel.html',1,'']]] -]; diff --git a/search/classes_75.html b/search/classes_75.html deleted file mode 100644 index 977f62a..0000000 --- a/search/classes_75.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/classes_75.js b/search/classes_75.js deleted file mode 100644 index 0f32206..0000000 --- a/search/classes_75.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['unpaddingkernel',['UnpaddingKernel',['../classUnpaddingKernel.html',1,'']]] -]; diff --git a/search/close.png b/search/close.png deleted file mode 100644 index 9342d3dfeea7b7c4ee610987e717804b5a42ceb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN diff --git a/search/files_62.html b/search/files_62.html deleted file mode 100644 index 86dfe39..0000000 --- a/search/files_62.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/files_62.js b/search/files_62.js deleted file mode 100644 index 5f2a9ea..0000000 --- a/search/files_62.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['biconjugategradient_2ecpp',['BiConjugateGradient.cpp',['../BiConjugateGradient_8cpp.html',1,'']]] -]; diff --git a/search/files_63.html b/search/files_63.html deleted file mode 100644 index 788d523..0000000 --- a/search/files_63.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/files_63.js b/search/files_63.js deleted file mode 100644 index 17d7cfb..0000000 --- a/search/files_63.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['conjugategradient_2ecpp',['ConjugateGradient.cpp',['../ConjugateGradient_8cpp.html',1,'']]], - ['converters_2ehpp',['Converters.hpp',['../Converters_8hpp.html',1,'']]] -]; diff --git a/search/files_64.html b/search/files_64.html deleted file mode 100644 index 175a900..0000000 --- a/search/files_64.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/files_64.js b/search/files_64.js deleted file mode 100644 index 0cb5209..0000000 --- a/search/files_64.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['dse_2ecpp',['Dse.cpp',['../Dse_8cpp.html',1,'']]], - ['dse_2ehpp',['Dse.hpp',['../Dse_8hpp.html',1,'']]] -]; diff --git a/search/files_69.html b/search/files_69.html deleted file mode 100644 index 4e0baee..0000000 --- a/search/files_69.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/files_69.js b/search/files_69.js deleted file mode 100644 index 8a078d6..0000000 --- a/search/files_69.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['io_2ehpp',['Io.hpp',['../Io_8hpp.html',1,'']]] -]; diff --git a/search/files_6d.html b/search/files_6d.html deleted file mode 100644 index 5796e52..0000000 --- a/search/files_6d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/files_6d.js b/search/files_6d.js deleted file mode 100644 index bb2be4e..0000000 --- a/search/files_6d.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['main_2ecpp',['main.cpp',['../main_8cpp.html',1,'']]], - ['model_2ehpp',['Model.hpp',['../Model_8hpp.html',1,'']]] -]; diff --git a/search/files_70.html b/search/files_70.html deleted file mode 100644 index e159cea..0000000 --- a/search/files_70.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/files_70.js b/search/files_70.js deleted file mode 100644 index 9f19756..0000000 --- a/search/files_70.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['parallelcsrreadcontrol_2ejava',['ParallelCsrReadControl.java',['../ParallelCsrReadControl_8java.html',1,'']]] -]; diff --git a/search/files_72.html b/search/files_72.html deleted file mode 100644 index 573ec11..0000000 --- a/search/files_72.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/files_72.js b/search/files_72.js deleted file mode 100644 index f1a1f84..0000000 --- a/search/files_72.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['readme_2emd',['README.md',['../README_8md.html',1,'']]] -]; diff --git a/search/files_73.html b/search/files_73.html deleted file mode 100644 index bcc9ae6..0000000 --- a/search/files_73.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/files_73.js b/search/files_73.js deleted file mode 100644 index 4d6e0c6..0000000 --- a/search/files_73.js +++ /dev/null @@ -1,14 +0,0 @@ -var searchData= -[ - ['simplespmv_2ehpp',['SimpleSpmv.hpp',['../SimpleSpmv_8hpp.html',1,'']]], - ['sparselinearsolvers_2ecpp',['SparseLinearSolvers.cpp',['../SparseLinearSolvers_8cpp.html',1,'']]], - ['sparselinearsolvers_2ehpp',['SparseLinearSolvers.hpp',['../SparseLinearSolvers_8hpp.html',1,'']]], - ['sparsematrix_2ehpp',['SparseMatrix.hpp',['../SparseMatrix_8hpp.html',1,'']]], - ['spmv_2ecpp',['Spmv.cpp',['../Spmv_8cpp.html',1,'']]], - ['spmv_2ehpp',['Spmv.hpp',['../Spmv_8hpp.html',1,'']]], - ['spmvdeviceinterface_2ecpp',['SpmvDeviceInterface.cpp',['../SpmvDeviceInterface_8cpp.html',1,'']]], - ['spmvdeviceinterface_2eh',['SpmvDeviceInterface.h',['../SpmvDeviceInterface_8h.html',1,'']]], - ['spmvdeviceinterfacemock_2ecpp',['SpmvDeviceInterfaceMock.cpp',['../SpmvDeviceInterfaceMock_8cpp.html',1,'']]], - ['spmvkernel_2ejava',['SpmvKernel.java',['../SpmvKernel_8java.html',1,'']]], - ['spmvmanager_2ejava',['SpmvManager.java',['../SpmvManager_8java.html',1,'']]] -]; diff --git a/search/files_75.html b/search/files_75.html deleted file mode 100644 index 70607dd..0000000 --- a/search/files_75.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/files_75.js b/search/files_75.js deleted file mode 100644 index 311ca6c..0000000 --- a/search/files_75.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['userinput_2ehpp',['UserInput.hpp',['../UserInput_8hpp.html',1,'']]], - ['utils_2ehpp',['Utils.hpp',['../Utils_8hpp.html',1,'']]] -]; diff --git a/search/functions_5f.html b/search/functions_5f.html deleted file mode 100644 index 2946e1e..0000000 --- a/search/functions_5f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_5f.js b/search/functions_5f.js deleted file mode 100644 index a6f0d18..0000000 --- a/search/functions_5f.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_5f_5fattribute_5f_5f',['__attribute__',['../namespacespark_1_1spmv.html#a8ed4b5e7d25d6d210e3f1b7f09a84c7a',1,'spark::spmv']]] -]; diff --git a/search/functions_61.html b/search/functions_61.html deleted file mode 100644 index d68c748..0000000 --- a/search/functions_61.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_61.js b/search/functions_61.js deleted file mode 100644 index 01d5e06..0000000 --- a/search/functions_61.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['add_5fmatrix_5fpath',['add_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a18854065058a9f70a0fbb4127212d81f',1,'spark::dse::Benchmark']]], - ['addcomputepipe',['addComputePipe',['../classSpmvManager.html#ac993f1b6041594ae5bd7211d4f498702',1,'SpmvManager']]], - ['addpaddingkernel',['addPaddingKernel',['../classSpmvManager.html#ab025ef7147d5d645028cc92b7d1a513f',1,'SpmvManager']]], - ['addunpaddingkernel',['addUnpaddingKernel',['../classSpmvManager.html#ae2858b4c2bd5a17d5710d0d34429e2b3',1,'SpmvManager']]], - ['align',['align',['../namespacespark_1_1spmv.html#abaf9d6fbe5cd5df67ea6314fccd769e0',1,'spark::spmv::align()'],['../Spmv_8cpp.html#af110ee89567b09ff002ff971364c551d',1,'align(): Spmv.cpp']]], - ['analyze',['analyze',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#a5922d0592d66ae9966bfbf4bb78a1c55',1,'spark::sparse_linear_solvers::Solver']]], - ['at_5fstart',['at_start',['../structspark_1_1utils_1_1Range.html#a2e5c2a068b494d96fa3bb9bc81f3b98b',1,'spark::utils::Range']]] -]; diff --git a/search/functions_62.html b/search/functions_62.html deleted file mode 100644 index 5134d2d..0000000 --- a/search/functions_62.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_62.js b/search/functions_62.js deleted file mode 100644 index 2063049..0000000 --- a/search/functions_62.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['better',['better',['../Dse_8cpp.html#ac63ef9b091049d2a25c5941b73512252',1,'Dse.cpp']]], - ['bramspmvreductionkernel',['BramSpmvReductionKernel',['../classBramSpmvReductionKernel.html#a68264df2094dfb810030e2147b3cacaa',1,'BramSpmvReductionKernel']]], - ['buildreadmask',['buildReadMask',['../classParallelCsrReadControl.html#ac16da093fd2a7f25322d24d8be66593f',1,'ParallelCsrReadControl']]] -]; diff --git a/search/functions_63.html b/search/functions_63.html deleted file mode 100644 index 9114d82..0000000 --- a/search/functions_63.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_63.js b/search/functions_63.js deleted file mode 100644 index f8564ee..0000000 --- a/search/functions_63.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['canread',['canRead',['../classParallelCsrReadControl.html#a2aa999eee54eca7e025dcb2be11dc900',1,'ParallelCsrReadControl']]], - ['cat',['cat',['../classParallelCsrReadControl.html#aff22ed75d30f759a6fa33b1d8a20b602',1,'ParallelCsrReadControl.cat(DFEsmValue...args)'],['../classParallelCsrReadControl.html#ac1026ad92d6b9e38d84c81aaced9c3b7',1,'ParallelCsrReadControl.cat(DFEsmValue left, DFEsmValue right)']]], - ['countcomputecycles',['countComputeCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ab2b61b0a02aa4dfa40a38ad98a84bbb4',1,'spark::spmv::SimpleSpmvArchitecture::countComputeCycles()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a328db4b67f8f9c6763117c8a82f81577',1,'spark::spmv::FstSpmvArchitecture::countComputeCycles()']]], - ['cpureferenceprecon',['cpuReferencePrecon',['../BiConjugateGradient_8cpp.html#ab1ada1c516bfa9599e8e43b4b9666a10',1,'BiConjugateGradient.cpp']]], - ['cpureferenceunprecon',['cpuReferenceUnprecon',['../BiConjugateGradient_8cpp.html#aa6ded0f7e5d8161252912d0eb17f27c0',1,'BiConjugateGradient.cpp']]] -]; diff --git a/search/functions_64.html b/search/functions_64.html deleted file mode 100644 index 1714930..0000000 --- a/search/functions_64.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_64.js b/search/functions_64.js deleted file mode 100644 index fd23efd..0000000 --- a/search/functions_64.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['dfeimplunprecon',['dfeImplUnprecon',['../BiConjugateGradient_8cpp.html#ac3a55e37d1559a049fcef0af776feb3b',1,'BiConjugateGradient.cpp']]], - ['dfespmv',['dfespmv',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a8c7ca2d2ac7284e46506f23728dde499',1,'spark::spmv::SimpleSpmvArchitecture::dfespmv()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1d557e23529a5040a858beafb9971acc',1,'spark::spmv::SpmvArchitecture::dfespmv()']]], - ['do_5fblocking',['do_blocking',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aedb22fc8e413dd6bc2c54d74bf03ed2d',1,'spark::spmv::SimpleSpmvArchitecture']]], - ['do_5fpartition',['do_partition',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac3cd16da984d35b091f0833edd919a56',1,'spark::spmv::SimpleSpmvArchitecture']]], - ['donext',['doNext',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abde19171c284739290c7a7c145d7deb7',1,'spark::spmv::SimpleSpmvArchitectureSpace::doNext()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a414ec6872fdf32550af1a6efbb4394d5',1,'spark::spmv::SpmvArchitectureSpace::doNext()']]], - ['dramspmvreductionkernel',['DramSpmvReductionKernel',['../classDramSpmvReductionKernel.html#a85cd96e69eec800ebfdea2c7bb6f7376',1,'DramSpmvReductionKernel']]], - ['dse_5frun',['dse_run',['../Dse_8cpp.html#a50c99f119df5ba972bbebeef76239c2e',1,'Dse.cpp']]], - ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html#a1d1342fbcf4346f77de3cb29c23622ba',1,'spark::dse::DseResult::DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)'],['../classspark_1_1dse_1_1DseResult.html#ac8b6f838e0112d684058ee911b9e2ab5',1,'spark::dse::DseResult::DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)']]] -]; diff --git a/search/functions_65.html b/search/functions_65.html deleted file mode 100644 index 13260cf..0000000 --- a/search/functions_65.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_65.js b/search/functions_65.js deleted file mode 100644 index 12a1cc3..0000000 --- a/search/functions_65.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['eigenvectortostdvector',['eigenVectorToStdVector',['../namespacespark_1_1converters.html#a78a095076b8d4daa406d3dc9bca7504c',1,'spark::converters']]], - ['encodeemptyrows',['encodeEmptyRows',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#a0336d2d0c76a4ad1586b904bafaefb3d',1,'spark::spmv::SkipEmptyRowsArchitecture']]], - ['equals',['equals',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac9cd3ac1f8a7ff7c2634d707a2d33356',1,'spark::spmv::SimpleSpmvArchitecture::equals()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa3aebf2b76c95d7b96e37865637a1104',1,'spark::spmv::SpmvArchitecture::equals()']]] -]; diff --git a/search/functions_66.html b/search/functions_66.html deleted file mode 100644 index 12565e3..0000000 --- a/search/functions_66.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_66.js b/search/functions_66.js deleted file mode 100644 index 9dec5c9..0000000 --- a/search/functions_66.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['fls',['fls',['../classParallelCsrReadControl.html#aa9acfae4966606e3e5645eb1592f5736',1,'ParallelCsrReadControl']]], - ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#ab1db27169d0bc9921d4c5048592e3d24',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#add2548a017451c5caae61cd3e9021467',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]] -]; diff --git a/search/functions_67.html b/search/functions_67.html deleted file mode 100644 index 53d4a09..0000000 --- a/search/functions_67.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_67.js b/search/functions_67.js deleted file mode 100644 index a282303..0000000 --- a/search/functions_67.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['get_5fbenchmark_5fsize',['get_benchmark_size',['../classspark_1_1dse_1_1Benchmark.html#a1692f6d32fb3d2a6de8ad8c85cf7fc39',1,'spark::dse::Benchmark']]], - ['get_5fmatrix_5fpath',['get_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a42578888522f08d21a620fa6ce17cfb3',1,'spark::dse::Benchmark']]], - ['get_5fname',['get_name',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac91efdbe0c3de7a45edde0052f478638',1,'spark::spmv::SimpleSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a90397fa9aa179cb86021fac39afc3f27',1,'spark::spmv::FstSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ae9604bff9ee8258920e8b599e0bb1a1d',1,'spark::spmv::SkipEmptyRowsArchitecture::get_name()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a91515587bbfe2ac62a891f17363d508f',1,'spark::spmv::PrefetchingArchitecture::get_name()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4dfdec260889947cf9844eed98e5dbbe',1,'spark::spmv::SpmvArchitecture::get_name()']]], - ['getcomputekernel',['getComputeKernel',['../classSpmvManager.html#a6776e0fc817b9cce1698ad46bef5c1ad',1,'SpmvManager']]], - ['getdramreductionenabled',['getDramReductionEnabled',['../SpmvDeviceInterface_8h.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterface.cpp']]], - ['getestimatedclockcycles',['getEstimatedClockCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ad109173c60a0469e99d188010e09fa9c',1,'spark::spmv::SimpleSpmvArchitecture::getEstimatedClockCycles()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#af60acfd57143cbb06c582bd6c1e6a3a9',1,'spark::spmv::SpmvArchitecture::getEstimatedClockCycles()']]], - ['getestimatedgflops',['getEstimatedGFlops',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a745a51a90e0d0e027be6f927e41e267a',1,'spark::spmv::SpmvArchitecture']]], - ['getfanoutname',['getFanoutName',['../classSpmvManager.html#aa4b9b4fd7299e8967130613ce89df06e',1,'SpmvManager']]], - ['getfrequency',['getFrequency',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a3eafac9b3bffd4a17d86a6f99eb97503',1,'spark::spmv::SpmvArchitecture']]], - ['getgflopscount',['getGFlopsCount',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a1b45bc81758c2e9ef21e6620d8fbd4db',1,'spark::spmv::SimpleSpmvArchitecture::getGFlopsCount()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1be404ebea121baa4b28f1548ad6207d',1,'spark::spmv::SpmvArchitecture::getGFlopsCount()']]], - ['getimplementationparameters',['getImplementationParameters',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3c5900f38fdfafa6481508d9c90819ff',1,'spark::spmv::SimpleSpmvArchitecture::getImplementationParameters()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a31274a6b708f9db92d810d2a161d812a',1,'spark::spmv::SpmvArchitecture::getImplementationParameters()']]], - ['getmatrixvalues',['getMatrixValues',['../classSpmvCacheKernel.html#a1c512fd317ade4f64a5e7f7215dd0c53',1,'SpmvCacheKernel']]], - ['getpaddingcycles',['getPaddingCycles',['../classSpmvManager.html#a64afe0643711d9cd06053a68f187f8da',1,'SpmvManager']]], - ['getpaddingkernel',['getPaddingKernel',['../classSpmvManager.html#a0cc931d1320ec4754066dacceeaff9c0',1,'SpmvManager']]], - ['getreadcontrol',['getReadControl',['../classSpmvManager.html#aca5d9419bca8dbc02b44df878cac0009',1,'SpmvManager']]], - ['getreductionkernel',['getReductionKernel',['../classSpmvManager.html#a0e7f3c94df7eafa7a899a2447f16155d',1,'SpmvManager']]], - ['getspmv_5finputwidth',['getSpmv_InputWidth',['../SpmvDeviceInterface_8h.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterface.cpp']]], - ['getspmv_5fmaxrows',['getSpmv_MaxRows',['../SpmvDeviceInterface_8h.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterface.cpp']]], - ['getspmv_5fnumpipes',['getSpmv_NumPipes',['../SpmvDeviceInterface_8h.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterface.cpp']]], - ['getspmv_5fpartitionsize',['getSpmv_PartitionSize',['../SpmvDeviceInterface_8h.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterface.cpp']]], - ['getunpaddingkernel',['getUnpaddingKernel',['../classSpmvManager.html#aff135aa6706cfaf3cea42f1353dd3ea7',1,'SpmvManager']]], - ['getvectorvalues',['getVectorValues',['../classSpmvCacheKernel.html#a937fcc2032a9fc1e390bef6cb425fd55',1,'SpmvCacheKernel']]] -]; diff --git a/search/functions_69.html b/search/functions_69.html deleted file mode 100644 index 9edd1a1..0000000 --- a/search/functions_69.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_69.js b/search/functions_69.js deleted file mode 100644 index 0a190b0..0000000 --- a/search/functions_69.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html#af2b90d99043967462da25c003c7f7e17',1,'spark::model::ImplementationParameters']]], - ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html#abf5ac17c5a8b83c68b8e421c9fb2b9f4',1,'spark::spmv::indptr_value::indptr_value(double _value, int _indptr)'],['../structspark_1_1spmv_1_1indptr__value.html#a1bb3b22d80c09f283b847a1fb907a462',1,'spark::spmv::indptr_value::indptr_value()'],['../SimpleSpmv_8hpp.html#ac37db725a01a5625a6a32d51d7fd3e78',1,'indptr_value(double _value, int _indptr): SimpleSpmv.hpp'],['../SimpleSpmv_8hpp.html#a84d257f77f20931d14a7e5abb9d099c8',1,'indptr_value(): SimpleSpmv.hpp']]], - ['interfacedefault',['interfaceDefault',['../classSpmvManager.html#ad0360a20a24483e22664a4bda8428ec6',1,'SpmvManager']]] -]; diff --git a/search/functions_6c.html b/search/functions_6c.html deleted file mode 100644 index 33c0d6d..0000000 --- a/search/functions_6c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_6c.js b/search/functions_6c.js deleted file mode 100644 index 5815b23..0000000 --- a/search/functions_6c.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['loadbenchmark',['loadBenchmark',['../main_8cpp.html#a75bc35b120d6b6f0834ae4d32856036c',1,'main.cpp']]], - ['loadparams',['loadParams',['../main_8cpp.html#a84bdcf570024843f14fc9624770bf035',1,'main.cpp']]], - ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html#a5b88cae38db7b5ab535f4a17fa643a15',1,'spark::model::LogicResourceUsage::LogicResourceUsage()'],['../classspark_1_1model_1_1LogicResourceUsage.html#a64aef671cc1360f9c760eddecc95dfe5',1,'spark::model::LogicResourceUsage::LogicResourceUsage(int _l, int _f, int _b, int _d)'],['../classspark_1_1model_1_1LogicResourceUsage.html#a303a7df506637540e2b7eb4d871f9029',1,'spark::model::LogicResourceUsage::LogicResourceUsage(const LogicResourceUsage &ru)']]] -]; diff --git a/search/functions_6d.html b/search/functions_6d.html deleted file mode 100644 index 73fecff..0000000 --- a/search/functions_6d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_6d.js b/search/functions_6d.js deleted file mode 100644 index 6da2dff..0000000 --- a/search/functions_6d.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['main',['main',['../classSpmvManager.html#abf7df885f5ea650b0128628cad8bf33b',1,'SpmvManager.main()'],['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(): main.cpp']]], - ['makecommand',['makeCommand',['../classParallelCsrReadControl.html#a75734eee54f3dfaaabf8794ba378ccfa',1,'ParallelCsrReadControl']]], - ['makeoutput',['makeOutput',['../classParallelCsrReadControl.html#a999c16ceab5da519c9e90a6b5765359c',1,'ParallelCsrReadControl']]], - ['min',['min',['../classParallelCsrReadControl.html#af39c2cd937063656ee7d2bdb4a21e8db',1,'ParallelCsrReadControl']]], - ['mmparse',['mmparse',['../classspark_1_1io_1_1MmReader.html#a73bef88acba33d35b9f714365456ab39',1,'spark::io::MmReader']]], - ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html#a18da82e5b71af2ce6f5946f7b66f8cd5',1,'spark::io::MmReader']]], - ['mmreadmatrix',['mmreadMatrix',['../classspark_1_1io_1_1MmReader.html#ae0ed6d286d9c5c08ad3bd3e910f3554a',1,'spark::io::MmReader']]] -]; diff --git a/search/functions_6e.html b/search/functions_6e.html deleted file mode 100644 index 5e54741..0000000 --- a/search/functions_6e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_6e.js b/search/functions_6e.js deleted file mode 100644 index f94b63e..0000000 --- a/search/functions_6e.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['needtoread',['needToRead',['../classParallelCsrReadControl.html#af55c1da545422cde5c57c61a861017d8',1,'ParallelCsrReadControl']]], - ['next',['next',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#aa9e55d9a1af4b951561705869dd2e2fe',1,'spark::spmv::SpmvArchitectureSpace']]], - ['nextstate',['nextState',['../classParallelCsrReadControl.html#acac4d268696bea31cb88a0293e7484ec',1,'ParallelCsrReadControl']]] -]; diff --git a/search/functions_6f.html b/search/functions_6f.html deleted file mode 100644 index 9d69264..0000000 --- a/search/functions_6f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_6f.js b/search/functions_6f.js deleted file mode 100644 index 182b742..0000000 --- a/search/functions_6f.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['one',['one',['../classParallelCsrReadControl.html#af04777655393a3fb3dc8265c4047d0a6',1,'ParallelCsrReadControl']]], - ['operator_28_29',['operator()',['../structSpmvHash.html#a4655e26aca9f73c92dcbc679f7222e83',1,'SpmvHash::operator()()'],['../structSpmvEqual.html#aad8f140c593abd6997a30cf6833dcfc2',1,'SpmvEqual::operator()()']]], - ['operator_2a',['operator*',['../classspark_1_1model_1_1LogicResourceUsage.html#accca14ba38323db0242d77a654b22520',1,'spark::model::LogicResourceUsage::operator*(int x) const '],['../classspark_1_1model_1_1LogicResourceUsage.html#ae939cb8a86e0fe1209d312317627d3a1',1,'spark::model::LogicResourceUsage::operator*(double x) const ']]], - ['operator_2b',['operator+',['../classspark_1_1model_1_1LogicResourceUsage.html#a48bf8cd8225540f1fa0da63719657e6a',1,'spark::model::LogicResourceUsage']]], - ['operator_2b_2b',['operator++',['../structspark_1_1utils_1_1Range.html#a8623004edfe9d73657f831d1392fe579',1,'spark::utils::Range']]], - ['operator_3c',['operator<',['../classspark_1_1model_1_1LogicResourceUsage.html#aea20a053d751c2de91d491e38688f776',1,'spark::model::LogicResourceUsage::operator<()'],['../classspark_1_1model_1_1ImplementationParameters.html#acf5199cb8cb126ddb4977b02f1cebddd',1,'spark::model::ImplementationParameters::operator<()']]], - ['operator_3c_3c',['operator<<',['../namespacespark_1_1dse.html#a2cba03adcd7e6708f31a01eb270ffeb9',1,'spark::dse::operator<<(std::ostream &s, Benchmark &b)'],['../namespacespark_1_1dse.html#ae3baaf24604e126136d1d8b583fc389d',1,'spark::dse::operator<<(std::ostream &s, DseParameters &d)'],['../namespacespark_1_1spmv.html#ad1e89fa7b9bf647e70186d2dc8385961',1,'spark::spmv::operator<<()'],['../namespacespark_1_1utils.html#a58716b1e1a4e2b2a3115f339aba795ef',1,'spark::utils::operator<<()']]], - ['operator_3d_3d',['operator==',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9ff8f85bf609bf02b087b39674dc1b25',1,'spark::spmv::SimpleSpmvArchitecture::operator==()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a113cc5b7d55d561f862e007e0252cc82',1,'spark::spmv::SpmvArchitecture::operator==()']]], - ['outputfunction',['outputFunction',['../classParallelCsrReadControl.html#a9f87d1cc0071a87de47a8ede3cd8508c',1,'ParallelCsrReadControl']]], - ['outputnotstall',['outputNotStall',['../classParallelCsrReadControl.html#a5ba3304bde2ca9c746fc58f4f632092e',1,'ParallelCsrReadControl']]] -]; diff --git a/search/functions_70.html b/search/functions_70.html deleted file mode 100644 index 8ef7fb9..0000000 --- a/search/functions_70.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_70.js b/search/functions_70.js deleted file mode 100644 index bd142ad..0000000 --- a/search/functions_70.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['paddingkernel',['PaddingKernel',['../classPaddingKernel.html#a6087bd04eca705d5c45d7978892ba7b0',1,'PaddingKernel']]], - ['parallelcsrreadcontrol',['ParallelCsrReadControl',['../classParallelCsrReadControl.html#abcbdd7c1a9d3193fa28f097ffb47e110',1,'ParallelCsrReadControl']]], - ['parsebuildparams',['parseBuildParams',['../namespacespark_1_1userio.html#a3dd99cbd0dfbe620ddebf4f95351b15b',1,'spark::userio']]], - ['parseheader',['parseHeader',['../classspark_1_1io_1_1MmReader.html#a5f474abc81a8d634a45b80750d816df9',1,'spark::io::MmReader::parseHeader(std::string line)'],['../classspark_1_1io_1_1MmReader.html#a3575f75893a9ece651ef17b111d959fd',1,'spark::io::MmReader::parseHeader(bool pprint=false)']]], - ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#ae614b247e6e43b41b6ee2ec4565a55c6',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a12e8b6b4d9135f559d1800dacf5f25f1',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], - ['preprocess',['preprocess',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3aed67e40e87a0ea0dd79fd30f76a7cf',1,'spark::spmv::SimpleSpmvArchitecture::preprocess()'],['../classspark_1_1sparse__linear__solvers_1_1Solver.html#ae5a1a27b9213613cf6d67dc6e635f42d',1,'spark::sparse_linear_solvers::Solver::preprocess()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4f14b957c8585ed81ff2af46ab26340f',1,'spark::spmv::SpmvArchitecture::preprocess()']]], - ['preprocessblock',['preprocessBlock',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#adefa266d246a395b8a67a83912272e2d',1,'spark::spmv::SkipEmptyRowsArchitecture::preprocessBlock()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a7cd5036aa7c21a4439b8ddfb8a969bf0',1,'spark::spmv::SpmvArchitecture::preprocessBlock()']]], - ['processrows',['processRows',['../classParallelCsrReadControl.html#a0860f8fe7c3841a51d7b9faa16b1f26a',1,'ParallelCsrReadControl']]] -]; diff --git a/search/functions_72.html b/search/functions_72.html deleted file mode 100644 index 71f58bb..0000000 --- a/search/functions_72.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_72.js b/search/functions_72.js deleted file mode 100644 index a176392..0000000 --- a/search/functions_72.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['range',['Range',['../structspark_1_1utils_1_1Range.html#af0ce17db5625ad22c87532891f4b890a',1,'spark::utils::Range::Range(int _s, int _e, int _stp)'],['../structspark_1_1utils_1_1Range.html#a6a3850b17634041447d86797929e9f2c',1,'spark::utils::Range::Range(std::string range)']]], - ['readvector',['readVector',['../classspark_1_1io_1_1MmReader.html#a3aa3d0ea6867f58d326674b632f7b045',1,'spark::io::MmReader']]], - ['resolvevectorreads',['resolveVectorReads',['../classSpmvCacheKernel.html#a8c2591875950cd9bb288c779aacccd54',1,'SpmvCacheKernel']]], - ['restart',['restart',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a50a6bb214092c694e0c3e8b9978f607c',1,'spark::spmv::SimpleSpmvArchitectureSpace::restart()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a76b80d8f6d287bf6b90f38a0ac215354',1,'spark::spmv::SpmvArchitectureSpace::restart()'],['../structspark_1_1utils_1_1Range.html#a05c07c975dd7bf3ba8a097044258aa5a',1,'spark::utils::Range::restart()']]], - ['run',['run',['../classspark_1_1dse_1_1SparkDse.html#abefe26e252597bb164ef8236e5460210',1,'spark::dse::SparkDse']]] -]; diff --git a/search/functions_73.html b/search/functions_73.html deleted file mode 100644 index c80660e..0000000 --- a/search/functions_73.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_73.js b/search/functions_73.js deleted file mode 100644 index 2e09e5b..0000000 --- a/search/functions_73.js +++ /dev/null @@ -1,25 +0,0 @@ -var searchData= -[ - ['selectvalues',['selectValues',['../classSpmvCacheKernel.html#a3864c0d130426bcad05724a9a864c7db',1,'SpmvCacheKernel']]], - ['setupcomputepipe',['setUpComputePipe',['../classSpmvManager.html#a8f777c0e6b5572b85bf90427b1419039',1,'SpmvManager']]], - ['setupunpaddingkernel',['setupUnpaddingKernel',['../classSpmvManager.html#a42510179831b9c539721ffbf0506c0f2',1,'SpmvManager']]], - ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae0357e972b3380edb382868d3616542d',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a254d3c473b526699bdf5d7994da756b9',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], - ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a045eb9b1b8b025ae7ebff4a4f6cd3246',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace(spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abd7023a217d39076e9c47a4226580c4f',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace()']]], - ['size_5fbytes',['size_bytes',['../Spmv_8cpp.html#a725a1b7ac05f04b3bc61b2a270346ea6',1,'Spmv.cpp']]], - ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ad7f11ef476f1343c237b4bd41f19559b',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ab8dadd53ee054e2152cd86b979b4304e',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], - ['smallestmultiplelargerthan',['smallestMultipleLargerThan',['../classSpmvManager.html#a3297286373eb2b5536b6cc04481cc996',1,'SpmvManager']]], - ['solve',['solve',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#aeab2189d0b72aaeda51f9defb2fd64b4',1,'spark::sparse_linear_solvers::Solver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html#a3c0f45b239cb7127fe8da07673cbfd52',1,'spark::sparse_linear_solvers::EigenSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html#a55a4b35ed35b40ee3f712024d9b45206',1,'spark::sparse_linear_solvers::DfeCgSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html#adaa588ced5dd2ce56da4cc095c88c4c3',1,'spark::sparse_linear_solvers::DfeBiCgSolver::solve()']]], - ['solvebicg',['solveBICG',['../SparseLinearSolvers_8cpp.html#a0917711c5c1de1d6fc6d3f5c2fa08c47',1,'SparseLinearSolvers.cpp']]], - ['solvecg',['solveCG',['../SparseLinearSolvers_8cpp.html#a857d72c794d4097e9a37e2a1a6839567',1,'SparseLinearSolvers.cpp']]], - ['solvelu',['solveLU',['../SparseLinearSolvers_8cpp.html#abdc884f0c76856917e9821d6242ee98a',1,'SparseLinearSolvers.cpp']]], - ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ad81f39eca4950c1e4623cdb120f094b0',1,'spark::sparse::SparkCooMatrix']]], - ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html#acf3f66892ae92b0d4c4d0e250da9ebde',1,'spark::dse::SparkDse']]], - ['spmv',['Spmv',['../SpmvDeviceInterface_8h.html#a2f0caf835f75923c7b64abf5b530f56a',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterface.h'],['../SpmvDeviceInterfaceMock_8cpp.html#a56da26d4ef8ebccdac40830eae1f75d6',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int32_t *param_outResultSizes, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterfaceMock.cpp']]], - ['spmv_5fdramread',['Spmv_dramRead',['../SpmvDeviceInterface_8h.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp']]], - ['spmv_5fdramwrite',['Spmv_dramWrite',['../SpmvDeviceInterface_8h.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp']]], - ['spmvcachekernel',['SpmvCacheKernel',['../classSpmvCacheKernel.html#acd4688b7b45eb067763e70a072acc496',1,'SpmvCacheKernel']]], - ['spmvkernel',['SpmvKernel',['../classSpmvKernel.html#ad09b317bceedc13d1f50865cbdb4cd91',1,'SpmvKernel']]], - ['spmvmanager',['SpmvManager',['../classSpmvManager.html#aaeaf51093060e192ab53048bf0c2fa9d',1,'SpmvManager']]], - ['spmvreductionkernel',['SpmvReductionKernel',['../classSpmvReductionKernel.html#a6cf50bef530943f0e812c5a684b2b26a',1,'SpmvReductionKernel']]], - ['stdvectortoeigen',['stdvectorToEigen',['../namespacespark_1_1converters.html#aa6e224b8b4ce34ca7a1683910b0dd9c2',1,'spark::converters']]] -]; diff --git a/search/functions_74.html b/search/functions_74.html deleted file mode 100644 index 1605901..0000000 --- a/search/functions_74.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_74.js b/search/functions_74.js deleted file mode 100644 index cb20244..0000000 --- a/search/functions_74.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['to_5fstring',['to_string',['../classspark_1_1model_1_1LogicResourceUsage.html#a0f6ff26d2cab74fc11bca87f60bdce35',1,'spark::model::LogicResourceUsage::to_string()'],['../classspark_1_1model_1_1ImplementationParameters.html#a0e71a3875d830daed887869a9f86c374',1,'spark::model::ImplementationParameters::to_string()'],['../structspark_1_1spmv_1_1Partition.html#a11004c0342811a57bba97bf31c823d64',1,'spark::spmv::Partition::to_string()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af12e62e4f0c6a5d0f6e37bf3a326956b',1,'spark::spmv::SimpleSpmvArchitecture::to_string()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa6bc86fc3b1f6d37836c7219d00c49a0',1,'spark::spmv::SpmvArchitecture::to_string()'],['../structspark_1_1utils_1_1Range.html#ae03ddb2296e4c08b7756adc10847b4b9',1,'spark::utils::Range::to_string()']]], - ['triplettoeigen',['tripletToEigen',['../namespacespark_1_1converters.html#ad8ff5498781446bc5c51cd52922f5d72',1,'spark::converters']]], - ['tru',['tru',['../classParallelCsrReadControl.html#ab6214aafff1d0650206637e7a9f15729',1,'ParallelCsrReadControl']]] -]; diff --git a/search/functions_75.html b/search/functions_75.html deleted file mode 100644 index a6c28fa..0000000 --- a/search/functions_75.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_75.js b/search/functions_75.js deleted file mode 100644 index 38e9b5b..0000000 --- a/search/functions_75.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['unpaddingkernel',['UnpaddingKernel',['../classUnpaddingKernel.html#a52a201168b15d7ab1e1378178a5abd5e',1,'UnpaddingKernel']]] -]; diff --git a/search/functions_77.html b/search/functions_77.html deleted file mode 100644 index add7295..0000000 --- a/search/functions_77.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_77.js b/search/functions_77.js deleted file mode 100644 index 34a8108..0000000 --- a/search/functions_77.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['write_5fdse_5fresults',['write_dse_results',['../main_8cpp.html#a8d444a99dbaa5e94893a71e578e1d902',1,'main.cpp']]], - ['write_5fparams',['write_params',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9acabcfa6d09c76000290982c33a36f0',1,'spark::spmv::SimpleSpmvArchitecture::write_params()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#acb14edc8b1c5a5e961304e3bf92c97c7',1,'spark::spmv::SpmvArchitecture::write_params()']]], - ['writedataforpartition',['writeDataForPartition',['../Spmv_8cpp.html#a5aa85a542358e8677cae112694f88d78',1,'Spmv.cpp']]] -]; diff --git a/search/functions_7a.html b/search/functions_7a.html deleted file mode 100644 index e23b42f..0000000 --- a/search/functions_7a.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_7a.js b/search/functions_7a.js deleted file mode 100644 index dd8a2c4..0000000 --- a/search/functions_7a.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['zero',['zero',['../classParallelCsrReadControl.html#ae2dc7d8decaf5a2458d11eee8f0e5f33',1,'ParallelCsrReadControl.zero()'],['../classParallelCsrReadControl.html#a6a81725c82d1c2631d13b35ea2bce758',1,'ParallelCsrReadControl.zero(int bitWidth)']]] -]; diff --git a/search/functions_7e.html b/search/functions_7e.html deleted file mode 100644 index 45c26c5..0000000 --- a/search/functions_7e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/functions_7e.js b/search/functions_7e.js deleted file mode 100644 index df583cb..0000000 --- a/search/functions_7e.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['_7emmreader',['~MmReader',['../classspark_1_1io_1_1MmReader.html#afff251fc01bc6a47007e5b562f002ed3',1,'spark::io::MmReader']]], - ['_7espmvarchitecture',['~SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html#abec906effc222dd9f12781c75e3b40c1',1,'spark::spmv::SpmvArchitecture']]] -]; diff --git a/search/mag_sel.png b/search/mag_sel.png deleted file mode 100644 index 81f6040a2092402b4d98f9ffa8855d12a0d4ca17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 563 zcmV-30?hr1P)zxx&tqG15pu7)IiiXFflOc2k;dXd>%13GZAy? zRz!q0=|E6a6vV)&ZBS~G9oe0kbqyw1*gvY`{Pop2oKq#FlzgXt@Xh-7fxh>}`Fxg> z$%N%{$!4=5nM{(;=c!aG1Ofr^Do{u%Ih{^&Fc@H2)+a-?TBXrw5DW&z%Nb6mQ!L9O zl}b@6mB?f=tX3;#vl)}ggh(Vpyh(IK z(Mb0D{l{U$FsRjP;!{($+bsaaVi8T#1c0V#qEIOCYa9@UVLV`f__E81L;?WEaRA;Y zUH;rZ;vb;mk7JX|$=i3O~&If0O@oZfLg8gfIjW=dcBsz;gI=!{-r4# z4%6v$&~;q^j7Fo67yJ(NJWuX+I~I!tj^nW3?}^9bq|<3^+vapS5sgM^x7!cs(+mMT z&y%j};&~po+YO)3hoUH4E*E;e9>?R6SS&`X)p`njycAVcg{rEb41T{~Hk(bl-7eSb zmFxA2uIqo#@R?lKm50ND`~6Nfn|-b1|L6O98vt3Tx@gKz#isxO002ovPDHLkV1kyW B_l^Jn diff --git a/search/namespaces_73.html b/search/namespaces_73.html deleted file mode 100644 index aefeb06..0000000 --- a/search/namespaces_73.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/namespaces_73.js b/search/namespaces_73.js deleted file mode 100644 index feabd3e..0000000 --- a/search/namespaces_73.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['converters',['converters',['../namespacespark_1_1converters.html',1,'spark']]], - ['dse',['dse',['../namespacespark_1_1dse.html',1,'spark']]], - ['io',['io',['../namespacespark_1_1io.html',1,'spark']]], - ['model',['model',['../namespacespark_1_1model.html',1,'spark']]], - ['spark',['spark',['../namespacespark.html',1,'']]], - ['sparse',['sparse',['../namespacespark_1_1sparse.html',1,'spark']]], - ['sparse_5flinear_5fsolvers',['sparse_linear_solvers',['../namespacespark_1_1sparse__linear__solvers.html',1,'spark']]], - ['spmv',['spmv',['../namespacespark_1_1spmv.html',1,'spark']]], - ['userio',['userio',['../namespacespark_1_1userio.html',1,'spark']]], - ['utils',['utils',['../namespacespark_1_1utils.html',1,'spark']]] -]; diff --git a/search/nomatches.html b/search/nomatches.html deleted file mode 100644 index b1ded27..0000000 --- a/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
-
No Matches
-
- - diff --git a/search/pages_73.html b/search/pages_73.html deleted file mode 100644 index 4f6f002..0000000 --- a/search/pages_73.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/pages_73.js b/search/pages_73.js deleted file mode 100644 index 23a40bb..0000000 --- a/search/pages_73.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['spark',['spark',['../md_README.html',1,'']]] -]; diff --git a/search/search.css b/search/search.css deleted file mode 100644 index 5b208ed..0000000 --- a/search/search.css +++ /dev/null @@ -1,271 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#MSearchBox { - white-space : nowrap; - position: absolute; - float: none; - display: inline; - margin-top: 8px; - right: 0px; - width: 170px; - z-index: 102; - background-color: white; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:116px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:0px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 1; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -span.SRScope { - padding-left: 4px; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} - -/*---------------- External search page results */ - -.searchresult { - background-color: #F0F3F8; -} - -.pages b { - color: white; - padding: 5px 5px 3px 5px; - background-image: url("../tab_a.png"); - background-repeat: repeat-x; - text-shadow: 0 1px 1px #000000; -} - -.pages { - line-height: 17px; - margin-left: 4px; - text-decoration: none; -} - -.hl { - font-weight: bold; -} - -#searchresults { - margin-bottom: 20px; -} - -.searchpages { - margin-top: 10px; -} - diff --git a/search/search.js b/search/search.js deleted file mode 100644 index 480afa3..0000000 --- a/search/search.js +++ /dev/null @@ -1,809 +0,0 @@ -// Search script generated by doxygen -// Copyright (C) 2009 by Dimitri van Heesch. - -// The code in this file is loosly based on main.js, part of Natural Docs, -// which is Copyright (C) 2003-2008 Greg Valure -// Natural Docs is licensed under the GPL. - -var indexSectionsWithContent = -{ - 0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111101001111101111110010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111001001100101101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011100001000100101101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111101001111101111010010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111101001111101110100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010000000000100101100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 7: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" -}; - -var indexSectionNames = -{ - 0: "all", - 1: "classes", - 2: "namespaces", - 3: "files", - 4: "functions", - 5: "variables", - 6: "typedefs", - 7: "pages" -}; - -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var hexCode; - if (code<16) - { - hexCode="0"+code.toString(16); - } - else - { - hexCode=code.toString(16); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') - { - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} - -function setKeyActions(elem,action) -{ - elem.setAttribute('onkeydown',action); - elem.setAttribute('onkeypress',action); - elem.setAttribute('onkeyup',action); -} - -function setClassAttr(elem,attr) -{ - elem.setAttribute('class',attr); - elem.setAttribute('className',attr); -} - -function createResults() -{ - var results = document.getElementById("SRResults"); - for (var e=0; ek7RCwB~R6VQOP#AvB$vH7i{6H{96zot$7cZT<7246EF5Np6N}+$IbiG6W zg#87A+NFaX+=_^xM1#gCtshC=E{%9^uQX_%?YwXvo{#q&MnpJ8uh(O?ZRc&~_1%^SsPxG@rfElJg-?U zm!Cz-IOn(qJP3kDp-^~qt+FGbl=5jNli^Wj_xIBG{Rc0en{!oFvyoNC7{V~T8}b>| z=jL2WIReZzX(YN(_9fV;BBD$VXQIxNasAL8ATvEu822WQ%mvv4FO#qs` BFGc_W diff --git a/search/search_r.png b/search/search_r.png deleted file mode 100644 index 97ee8b439687084201b79c6f776a41f495c6392a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-ODbP)PbXFRCwB?)W514K@j&X?z2*SxFI6-@HT2E2K=9X9%Pb zEK*!TBw&g(DMC;|A)uGlRkOS9vd-?zNs%bR4d$w+ox_iFnE8fvIvv7^5<(>Te12Li z7C)9srCzmK{ZcNM{YIl9j{DePFgOWiS%xG@5CnnnJa4nvY<^glbz7^|-ZY!dUkAwd z{gaTC@_>b5h~;ug#R0wRL0>o5!hxm*s0VW?8dr}O#zXTRTnrQm_Z7z1Mrnx>&p zD4qifUjzLvbVVWi?l?rUzwt^sdb~d!f_LEhsRVIXZtQ=qSxuxqm zEX#tf>$?M_Y1-LSDT)HqG?`%-%ZpY!#{N!rcNIiL;G7F0`l?)mNGTD9;f9F5Up3Kg zw}a<-JylhG&;=!>B+fZaCX+?C+kHYrP%c?X2!Zu_olK|GcS4A70HEy;vn)I0>0kLH z`jc(WIaaHc7!HS@f*^R^Znx8W=_jIl2oWJoQ*h1^$FX!>*PqR1J8k|fw}w_y}TpE>7m8DqDO<3z`OzXt$ccSejbEZCg@0000 - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/typedefs_63.js b/search/typedefs_63.js deleted file mode 100644 index fde4000..0000000 --- a/search/typedefs_63.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['coordtype',['CoordType',['../classspark_1_1io_1_1MmReader.html#a43348db7743f21cff1854197cf7f9819',1,'spark::io::MmReader::CoordType()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a9de150aa2a040306403bc97687b40f',1,'spark::sparse::SparkCooMatrix::CoordType()']]], - ['csrmatrix',['CsrMatrix',['../namespacespark_1_1sparse.html#a0f0d804dd8f37cb44a636bca7d03f016',1,'spark::sparse']]] -]; diff --git a/search/typedefs_65.html b/search/typedefs_65.html deleted file mode 100644 index c56ae62..0000000 --- a/search/typedefs_65.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/typedefs_65.js b/search/typedefs_65.js deleted file mode 100644 index 9629bd2..0000000 --- a/search/typedefs_65.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['eigensparsematrix',['EigenSparseMatrix',['../namespacespark_1_1converters.html#a724347922bbc7e56429febfd000be78b',1,'spark::converters::EigenSparseMatrix()'],['../namespacespark_1_1spmv.html#a3235bbbc3c8db242db2f00947ec4ca9b',1,'spark::spmv::EigenSparseMatrix()']]] -]; diff --git a/search/typedefs_70.html b/search/typedefs_70.html deleted file mode 100644 index 32b2dfc..0000000 --- a/search/typedefs_70.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/typedefs_70.js b/search/typedefs_70.js deleted file mode 100644 index 34fccf0..0000000 --- a/search/typedefs_70.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['partitionedcsrmatrix',['PartitionedCsrMatrix',['../namespacespark_1_1sparse.html#a15a8e3974007d1c440410bf83232f5dd',1,'spark::sparse']]] -]; diff --git a/search/typedefs_73.html b/search/typedefs_73.html deleted file mode 100644 index 0bed01e..0000000 --- a/search/typedefs_73.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/typedefs_73.js b/search/typedefs_73.js deleted file mode 100644 index 16b3c8b..0000000 --- a/search/typedefs_73.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['sparsematrix',['SparseMatrix',['../classspark_1_1io_1_1MmReader.html#a4b6628e5d0886325e152e8ffdae1964c',1,'spark::io::MmReader']]], - ['ssarch',['ssarch',['../Spmv_8cpp.html#a73ed93bfd16d2b54084241251efe53ca',1,'Spmv.cpp']]] -]; diff --git a/search/typedefs_75.html b/search/typedefs_75.html deleted file mode 100644 index 8350533..0000000 --- a/search/typedefs_75.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/typedefs_75.js b/search/typedefs_75.js deleted file mode 100644 index 97034de..0000000 --- a/search/typedefs_75.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['userinputparams',['UserInputParams',['../namespacespark_1_1userio.html#a61705a89ecd4794e1aaf8e56bc89a5ae',1,'spark::userio']]] -]; diff --git a/search/typedefs_76.html b/search/typedefs_76.html deleted file mode 100644 index 1ef0f3e..0000000 --- a/search/typedefs_76.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/typedefs_76.js b/search/typedefs_76.js deleted file mode 100644 index 85f7b36..0000000 --- a/search/typedefs_76.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['vd',['Vd',['../BiConjugateGradient_8cpp.html#a61f485fb4164897d20404192b8a20927',1,'BiConjugateGradient.cpp']]] -]; diff --git a/search/variables_5f.html b/search/variables_5f.html deleted file mode 100644 index fc799e5..0000000 --- a/search/variables_5f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_5f.js b/search/variables_5f.js deleted file mode 100644 index 52e83e8..0000000 --- a/search/variables_5f.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['_5f_5fattribute_5f_5f',['__attribute__',['../namespacespark_1_1spmv.html#a8ad7d0fb384bbf6ef88a68b8cad95182',1,'spark::spmv']]] -]; diff --git a/search/variables_61.html b/search/variables_61.html deleted file mode 100644 index a0de7a4..0000000 --- a/search/variables_61.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_61.js b/search/variables_61.js deleted file mode 100644 index 2be23ee..0000000 --- a/search/variables_61.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['addresst',['addressT',['../classSpmvCacheKernel.html#a33ae456838bd9708e94df43436703305',1,'SpmvCacheKernel']]] -]; diff --git a/search/variables_62.html b/search/variables_62.html deleted file mode 100644 index ff41525..0000000 --- a/search/variables_62.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_62.js b/search/variables_62.js deleted file mode 100644 index 2ad610f..0000000 --- a/search/variables_62.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['bestarchitecture',['bestArchitecture',['../classspark_1_1dse_1_1DseResult.html#a2a23395d873d124a4da624ed94ab4d76',1,'spark::dse::DseResult']]], - ['brams',['brams',['../classspark_1_1model_1_1LogicResourceUsage.html#a9e1bfd322976881da5fc6d0501ecbf32',1,'spark::model::LogicResourceUsage']]] -]; diff --git a/search/variables_63.html b/search/variables_63.html deleted file mode 100644 index 422085c..0000000 --- a/search/variables_63.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_63.js b/search/variables_63.js deleted file mode 100644 index 1956f66..0000000 --- a/search/variables_63.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['cachesize',['cacheSize',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a0fd07f4d1e241d9bb5e525fc1f9c4ab2',1,'spark::spmv::SimpleSpmvArchitecture::cacheSize()'],['../classSpmvManager.html#a9a9f9ca14bf99119d5ed0d7106acdcd9',1,'SpmvManager.cacheSize()']]], - ['cachesizer',['cacheSizeR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a5eb1ea4c3054ef0b99c199732c004195',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], - ['cachesizerange',['cacheSizeRange',['../classspark_1_1dse_1_1DseParameters.html#a407b33c26d55c84c1436a3535576f380',1,'spark::dse::DseParameters']]], - ['colptrsize',['colptrSize',['../structPartitionWriteResult.html#a1b1d42061ca85c85c68b12e3405743e5',1,'PartitionWriteResult']]], - ['colptrstartaddress',['colptrStartAddress',['../structPartitionWriteResult.html#a744ceeec06294048f07cd552a340118f',1,'PartitionWriteResult']]], - ['crt',['crt',['../structspark_1_1utils_1_1Range.html#a07fd2cc26cde356c3f1db74bedd31eb5',1,'spark::utils::Range']]], - ['crtpos',['crtPos',['../classParallelCsrReadControl.html#ab0f5b6539f65df26eccc3c40b234752c',1,'ParallelCsrReadControl']]], - ['cyclecounter',['cycleCounter',['../classParallelCsrReadControl.html#a51cfb6d5b02eb3e5b204e4ea8f16fce4',1,'ParallelCsrReadControl']]] -]; diff --git a/search/variables_64.html b/search/variables_64.html deleted file mode 100644 index df4414b..0000000 --- a/search/variables_64.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_64.js b/search/variables_64.js deleted file mode 100644 index 9c53a8e..0000000 --- a/search/variables_64.js +++ /dev/null @@ -1,11 +0,0 @@ -var searchData= -[ - ['data',['data',['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a0b72ae9e7b1deed9b6228cf40e9f32',1,'spark::sparse::SparkCooMatrix']]], - ['dbg',['dbg',['../classParallelCsrReadControl.html#a522323c9bbe60e7a02f48e1ff6f7db06',1,'ParallelCsrReadControl']]], - ['dbg_5fpar_5fcsr_5fctl',['DBG_PAR_CSR_CTL',['../classSpmvManager.html#a234ea438d3c8363b41db2581e3d8a51a',1,'SpmvManager']]], - ['dbg_5freduction_5fkernel',['DBG_REDUCTION_KERNEL',['../classSpmvManager.html#a5c29c11c95c8f9980aa3201d8f25ff3d',1,'SpmvManager']]], - ['dbg_5fspmv_5fkernel',['DBG_SPMV_KERNEL',['../classSpmvManager.html#aece403b7ff81eeebfaf75b35aacb2b1f',1,'SpmvManager']]], - ['done',['Done',['../enumParallelCsrReadControl_1_1Mode.html#a4af99d8c25b54128c920d384091485d0',1,'ParallelCsrReadControl::Mode']]], - ['dramreductionenabled',['dramReductionEnabled',['../classSpmvManager.html#adfc3a8c884874f553215941bf86692fa',1,'SpmvManager']]], - ['dsps',['dsps',['../classspark_1_1model_1_1LogicResourceUsage.html#adb488affc0a051d6c8458d9e2a35d201',1,'spark::model::LogicResourceUsage']]] -]; diff --git a/search/variables_65.html b/search/variables_65.html deleted file mode 100644 index 38eb9f6..0000000 --- a/search/variables_65.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_65.js b/search/variables_65.js deleted file mode 100644 index 7e93f66..0000000 --- a/search/variables_65.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['emptycycles',['emptyCycles',['../structspark_1_1spmv_1_1Partition.html#a59dfdff4762b092034d952fe2e81f95c',1,'spark::spmv::Partition']]], - ['end',['end',['../structspark_1_1utils_1_1Range.html#a014c4c4aa8e0f0c9f9aaf954d3e8fba7',1,'spark::utils::Range']]] -]; diff --git a/search/variables_66.html b/search/variables_66.html deleted file mode 100644 index 6e18638..0000000 --- a/search/variables_66.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_66.js b/search/variables_66.js deleted file mode 100644 index f60eeac..0000000 --- a/search/variables_66.js +++ /dev/null @@ -1,8 +0,0 @@ -var searchData= -[ - ['f',['f',['../classspark_1_1io_1_1MmReader.html#a65848ca959d0961ab594205b40335072',1,'spark::io::MmReader']]], - ['ffs',['ffs',['../classspark_1_1model_1_1LogicResourceUsage.html#ad67dec36e8bd5ba1937687b538d97a8e',1,'spark::model::LogicResourceUsage']]], - ['firstreadposition',['firstReadPosition',['../classParallelCsrReadControl.html#af30ed96f729b948fec5bd989acc13a56',1,'ParallelCsrReadControl']]], - ['floating_5fpoint_5flatency',['FLOATING_POINT_LATENCY',['../classSpmvManager.html#a3a947b39653f09305c7712af18ddd113',1,'SpmvManager']]], - ['fpl',['fpL',['../classSpmvKernel.html#a0bf2a803445d2454781d5e09937de571',1,'SpmvKernel']]] -]; diff --git a/search/variables_67.html b/search/variables_67.html deleted file mode 100644 index 8a1f3d9..0000000 --- a/search/variables_67.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_67.js b/search/variables_67.js deleted file mode 100644 index d84bdee..0000000 --- a/search/variables_67.js +++ /dev/null @@ -1,4 +0,0 @@ -var searchData= -[ - ['gflopsonly',['gflopsOnly',['../classspark_1_1dse_1_1DseParameters.html#a903571a00336065eb295887170686770',1,'spark::dse::DseParameters']]] -]; diff --git a/search/variables_69.html b/search/variables_69.html deleted file mode 100644 index 44c2cd1..0000000 --- a/search/variables_69.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_69.js b/search/variables_69.js deleted file mode 100644 index 38ba303..0000000 --- a/search/variables_69.js +++ /dev/null @@ -1,15 +0,0 @@ -var searchData= -[ - ['ilength',['iLength',['../classParallelCsrReadControl.html#a85aaa3cdd7bbfe023bc74bcd02bc21b4',1,'ParallelCsrReadControl']]], - ['ilengthready',['iLengthReady',['../classParallelCsrReadControl.html#a7ffcf81575bcc0d92af9b198653dcf28',1,'ParallelCsrReadControl']]], - ['indexwidth',['indexWidth',['../classSpmvManager.html#a01ee1f96ba381149f4233fae1c87c821',1,'SpmvManager']]], - ['indptr',['indptr',['../structspark_1_1spmv_1_1indptr__value.html#ae450af92f13728c597605f909eb7f3b6',1,'spark::spmv::indptr_value::indptr()'],['../SimpleSpmv_8hpp.html#a164fa1a90d7bd63f14e631438885cc69',1,'indptr(): SimpleSpmv.hpp']]], - ['indptrvaluessize',['indptrValuesSize',['../structPartitionWriteResult.html#a389a493dd0f322031a4b176ad7251cc1',1,'PartitionWriteResult']]], - ['indptrvaluesstartaddress',['indptrValuesStartAddress',['../structPartitionWriteResult.html#a2ca20725ee8dcb4aad19eac57bc5c957',1,'PartitionWriteResult']]], - ['indptrvector',['indptrVector',['../classSpmvCacheKernel.html#a334b1e969200dfe46d013bef0e5b1934',1,'SpmvCacheKernel']]], - ['inputwidth',['inputWidth',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a4083f351467c940c767fa9122d3a727c',1,'spark::spmv::SimpleSpmvArchitecture::inputWidth()'],['../classParallelCsrReadControl.html#a3458a62c53ce83128cedb6c7765ca6fc',1,'ParallelCsrReadControl.inputWidth()'],['../classSpmvManager.html#a778e13e71f500522f13c6207e6f4e8a4',1,'SpmvManager.inputWidth()']]], - ['inputwidthr',['inputWidthR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#ab7dd6b46e80d1fe85694b964ce761e85',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], - ['inputwidthrange',['inputWidthRange',['../classspark_1_1dse_1_1DseParameters.html#af54d3b84a9781ce472374fb4d4dbecb1',1,'spark::dse::DseParameters']]], - ['iterationsprocessed',['iterationsProcessed',['../classParallelCsrReadControl.html#aca9dea6888fb835dc40d3df86fa60156',1,'ParallelCsrReadControl']]], - ['ivtype',['ivtype',['../classSpmvCacheKernel.html#a7fc692be3af6b331cdf30edbb6db98e6',1,'SpmvCacheKernel']]] -]; diff --git a/search/variables_6c.html b/search/variables_6c.html deleted file mode 100644 index 8d08e81..0000000 --- a/search/variables_6c.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_6c.js b/search/variables_6c.js deleted file mode 100644 index 0445936..0000000 --- a/search/variables_6c.js +++ /dev/null @@ -1,5 +0,0 @@ -var searchData= -[ - ['last',['last',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a618c39ec4cde84cb595f089fb881ce7c',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], - ['luts',['luts',['../classspark_1_1model_1_1LogicResourceUsage.html#a620a5a18ce206d8dbc7cd5adbcb48d7b',1,'spark::model::LogicResourceUsage']]] -]; diff --git a/search/variables_6d.html b/search/variables_6d.html deleted file mode 100644 index 1b8f1a8..0000000 --- a/search/variables_6d.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_6d.js b/search/variables_6d.js deleted file mode 100644 index 58fb285..0000000 --- a/search/variables_6d.js +++ /dev/null @@ -1,16 +0,0 @@ -var searchData= -[ - ['m',['m',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ae3892beabaaf78e2e9a67269c22c8f8e',1,'spark::sparse::SparkCooMatrix']]], - ['m_5fcolptr',['m_colptr',['../structspark_1_1spmv_1_1Partition.html#a8aa3fa9f9be247ab7e092f968122e3a7',1,'spark::spmv::Partition']]], - ['m_5fcolptr_5funpaddedlength',['m_colptr_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ac28e1c351c409032a1166678f800141b',1,'spark::spmv::Partition']]], - ['m_5findptr_5fvalues',['m_indptr_values',['../structspark_1_1spmv_1_1Partition.html#ae134d0793283258fb0f95433d5448bb2',1,'spark::spmv::Partition']]], - ['m_5findptr_5fvalues_5funpaddedlength',['m_indptr_values_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ae9b189f7ec6c8fbd47202945dc3fef23',1,'spark::spmv::Partition']]], - ['mantissawidth',['mantissaWidth',['../classSpmvManager.html#a6c6ea06d3d9cb5f752e3cbc3ca7cbafa',1,'SpmvManager']]], - ['mat',['mat',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae295666cf3885149b0e37766c4feffc7',1,'spark::spmv::SimpleSpmvArchitecture']]], - ['matrices',['matrices',['../classspark_1_1dse_1_1DseResult.html#a797ff2ef1c189cb2cff7fa18cfede2a9',1,'spark::dse::DseResult']]], - ['matrix',['matrix',['../classspark_1_1io_1_1MmReader.html#a8bf3a76c76dad47d667f28052adbfaa5',1,'spark::io::MmReader']]], - ['matrixvalues',['matrixValues',['../classSpmvCacheKernel.html#a2c0074e62c391424c276981965dc4bf4',1,'SpmvCacheKernel']]], - ['maxrows',['maxRows',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a577fd6e73f088b437a5632ba3ca89c61',1,'spark::spmv::SimpleSpmvArchitecture::maxRows()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#acaac03fcff370b3f0945823b1f13a90f',1,'spark::spmv::SimpleSpmvArchitectureSpace::maxRows()'],['../classSpmvManager.html#a5746b324d3b38fc407d1577739b969ef',1,'SpmvManager.maxRows()']]], - ['memorybandwidth',['memoryBandwidth',['../classspark_1_1model_1_1ImplementationParameters.html#a7935fb3d5d9d782c66530a541d6f705c',1,'spark::model::ImplementationParameters']]], - ['mode',['mode',['../classParallelCsrReadControl.html#aa98eb2e85dadf134870803067fa13ad8',1,'ParallelCsrReadControl']]] -]; diff --git a/search/variables_6e.html b/search/variables_6e.html deleted file mode 100644 index 2eb4def..0000000 --- a/search/variables_6e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_6e.js b/search/variables_6e.js deleted file mode 100644 index a83d6db..0000000 --- a/search/variables_6e.js +++ /dev/null @@ -1,13 +0,0 @@ -var searchData= -[ - ['n',['n',['../structspark_1_1spmv_1_1Partition.html#a858144bacceb65f6b0c6caab04b0308b',1,'spark::spmv::Partition::n()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a582426cd2434334fe15c5f3c23aa0c54',1,'spark::sparse::SparkCooMatrix::n()']]], - ['nblocks',['nBlocks',['../structspark_1_1spmv_1_1Partition.html#a3084298925d168aafc1affa127bb4ef2',1,'spark::spmv::Partition']]], - ['ncols',['ncols',['../classspark_1_1io_1_1MmReader.html#a7b783ac977c5badcd28069cea5368adc',1,'spark::io::MmReader']]], - ['niterations',['nIterations',['../classParallelCsrReadControl.html#ad8041b856c97ae1d5ac6ea96a5cb0b04',1,'ParallelCsrReadControl']]], - ['nnzs',['nnzs',['../classspark_1_1io_1_1MmReader.html#a55b7ae127a34af4d09bca7079c443866',1,'spark::io::MmReader']]], - ['npartitions',['nPartitions',['../classParallelCsrReadControl.html#a82a4d8d9d682f6c65537975de9483540',1,'ParallelCsrReadControl']]], - ['nrows',['nrows',['../classspark_1_1io_1_1MmReader.html#a3698c442e4b847c2f1479dd11fef9a15',1,'spark::io::MmReader::nrows()'],['../classParallelCsrReadControl.html#afda30a96f0ffe1c758ce548cfd8d5907',1,'ParallelCsrReadControl.nRows()']]], - ['numpipes',['numPipes',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac51f502488f2b7d2dbffb5a9939b4271',1,'spark::spmv::SimpleSpmvArchitecture::numPipes()'],['../classSpmvManager.html#a2b1f61839183d1301ddc3975f4ad3ae9',1,'SpmvManager.numPipes()']]], - ['numpipesr',['numPipesR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a2250dba56bfc36df530fcba2ae8e5573',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], - ['numpipesrange',['numPipesRange',['../classspark_1_1dse_1_1DseParameters.html#a312071f767470577bf393c3d190d72bd',1,'spark::dse::DseParameters']]] -]; diff --git a/search/variables_6f.html b/search/variables_6f.html deleted file mode 100644 index f06e2e0..0000000 --- a/search/variables_6f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_6f.js b/search/variables_6f.js deleted file mode 100644 index d893fb3..0000000 --- a/search/variables_6f.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['ocontrol',['oControl',['../classParallelCsrReadControl.html#acadabffbfd3d06c672dabfe98ee0ca23',1,'ParallelCsrReadControl']]], - ['ocontroldata',['oControlData',['../classParallelCsrReadControl.html#acfc1f32a0362606d06eeb514a7738af8',1,'ParallelCsrReadControl']]], - ['outputtingcommands',['OutputtingCommands',['../enumParallelCsrReadControl_1_1Mode.html#a1fe6df0a1446f33e43e80b9ad3e0cd49',1,'ParallelCsrReadControl::Mode']]], - ['outsize',['outSize',['../structspark_1_1spmv_1_1Partition.html#a4653f40c7d63f4c663190b209b6373d7',1,'spark::spmv::Partition::outSize()'],['../structPartitionWriteResult.html#a7cc1bba9c690f9a66fa15add6d1763e6',1,'PartitionWriteResult::outSize()']]], - ['outstartaddr',['outStartAddr',['../structPartitionWriteResult.html#a93f6f5c23c1f0f7e18f319f3e33aee61',1,'PartitionWriteResult']]], - ['outvalid',['outValid',['../classParallelCsrReadControl.html#a998688c17de6d3dee32bb3005124d484',1,'ParallelCsrReadControl']]] -]; diff --git a/search/variables_70.html b/search/variables_70.html deleted file mode 100644 index 439d152..0000000 --- a/search/variables_70.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_70.js b/search/variables_70.js deleted file mode 100644 index ea40354..0000000 --- a/search/variables_70.js +++ /dev/null @@ -1,9 +0,0 @@ -var searchData= -[ - ['paddingcycles',['paddingCycles',['../structspark_1_1spmv_1_1Partition.html#a611bc144e0b0f3e4075e4fa27137669f',1,'spark::spmv::Partition']]], - ['partitions',['partitions',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a90e1699cd2d8ee0abd21e4461d8c7d32',1,'spark::spmv::SimpleSpmvArchitecture']]], - ['partitionsprocessed',['partitionsProcessed',['../classParallelCsrReadControl.html#abaf944d93404a6d08eaa4f17e8ee4d0c',1,'ParallelCsrReadControl']]], - ['path',['path',['../classspark_1_1io_1_1MmReader.html#a853387b508034ba82ede19c2500c5030',1,'spark::io::MmReader']]], - ['paths',['paths',['../classspark_1_1dse_1_1Benchmark.html#aa21c70d1c142db7c1ee3fb81fc5e81c5',1,'spark::dse::Benchmark']]], - ['prevdata',['prevData',['../classParallelCsrReadControl.html#aae3d7861bddbf53bea616be8e308afa8',1,'ParallelCsrReadControl']]] -]; diff --git a/search/variables_72.html b/search/variables_72.html deleted file mode 100644 index 8a4ee7b..0000000 --- a/search/variables_72.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_72.js b/search/variables_72.js deleted file mode 100644 index fd4e627..0000000 --- a/search/variables_72.js +++ /dev/null @@ -1,10 +0,0 @@ -var searchData= -[ - ['readinglength',['ReadingLength',['../enumParallelCsrReadControl_1_1Mode.html#a0bf9792309f43608f812f047b288bcd9',1,'ParallelCsrReadControl::Mode']]], - ['readlength',['readLength',['../classParallelCsrReadControl.html#afe43fc900641b277ae1069dde875a88b',1,'ParallelCsrReadControl']]], - ['readmaskdata',['readMaskData',['../classParallelCsrReadControl.html#a0f2333314c34fb9b3a1cd57c7d2d6d37',1,'ParallelCsrReadControl']]], - ['reductioncycles',['reductionCycles',['../structspark_1_1spmv_1_1Partition.html#abf0e3c933b315809c50c6e68506bb174',1,'spark::spmv::Partition']]], - ['rowlengthdata',['rowLengthData',['../classParallelCsrReadControl.html#a309e5d2abd0d3bdaca25a19f280cd029',1,'ParallelCsrReadControl']]], - ['rowsprocessed',['rowsProcessed',['../classParallelCsrReadControl.html#ad0b253e90543c25af346b9afff908d87',1,'ParallelCsrReadControl']]], - ['ru',['ru',['../classspark_1_1model_1_1ImplementationParameters.html#ac82ef6a8d3fd73cd40fff27d1ec9b943',1,'spark::model::ImplementationParameters']]] -]; diff --git a/search/variables_73.html b/search/variables_73.html deleted file mode 100644 index 388a6d7..0000000 --- a/search/variables_73.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_73.js b/search/variables_73.js deleted file mode 100644 index b7f4366..0000000 --- a/search/variables_73.js +++ /dev/null @@ -1,7 +0,0 @@ -var searchData= -[ - ['sparse',['sparse',['../classspark_1_1io_1_1MmReader.html#abaeb856fe8052dada1094aeeba575482',1,'spark::io::MmReader']]], - ['start',['start',['../structspark_1_1utils_1_1Range.html#aa944c6fbb45db229c82ab2af62836237',1,'spark::utils::Range']]], - ['step',['step',['../structspark_1_1utils_1_1Range.html#adafa797e5802e578a9fffc6fc25b6a24',1,'spark::utils::Range']]], - ['symmetric',['symmetric',['../classspark_1_1io_1_1MmReader.html#a339fd452b0db39fdabb6fc9b9994624d',1,'spark::io::MmReader']]] -]; diff --git a/search/variables_74.html b/search/variables_74.html deleted file mode 100644 index 1665fb8..0000000 --- a/search/variables_74.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_74.js b/search/variables_74.js deleted file mode 100644 index 44634f6..0000000 --- a/search/variables_74.js +++ /dev/null @@ -1,6 +0,0 @@ -var searchData= -[ - ['toread',['toread',['../classParallelCsrReadControl.html#af87a65fc4f7423554e3a36f0a059cbf1',1,'ParallelCsrReadControl']]], - ['totalcycles',['totalCycles',['../structspark_1_1spmv_1_1Partition.html#a2256e3b766ab51acd2be27a1975f0ed9',1,'spark::spmv::Partition']]], - ['totaloutputs',['totalOutputs',['../classParallelCsrReadControl.html#a869e17d0a43818cd085f01898143f2cc',1,'ParallelCsrReadControl']]] -]; diff --git a/search/variables_76.html b/search/variables_76.html deleted file mode 100644 index 8af2374..0000000 --- a/search/variables_76.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - -
-
Loading...
-
- -
Searching...
-
No Matches
- -
- - diff --git a/search/variables_76.js b/search/variables_76.js deleted file mode 100644 index dc12861..0000000 --- a/search/variables_76.js +++ /dev/null @@ -1,12 +0,0 @@ -var searchData= -[ - ['value',['value',['../structspark_1_1spmv_1_1indptr__value.html#ae0073c7eec3c96ddf6ce38dedc3312b1',1,'spark::spmv::indptr_value::value()'],['../SimpleSpmv_8hpp.html#aee90379adb0307effb138f4871edbc5c',1,'value(): SimpleSpmv.hpp']]], - ['vector_5fload_5fcycles',['vector_load_cycles',['../structspark_1_1spmv_1_1Partition.html#a087b0019edb1ad8ef824ed7e26e19849',1,'spark::spmv::Partition']]], - ['vectorload',['VectorLoad',['../enumParallelCsrReadControl_1_1Mode.html#aa2414caa80d02424c7a80c3946160a2d',1,'ParallelCsrReadControl::Mode']]], - ['vectorloadcommands',['vectorLoadCommands',['../classParallelCsrReadControl.html#a4627fcdaeb69d3836053e91cc70a80f2',1,'ParallelCsrReadControl']]], - ['vectorloadcycles',['vectorLoadCycles',['../classParallelCsrReadControl.html#aa609515db6c67afd973f1d15431e1684',1,'ParallelCsrReadControl']]], - ['vectorvalues',['vectorValues',['../classSpmvCacheKernel.html#a866881c55c08adf35042aeeb18c9cffd',1,'SpmvCacheKernel']]], - ['vroms',['vroms',['../classSpmvCacheKernel.html#ad7249c675981ec57613b0f3d69a39342',1,'SpmvCacheKernel']]], - ['vstartaddress',['vStartAddress',['../structPartitionWriteResult.html#a2a1d5b0084ae204040066b7fe3a33b07',1,'PartitionWriteResult']]], - ['vtype',['vtype',['../classSpmvCacheKernel.html#a4a13093fa8aa4a3a053cf3d7122c6866',1,'SpmvCacheKernel']]] -]; diff --git a/structPartitionWriteResult-members.html b/structPartitionWriteResult-members.html deleted file mode 100644 index 7030495..0000000 --- a/structPartitionWriteResult-members.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
PartitionWriteResult Member List
-
- - - - - diff --git a/structPartitionWriteResult.html b/structPartitionWriteResult.html deleted file mode 100644 index ffe327d..0000000 --- a/structPartitionWriteResult.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - -Spark: PartitionWriteResult Struct Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
PartitionWriteResult Struct Reference
-
-
- - - - - - - - - - - - - - - - -

-Public Attributes

int outStartAddr
 
int outSize
 
int colptrStartAddress
 
int colptrSize
 
int vStartAddress
 
int indptrValuesStartAddress
 
int indptrValuesSize
 
-

Member Data Documentation

- -
-
- - - - -
int PartitionWriteResult::colptrSize
-
- -
-
- -
-
- - - - -
int PartitionWriteResult::colptrStartAddress
-
- -
-
- -
-
- - - - -
int PartitionWriteResult::indptrValuesSize
-
- -
-
- -
-
- - - - -
int PartitionWriteResult::indptrValuesStartAddress
-
- -
-
- -
-
- - - - -
int PartitionWriteResult::outSize
-
- -
-
- -
-
- - - - -
int PartitionWriteResult::outStartAddr
-
- -
-
- -
-
- - - - -
int PartitionWriteResult::vStartAddress
-
- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/structSpmvEqual-members.html b/structSpmvEqual-members.html deleted file mode 100644 index e588bd0..0000000 --- a/structSpmvEqual-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SpmvEqual Member List
-
-
- -

This is the complete list of members for SpmvEqual, including all inherited members.

- - -
operator()(const std::shared_ptr< SpmvArchitecture > &a, const std::shared_ptr< SpmvArchitecture > &b) const SpmvEqualinline
- - - - diff --git a/structSpmvEqual.html b/structSpmvEqual.html deleted file mode 100644 index 4524ac3..0000000 --- a/structSpmvEqual.html +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - -Spark: SpmvEqual Struct Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SpmvEqual Struct Reference
-
-
- - - - -

-Public Member Functions

bool operator() (const std::shared_ptr< SpmvArchitecture > &a, const std::shared_ptr< SpmvArchitecture > &b) const
 
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
bool SpmvEqual::operator() (const std::shared_ptr< SpmvArchitecture > & a,
const std::shared_ptr< SpmvArchitecture > & b 
) const
-
-inline
-
- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/structSpmvHash-members.html b/structSpmvHash-members.html deleted file mode 100644 index 07c9e2f..0000000 --- a/structSpmvHash-members.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
-
-
SpmvHash Member List
-
-
- -

This is the complete list of members for SpmvHash, including all inherited members.

- - -
operator()(const std::shared_ptr< SpmvArchitecture > &a) const SpmvHashinline
- - - - diff --git a/structSpmvHash.html b/structSpmvHash.html deleted file mode 100644 index 5c106d3..0000000 --- a/structSpmvHash.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - -Spark: SpmvHash Struct Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- -
-
- -
-
SpmvHash Struct Reference
-
-
- - - - -

-Public Member Functions

std::size_t operator() (const std::shared_ptr< SpmvArchitecture > &a) const
 
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - - -
std::size_t SpmvHash::operator() (const std::shared_ptr< SpmvArchitecture > & a) const
-
-inline
-
- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/structspark_1_1spmv_1_1Partition-members.html b/structspark_1_1spmv_1_1Partition-members.html deleted file mode 100644 index cfee795..0000000 --- a/structspark_1_1spmv_1_1Partition-members.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::spmv::Partition Member List
-
- - - - - diff --git a/structspark_1_1spmv_1_1Partition.html b/structspark_1_1spmv_1_1Partition.html deleted file mode 100644 index f90d5bf..0000000 --- a/structspark_1_1spmv_1_1Partition.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - - - -Spark: spark::spmv::Partition Struct Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv::Partition Struct Reference
-
-
- -

#include <SimpleSpmv.hpp>

- - - - -

-Public Member Functions

std::string to_string ()
 
- - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Attributes

int nBlocks
 
int n
 
int paddingCycles
 
int totalCycles
 
int vector_load_cycles
 
int outSize
 
int reductionCycles
 
int emptyCycles
 
int m_colptr_unpaddedLength
 
int m_indptr_values_unpaddedLength
 
std::vector< int > m_colptr
 
std::vector< indptr_value > m_indptr_values
 
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
std::string spark::spmv::Partition::to_string ()
-
-inline
-
- -
-
-

Member Data Documentation

- -
-
- - - - -
int spark::spmv::Partition::emptyCycles
-
- -
-
- -
-
- - - - -
std::vector<int> spark::spmv::Partition::m_colptr
-
- -
-
- -
-
- - - - -
int spark::spmv::Partition::m_colptr_unpaddedLength
-
- -
-
- -
-
- - - - -
std::vector<indptr_value> spark::spmv::Partition::m_indptr_values
-
- -
-
- -
-
- - - - -
int spark::spmv::Partition::m_indptr_values_unpaddedLength
-
- -
-
- -
-
- - - - -
int spark::spmv::Partition::n
-
- -
-
- -
-
- - - - -
int spark::spmv::Partition::nBlocks
-
- -
-
- -
-
- - - - -
int spark::spmv::Partition::outSize
-
- -
-
- -
-
- - - - -
int spark::spmv::Partition::paddingCycles
-
- -
-
- -
-
- - - - -
int spark::spmv::Partition::reductionCycles
-
- -
-
- -
-
- - - - -
int spark::spmv::Partition::totalCycles
-
- -
-
- -
-
- - - - -
int spark::spmv::Partition::vector_load_cycles
-
- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/structspark_1_1spmv_1_1indptr__value-members.html b/structspark_1_1spmv_1_1indptr__value-members.html deleted file mode 100644 index 93cab38..0000000 --- a/structspark_1_1spmv_1_1indptr__value-members.html +++ /dev/null @@ -1,109 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::spmv::indptr_value Member List
-
-
- -

This is the complete list of members for spark::spmv::indptr_value, including all inherited members.

- - - - - -
indptrspark::spmv::indptr_value
indptr_value(double _value, int _indptr)spark::spmv::indptr_valueinline
indptr_value()spark::spmv::indptr_valueinline
valuespark::spmv::indptr_value
- - - - diff --git a/structspark_1_1spmv_1_1indptr__value.html b/structspark_1_1spmv_1_1indptr__value.html deleted file mode 100644 index a73631b..0000000 --- a/structspark_1_1spmv_1_1indptr__value.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - -Spark: spark::spmv::indptr_value Struct Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::spmv::indptr_value Struct Reference
-
-
- -

#include <SimpleSpmv.hpp>

- - - - - - -

-Public Member Functions

 indptr_value (double _value, int _indptr)
 
 indptr_value ()
 
- - - - - -

-Public Attributes

double value
 
int indptr
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - -
spark::spmv::indptr_value::indptr_value (double _value,
int _indptr 
)
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
spark::spmv::indptr_value::indptr_value ()
-
-inline
-
- -
-
-

Member Data Documentation

- -
-
- - - - -
int spark::spmv::indptr_value::indptr
-
- -
-
- -
-
- - - - -
double spark::spmv::indptr_value::value
-
- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/structspark_1_1utils_1_1Range-members.html b/structspark_1_1utils_1_1Range-members.html deleted file mode 100644 index 8eff726..0000000 --- a/structspark_1_1utils_1_1Range-members.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - -Spark: Member List - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
-
-
spark::utils::Range Member List
-
-
- -

This is the complete list of members for spark::utils::Range, including all inherited members.

- - - - - - - - - - - -
at_start()spark::utils::Rangeinline
crtspark::utils::Range
endspark::utils::Range
operator++()spark::utils::Rangeinline
Range(int _s, int _e, int _stp)spark::utils::Rangeinline
Range(std::string range)spark::utils::Rangeinline
restart()spark::utils::Rangeinline
startspark::utils::Range
stepspark::utils::Range
to_string()spark::utils::Rangeinline
- - - - diff --git a/structspark_1_1utils_1_1Range.html b/structspark_1_1utils_1_1Range.html deleted file mode 100644 index 6b7aed2..0000000 --- a/structspark_1_1utils_1_1Range.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - - -Spark: spark::utils::Range Struct Reference - - - - - - - - - -
-
- - - - - - -
-
Spark -
-
-
- - - - - - - - - -
- -
- - -
-
- -
-
spark::utils::Range Struct Reference
-
-
- -

#include <Utils.hpp>

- - - - - - - - - - - - - - -

-Public Member Functions

 Range (int _s, int _e, int _stp)
 
 Range (std::string range)
 
std::string to_string ()
 
void restart ()
 
bool at_start ()
 
int operator++ ()
 
- - - - - - - - - -

-Public Attributes

int start
 
int end
 
int step
 
int crt
 
-

Constructor & Destructor Documentation

- -
-
- - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
spark::utils::Range::Range (int _s,
int _e,
int _stp 
)
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - - -
spark::utils::Range::Range (std::string range)
-
-inline
-
- -
-
-

Member Function Documentation

- -
-
- - - - - -
- - - - - - - -
bool spark::utils::Range::at_start ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
int spark::utils::Range::operator++ ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
void spark::utils::Range::restart ()
-
-inline
-
- -
-
- -
-
- - - - - -
- - - - - - - -
std::string spark::utils::Range::to_string ()
-
-inline
-
- -
-
-

Member Data Documentation

- -
-
- - - - -
int spark::utils::Range::crt
-
- -
-
- -
-
- - - - -
int spark::utils::Range::end
-
- -
-
- -
-
- - - - -
int spark::utils::Range::start
-
- -
-
- -
-
- - - - -
int spark::utils::Range::step
-
- -
-
-
The documentation for this struct was generated from the following file: -
- - - - diff --git a/sync_off.png b/sync_off.png deleted file mode 100644 index 3b443fc62892114406e3d399421b2a881b897acc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* diff --git a/sync_on.png b/sync_on.png deleted file mode 100644 index e08320fb64e6fa33b573005ed6d8fe294e19db76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 diff --git a/tab_a.png b/tab_a.png deleted file mode 100644 index 3b725c41c5a527a3a3e40097077d0e206a681247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 diff --git a/tab_b.png b/tab_b.png deleted file mode 100644 index e2b4a8638cb3496a016eaed9e16ffc12846dea18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ diff --git a/tabs.css b/tabs.css deleted file mode 100644 index 9cf578f..0000000 --- a/tabs.css +++ /dev/null @@ -1,60 +0,0 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; - font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} From 566656728e69fbe92e27bff40686123a1f89f1ca Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Mon, 30 Nov 2015 21:24:45 +0000 Subject: [PATCH 04/23] Update documentation --- docs/BiConjugateGradient_8cpp.html | 236 +++ docs/BiConjugateGradient_8cpp.js | 7 + docs/ConjugateGradient_8cpp.html | 125 ++ docs/Converters_8hpp.html | 153 ++ docs/Converters_8hpp.js | 7 + docs/Converters_8hpp_source.html | 179 +++ docs/Dse_8cpp.html | 208 +++ docs/Dse_8cpp.js | 7 + docs/Dse_8hpp.html | 161 ++ docs/Dse_8hpp.js | 9 + docs/Dse_8hpp_source.html | 233 +++ docs/Execution_8hpp.html | 141 ++ docs/Execution_8hpp_source.html | 156 ++ docs/FileUtils_8hpp.html | 143 ++ docs/FileUtils_8hpp.js | 4 + docs/FileUtils_8hpp_source.html | 153 ++ docs/GeneratedImplSupport_8hpp.html | 151 ++ docs/GeneratedImplSupport_8hpp_source.html | 417 +++++ docs/Io_8hpp.html | 148 ++ docs/Io_8hpp_source.html | 319 ++++ docs/Model_8hpp.html | 142 ++ docs/Model_8hpp_source.html | 227 +++ docs/ParallelCsrReadControl_8java.html | 131 ++ docs/README_8md.html | 121 ++ docs/SharedLibLoader_8cpp.html | 125 ++ docs/SimpleSpmv_8hpp.html | 250 +++ docs/SimpleSpmv_8hpp.js | 17 + docs/SimpleSpmv_8hpp_source.html | 592 +++++++ docs/SparseLinearSolvers_8cpp.html | 215 +++ docs/SparseLinearSolvers_8cpp.js | 6 + docs/SparseLinearSolvers_8hpp.html | 146 ++ docs/SparseLinearSolvers_8hpp_source.html | 179 +++ docs/SparseMatrix_8hpp.html | 148 ++ docs/SparseMatrix_8hpp.js | 6 + docs/SparseMatrix_8hpp_source.html | 156 ++ docs/SpmvDeviceInterfaceMock_8cpp.html | 417 +++++ docs/SpmvDeviceInterfaceMock_8cpp.js | 11 + docs/SpmvDeviceInterface_8cpp.html | 215 +++ docs/SpmvDeviceInterface_8cpp.js | 8 + docs/SpmvDeviceInterface_8h.html | 419 +++++ docs/SpmvDeviceInterface_8h.js | 11 + docs/SpmvDeviceInterface_8h_source.html | 171 +++ docs/SpmvKernel_8java.html | 141 ++ docs/SpmvManager_8java.html | 129 ++ docs/Spmv_8cpp.html | 250 +++ docs/Spmv_8cpp.js | 8 + docs/Spmv_8hpp.html | 154 ++ docs/Spmv_8hpp.js | 7 + docs/Spmv_8hpp_source.html | 231 +++ docs/UserInput_8hpp.html | 148 ++ docs/UserInput_8hpp.js | 5 + docs/UserInput_8hpp_source.html | 162 ++ docs/Utils_8hpp.html | 150 ++ docs/Utils_8hpp.js | 5 + docs/Utils_8hpp_source.html | 198 +++ docs/annotated.html | 180 +++ docs/annotated.js | 16 + docs/bc_s.png | Bin 0 -> 676 bytes docs/bdwn.png | Bin 0 -> 147 bytes .../classBramSpmvReductionKernel-members.html | 126 ++ docs/classBramSpmvReductionKernel.html | 190 +++ docs/classBramSpmvReductionKernel.js | 4 + docs/classBramSpmvReductionKernel.png | Bin 0 -> 581 bytes .../classDramSpmvReductionKernel-members.html | 126 ++ docs/classDramSpmvReductionKernel.html | 168 ++ docs/classDramSpmvReductionKernel.js | 4 + docs/classDramSpmvReductionKernel.png | Bin 0 -> 585 bytes docs/classPaddingKernel-members.html | 126 ++ docs/classPaddingKernel.html | 168 ++ docs/classPaddingKernel.js | 4 + docs/classPaddingKernel.png | Bin 0 -> 467 bytes docs/classParallelCsrReadControl-members.html | 168 ++ docs/classParallelCsrReadControl.html | 1289 ++++++++++++++++ docs/classParallelCsrReadControl.js | 47 + docs/classParallelCsrReadControl.png | Bin 0 -> 655 bytes docs/classSpmvCacheKernel-members.html | 137 ++ docs/classSpmvCacheKernel.html | 494 ++++++ docs/classSpmvCacheKernel.js | 15 + docs/classSpmvCacheKernel.png | Bin 0 -> 516 bytes docs/classSpmvKernel-members.html | 127 ++ docs/classSpmvKernel.html | 229 +++ docs/classSpmvKernel.js | 5 + docs/classSpmvKernel.png | Bin 0 -> 425 bytes docs/classSpmvManager-members.html | 152 ++ docs/classSpmvManager.html | 1000 ++++++++++++ docs/classSpmvManager.js | 30 + docs/classSpmvManager.png | Bin 0 -> 547 bytes docs/classSpmvReductionKernel-members.html | 126 ++ docs/classSpmvReductionKernel.html | 184 +++ docs/classSpmvReductionKernel.js | 4 + docs/classSpmvReductionKernel.png | Bin 0 -> 539 bytes docs/classUnpaddingKernel-members.html | 126 ++ docs/classUnpaddingKernel.html | 184 +++ docs/classUnpaddingKernel.js | 4 + docs/classUnpaddingKernel.png | Bin 0 -> 473 bytes docs/classes.html | 155 ++ ...lassspark_1_1dse_1_1Benchmark-members.html | 129 ++ docs/classspark_1_1dse_1_1Benchmark.html | 240 +++ docs/classspark_1_1dse_1_1Benchmark.js | 7 + ...spark_1_1dse_1_1DseParameters-members.html | 129 ++ docs/classspark_1_1dse_1_1DseParameters.html | 192 +++ docs/classspark_1_1dse_1_1DseParameters.js | 7 + ...lassspark_1_1dse_1_1DseResult-members.html | 129 ++ docs/classspark_1_1dse_1_1DseResult.html | 232 +++ docs/classspark_1_1dse_1_1DseResult.js | 7 + ...classspark_1_1dse_1_1SparkDse-members.html | 127 ++ docs/classspark_1_1dse_1_1SparkDse.html | 191 +++ docs/classspark_1_1dse_1_1SparkDse.js | 5 + ...1execution_1_1SharedLibLoader-members.html | 131 ++ ...spark_1_1execution_1_1SharedLibLoader.html | 257 ++++ ...ssspark_1_1execution_1_1SharedLibLoader.js | 9 + .../classspark_1_1io_1_1MmReader-members.html | 142 ++ docs/classspark_1_1io_1_1MmReader.html | 586 +++++++ docs/classspark_1_1io_1_1MmReader.js | 20 + ...l_1_1ImplementationParameters-members.html | 130 ++ ..._1_1model_1_1ImplementationParameters.html | 257 ++++ ...rk_1_1model_1_1ImplementationParameters.js | 8 + ..._1model_1_1LogicResourceUsage-members.html | 137 ++ ...sspark_1_1model_1_1LogicResourceUsage.html | 426 +++++ ...assspark_1_1model_1_1LogicResourceUsage.js | 15 + ..._1GeneratedSpmvImplementation-members.html | 147 ++ ...untime_1_1GeneratedSpmvImplementation.html | 810 ++++++++++ ...1runtime_1_1GeneratedSpmvImplementation.js | 24 + ...runtime_1_1GeneratedSpmvImplementation.png | Bin 0 -> 1631 bytes ...neratedSpmvImplementationMock-members.html | 146 ++ ...me_1_1GeneratedSpmvImplementationMock.html | 575 +++++++ ...time_1_1GeneratedSpmvImplementationMock.js | 13 + ...ime_1_1GeneratedSpmvImplementationMock.png | Bin 0 -> 1628 bytes ...ntime_1_1ImplementationLoader-members.html | 128 ++ ...rk_1_1runtime_1_1ImplementationLoader.html | 226 +++ ...park_1_1runtime_1_1ImplementationLoader.js | 6 + ...ark_1_1runtime_1_1ImplementationLoader.png | Bin 0 -> 896 bytes ...e_1_1SpmvImplementationLoader-members.html | 131 ++ ..._1runtime_1_1SpmvImplementationLoader.html | 228 +++ ..._1_1runtime_1_1SpmvImplementationLoader.js | 6 + ...1_1runtime_1_1SpmvImplementationLoader.png | Bin 0 -> 893 bytes ...k_1_1sparse_1_1SparkCooMatrix-members.html | 130 ++ ...lassspark_1_1sparse_1_1SparkCooMatrix.html | 248 +++ .../classspark_1_1sparse_1_1SparkCooMatrix.js | 8 + ...ear__solvers_1_1DfeBiCgSolver-members.html | 128 ++ ...rse__linear__solvers_1_1DfeBiCgSolver.html | 189 +++ ...parse__linear__solvers_1_1DfeBiCgSolver.js | 4 + ...arse__linear__solvers_1_1DfeBiCgSolver.png | Bin 0 -> 907 bytes ...inear__solvers_1_1DfeCgSolver-members.html | 128 ++ ...parse__linear__solvers_1_1DfeCgSolver.html | 189 +++ ...1sparse__linear__solvers_1_1DfeCgSolver.js | 4 + ...sparse__linear__solvers_1_1DfeCgSolver.png | Bin 0 -> 864 bytes ...inear__solvers_1_1EigenSolver-members.html | 128 ++ ...parse__linear__solvers_1_1EigenSolver.html | 189 +++ ...1sparse__linear__solvers_1_1EigenSolver.js | 4 + ...sparse__linear__solvers_1_1EigenSolver.png | Bin 0 -> 855 bytes ...se__linear__solvers_1_1Solver-members.html | 128 ++ ..._1_1sparse__linear__solvers_1_1Solver.html | 237 +++ ...rk_1_1sparse__linear__solvers_1_1Solver.js | 6 + ...k_1_1sparse__linear__solvers_1_1Solver.png | Bin 0 -> 1579 bytes ..._1spmv_1_1FstSpmvArchitecture-members.html | 155 ++ ...sspark_1_1spmv_1_1FstSpmvArchitecture.html | 356 +++++ ...assspark_1_1spmv_1_1FstSpmvArchitecture.js | 7 + ...ssspark_1_1spmv_1_1FstSpmvArchitecture.png | Bin 0 -> 1225 bytes ...mv_1_1PrefetchingArchitecture-members.html | 158 ++ ...rk_1_1spmv_1_1PrefetchingArchitecture.html | 318 ++++ ...park_1_1spmv_1_1PrefetchingArchitecture.js | 6 + ...ark_1_1spmv_1_1PrefetchingArchitecture.png | Bin 0 -> 1721 bytes ...pmv_1_1SimpleSpmvArchitecture-members.html | 159 ++ ...ark_1_1spmv_1_1SimpleSpmvArchitecture.html | 1008 ++++++++++++ ...spark_1_1spmv_1_1SimpleSpmvArchitecture.js | 31 + ...park_1_1spmv_1_1SimpleSpmvArchitecture.png | Bin 0 -> 2306 bytes ..._1SimpleSpmvArchitectureSpace-members.html | 135 ++ ..._1spmv_1_1SimpleSpmvArchitectureSpace.html | 413 +++++ ..._1_1spmv_1_1SimpleSpmvArchitectureSpace.js | 12 + ...1_1spmv_1_1SimpleSpmvArchitectureSpace.png | Bin 0 -> 1058 bytes ..._1_1SkipEmptyRowsArchitecture-members.html | 156 ++ ..._1_1spmv_1_1SkipEmptyRowsArchitecture.html | 394 +++++ ...rk_1_1spmv_1_1SkipEmptyRowsArchitecture.js | 8 + ...k_1_1spmv_1_1SkipEmptyRowsArchitecture.png | Bin 0 -> 1728 bytes ...k_1_1spmv_1_1SpmvArchitecture-members.html | 140 ++ ...lassspark_1_1spmv_1_1SpmvArchitecture.html | 570 +++++++ .../classspark_1_1spmv_1_1SpmvArchitecture.js | 18 + ...classspark_1_1spmv_1_1SpmvArchitecture.png | Bin 0 -> 2314 bytes ...spmv_1_1SpmvArchitectureSpace-members.html | 128 ++ ...park_1_1spmv_1_1SpmvArchitectureSpace.html | 228 +++ ...sspark_1_1spmv_1_1SpmvArchitectureSpace.js | 6 + ...spark_1_1spmv_1_1SpmvArchitectureSpace.png | Bin 0 -> 1065 bytes docs/closed.png | Bin 0 -> 132 bytes .../dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html | 121 ++ docs/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.js | 4 + .../dir_16dc92632bab467dc50b01bd02b3341a.html | 121 ++ docs/dir_16dc92632bab467dc50b01bd02b3341a.js | 4 + .../dir_376f1c4177942cba0305052d5eaaa828.html | 121 ++ docs/dir_376f1c4177942cba0305052d5eaaa828.js | 4 + .../dir_55daf1889a6971c13f7bc2c2ab706314.html | 121 ++ docs/dir_55daf1889a6971c13f7bc2c2ab706314.js | 4 + .../dir_68267d1309a1af8e8297ef4c3efbcdba.html | 138 ++ docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js | 11 + .../dir_6d2d4b597c0c9fbf0dac624a287f2dec.html | 121 ++ docs/dir_6d2d4b597c0c9fbf0dac624a287f2dec.js | 4 + .../dir_817fd82c291ca2ce5189d4384ec10041.html | 121 ++ docs/dir_817fd82c291ca2ce5189d4384ec10041.js | 4 + .../dir_bcdd1c0198fc998763f86146a43d3c64.html | 150 ++ docs/dir_bcdd1c0198fc998763f86146a43d3c64.js | 35 + .../dir_bd0755c95a42e835fb06f38bbeb1d6ed.html | 121 ++ docs/dir_bd0755c95a42e835fb06f38bbeb1d6ed.js | 4 + .../dir_d44c64559bbebec7f509842c48db8b23.html | 121 ++ docs/dir_d44c64559bbebec7f509842c48db8b23.js | 4 + .../dir_d7c482895ed73b33d89221a7692a7a0a.html | 121 ++ docs/dir_d7c482895ed73b33d89221a7692a7a0a.js | 4 + .../dir_d8b7011e84264c6173d8b11c4e58b2d3.html | 129 ++ docs/dir_d8b7011e84264c6173d8b11c4e58b2d3.js | 21 + .../dir_e1e695598025e13caf4d9e666dd56479.html | 121 ++ docs/dir_e1e695598025e13caf4d9e666dd56479.js | 4 + docs/doxygen.css | 1366 +++++++++++++++++ docs/doxygen.png | Bin 0 -> 3779 bytes docs/dynsections.js | 97 ++ ...arallelCsrReadControl_1_1Mode-members.html | 129 ++ docs/enumParallelCsrReadControl_1_1Mode.html | 190 +++ docs/enumParallelCsrReadControl_1_1Mode.js | 7 + docs/files.html | 163 ++ docs/files.js | 5 + docs/ftv2blank.png | Bin 0 -> 86 bytes docs/ftv2cl.png | Bin 0 -> 453 bytes docs/ftv2doc.png | Bin 0 -> 746 bytes docs/ftv2folderclosed.png | Bin 0 -> 616 bytes docs/ftv2folderopen.png | Bin 0 -> 597 bytes docs/ftv2lastnode.png | Bin 0 -> 86 bytes docs/ftv2link.png | Bin 0 -> 746 bytes docs/ftv2mlastnode.png | Bin 0 -> 246 bytes docs/ftv2mnode.png | Bin 0 -> 246 bytes docs/ftv2mo.png | Bin 0 -> 403 bytes docs/ftv2node.png | Bin 0 -> 86 bytes docs/ftv2ns.png | Bin 0 -> 388 bytes docs/ftv2plastnode.png | Bin 0 -> 229 bytes docs/ftv2pnode.png | Bin 0 -> 229 bytes docs/ftv2splitbar.png | Bin 0 -> 314 bytes docs/ftv2vertline.png | Bin 0 -> 86 bytes docs/functions.html | 186 +++ docs/functions_b.html | 168 ++ docs/functions_c.html | 200 +++ docs/functions_d.html | 209 +++ docs/functions_dup.js | 25 + docs/functions_e.html | 169 ++ docs/functions_f.html | 177 +++ docs/functions_func.html | 624 ++++++++ docs/functions_g.html | 231 +++ docs/functions_h.html | 159 ++ docs/functions_i.html | 217 +++ docs/functions_l.html | 177 +++ docs/functions_m.html | 223 +++ docs/functions_n.html | 205 +++ docs/functions_o.html | 205 +++ docs/functions_p.html | 198 +++ docs/functions_r.html | 201 +++ docs/functions_s.html | 235 +++ docs/functions_t.html | 176 +++ docs/functions_type.html | 144 ++ docs/functions_u.html | 162 ++ docs/functions_v.html | 183 +++ docs/functions_vars.html | 564 +++++++ docs/functions_w.html | 164 ++ docs/functions_z.html | 159 ++ docs/functions_~.html | 174 +++ docs/globals.html | 280 ++++ docs/globals_func.html | 263 ++++ docs/globals_type.html | 132 ++ docs/globals_vars.html | 132 ++ docs/hierarchy.html | 171 +++ docs/hierarchy.js | 60 + docs/index.html | 156 ++ docs/jquery.js | 72 + docs/main_8cpp.html | 229 +++ docs/main_8cpp.js | 7 + docs/md_README.html | 151 ++ docs/md_docs_user_guide.html | 135 ++ docs/namespacemembers.html | 165 ++ docs/namespacemembers_func.html | 152 ++ docs/namespacemembers_type.html | 139 ++ docs/namespacemembers_vars.html | 129 ++ docs/namespaces.html | 137 ++ docs/namespaces.js | 4 + docs/namespacespark.html | 151 ++ docs/namespacespark.js | 15 + docs/namespacespark_1_1converters.html | 225 +++ docs/namespacespark_1_1dse.html | 212 +++ docs/namespacespark_1_1dse.js | 7 + docs/namespacespark_1_1execution.html | 129 ++ docs/namespacespark_1_1execution.js | 4 + docs/namespacespark_1_1file__utils.html | 146 ++ docs/namespacespark_1_1io.html | 129 ++ docs/namespacespark_1_1io.js | 4 + docs/namespacespark_1_1model.html | 131 ++ docs/namespacespark_1_1model.js | 5 + docs/namespacespark_1_1runtime.html | 137 ++ docs/namespacespark_1_1runtime.js | 8 + docs/namespacespark_1_1sparse.html | 162 ++ docs/namespacespark_1_1sparse.js | 4 + ...spacespark_1_1sparse__linear__solvers.html | 135 ++ ...mespacespark_1_1sparse__linear__solvers.js | 7 + docs/namespacespark_1_1spmv.html | 273 ++++ docs/namespacespark_1_1spmv.js | 12 + docs/namespacespark_1_1userio.html | 173 +++ docs/namespacespark_1_1utils.html | 170 ++ docs/namespacespark_1_1utils.js | 4 + docs/nav_f.png | Bin 0 -> 153 bytes docs/nav_g.png | Bin 0 -> 95 bytes docs/nav_h.png | Bin 0 -> 98 bytes docs/navtree.css | 143 ++ docs/navtree.js | 561 +++++++ docs/navtreeindex0.js | 253 +++ docs/navtreeindex1.js | 253 +++ docs/navtreeindex2.js | 24 + docs/open.png | Bin 0 -> 123 bytes docs/pages.html | 120 ++ docs/resize.js | 97 ++ docs/search/all_0.html | 26 + docs/search/all_0.js | 4 + docs/search/all_1.html | 26 + docs/search/all_1.js | 14 + docs/search/all_10.html | 26 + docs/search/all_10.js | 75 + docs/search/all_11.html | 26 + docs/search/all_11.js | 9 + docs/search/all_12.html | 26 + docs/search/all_12.js | 10 + docs/search/all_13.html | 26 + docs/search/all_13.js | 13 + docs/search/all_14.html | 26 + docs/search/all_14.js | 7 + docs/search/all_15.html | 26 + docs/search/all_15.js | 4 + docs/search/all_16.html | 26 + docs/search/all_16.js | 9 + docs/search/all_2.html | 26 + docs/search/all_2.js | 10 + docs/search/all_3.html | 26 + docs/search/all_3.js | 22 + docs/search/all_4.html | 26 + docs/search/all_4.js | 28 + docs/search/all_5.html | 26 + docs/search/all_5.js | 11 + docs/search/all_6.html | 26 + docs/search/all_6.js | 12 + docs/search/all_7.html | 26 + docs/search/all_7.js | 33 + docs/search/all_8.html | 26 + docs/search/all_8.js | 4 + docs/search/all_9.html | 26 + docs/search/all_9.js | 26 + docs/search/all_a.html | 26 + docs/search/all_a.js | 13 + docs/search/all_b.html | 26 + docs/search/all_b.js | 28 + docs/search/all_c.html | 26 + docs/search/all_c.js | 17 + docs/search/all_d.html | 26 + docs/search/all_d.js | 19 + docs/search/all_e.html | 26 + docs/search/all_e.js | 22 + docs/search/all_f.html | 26 + docs/search/all_f.js | 19 + docs/search/classes_0.html | 26 + docs/search/classes_0.js | 5 + docs/search/classes_1.html | 26 + docs/search/classes_1.js | 8 + docs/search/classes_2.html | 26 + docs/search/classes_2.js | 4 + docs/search/classes_3.html | 26 + docs/search/classes_3.js | 4 + docs/search/classes_4.html | 26 + docs/search/classes_4.js | 6 + docs/search/classes_5.html | 26 + docs/search/classes_5.js | 6 + docs/search/classes_6.html | 26 + docs/search/classes_6.js | 4 + docs/search/classes_7.html | 26 + docs/search/classes_7.js | 5 + docs/search/classes_8.html | 26 + docs/search/classes_8.js | 8 + docs/search/classes_9.html | 26 + docs/search/classes_9.js | 4 + docs/search/classes_a.html | 26 + docs/search/classes_a.js | 19 + docs/search/classes_b.html | 26 + docs/search/classes_b.js | 4 + docs/search/close.png | Bin 0 -> 273 bytes docs/search/files_0.html | 26 + docs/search/files_0.js | 4 + docs/search/files_1.html | 26 + docs/search/files_1.js | 5 + docs/search/files_2.html | 26 + docs/search/files_2.js | 5 + docs/search/files_3.html | 26 + docs/search/files_3.js | 4 + docs/search/files_4.html | 26 + docs/search/files_4.js | 4 + docs/search/files_5.html | 26 + docs/search/files_5.js | 4 + docs/search/files_6.html | 26 + docs/search/files_6.js | 4 + docs/search/files_7.html | 26 + docs/search/files_7.js | 5 + docs/search/files_8.html | 26 + docs/search/files_8.js | 4 + docs/search/files_9.html | 26 + docs/search/files_9.js | 4 + docs/search/files_a.html | 26 + docs/search/files_a.js | 16 + docs/search/files_b.html | 26 + docs/search/files_b.js | 6 + docs/search/functions_0.html | 26 + docs/search/functions_0.js | 4 + docs/search/functions_1.html | 26 + docs/search/functions_1.js | 13 + docs/search/functions_10.html | 26 + docs/search/functions_10.js | 6 + docs/search/functions_11.html | 26 + docs/search/functions_11.js | 5 + docs/search/functions_12.html | 26 + docs/search/functions_12.js | 7 + docs/search/functions_13.html | 26 + docs/search/functions_13.js | 4 + docs/search/functions_14.html | 26 + docs/search/functions_14.js | 9 + docs/search/functions_2.html | 26 + docs/search/functions_2.js | 6 + docs/search/functions_3.html | 26 + docs/search/functions_3.js | 10 + docs/search/functions_4.html | 26 + docs/search/functions_4.js | 11 + docs/search/functions_5.html | 26 + docs/search/functions_5.js | 6 + docs/search/functions_6.html | 26 + docs/search/functions_6.js | 5 + docs/search/functions_7.html | 26 + docs/search/functions_7.js | 28 + docs/search/functions_8.html | 26 + docs/search/functions_8.js | 8 + docs/search/functions_9.html | 26 + docs/search/functions_9.js | 9 + docs/search/functions_a.html | 26 + docs/search/functions_a.js | 11 + docs/search/functions_b.html | 26 + docs/search/functions_b.js | 7 + docs/search/functions_c.html | 26 + docs/search/functions_c.js | 13 + docs/search/functions_d.html | 26 + docs/search/functions_d.js | 11 + docs/search/functions_e.html | 26 + docs/search/functions_e.js | 9 + docs/search/functions_f.html | 26 + docs/search/functions_f.js | 27 + docs/search/mag_sel.png | Bin 0 -> 563 bytes docs/search/namespaces_0.html | 26 + docs/search/namespaces_0.js | 16 + docs/search/nomatches.html | 12 + docs/search/pages_0.html | 26 + docs/search/pages_0.js | 4 + docs/search/pages_1.html | 26 + docs/search/pages_1.js | 4 + docs/search/search.css | 271 ++++ docs/search/search.js | 807 ++++++++++ docs/search/search_l.png | Bin 0 -> 604 bytes docs/search/search_m.png | Bin 0 -> 158 bytes docs/search/search_r.png | Bin 0 -> 612 bytes docs/search/typedefs_0.html | 26 + docs/search/typedefs_0.js | 5 + docs/search/typedefs_1.html | 26 + docs/search/typedefs_1.js | 4 + docs/search/typedefs_2.html | 26 + docs/search/typedefs_2.js | 4 + docs/search/typedefs_3.html | 26 + docs/search/typedefs_3.js | 8 + docs/search/typedefs_4.html | 26 + docs/search/typedefs_4.js | 4 + docs/search/typedefs_5.html | 26 + docs/search/typedefs_5.js | 4 + docs/search/variables_0.html | 26 + docs/search/variables_0.js | 4 + docs/search/variables_1.html | 26 + docs/search/variables_1.js | 4 + docs/search/variables_10.html | 26 + docs/search/variables_10.js | 7 + docs/search/variables_11.html | 26 + docs/search/variables_11.js | 6 + docs/search/variables_12.html | 26 + docs/search/variables_12.js | 12 + docs/search/variables_2.html | 26 + docs/search/variables_2.js | 5 + docs/search/variables_3.html | 26 + docs/search/variables_3.js | 12 + docs/search/variables_4.html | 26 + docs/search/variables_4.js | 14 + docs/search/variables_5.html | 26 + docs/search/variables_5.js | 5 + docs/search/variables_6.html | 26 + docs/search/variables_6.js | 8 + docs/search/variables_7.html | 26 + docs/search/variables_7.js | 4 + docs/search/variables_8.html | 26 + docs/search/variables_8.js | 4 + docs/search/variables_9.html | 26 + docs/search/variables_9.js | 18 + docs/search/variables_a.html | 26 + docs/search/variables_a.js | 6 + docs/search/variables_b.html | 26 + docs/search/variables_b.js | 17 + docs/search/variables_c.html | 26 + docs/search/variables_c.js | 14 + docs/search/variables_d.html | 26 + docs/search/variables_d.js | 9 + docs/search/variables_e.html | 26 + docs/search/variables_e.js | 9 + docs/search/variables_f.html | 26 + docs/search/variables_f.js | 11 + docs/structPartitionWriteResult-members.html | 132 ++ docs/structPartitionWriteResult.html | 232 +++ docs/structPartitionWriteResult.js | 10 + docs/structSpmvEqual-members.html | 126 ++ docs/structSpmvEqual.html | 170 ++ docs/structSpmvEqual.js | 4 + docs/structSpmvHash-members.html | 126 ++ docs/structSpmvHash.html | 160 ++ docs/structSpmvHash.js | 4 + ...me_1_1GeneratedImplementation-members.html | 126 ++ ...1_1runtime_1_1GeneratedImplementation.html | 171 +++ ...k_1_1runtime_1_1GeneratedImplementation.js | 4 + ..._1_1runtime_1_1GeneratedImplementation.png | Bin 0 -> 1633 bytes ...uctspark_1_1spmv_1_1Partition-members.html | 138 ++ docs/structspark_1_1spmv_1_1Partition.html | 334 ++++ docs/structspark_1_1spmv_1_1Partition.js | 16 + ...park_1_1spmv_1_1indptr__value-members.html | 129 ++ .../structspark_1_1spmv_1_1indptr__value.html | 230 +++ docs/structspark_1_1spmv_1_1indptr__value.js | 7 + ...structspark_1_1utils_1_1Range-members.html | 135 ++ docs/structspark_1_1utils_1_1Range.html | 366 +++++ docs/structspark_1_1utils_1_1Range.js | 13 + docs/structure_8md.html | 121 ++ docs/sync_off.png | Bin 0 -> 853 bytes docs/sync_on.png | Bin 0 -> 845 bytes docs/tab_a.png | Bin 0 -> 142 bytes docs/tab_b.png | Bin 0 -> 169 bytes docs/tab_h.png | Bin 0 -> 177 bytes docs/tab_s.png | Bin 0 -> 184 bytes docs/tabs.css | 60 + docs/user__guide_8md.html | 121 ++ 543 files changed, 48862 insertions(+) create mode 100644 docs/BiConjugateGradient_8cpp.html create mode 100644 docs/BiConjugateGradient_8cpp.js create mode 100644 docs/ConjugateGradient_8cpp.html create mode 100644 docs/Converters_8hpp.html create mode 100644 docs/Converters_8hpp.js create mode 100644 docs/Converters_8hpp_source.html create mode 100644 docs/Dse_8cpp.html create mode 100644 docs/Dse_8cpp.js create mode 100644 docs/Dse_8hpp.html create mode 100644 docs/Dse_8hpp.js create mode 100644 docs/Dse_8hpp_source.html create mode 100644 docs/Execution_8hpp.html create mode 100644 docs/Execution_8hpp_source.html create mode 100644 docs/FileUtils_8hpp.html create mode 100644 docs/FileUtils_8hpp.js create mode 100644 docs/FileUtils_8hpp_source.html create mode 100644 docs/GeneratedImplSupport_8hpp.html create mode 100644 docs/GeneratedImplSupport_8hpp_source.html create mode 100644 docs/Io_8hpp.html create mode 100644 docs/Io_8hpp_source.html create mode 100644 docs/Model_8hpp.html create mode 100644 docs/Model_8hpp_source.html create mode 100644 docs/ParallelCsrReadControl_8java.html create mode 100644 docs/README_8md.html create mode 100644 docs/SharedLibLoader_8cpp.html create mode 100644 docs/SimpleSpmv_8hpp.html create mode 100644 docs/SimpleSpmv_8hpp.js create mode 100644 docs/SimpleSpmv_8hpp_source.html create mode 100644 docs/SparseLinearSolvers_8cpp.html create mode 100644 docs/SparseLinearSolvers_8cpp.js create mode 100644 docs/SparseLinearSolvers_8hpp.html create mode 100644 docs/SparseLinearSolvers_8hpp_source.html create mode 100644 docs/SparseMatrix_8hpp.html create mode 100644 docs/SparseMatrix_8hpp.js create mode 100644 docs/SparseMatrix_8hpp_source.html create mode 100644 docs/SpmvDeviceInterfaceMock_8cpp.html create mode 100644 docs/SpmvDeviceInterfaceMock_8cpp.js create mode 100644 docs/SpmvDeviceInterface_8cpp.html create mode 100644 docs/SpmvDeviceInterface_8cpp.js create mode 100644 docs/SpmvDeviceInterface_8h.html create mode 100644 docs/SpmvDeviceInterface_8h.js create mode 100644 docs/SpmvDeviceInterface_8h_source.html create mode 100644 docs/SpmvKernel_8java.html create mode 100644 docs/SpmvManager_8java.html create mode 100644 docs/Spmv_8cpp.html create mode 100644 docs/Spmv_8cpp.js create mode 100644 docs/Spmv_8hpp.html create mode 100644 docs/Spmv_8hpp.js create mode 100644 docs/Spmv_8hpp_source.html create mode 100644 docs/UserInput_8hpp.html create mode 100644 docs/UserInput_8hpp.js create mode 100644 docs/UserInput_8hpp_source.html create mode 100644 docs/Utils_8hpp.html create mode 100644 docs/Utils_8hpp.js create mode 100644 docs/Utils_8hpp_source.html create mode 100644 docs/annotated.html create mode 100644 docs/annotated.js create mode 100644 docs/bc_s.png create mode 100644 docs/bdwn.png create mode 100644 docs/classBramSpmvReductionKernel-members.html create mode 100644 docs/classBramSpmvReductionKernel.html create mode 100644 docs/classBramSpmvReductionKernel.js create mode 100644 docs/classBramSpmvReductionKernel.png create mode 100644 docs/classDramSpmvReductionKernel-members.html create mode 100644 docs/classDramSpmvReductionKernel.html create mode 100644 docs/classDramSpmvReductionKernel.js create mode 100644 docs/classDramSpmvReductionKernel.png create mode 100644 docs/classPaddingKernel-members.html create mode 100644 docs/classPaddingKernel.html create mode 100644 docs/classPaddingKernel.js create mode 100644 docs/classPaddingKernel.png create mode 100644 docs/classParallelCsrReadControl-members.html create mode 100644 docs/classParallelCsrReadControl.html create mode 100644 docs/classParallelCsrReadControl.js create mode 100644 docs/classParallelCsrReadControl.png create mode 100644 docs/classSpmvCacheKernel-members.html create mode 100644 docs/classSpmvCacheKernel.html create mode 100644 docs/classSpmvCacheKernel.js create mode 100644 docs/classSpmvCacheKernel.png create mode 100644 docs/classSpmvKernel-members.html create mode 100644 docs/classSpmvKernel.html create mode 100644 docs/classSpmvKernel.js create mode 100644 docs/classSpmvKernel.png create mode 100644 docs/classSpmvManager-members.html create mode 100644 docs/classSpmvManager.html create mode 100644 docs/classSpmvManager.js create mode 100644 docs/classSpmvManager.png create mode 100644 docs/classSpmvReductionKernel-members.html create mode 100644 docs/classSpmvReductionKernel.html create mode 100644 docs/classSpmvReductionKernel.js create mode 100644 docs/classSpmvReductionKernel.png create mode 100644 docs/classUnpaddingKernel-members.html create mode 100644 docs/classUnpaddingKernel.html create mode 100644 docs/classUnpaddingKernel.js create mode 100644 docs/classUnpaddingKernel.png create mode 100644 docs/classes.html create mode 100644 docs/classspark_1_1dse_1_1Benchmark-members.html create mode 100644 docs/classspark_1_1dse_1_1Benchmark.html create mode 100644 docs/classspark_1_1dse_1_1Benchmark.js create mode 100644 docs/classspark_1_1dse_1_1DseParameters-members.html create mode 100644 docs/classspark_1_1dse_1_1DseParameters.html create mode 100644 docs/classspark_1_1dse_1_1DseParameters.js create mode 100644 docs/classspark_1_1dse_1_1DseResult-members.html create mode 100644 docs/classspark_1_1dse_1_1DseResult.html create mode 100644 docs/classspark_1_1dse_1_1DseResult.js create mode 100644 docs/classspark_1_1dse_1_1SparkDse-members.html create mode 100644 docs/classspark_1_1dse_1_1SparkDse.html create mode 100644 docs/classspark_1_1dse_1_1SparkDse.js create mode 100644 docs/classspark_1_1execution_1_1SharedLibLoader-members.html create mode 100644 docs/classspark_1_1execution_1_1SharedLibLoader.html create mode 100644 docs/classspark_1_1execution_1_1SharedLibLoader.js create mode 100644 docs/classspark_1_1io_1_1MmReader-members.html create mode 100644 docs/classspark_1_1io_1_1MmReader.html create mode 100644 docs/classspark_1_1io_1_1MmReader.js create mode 100644 docs/classspark_1_1model_1_1ImplementationParameters-members.html create mode 100644 docs/classspark_1_1model_1_1ImplementationParameters.html create mode 100644 docs/classspark_1_1model_1_1ImplementationParameters.js create mode 100644 docs/classspark_1_1model_1_1LogicResourceUsage-members.html create mode 100644 docs/classspark_1_1model_1_1LogicResourceUsage.html create mode 100644 docs/classspark_1_1model_1_1LogicResourceUsage.js create mode 100644 docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation-members.html create mode 100644 docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.html create mode 100644 docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.js create mode 100644 docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.png create mode 100644 docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock-members.html create mode 100644 docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html create mode 100644 docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.js create mode 100644 docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.png create mode 100644 docs/classspark_1_1runtime_1_1ImplementationLoader-members.html create mode 100644 docs/classspark_1_1runtime_1_1ImplementationLoader.html create mode 100644 docs/classspark_1_1runtime_1_1ImplementationLoader.js create mode 100644 docs/classspark_1_1runtime_1_1ImplementationLoader.png create mode 100644 docs/classspark_1_1runtime_1_1SpmvImplementationLoader-members.html create mode 100644 docs/classspark_1_1runtime_1_1SpmvImplementationLoader.html create mode 100644 docs/classspark_1_1runtime_1_1SpmvImplementationLoader.js create mode 100644 docs/classspark_1_1runtime_1_1SpmvImplementationLoader.png create mode 100644 docs/classspark_1_1sparse_1_1SparkCooMatrix-members.html create mode 100644 docs/classspark_1_1sparse_1_1SparkCooMatrix.html create mode 100644 docs/classspark_1_1sparse_1_1SparkCooMatrix.js create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.js create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.png create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver-members.html create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.js create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.png create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver-members.html create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.js create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.png create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1Solver-members.html create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1Solver.html create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1Solver.js create mode 100644 docs/classspark_1_1sparse__linear__solvers_1_1Solver.png create mode 100644 docs/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html create mode 100644 docs/classspark_1_1spmv_1_1FstSpmvArchitecture.html create mode 100644 docs/classspark_1_1spmv_1_1FstSpmvArchitecture.js create mode 100644 docs/classspark_1_1spmv_1_1FstSpmvArchitecture.png create mode 100644 docs/classspark_1_1spmv_1_1PrefetchingArchitecture-members.html create mode 100644 docs/classspark_1_1spmv_1_1PrefetchingArchitecture.html create mode 100644 docs/classspark_1_1spmv_1_1PrefetchingArchitecture.js create mode 100644 docs/classspark_1_1spmv_1_1PrefetchingArchitecture.png create mode 100644 docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html create mode 100644 docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html create mode 100644 docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.js create mode 100644 docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.png create mode 100644 docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html create mode 100644 docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html create mode 100644 docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.js create mode 100644 docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.png create mode 100644 docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture-members.html create mode 100644 docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html create mode 100644 docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.js create mode 100644 docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.png create mode 100644 docs/classspark_1_1spmv_1_1SpmvArchitecture-members.html create mode 100644 docs/classspark_1_1spmv_1_1SpmvArchitecture.html create mode 100644 docs/classspark_1_1spmv_1_1SpmvArchitecture.js create mode 100644 docs/classspark_1_1spmv_1_1SpmvArchitecture.png create mode 100644 docs/classspark_1_1spmv_1_1SpmvArchitectureSpace-members.html create mode 100644 docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.html create mode 100644 docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.js create mode 100644 docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.png create mode 100644 docs/closed.png create mode 100644 docs/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html create mode 100644 docs/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.js create mode 100644 docs/dir_16dc92632bab467dc50b01bd02b3341a.html create mode 100644 docs/dir_16dc92632bab467dc50b01bd02b3341a.js create mode 100644 docs/dir_376f1c4177942cba0305052d5eaaa828.html create mode 100644 docs/dir_376f1c4177942cba0305052d5eaaa828.js create mode 100644 docs/dir_55daf1889a6971c13f7bc2c2ab706314.html create mode 100644 docs/dir_55daf1889a6971c13f7bc2c2ab706314.js create mode 100644 docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html create mode 100644 docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js create mode 100644 docs/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html create mode 100644 docs/dir_6d2d4b597c0c9fbf0dac624a287f2dec.js create mode 100644 docs/dir_817fd82c291ca2ce5189d4384ec10041.html create mode 100644 docs/dir_817fd82c291ca2ce5189d4384ec10041.js create mode 100644 docs/dir_bcdd1c0198fc998763f86146a43d3c64.html create mode 100644 docs/dir_bcdd1c0198fc998763f86146a43d3c64.js create mode 100644 docs/dir_bd0755c95a42e835fb06f38bbeb1d6ed.html create mode 100644 docs/dir_bd0755c95a42e835fb06f38bbeb1d6ed.js create mode 100644 docs/dir_d44c64559bbebec7f509842c48db8b23.html create mode 100644 docs/dir_d44c64559bbebec7f509842c48db8b23.js create mode 100644 docs/dir_d7c482895ed73b33d89221a7692a7a0a.html create mode 100644 docs/dir_d7c482895ed73b33d89221a7692a7a0a.js create mode 100644 docs/dir_d8b7011e84264c6173d8b11c4e58b2d3.html create mode 100644 docs/dir_d8b7011e84264c6173d8b11c4e58b2d3.js create mode 100644 docs/dir_e1e695598025e13caf4d9e666dd56479.html create mode 100644 docs/dir_e1e695598025e13caf4d9e666dd56479.js create mode 100644 docs/doxygen.css create mode 100644 docs/doxygen.png create mode 100644 docs/dynsections.js create mode 100644 docs/enumParallelCsrReadControl_1_1Mode-members.html create mode 100644 docs/enumParallelCsrReadControl_1_1Mode.html create mode 100644 docs/enumParallelCsrReadControl_1_1Mode.js create mode 100644 docs/files.html create mode 100644 docs/files.js create mode 100644 docs/ftv2blank.png create mode 100644 docs/ftv2cl.png create mode 100644 docs/ftv2doc.png create mode 100644 docs/ftv2folderclosed.png create mode 100644 docs/ftv2folderopen.png create mode 100644 docs/ftv2lastnode.png create mode 100644 docs/ftv2link.png create mode 100644 docs/ftv2mlastnode.png create mode 100644 docs/ftv2mnode.png create mode 100644 docs/ftv2mo.png create mode 100644 docs/ftv2node.png create mode 100644 docs/ftv2ns.png create mode 100644 docs/ftv2plastnode.png create mode 100644 docs/ftv2pnode.png create mode 100644 docs/ftv2splitbar.png create mode 100644 docs/ftv2vertline.png create mode 100644 docs/functions.html create mode 100644 docs/functions_b.html create mode 100644 docs/functions_c.html create mode 100644 docs/functions_d.html create mode 100644 docs/functions_dup.js create mode 100644 docs/functions_e.html create mode 100644 docs/functions_f.html create mode 100644 docs/functions_func.html create mode 100644 docs/functions_g.html create mode 100644 docs/functions_h.html create mode 100644 docs/functions_i.html create mode 100644 docs/functions_l.html create mode 100644 docs/functions_m.html create mode 100644 docs/functions_n.html create mode 100644 docs/functions_o.html create mode 100644 docs/functions_p.html create mode 100644 docs/functions_r.html create mode 100644 docs/functions_s.html create mode 100644 docs/functions_t.html create mode 100644 docs/functions_type.html create mode 100644 docs/functions_u.html create mode 100644 docs/functions_v.html create mode 100644 docs/functions_vars.html create mode 100644 docs/functions_w.html create mode 100644 docs/functions_z.html create mode 100644 docs/functions_~.html create mode 100644 docs/globals.html create mode 100644 docs/globals_func.html create mode 100644 docs/globals_type.html create mode 100644 docs/globals_vars.html create mode 100644 docs/hierarchy.html create mode 100644 docs/hierarchy.js create mode 100644 docs/index.html create mode 100644 docs/jquery.js create mode 100644 docs/main_8cpp.html create mode 100644 docs/main_8cpp.js create mode 100644 docs/md_README.html create mode 100644 docs/md_docs_user_guide.html create mode 100644 docs/namespacemembers.html create mode 100644 docs/namespacemembers_func.html create mode 100644 docs/namespacemembers_type.html create mode 100644 docs/namespacemembers_vars.html create mode 100644 docs/namespaces.html create mode 100644 docs/namespaces.js create mode 100644 docs/namespacespark.html create mode 100644 docs/namespacespark.js create mode 100644 docs/namespacespark_1_1converters.html create mode 100644 docs/namespacespark_1_1dse.html create mode 100644 docs/namespacespark_1_1dse.js create mode 100644 docs/namespacespark_1_1execution.html create mode 100644 docs/namespacespark_1_1execution.js create mode 100644 docs/namespacespark_1_1file__utils.html create mode 100644 docs/namespacespark_1_1io.html create mode 100644 docs/namespacespark_1_1io.js create mode 100644 docs/namespacespark_1_1model.html create mode 100644 docs/namespacespark_1_1model.js create mode 100644 docs/namespacespark_1_1runtime.html create mode 100644 docs/namespacespark_1_1runtime.js create mode 100644 docs/namespacespark_1_1sparse.html create mode 100644 docs/namespacespark_1_1sparse.js create mode 100644 docs/namespacespark_1_1sparse__linear__solvers.html create mode 100644 docs/namespacespark_1_1sparse__linear__solvers.js create mode 100644 docs/namespacespark_1_1spmv.html create mode 100644 docs/namespacespark_1_1spmv.js create mode 100644 docs/namespacespark_1_1userio.html create mode 100644 docs/namespacespark_1_1utils.html create mode 100644 docs/namespacespark_1_1utils.js create mode 100644 docs/nav_f.png create mode 100644 docs/nav_g.png create mode 100644 docs/nav_h.png create mode 100644 docs/navtree.css create mode 100644 docs/navtree.js create mode 100644 docs/navtreeindex0.js create mode 100644 docs/navtreeindex1.js create mode 100644 docs/navtreeindex2.js create mode 100644 docs/open.png create mode 100644 docs/pages.html create mode 100644 docs/resize.js create mode 100644 docs/search/all_0.html create mode 100644 docs/search/all_0.js create mode 100644 docs/search/all_1.html create mode 100644 docs/search/all_1.js create mode 100644 docs/search/all_10.html create mode 100644 docs/search/all_10.js create mode 100644 docs/search/all_11.html create mode 100644 docs/search/all_11.js create mode 100644 docs/search/all_12.html create mode 100644 docs/search/all_12.js create mode 100644 docs/search/all_13.html create mode 100644 docs/search/all_13.js create mode 100644 docs/search/all_14.html create mode 100644 docs/search/all_14.js create mode 100644 docs/search/all_15.html create mode 100644 docs/search/all_15.js create mode 100644 docs/search/all_16.html create mode 100644 docs/search/all_16.js create mode 100644 docs/search/all_2.html create mode 100644 docs/search/all_2.js create mode 100644 docs/search/all_3.html create mode 100644 docs/search/all_3.js create mode 100644 docs/search/all_4.html create mode 100644 docs/search/all_4.js create mode 100644 docs/search/all_5.html create mode 100644 docs/search/all_5.js create mode 100644 docs/search/all_6.html create mode 100644 docs/search/all_6.js create mode 100644 docs/search/all_7.html create mode 100644 docs/search/all_7.js create mode 100644 docs/search/all_8.html create mode 100644 docs/search/all_8.js create mode 100644 docs/search/all_9.html create mode 100644 docs/search/all_9.js create mode 100644 docs/search/all_a.html create mode 100644 docs/search/all_a.js create mode 100644 docs/search/all_b.html create mode 100644 docs/search/all_b.js create mode 100644 docs/search/all_c.html create mode 100644 docs/search/all_c.js create mode 100644 docs/search/all_d.html create mode 100644 docs/search/all_d.js create mode 100644 docs/search/all_e.html create mode 100644 docs/search/all_e.js create mode 100644 docs/search/all_f.html create mode 100644 docs/search/all_f.js create mode 100644 docs/search/classes_0.html create mode 100644 docs/search/classes_0.js create mode 100644 docs/search/classes_1.html create mode 100644 docs/search/classes_1.js create mode 100644 docs/search/classes_2.html create mode 100644 docs/search/classes_2.js create mode 100644 docs/search/classes_3.html create mode 100644 docs/search/classes_3.js create mode 100644 docs/search/classes_4.html create mode 100644 docs/search/classes_4.js create mode 100644 docs/search/classes_5.html create mode 100644 docs/search/classes_5.js create mode 100644 docs/search/classes_6.html create mode 100644 docs/search/classes_6.js create mode 100644 docs/search/classes_7.html create mode 100644 docs/search/classes_7.js create mode 100644 docs/search/classes_8.html create mode 100644 docs/search/classes_8.js create mode 100644 docs/search/classes_9.html create mode 100644 docs/search/classes_9.js create mode 100644 docs/search/classes_a.html create mode 100644 docs/search/classes_a.js create mode 100644 docs/search/classes_b.html create mode 100644 docs/search/classes_b.js create mode 100644 docs/search/close.png create mode 100644 docs/search/files_0.html create mode 100644 docs/search/files_0.js create mode 100644 docs/search/files_1.html create mode 100644 docs/search/files_1.js create mode 100644 docs/search/files_2.html create mode 100644 docs/search/files_2.js create mode 100644 docs/search/files_3.html create mode 100644 docs/search/files_3.js create mode 100644 docs/search/files_4.html create mode 100644 docs/search/files_4.js create mode 100644 docs/search/files_5.html create mode 100644 docs/search/files_5.js create mode 100644 docs/search/files_6.html create mode 100644 docs/search/files_6.js create mode 100644 docs/search/files_7.html create mode 100644 docs/search/files_7.js create mode 100644 docs/search/files_8.html create mode 100644 docs/search/files_8.js create mode 100644 docs/search/files_9.html create mode 100644 docs/search/files_9.js create mode 100644 docs/search/files_a.html create mode 100644 docs/search/files_a.js create mode 100644 docs/search/files_b.html create mode 100644 docs/search/files_b.js create mode 100644 docs/search/functions_0.html create mode 100644 docs/search/functions_0.js create mode 100644 docs/search/functions_1.html create mode 100644 docs/search/functions_1.js create mode 100644 docs/search/functions_10.html create mode 100644 docs/search/functions_10.js create mode 100644 docs/search/functions_11.html create mode 100644 docs/search/functions_11.js create mode 100644 docs/search/functions_12.html create mode 100644 docs/search/functions_12.js create mode 100644 docs/search/functions_13.html create mode 100644 docs/search/functions_13.js create mode 100644 docs/search/functions_14.html create mode 100644 docs/search/functions_14.js create mode 100644 docs/search/functions_2.html create mode 100644 docs/search/functions_2.js create mode 100644 docs/search/functions_3.html create mode 100644 docs/search/functions_3.js create mode 100644 docs/search/functions_4.html create mode 100644 docs/search/functions_4.js create mode 100644 docs/search/functions_5.html create mode 100644 docs/search/functions_5.js create mode 100644 docs/search/functions_6.html create mode 100644 docs/search/functions_6.js create mode 100644 docs/search/functions_7.html create mode 100644 docs/search/functions_7.js create mode 100644 docs/search/functions_8.html create mode 100644 docs/search/functions_8.js create mode 100644 docs/search/functions_9.html create mode 100644 docs/search/functions_9.js create mode 100644 docs/search/functions_a.html create mode 100644 docs/search/functions_a.js create mode 100644 docs/search/functions_b.html create mode 100644 docs/search/functions_b.js create mode 100644 docs/search/functions_c.html create mode 100644 docs/search/functions_c.js create mode 100644 docs/search/functions_d.html create mode 100644 docs/search/functions_d.js create mode 100644 docs/search/functions_e.html create mode 100644 docs/search/functions_e.js create mode 100644 docs/search/functions_f.html create mode 100644 docs/search/functions_f.js create mode 100644 docs/search/mag_sel.png create mode 100644 docs/search/namespaces_0.html create mode 100644 docs/search/namespaces_0.js create mode 100644 docs/search/nomatches.html create mode 100644 docs/search/pages_0.html create mode 100644 docs/search/pages_0.js create mode 100644 docs/search/pages_1.html create mode 100644 docs/search/pages_1.js create mode 100644 docs/search/search.css create mode 100644 docs/search/search.js create mode 100644 docs/search/search_l.png create mode 100644 docs/search/search_m.png create mode 100644 docs/search/search_r.png create mode 100644 docs/search/typedefs_0.html create mode 100644 docs/search/typedefs_0.js create mode 100644 docs/search/typedefs_1.html create mode 100644 docs/search/typedefs_1.js create mode 100644 docs/search/typedefs_2.html create mode 100644 docs/search/typedefs_2.js create mode 100644 docs/search/typedefs_3.html create mode 100644 docs/search/typedefs_3.js create mode 100644 docs/search/typedefs_4.html create mode 100644 docs/search/typedefs_4.js create mode 100644 docs/search/typedefs_5.html create mode 100644 docs/search/typedefs_5.js create mode 100644 docs/search/variables_0.html create mode 100644 docs/search/variables_0.js create mode 100644 docs/search/variables_1.html create mode 100644 docs/search/variables_1.js create mode 100644 docs/search/variables_10.html create mode 100644 docs/search/variables_10.js create mode 100644 docs/search/variables_11.html create mode 100644 docs/search/variables_11.js create mode 100644 docs/search/variables_12.html create mode 100644 docs/search/variables_12.js create mode 100644 docs/search/variables_2.html create mode 100644 docs/search/variables_2.js create mode 100644 docs/search/variables_3.html create mode 100644 docs/search/variables_3.js create mode 100644 docs/search/variables_4.html create mode 100644 docs/search/variables_4.js create mode 100644 docs/search/variables_5.html create mode 100644 docs/search/variables_5.js create mode 100644 docs/search/variables_6.html create mode 100644 docs/search/variables_6.js create mode 100644 docs/search/variables_7.html create mode 100644 docs/search/variables_7.js create mode 100644 docs/search/variables_8.html create mode 100644 docs/search/variables_8.js create mode 100644 docs/search/variables_9.html create mode 100644 docs/search/variables_9.js create mode 100644 docs/search/variables_a.html create mode 100644 docs/search/variables_a.js create mode 100644 docs/search/variables_b.html create mode 100644 docs/search/variables_b.js create mode 100644 docs/search/variables_c.html create mode 100644 docs/search/variables_c.js create mode 100644 docs/search/variables_d.html create mode 100644 docs/search/variables_d.js create mode 100644 docs/search/variables_e.html create mode 100644 docs/search/variables_e.js create mode 100644 docs/search/variables_f.html create mode 100644 docs/search/variables_f.js create mode 100644 docs/structPartitionWriteResult-members.html create mode 100644 docs/structPartitionWriteResult.html create mode 100644 docs/structPartitionWriteResult.js create mode 100644 docs/structSpmvEqual-members.html create mode 100644 docs/structSpmvEqual.html create mode 100644 docs/structSpmvEqual.js create mode 100644 docs/structSpmvHash-members.html create mode 100644 docs/structSpmvHash.html create mode 100644 docs/structSpmvHash.js create mode 100644 docs/structspark_1_1runtime_1_1GeneratedImplementation-members.html create mode 100644 docs/structspark_1_1runtime_1_1GeneratedImplementation.html create mode 100644 docs/structspark_1_1runtime_1_1GeneratedImplementation.js create mode 100644 docs/structspark_1_1runtime_1_1GeneratedImplementation.png create mode 100644 docs/structspark_1_1spmv_1_1Partition-members.html create mode 100644 docs/structspark_1_1spmv_1_1Partition.html create mode 100644 docs/structspark_1_1spmv_1_1Partition.js create mode 100644 docs/structspark_1_1spmv_1_1indptr__value-members.html create mode 100644 docs/structspark_1_1spmv_1_1indptr__value.html create mode 100644 docs/structspark_1_1spmv_1_1indptr__value.js create mode 100644 docs/structspark_1_1utils_1_1Range-members.html create mode 100644 docs/structspark_1_1utils_1_1Range.html create mode 100644 docs/structspark_1_1utils_1_1Range.js create mode 100644 docs/structure_8md.html create mode 100644 docs/sync_off.png create mode 100644 docs/sync_on.png create mode 100644 docs/tab_a.png create mode 100644 docs/tab_b.png create mode 100644 docs/tab_h.png create mode 100644 docs/tab_s.png create mode 100644 docs/tabs.css create mode 100644 docs/user__guide_8md.html diff --git a/docs/BiConjugateGradient_8cpp.html b/docs/BiConjugateGradient_8cpp.html new file mode 100644 index 0000000..70afd05 --- /dev/null +++ b/docs/BiConjugateGradient_8cpp.html @@ -0,0 +1,236 @@ + + + + + + +Spark: src/bicg/src/BiConjugateGradient.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
BiConjugateGradient.cpp File Reference
+
+
+
#include <Spark/SparseLinearSolvers.hpp>
+#include <Spark/Spmv.hpp>
+#include <Spark/SimpleSpmv.hpp>
+#include <iostream>
+#include <stdexcept>
+
+ + + +

+Typedefs

using Vd = Eigen::VectorXd
 
+ + + + + + + +

+Functions

Vd cpuReferenceUnprecon (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd cpuReferencePrecon (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd dfeImplUnprecon (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
+

Typedef Documentation

+ +
+
+ + + + +
using Vd = Eigen::VectorXd
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd cpuReferencePrecon (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Vd cpuReferenceUnprecon (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd dfeImplUnprecon (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+
+
+ + + + diff --git a/docs/BiConjugateGradient_8cpp.js b/docs/BiConjugateGradient_8cpp.js new file mode 100644 index 0000000..768a34c --- /dev/null +++ b/docs/BiConjugateGradient_8cpp.js @@ -0,0 +1,7 @@ +var BiConjugateGradient_8cpp = +[ + [ "Vd", "BiConjugateGradient_8cpp.html#a61f485fb4164897d20404192b8a20927", null ], + [ "cpuReferencePrecon", "BiConjugateGradient_8cpp.html#ab1ada1c516bfa9599e8e43b4b9666a10", null ], + [ "cpuReferenceUnprecon", "BiConjugateGradient_8cpp.html#aa6ded0f7e5d8161252912d0eb17f27c0", null ], + [ "dfeImplUnprecon", "BiConjugateGradient_8cpp.html#ac3a55e37d1559a049fcef0af776feb3b", null ] +]; \ No newline at end of file diff --git a/docs/ConjugateGradient_8cpp.html b/docs/ConjugateGradient_8cpp.html new file mode 100644 index 0000000..a23244a --- /dev/null +++ b/docs/ConjugateGradient_8cpp.html @@ -0,0 +1,125 @@ + + + + + + +Spark: src/cg/src/ConjugateGradient.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
ConjugateGradient.cpp File Reference
+
+
+
#include <Eigen/Sparse>
+#include <Spark/SparseLinearSolvers.hpp>
+#include <Maxfiles.h>
+#include <iostream>
+
+
+ + + + diff --git a/docs/Converters_8hpp.html b/docs/Converters_8hpp.html new file mode 100644 index 0000000..f35738f --- /dev/null +++ b/docs/Converters_8hpp.html @@ -0,0 +1,153 @@ + + + + + + +Spark: include/Spark/Converters.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Converters.hpp File Reference
+
+
+
#include <stdexcept>
+#include <memory>
+#include <Spark/SparseMatrix.hpp>
+#include <Eigen/Sparse>
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

 spark
 
 spark::converters
 
+ + + +

+Typedefs

using spark::converters::EigenSparseMatrix = std::unique_ptr< Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >>
 
+ + + + + + + +

+Functions

EigenSparseMatrix spark::converters::tripletToEigen (spark::sparse::SparkCooMatrix< double > mat)
 
Eigen::VectorXd spark::converters::stdvectorToEigen (std::vector< double > v)
 
std::vector< double > spark::converters::eigenVectorToStdVector (const Eigen::VectorXd &v)
 
+
+
+ + + + diff --git a/docs/Converters_8hpp.js b/docs/Converters_8hpp.js new file mode 100644 index 0000000..e2d140e --- /dev/null +++ b/docs/Converters_8hpp.js @@ -0,0 +1,7 @@ +var Converters_8hpp = +[ + [ "EigenSparseMatrix", "Converters_8hpp.html#a724347922bbc7e56429febfd000be78b", null ], + [ "eigenVectorToStdVector", "Converters_8hpp.html#a78a095076b8d4daa406d3dc9bca7504c", null ], + [ "stdvectorToEigen", "Converters_8hpp.html#aa6e224b8b4ce34ca7a1683910b0dd9c2", null ], + [ "tripletToEigen", "Converters_8hpp.html#ad8ff5498781446bc5c51cd52922f5d72", null ] +]; \ No newline at end of file diff --git a/docs/Converters_8hpp_source.html b/docs/Converters_8hpp_source.html new file mode 100644 index 0000000..ec9f932 --- /dev/null +++ b/docs/Converters_8hpp_source.html @@ -0,0 +1,179 @@ + + + + + + +Spark: include/Spark/Converters.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Converters.hpp
+
+
+Go to the documentation of this file.
1 #ifndef CONVERTERS_HPP_QNX3RWUJ
+
2 #define CONVERTERS_HPP_QNX3RWUJ
+
3 
+
4 #include <stdexcept>
+
5 #include <memory>
+
6 
+
7 #include <Spark/SparseMatrix.hpp>
+
8 #include <Eigen/Sparse>
+
9 #include <Spark/SparseMatrix.hpp>
+
10 
+
11 namespace spark {
+
12  namespace converters {
+
13 
+
14  using EigenSparseMatrix = std::unique_ptr<Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>>;
+
15 
+
16  // convert a Spark COO matrix to an Eigen Sparse Matrix
+ +
18  auto coo = mat.data;
+
19  EigenSparseMatrix m(new Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>(mat.n, mat.m));
+
20  std::vector<Eigen::Triplet<double>> trips;
+
21  for (size_t i = 0; i < coo.size(); i++)
+
22  trips.push_back(
+
23  Eigen::Triplet<double>(
+
24  std::get<0>(coo[i]),
+
25  std::get<1>(coo[i]),
+
26  std::get<2>(coo[i])));
+
27  m->setFromTriplets(trips.begin(), trips.end());
+
28  return m;
+
29  }
+
30 
+
31  inline Eigen::VectorXd stdvectorToEigen(std::vector<double> v) {
+
32  Eigen::VectorXd m(v.size());
+
33  for (size_t i = 0; i < v.size(); i++)
+
34  m[i] = v[i];
+
35  return m;
+
36  }
+
37 
+
38  inline std::vector<double> eigenVectorToStdVector(const Eigen::VectorXd& v) {
+
39  std::vector<double> m(v.size());
+
40  for (int i = 0; i < v.size(); i++)
+
41  m[i] = v[i];
+
42  return m;
+
43  }
+
44 
+
45  }
+
46 }
+
47 
+
48 
+
49 #endif /* end of include guard: CONVERTERS_HPP_QNX3RWUJ */
+
std::vector< CoordType > data
Definition: SparseMatrix.hpp:20
+ +
EigenSparseMatrix tripletToEigen(spark::sparse::SparkCooMatrix< double > mat)
Definition: Converters.hpp:17
+
Definition: SparseMatrix.hpp:14
+
std::unique_ptr< Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >> EigenSparseMatrix
Definition: Converters.hpp:14
+
int n
Definition: SparseMatrix.hpp:19
+
std::vector< double > eigenVectorToStdVector(const Eigen::VectorXd &v)
Definition: Converters.hpp:38
+
Eigen::VectorXd stdvectorToEigen(std::vector< double > v)
Definition: Converters.hpp:31
+
int m
Definition: SparseMatrix.hpp:19
+
+
+ + + + diff --git a/docs/Dse_8cpp.html b/docs/Dse_8cpp.html new file mode 100644 index 0000000..2f23864 --- /dev/null +++ b/docs/Dse_8cpp.html @@ -0,0 +1,208 @@ + + + + + + +Spark: src/dse/Dse.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Dse.cpp File Reference
+
+
+
#include <iostream>
+#include <Spark/Dse.hpp>
+#include <unordered_map>
+#include <Spark/Converters.hpp>
+
+ + + + + +

+Classes

struct  SpmvHash
 
struct  SpmvEqual
 
+ + + + + +

+Functions

std::shared_ptr< SpmvArchitecture > better (std::shared_ptr< SpmvArchitecture > a1, std::shared_ptr< SpmvArchitecture > a2)
 
std::shared_ptr< SpmvArchitecture > dse_run (std::string basename, SpmvArchitectureSpace *af, const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat, const DseParameters &params)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::shared_ptr<SpmvArchitecture> better (std::shared_ptr< SpmvArchitecture > a1,
std::shared_ptr< SpmvArchitecture > a2 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
std::shared_ptr<SpmvArchitecture> dse_run (std::string basename,
SpmvArchitectureSpace * af,
const Eigen::SparseMatrix< double, Eigen::RowMajor > & mat,
const DseParameters & params 
)
+
+ +
+
+
+
+ + + + diff --git a/docs/Dse_8cpp.js b/docs/Dse_8cpp.js new file mode 100644 index 0000000..5bffc64 --- /dev/null +++ b/docs/Dse_8cpp.js @@ -0,0 +1,7 @@ +var Dse_8cpp = +[ + [ "SpmvHash", "structSpmvHash.html", "structSpmvHash" ], + [ "SpmvEqual", "structSpmvEqual.html", "structSpmvEqual" ], + [ "better", "Dse_8cpp.html#ac63ef9b091049d2a25c5941b73512252", null ], + [ "dse_run", "Dse_8cpp.html#a50c99f119df5ba972bbebeef76239c2e", null ] +]; \ No newline at end of file diff --git a/docs/Dse_8hpp.html b/docs/Dse_8hpp.html new file mode 100644 index 0000000..3ee4263 --- /dev/null +++ b/docs/Dse_8hpp.html @@ -0,0 +1,161 @@ + + + + + + +Spark: include/Spark/Dse.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Dse.hpp File Reference
+
+
+
#include <memory>
+#include <Spark/Spmv.hpp>
+#include <Spark/SimpleSpmv.hpp>
+#include <Spark/Utils.hpp>
+#include <Spark/Io.hpp>
+#include <chrono>
+#include <stdexcept>
+#include <sstream>
+
+

Go to the source code of this file.

+ + + + + + + + + + +

+Classes

class  spark::dse::Benchmark
 
class  spark::dse::DseParameters
 
class  spark::dse::DseResult
 
class  spark::dse::SparkDse
 
+ + + + + +

+Namespaces

 spark
 
 spark::dse
 
+ + + + + +

+Functions

std::ostream & spark::dse::operator<< (std::ostream &s, Benchmark &b)
 
std::ostream & spark::dse::operator<< (std::ostream &s, DseParameters &d)
 
+
+
+ + + + diff --git a/docs/Dse_8hpp.js b/docs/Dse_8hpp.js new file mode 100644 index 0000000..da327a9 --- /dev/null +++ b/docs/Dse_8hpp.js @@ -0,0 +1,9 @@ +var Dse_8hpp = +[ + [ "Benchmark", "classspark_1_1dse_1_1Benchmark.html", "classspark_1_1dse_1_1Benchmark" ], + [ "DseParameters", "classspark_1_1dse_1_1DseParameters.html", "classspark_1_1dse_1_1DseParameters" ], + [ "DseResult", "classspark_1_1dse_1_1DseResult.html", "classspark_1_1dse_1_1DseResult" ], + [ "SparkDse", "classspark_1_1dse_1_1SparkDse.html", "classspark_1_1dse_1_1SparkDse" ], + [ "operator<<", "Dse_8hpp.html#a2cba03adcd7e6708f31a01eb270ffeb9", null ], + [ "operator<<", "Dse_8hpp.html#ae3baaf24604e126136d1d8b583fc389d", null ] +]; \ No newline at end of file diff --git a/docs/Dse_8hpp_source.html b/docs/Dse_8hpp_source.html new file mode 100644 index 0000000..4a5841e --- /dev/null +++ b/docs/Dse_8hpp_source.html @@ -0,0 +1,233 @@ + + + + + + +Spark: include/Spark/Dse.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Dse.hpp
+
+
+Go to the documentation of this file.
1 #ifndef DSE_H
+
2 #define DSE_H
+
3 
+
4 #include <memory>
+
5 #include <Spark/Spmv.hpp>
+
6 #include <Spark/SimpleSpmv.hpp>
+
7 #include <Spark/Utils.hpp>
+
8 #include <Spark/Io.hpp>
+
9 #include <chrono>
+
10 #include <stdexcept>
+
11 #include <sstream>
+
12 
+
13 namespace spark {
+
14  namespace dse {
+
15 
+
16  // a benchmark to use for the DSE
+
17  class Benchmark {
+
18  std::vector<std::string> paths;
+
19  public:
+
20  std::string get_matrix_path(int id) const {
+
21  if (id < paths.size())
+
22  return paths[id];
+
23  std::stringstream ss;
+
24  ss << "Benchmark::Index out of range " << id;
+
25  throw std::invalid_argument(ss.str());
+
26  }
+
27 
+
28  void add_matrix_path(std::string path) {
+
29  paths.push_back(path);
+
30  }
+
31 
+
32  int get_benchmark_size() const {
+
33  return paths.size();
+
34  }
+
35  };
+
36 
+
37  inline std::ostream& operator<<(std::ostream& s, Benchmark& b) {
+
38  s << "Benchmark(" << std::endl;
+
39  for (int i = 0; i < b.get_benchmark_size(); i++)
+
40  s << " " << b.get_matrix_path(i) << std::endl;
+
41  s << ")" << std::endl;
+
42  return s;
+
43  }
+
44 
+
45  // the parameters and ranges to use for DSE
+
46  class DseParameters {
+
47  public:
+
48  bool gflopsOnly;
+ + + +
52  };
+
53 
+
54  inline std::ostream& operator<<(std::ostream& s, DseParameters& d) {
+
55  s << "DseParams(" << std::endl;
+
56  s << " numPipes = " << d.numPipesRange << std::endl;
+
57  s << " inputWidth = " << d.inputWidthRange << std::endl;
+
58  s << " cacheSize = " << d.cacheSizeRange << std::endl;
+
59  s << ")" << std::endl;
+
60  return s;
+
61  }
+
62 
+
63  class DseResult {
+
64  public:
+
65  std::shared_ptr<spark::spmv::SpmvArchitecture> bestArchitecture;
+
66  std::vector<std::string> matrices;
+
67 
+
68  DseResult(std::string path, std::shared_ptr<spark::spmv::SpmvArchitecture> arch) {
+
69  matrices.push_back(path);
+
70  bestArchitecture = arch;
+
71  }
+
72  DseResult(std::shared_ptr<spark::spmv::SpmvArchitecture> arch) {
+
73  bestArchitecture = arch;
+
74  }
+
75  };
+
76 
+
77  class SparkDse {
+
78  public:
+
79  SparkDse() {}
+
80  // returns the best architecture
+
81  std::vector<DseResult> run (
+
82  const Benchmark& benchmark,
+
83  const DseParameters& dseParams);
+
84  };
+
85  }
+
86 }
+
87 
+
88 #endif /* end of include guard: DSE_H */
+
spark::utils::Range inputWidthRange
Definition: Dse.hpp:50
+
std::vector< std::string > paths
Definition: Dse.hpp:18
+
std::vector< DseResult > run(const Benchmark &benchmark, const DseParameters &dseParams)
Definition: Dse.cpp:87
+
std::shared_ptr< spark::spmv::SpmvArchitecture > bestArchitecture
Definition: Dse.hpp:65
+
Definition: Dse.hpp:63
+
spark::utils::Range cacheSizeRange
Definition: Dse.hpp:51
+
std::string get_matrix_path(int id) const
Definition: Dse.hpp:20
+
int get_benchmark_size() const
Definition: Dse.hpp:32
+ +
Definition: Dse.hpp:77
+
Definition: Dse.hpp:17
+
void add_matrix_path(std::string path)
Definition: Dse.hpp:28
+
std::ostream & operator<<(std::ostream &s, Benchmark &b)
Definition: Dse.hpp:37
+
DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
Definition: Dse.hpp:68
+ + +
Definition: Utils.hpp:13
+
std::vector< std::string > matrices
Definition: Dse.hpp:66
+
bool gflopsOnly
Definition: Dse.hpp:48
+
SparkDse()
Definition: Dse.hpp:79
+
DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
Definition: Dse.hpp:72
+ +
Definition: Dse.hpp:46
+
spark::utils::Range numPipesRange
Definition: Dse.hpp:49
+
+
+ + + + diff --git a/docs/Execution_8hpp.html b/docs/Execution_8hpp.html new file mode 100644 index 0000000..aac55c8 --- /dev/null +++ b/docs/Execution_8hpp.html @@ -0,0 +1,141 @@ + + + + + + +Spark: include/Spark/Execution.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Execution.hpp File Reference
+
+
+
#include <string>
+#include <vector>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  spark::execution::SharedLibLoader
 
+ + + + + +

+Namespaces

 spark
 
 spark::execution
 
+
+
+ + + + diff --git a/docs/Execution_8hpp_source.html b/docs/Execution_8hpp_source.html new file mode 100644 index 0000000..30ae6f2 --- /dev/null +++ b/docs/Execution_8hpp_source.html @@ -0,0 +1,156 @@ + + + + + + +Spark: include/Spark/Execution.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Execution.hpp
+
+
+Go to the documentation of this file.
1 #ifndef EXECUTION_H
+
2 
+
3 #define EXECUTION_H
+
4 
+
5 #include <string>
+
6 #include <vector>
+
7 
+
8 namespace spark {
+
9  namespace execution {
+
10  // loads and manages shared libraries at runtime
+ +
12  std::string libPath;
+
13  // a handle to the currently loaded library, or NULL if no library is
+
14  // loaded.
+
15  void* handle;
+
16  public:
+
17  SharedLibLoader(std::string _libDirectoryPath);
+
18 
+
19  std::vector<std::string> available_libraries();
+
20 
+
21  bool load_library(std::string path);
+
22 
+
23  bool unload_library();
+
24  };
+
25  }
+
26 }
+
27 
+
28 #endif /* end of include guard: EXECUTION_H */
+
Definition: Execution.hpp:11
+
bool load_library(std::string path)
Definition: SharedLibLoader.cpp:17
+
std::vector< std::string > available_libraries()
Definition: SharedLibLoader.cpp:13
+
bool unload_library()
Definition: SharedLibLoader.cpp:36
+
std::string libPath
Definition: Execution.hpp:12
+
SharedLibLoader(std::string _libDirectoryPath)
Definition: SharedLibLoader.cpp:10
+
void * handle
Definition: Execution.hpp:15
+
+
+ + + + diff --git a/docs/FileUtils_8hpp.html b/docs/FileUtils_8hpp.html new file mode 100644 index 0000000..3c822fa --- /dev/null +++ b/docs/FileUtils_8hpp.html @@ -0,0 +1,143 @@ + + + + + + +Spark: include/Spark/FileUtils.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
FileUtils.hpp File Reference
+
+
+
#include <vector>
+#include <string>
+#include <boost/filesystem.hpp>
+#include <sstream>
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

 spark
 
 spark::file_utils
 
+ + + +

+Functions

std::vector< std::string > spark::file_utils::child_files (std::string dirPath)
 
+
+
+ + + + diff --git a/docs/FileUtils_8hpp.js b/docs/FileUtils_8hpp.js new file mode 100644 index 0000000..1e8bc8c --- /dev/null +++ b/docs/FileUtils_8hpp.js @@ -0,0 +1,4 @@ +var FileUtils_8hpp = +[ + [ "child_files", "FileUtils_8hpp.html#a4725425d3954eff72c12d25a8b52d131", null ] +]; \ No newline at end of file diff --git a/docs/FileUtils_8hpp_source.html b/docs/FileUtils_8hpp_source.html new file mode 100644 index 0000000..5cb5565 --- /dev/null +++ b/docs/FileUtils_8hpp_source.html @@ -0,0 +1,153 @@ + + + + + + +Spark: include/Spark/FileUtils.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
FileUtils.hpp
+
+
+Go to the documentation of this file.
1 #ifndef FILEUTILS_H
+
2 
+
3 #define FILEUTILS_H
+
4 
+
5 #include <vector>
+
6 #include <string>
+
7 #include <boost/filesystem.hpp>
+
8 #include <sstream>
+
9 
+
10 namespace spark {
+
11  namespace file_utils {
+
12  std::vector<std::string> child_files(std::string dirPath) {
+
13  namespace bfs = boost::filesystem;
+
14  bfs::path dirp{dirPath};
+
15  if (!bfs::is_directory(dirp)) {
+
16  std::stringstream ss;
+
17  ss << "Error: '" << dirPath << "' not a directory" << std::endl;
+
18  throw std::invalid_argument(ss.str());
+
19  }
+
20 
+
21  std::vector<std::string> paths;
+
22  for (bfs::directory_iterator end, it = bfs::directory_iterator(dirp); it != end; it++) {
+
23  paths.push_back(it->path().string());
+
24  }
+
25  return paths;
+
26  }
+
27  }
+
28 }
+
29 
+
30 
+
31 #endif /* end of include guard: FILEUTILS_H */
+
std::vector< std::string > child_files(std::string dirPath)
Definition: FileUtils.hpp:12
+
+
+ + + + diff --git a/docs/GeneratedImplSupport_8hpp.html b/docs/GeneratedImplSupport_8hpp.html new file mode 100644 index 0000000..db86cff --- /dev/null +++ b/docs/GeneratedImplSupport_8hpp.html @@ -0,0 +1,151 @@ + + + + + + +Spark: include/Spark/GeneratedImplSupport.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
GeneratedImplSupport.hpp File Reference
+
+
+
#include <vector>
+#include <cstdint>
+#include <iostream>
+#include <climits>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + +

+Classes

struct  spark::runtime::GeneratedImplementation
 
class  spark::runtime::GeneratedSpmvImplementation
 
class  spark::runtime::GeneratedSpmvImplementationMock
 
class  spark::runtime::ImplementationLoader
 
class  spark::runtime::SpmvImplementationLoader
 
+ + + + + +

+Namespaces

 spark
 
 spark::runtime
 
+
+
+ + + + diff --git a/docs/GeneratedImplSupport_8hpp_source.html b/docs/GeneratedImplSupport_8hpp_source.html new file mode 100644 index 0000000..80dac35 --- /dev/null +++ b/docs/GeneratedImplSupport_8hpp_source.html @@ -0,0 +1,417 @@ + + + + + + +Spark: include/Spark/GeneratedImplSupport.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
GeneratedImplSupport.hpp
+
+
+Go to the documentation of this file.
1 #ifndef GENERATEDIMPLSUPPORT_H
+
2 
+
3 #define GENERATEDIMPLSUPPORT_H
+
4 
+
5 #include <vector>
+
6 #include <cstdint>
+
7 #include <iostream>
+
8 #include <climits>
+
9 
+
10 namespace spark {
+
11  namespace runtime {
+
12 
+
13  // XXX Hell no...
+
14 
+
15  // base class for all generated implementations
+ + +
18  }
+
19  };
+
20 
+ +
22 
+
23  /* type of function pointers for Spmv_run/dramWrite/dramRead function */
+
24  using SpmvFunctionPtr = void (*)(
+
25  int64_t, int64_t, int64_t,
+
26  const int64_t*, const int32_t*, const int64_t*,
+
27  const int32_t*, const int32_t*, const int64_t*,
+
28  const int32_t*, const int32_t*, const int64_t*);
+
29 
+
30  using SpmvDramWriteFunctionPtr = void (*)(
+
31  int64_t param_size_bytes,
+
32  int64_t param_start_bytes,
+
33  const uint8_t *instream_fromcpu);
+
34 
+
35  using SpmvDramReadFunctionPtr = void (*)(
+
36  int64_t param_size_bytes,
+
37  int64_t param_start_bytes,
+
38  uint8_t *instream_fromcpu);
+
39 
+
40  protected:
+ + + +
44 
+ +
46 
+
47  public:
+
48 
+ +
50  SpmvFunctionPtr _fptr,
+
51  SpmvDramWriteFunctionPtr _dramWrite,
+
52  SpmvDramReadFunctionPtr _dramRead,
+
53  int _max_rows,
+
54  int _num_pipes,
+
55  int _cache_size,
+
56  int _input_width,
+
57  int _dram_reduction_enabled
+
58  ) :
+
59  runSpmv(_fptr),
+
60  dramWrite(_dramWrite),
+
61  dramRead(_dramRead),
+
62  max_rows(_max_rows),
+
63  num_pipes(_num_pipes),
+
64  cache_size(_cache_size),
+
65  input_width(_input_width),
+
66  dram_reduction_enabled(_dram_reduction_enabled)
+
67  {}
+
68 
+ +
70  }
+
71 
+
72  int maxRows() {
+
73  return max_rows;
+
74  }
+
75 
+
76  int numPipes() {
+
77  return num_pipes;
+
78  }
+
79 
+
80  int cacheSize() {
+
81  return cache_size;
+
82  }
+
83 
+
84  int inputWidth() {
+
85  return input_width;
+
86  }
+
87 
+ +
89  return dram_reduction_enabled == 1;
+
90  }
+
91 
+
92  virtual void Spmv(
+
93  int64_t param_nIterations,
+
94  int64_t param_nPartitions,
+
95  int64_t param_vectorLoadCycles,
+
96  const int64_t *param_colPtrStartAddresses,
+
97  const int32_t *param_colptrSizes,
+
98  const int64_t *param_indptrValuesAddresses,
+
99  const int32_t *param_indptrValuesSizes,
+
100  const int32_t *param_nrows,
+
101  const int64_t *param_outStartAddresses,
+
102  const int32_t *param_reductionCycles,
+
103  const int32_t *param_totalCycles,
+
104  const int64_t *param_vStartAddresses) {
+
105 
+
106  std::cout << "Running on architecture with " << std::endl;
+
107  std::cout << " maxRows = " << max_rows << std::endl;
+
108 
+
109  (*runSpmv)(
+
110  param_nIterations,
+
111  param_nPartitions,
+
112  param_vectorLoadCycles,
+
113  param_colPtrStartAddresses,
+
114  param_colptrSizes,
+
115  param_indptrValuesAddresses,
+
116  param_indptrValuesSizes,
+
117  param_nrows,
+
118  param_outStartAddresses,
+
119  param_reductionCycles,
+
120  param_totalCycles,
+
121  param_vStartAddresses);
+
122  }
+
123 
+
124  virtual void write(
+
125  int64_t param_size_bytes,
+
126  int64_t param_start_bytes,
+
127  const uint8_t *instream_fromcpu) {
+
128  (*dramWrite)(
+
129  param_size_bytes,
+
130  param_start_bytes,
+
131  instream_fromcpu);
+
132  }
+
133 
+
134 
+
135  virtual void read(
+
136  int64_t param_size_bytes,
+
137  int64_t param_start_bytes,
+
138  uint8_t *outstream_tocpu) {
+
139  (*dramRead)(
+
140  param_size_bytes,
+
141  param_start_bytes,
+
142  outstream_tocpu);
+
143  }
+
144 
+
145  };
+
146 
+ +
148 
+
149  public:
+
150 
+ +
152  int _max_rows,
+
153  int _num_pipes,
+
154  int _cache_size,
+
155  int _input_width,
+
156  int _dram_reduction_enabled
+
157  ) :
+ +
159  nullptr, nullptr, nullptr,
+
160  _max_rows, _num_pipes, _cache_size,
+
161  _input_width, _dram_reduction_enabled) {}
+
162 
+ +
164  }
+
165 
+
166  int maxRows() {
+
167  return max_rows;
+
168  }
+
169 
+
170  int numPipes() {
+
171  return num_pipes;
+
172  }
+
173 
+
174  int cacheSize() {
+
175  return cache_size;
+
176  }
+
177 
+
178  int inputWidth() {
+
179  return input_width;
+
180  }
+
181 
+ +
183  return dram_reduction_enabled == 1;
+
184  }
+
185 
+
186  void Spmv(
+
187  int64_t param_nIterations,
+
188  int64_t param_nPartitions,
+
189  int64_t param_vectorLoadCycles,
+
190  const int64_t *param_colPtrStartAddresses,
+
191  const int32_t *param_colptrSizes,
+
192  const int64_t *param_indptrValuesAddresses,
+
193  const int32_t *param_indptrValuesSizes,
+
194  const int32_t *param_nrows,
+
195  const int64_t *param_outStartAddresses,
+
196  const int32_t *param_reductionCycles,
+
197  const int32_t *param_totalCycles,
+
198  const int64_t *param_vStartAddresses) {
+
199  std::cout << "Running mock SPMV implemetation" << std::endl;
+
200  }
+
201 
+
202  void write(
+
203  int64_t param_size_bytes,
+
204  int64_t param_start_bytes,
+
205  const uint8_t *instream_fromcpu) {}
+
206 
+
207  void read(
+
208  int64_t param_size_bytes,
+
209  int64_t param_start_bytes,
+
210  uint8_t *outstream_tocpu) {}
+
211 
+
212  };
+
213 
+ +
220  protected:
+
221  std::vector<GeneratedImplementation*> impls;
+
222  public:
+ +
224 
+ +
226  for (const auto& s : impls) {
+
227  delete s;
+
228  }
+
229  }
+
230  };
+
231 
+
232  // provide interface for SpmvImplementation loader
+ +
234  public:
+ +
236 
+ +
242  GeneratedSpmvImplementation* bestArch = nullptr;
+
243  for (const auto& a : this->impls) {
+ +
245  if (simpl->maxRows() > maxRows &&
+
246  (!bestArch || simpl->maxRows() < bestArch->maxRows())) {
+
247  bestArch = simpl;
+
248  }
+
249  }
+
250  return bestArch;
+
251  }
+
252 
+ +
254  return static_cast<GeneratedSpmvImplementation*>(this->impls.at(id));
+
255  }
+
256 
+
257  };
+
258 
+
259  }
+
260 }
+
261 
+
262 #endif /* end of include guard: GENERATEDIMPLSUPPORT_H */
+
const int input_width
Definition: GeneratedImplSupport.hpp:45
+
const int num_pipes
Definition: GeneratedImplSupport.hpp:45
+
Definition: GeneratedImplSupport.hpp:21
+
int cacheSize()
Definition: GeneratedImplSupport.hpp:80
+
virtual void read(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
Definition: GeneratedImplSupport.hpp:135
+
bool getDramReductionEnabled()
Definition: GeneratedImplSupport.hpp:88
+
virtual ~GeneratedImplementation()
Definition: GeneratedImplSupport.hpp:17
+
const int dram_reduction_enabled
Definition: GeneratedImplSupport.hpp:45
+
virtual void Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
Definition: GeneratedImplSupport.hpp:92
+
const int max_rows
Definition: GeneratedImplSupport.hpp:45
+
std::vector< GeneratedImplementation * > impls
Definition: GeneratedImplSupport.hpp:221
+
int maxRows()
Definition: GeneratedImplSupport.hpp:72
+
void write(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
Definition: GeneratedImplSupport.hpp:202
+
int maxRows()
Definition: GeneratedImplSupport.hpp:166
+
const SpmvFunctionPtr runSpmv
Definition: GeneratedImplSupport.hpp:41
+
void Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
Definition: GeneratedImplSupport.hpp:186
+
Definition: GeneratedImplSupport.hpp:219
+
int numPipes()
Definition: GeneratedImplSupport.hpp:76
+
int inputWidth()
Definition: GeneratedImplSupport.hpp:178
+
GeneratedSpmvImplementation * architectureWithParams(int maxRows)
Definition: GeneratedImplSupport.hpp:241
+
void(*)(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu) SpmvDramWriteFunctionPtr
Definition: GeneratedImplSupport.hpp:33
+
virtual ~GeneratedSpmvImplementation()
Definition: GeneratedImplSupport.hpp:69
+
Definition: GeneratedImplSupport.hpp:16
+
void read(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
Definition: GeneratedImplSupport.hpp:207
+
GeneratedSpmvImplementation * architectureWithId(int id)
Definition: GeneratedImplSupport.hpp:253
+
void(*)(int64_t, int64_t, int64_t, const int64_t *, const int32_t *, const int64_t *, const int32_t *, const int32_t *, const int64_t *, const int32_t *, const int32_t *, const int64_t *) SpmvFunctionPtr
Definition: GeneratedImplSupport.hpp:28
+
int cacheSize()
Definition: GeneratedImplSupport.hpp:174
+ +
Definition: GeneratedImplSupport.hpp:147
+
GeneratedSpmvImplementation(SpmvFunctionPtr _fptr, SpmvDramWriteFunctionPtr _dramWrite, SpmvDramReadFunctionPtr _dramRead, int _max_rows, int _num_pipes, int _cache_size, int _input_width, int _dram_reduction_enabled)
Definition: GeneratedImplSupport.hpp:49
+
virtual ~GeneratedSpmvImplementationMock()
Definition: GeneratedImplSupport.hpp:163
+
GeneratedSpmvImplementationMock(int _max_rows, int _num_pipes, int _cache_size, int _input_width, int _dram_reduction_enabled)
Definition: GeneratedImplSupport.hpp:151
+
const SpmvDramWriteFunctionPtr dramWrite
Definition: GeneratedImplSupport.hpp:42
+
void(*)(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *instream_fromcpu) SpmvDramReadFunctionPtr
Definition: GeneratedImplSupport.hpp:38
+
virtual void write(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
Definition: GeneratedImplSupport.hpp:124
+
ImplementationLoader()
Definition: GeneratedImplSupport.hpp:223
+
Definition: GeneratedImplSupport.hpp:233
+
int inputWidth()
Definition: GeneratedImplSupport.hpp:84
+
bool getDramReductionEnabled()
Definition: GeneratedImplSupport.hpp:182
+
int numPipes()
Definition: GeneratedImplSupport.hpp:170
+
const int cache_size
Definition: GeneratedImplSupport.hpp:45
+
virtual ~ImplementationLoader()
Definition: GeneratedImplSupport.hpp:225
+
const SpmvDramReadFunctionPtr dramRead
Definition: GeneratedImplSupport.hpp:43
+
+
+ + + + diff --git a/docs/Io_8hpp.html b/docs/Io_8hpp.html new file mode 100644 index 0000000..0c4dbc7 --- /dev/null +++ b/docs/Io_8hpp.html @@ -0,0 +1,148 @@ + + + + + + +Spark: include/Spark/Io.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Io.hpp File Reference
+
+
+
#include <vector>
+#include <utility>
+#include <string>
+#include <sstream>
+#include <stdexcept>
+#include <fstream>
+#include <chrono>
+#include <Spark/SparseMatrix.hpp>
+#include <dfesnippets/Timing.hpp>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  spark::io::MmReader< value_type >
 
+ + + + + +

+Namespaces

 spark
 
 spark::io
 
+
+
+ + + + diff --git a/docs/Io_8hpp_source.html b/docs/Io_8hpp_source.html new file mode 100644 index 0000000..b404dda --- /dev/null +++ b/docs/Io_8hpp_source.html @@ -0,0 +1,319 @@ + + + + + + +Spark: include/Spark/Io.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Io.hpp
+
+
+Go to the documentation of this file.
1 #ifndef IO_HPP_QPBO8W0X
+
2 #define IO_HPP_QPBO8W0X
+
3 
+
4 #include <vector>
+
5 #include <utility>
+
6 #include <string>
+
7 #include <sstream>
+
8 #include <stdexcept>
+
9 #include <fstream>
+
10 #include <chrono>
+
11 
+
12 #include <Spark/SparseMatrix.hpp>
+
13 
+
14 #include <dfesnippets/Timing.hpp>
+
15 
+
16 namespace spark {
+
17  namespace io {
+
18 
+
19  template<typename value_type>
+
20  class MmReader {
+
21 
+
22  bool sparse = false, symmetric = false, matrix = false;
+
23  int ncols, nrows, nnzs = -1;
+
24 
+ + +
27 
+
28  typename SparseMatrix::CoordType mmparse(const std::string line) {
+
29  std::stringstream ss{line};
+
30  int x, y;
+
31  value_type val;
+
32  ss >> x >> y >> val;
+
33  return std::make_tuple(x - 1, y - 1, val);
+
34  }
+
35 
+
36  void parseHeader(std::string line) {
+
37  // is this dense / sparse ?
+
38  sparse = true;
+
39  if (line.find("coordinate") != std::string::npos) {
+
40  sparse = true;
+
41  } else if (line.find("array") != std::string::npos) {
+
42  sparse = false;
+
43  } else {
+
44  throw std::invalid_argument("Cannot parse header, requires either 'coordinate' or 'matrix' type");
+
45  }
+
46 
+
47  if (line[0] =='%' && line[1] == '%') {
+
48  if (line.find("matrix") != std::string::npos) {
+
49  symmetric = line.find("symmetric") != std::string::npos;
+
50  } else
+
51  throw std::invalid_argument("Unsupported file type: " + line);
+
52  }
+
53  }
+
54 
+
55  bool parseHeader(bool pprint=false) {
+
56  std::string line;
+
57  if (!getline(*f, line))
+
58  throw std::invalid_argument("File " + path + " is empty");
+
59 
+
60  parseHeader(line);
+
61 
+
62  // skip comments
+
63  while (getline(*f, line) && line[0] == '%')
+
64  continue;
+
65 
+
66  // read the dimensions
+
67  std::stringstream ss;
+
68  ss << line;
+
69  ss >> nrows >> ncols;
+
70  if (sparse)
+
71  ss >> nnzs;
+
72  matrix = ncols > 1;
+
73 
+
74  if (pprint) {
+
75  std::cout << "sparse: " << sparse << std::endl;
+
76  std::cout << "symmetric: " << symmetric << std::endl;
+
77  std::cout << "matrix: " << matrix << std::endl;
+
78  std::cout << "ncols: " << ncols << std::endl;
+
79  std::cout << "nrows: " << nrows << std::endl;
+
80  std::cout << "nnzs: " << nnzs << std::endl;
+
81  }
+
82  }
+
83 
+
84  std::ifstream* f;
+
85  std::string path;
+
86 
+
87  public:
+
88 
+
89  MmReader(std::string _path) : path(_path) {
+
90  f = new std::ifstream{_path};
+
91  if (!f->is_open())
+
92  throw std::invalid_argument("Could not open file path " + path);
+
93  }
+
94 
+
95  virtual ~MmReader() {
+
96  delete f;
+
97  }
+
98 
+
99  std::vector<double> readVector() {
+
100  parseHeader();
+
101  if (matrix)
+
102  throw std::invalid_argument("Object has > 1 columns ==> Use readMatrix");
+
103  if (sparse)
+
104  throw std::invalid_argument("Sparse vectors not supported");
+
105 
+
106  std::cout << "Reading vector" << std::endl;
+
107 
+
108  std::vector<std::tuple<int, double>> tpls;
+
109  double val;
+
110 
+
111  std::vector<double> res;
+
112  while (*f >> val )
+
113  res.push_back(val);
+
114 
+
115  //tpls.push_back(std::make_tuple(i, val));
+
116  //std::sort(tpls.begin(), tpls.end(),
+
117  //[](std::tuple<int, double> x, std::tuple<int, double> y) {
+
118  //return std::get<0>(x) < std::get<0>(y);
+
119  //}
+
120  //);
+
121 
+
122  //for (int i = 0; i < res.size(); i++)
+
123  //res[i] = std::get<1>(tpls[i]);
+
124 
+
125  return res;
+
126  }
+
127 
+
128  // Read the given file as a MM format description of a sparse matrix.
+
129  // Returns a COO representation of the matrix.
+
130  // NOTE:
+
131  // - the values will be adjusted to 0 based indexing
+
132  // - for symmetric matrices, the symmetric entries are also included
+
133  // - Triplets will be sorted in lexicographical order of their coordinates (row, column)
+ +
135  parseHeader();
+
136 
+
137  if (!matrix)
+
138  throw std::invalid_argument("Matrix has only one column ==> Use readVector");
+
139 
+
140  // skip comments
+
141  std::vector<CoordType> values;
+
142  std::string line;
+
143  for (int i = 0; i < nnzs; i++) {
+
144  if (!getline(*f, line))
+
145  throw std::invalid_argument("File has less than given nonzeros!");
+
146  auto tpl = mmparse(line);
+
147  values.push_back(tpl);
+
148  auto row = std::get<0>(tpl);
+
149  auto col = std::get<1>(tpl);
+
150  if (symmetric && row != col)
+
151  values.push_back(
+
152  std::make_tuple(
+
153  std::get<1>(tpl),
+
154  std::get<0>(tpl),
+
155  std::get<2>(tpl)));
+
156  }
+
157 
+
158  auto start = std::chrono::high_resolution_clock::now();
+
159  std::sort(values.begin(), values.end(),
+
160  [](CoordType x, CoordType y) {
+
161  return
+
162  std::get<0>(x) < std::get<0>(y) ||
+
163  (std::get<0>(x) == std::get<0>(y) && std::get<1>(x) < std::get<1>(y));
+
164  });
+
165  dfesnippets::timing::print_clock_diff("Sorting took: ", start);
+
166 
+ +
168  m.data = values;
+
169  return m;
+
170  }
+
171  };
+
172  }
+
173 }
+
174 
+
175 
+
176 
+
177 #endif /* end of include guard: IO_HPP_QPBO8W0X */
+
std::vector< CoordType > data
Definition: SparseMatrix.hpp:20
+
bool symmetric
Definition: Io.hpp:22
+ +
Definition: Io.hpp:20
+
Definition: SparseMatrix.hpp:14
+
std::vector< double > readVector()
Definition: Io.hpp:99
+
spark::sparse::SparkCooMatrix< value_type > mmreadMatrix(std::string path)
Definition: Io.hpp:134
+
std::tuple< int, int, value_type > CoordType
Definition: SparseMatrix.hpp:17
+
std::string path
Definition: Io.hpp:85
+
virtual ~MmReader()
Definition: Io.hpp:95
+
bool parseHeader(bool pprint=false)
Definition: Io.hpp:55
+
MmReader(std::string _path)
Definition: Io.hpp:89
+
void parseHeader(std::string line)
Definition: Io.hpp:36
+
bool sparse
Definition: Io.hpp:22
+
int nrows
Definition: Io.hpp:23
+
SparseMatrix::CoordType mmparse(const std::string line)
Definition: Io.hpp:28
+
typename SparseMatrix::CoordType CoordType
Definition: Io.hpp:26
+
std::ifstream * f
Definition: Io.hpp:84
+
int ncols
Definition: Io.hpp:23
+
int nnzs
Definition: Io.hpp:23
+
bool matrix
Definition: Io.hpp:22
+
+
+ + + + diff --git a/docs/Model_8hpp.html b/docs/Model_8hpp.html new file mode 100644 index 0000000..818c1de --- /dev/null +++ b/docs/Model_8hpp.html @@ -0,0 +1,142 @@ + + + + + + +Spark: include/Spark/Model.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Model.hpp File Reference
+
+
+
#include <sstream>
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  spark::model::LogicResourceUsage
 
class  spark::model::ImplementationParameters
 
+ + + + + +

+Namespaces

 spark
 
 spark::model
 
+
+
+ + + + diff --git a/docs/Model_8hpp_source.html b/docs/Model_8hpp_source.html new file mode 100644 index 0000000..ce21262 --- /dev/null +++ b/docs/Model_8hpp_source.html @@ -0,0 +1,227 @@ + + + + + + +Spark: include/Spark/Model.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Model.hpp
+
+
+Go to the documentation of this file.
1 #ifndef MODEL_H
+
2 #define MODEL_H
+
3 
+
4 #include <sstream>
+
5 
+
6 namespace spark {
+
7  namespace model {
+
8 
+ +
10  public:
+
11  int luts, ffs, brams, dsps;
+
12 
+
13  LogicResourceUsage() : luts(0), ffs(0), dsps(0), brams(0) {}
+
14 
+
15  LogicResourceUsage(int _l, int _f, int _b, int _d) :
+
16  luts(_l), ffs(_f), brams(_b), dsps(_d) {}
+
17 
+ +
19  luts = ru.luts;
+
20  ffs = ru.ffs;
+
21  dsps = ru.dsps;
+
22  brams = ru.brams;
+
23  }
+
24 
+
25  std::string to_string() {
+
26  std::stringstream s;
+
27  s << luts << " " << ffs << " " << " " << dsps << " " << brams;
+
28  return s.str();
+
29  }
+
30 
+ +
32  return LogicResourceUsage(luts + ru.luts, ffs + ru.ffs, brams + ru.brams, dsps + ru.dsps);
+
33  }
+
34 
+
35  const LogicResourceUsage operator*(int x) const {
+
36  return LogicResourceUsage(x * luts, x * ffs, x * brams, x * dsps);
+
37  }
+
38 
+
39  const LogicResourceUsage operator*(double x) const {
+
40  return LogicResourceUsage(x * (double)luts, x * (double)ffs, x * (double)brams, x * (double)dsps);
+
41  }
+
42 
+
43  const bool operator<(const LogicResourceUsage& ru) const {
+
44  return
+
45  luts < ru.luts &&
+
46  ffs < ru.ffs &&
+
47  dsps < ru.dsps &&
+
48  brams < ru.brams;
+
49  }
+
50  };
+
51 
+
52  // models the implementation parameters which are constrained (e.g. by
+
53  // physical properties, such as lut usage, or by the compiler, such as the
+
54  // number of streams)
+ +
56  public:
+
57 
+ +
59 
+
60  // params belows not being used currently
+
61  double memoryBandwidth; // <-- would be nice to have this
+
62  //int streams;
+
63  //int clockFrequency;
+
64  //int memoryClockFrequency;
+
65 
+
66  ImplementationParameters(const LogicResourceUsage& _ru, double _memoryBandwidth) : ru(_ru), memoryBandwidth(_memoryBandwidth) {}
+
67 
+
68  std::string to_string() {
+
69  std::stringstream s;
+
70  s << ru.to_string() << " " << memoryBandwidth;
+
71  return s.str();
+
72  }
+
73 
+
74  bool operator<(const ImplementationParameters& other) const {
+
75  return
+
76  ru < other.ru &&
+ +
78  //stream < other.streams &&
+
79  //clockFrequency < other.clockFrequency &&
+
80  //memoryClockFrequency < other.memoryClockFrequency;
+
81  }
+
82  };
+
83 
+
84 
+
85  }
+
86 }
+
87 #endif /* end of include guard: MODEL_H */
+
double memoryBandwidth
Definition: Model.hpp:61
+
int dsps
Definition: Model.hpp:11
+
std::string to_string()
Definition: Model.hpp:25
+ +
LogicResourceUsage ru
Definition: Model.hpp:58
+
LogicResourceUsage()
Definition: Model.hpp:13
+
std::string to_string()
Definition: Model.hpp:68
+
const LogicResourceUsage operator*(double x) const
Definition: Model.hpp:39
+
bool operator<(const ImplementationParameters &other) const
Definition: Model.hpp:74
+
LogicResourceUsage(int _l, int _f, int _b, int _d)
Definition: Model.hpp:15
+
const LogicResourceUsage operator*(int x) const
Definition: Model.hpp:35
+
Definition: Model.hpp:9
+
const LogicResourceUsage operator+(const LogicResourceUsage &ru) const
Definition: Model.hpp:31
+
const bool operator<(const LogicResourceUsage &ru) const
Definition: Model.hpp:43
+
int luts
Definition: Model.hpp:11
+
int ffs
Definition: Model.hpp:11
+
LogicResourceUsage(const LogicResourceUsage &ru)
Definition: Model.hpp:18
+
ImplementationParameters(const LogicResourceUsage &_ru, double _memoryBandwidth)
Definition: Model.hpp:66
+
int brams
Definition: Model.hpp:11
+
+
+ + + + diff --git a/docs/ParallelCsrReadControl_8java.html b/docs/ParallelCsrReadControl_8java.html new file mode 100644 index 0000000..e5c377a --- /dev/null +++ b/docs/ParallelCsrReadControl_8java.html @@ -0,0 +1,131 @@ + + + + + + +Spark: src/spmv/src/ParallelCsrReadControl.java File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
ParallelCsrReadControl.java File Reference
+
+
+ + + + + + +

+Classes

class  ParallelCsrReadControl
 
enum  ParallelCsrReadControl.Mode
 
+
+
+ + + + diff --git a/docs/README_8md.html b/docs/README_8md.html new file mode 100644 index 0000000..9448717 --- /dev/null +++ b/docs/README_8md.html @@ -0,0 +1,121 @@ + + + + + + +Spark: README.md File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
README.md File Reference
+
+
+
+
+ + + + diff --git a/docs/SharedLibLoader_8cpp.html b/docs/SharedLibLoader_8cpp.html new file mode 100644 index 0000000..52bb048 --- /dev/null +++ b/docs/SharedLibLoader_8cpp.html @@ -0,0 +1,125 @@ + + + + + + +Spark: src/execution/SharedLibLoader.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SharedLibLoader.cpp File Reference
+
+
+
#include <Spark/Execution.hpp>
+#include <Spark/FileUtils.hpp>
+#include <dlfcn.h>
+#include <iostream>
+
+
+ + + + diff --git a/docs/SimpleSpmv_8hpp.html b/docs/SimpleSpmv_8hpp.html new file mode 100644 index 0000000..62b1ff9 --- /dev/null +++ b/docs/SimpleSpmv_8hpp.html @@ -0,0 +1,250 @@ + + + + + + +Spark: include/Spark/SimpleSpmv.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SimpleSpmv.hpp File Reference
+
+
+
#include <sstream>
+#include <Spark/Spmv.hpp>
+#include <Spark/Utils.hpp>
+#include <Spark/Model.hpp>
+#include <Spark/device/SpmvDeviceInterface.h>
+#include <Spark/GeneratedImplSupport.hpp>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + +

+Classes

struct  spark::spmv::indptr_value
 
struct  spark::spmv::Partition
 
class  spark::spmv::SimpleSpmvArchitecture
 
class  spark::spmv::SimpleSpmvArchitectureSpace< T >
 
class  spark::spmv::FstSpmvArchitecture
 
class  spark::spmv::SkipEmptyRowsArchitecture
 
class  spark::spmv::PrefetchingArchitecture
 
+ + + + + +

+Namespaces

 spark
 
 spark::spmv
 
+ + + +

+Typedefs

using spark::spmv::EigenSparseMatrix = Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >
 
+ + + + + + + +

+Functions

struct spark::spmv::indptr_value spark::spmv::__attribute__ ((packed))
 
 indptr_value (double _value, int _indptr)
 
 indptr_value ()
 
+ + + + + + + +

+Variables

double value
 
int indptr
 
struct spark::spmv::Partition spark::spmv::__attribute__
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
__attribute__::indptr_value (double _value,
int _indptr 
)
+
+ +
+
+ +
+
+ + + + + + + +
__attribute__::indptr_value ()
+
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
int indptr
+
+ +
+
+ +
+
+ + + + +
double value
+
+ +
+
+
+
+ + + + diff --git a/docs/SimpleSpmv_8hpp.js b/docs/SimpleSpmv_8hpp.js new file mode 100644 index 0000000..703ea16 --- /dev/null +++ b/docs/SimpleSpmv_8hpp.js @@ -0,0 +1,17 @@ +var SimpleSpmv_8hpp = +[ + [ "indptr_value", "structspark_1_1spmv_1_1indptr__value.html", "structspark_1_1spmv_1_1indptr__value" ], + [ "Partition", "structspark_1_1spmv_1_1Partition.html", "structspark_1_1spmv_1_1Partition" ], + [ "SimpleSpmvArchitecture", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html", "classspark_1_1spmv_1_1SimpleSpmvArchitecture" ], + [ "SimpleSpmvArchitectureSpace", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace" ], + [ "FstSpmvArchitecture", "classspark_1_1spmv_1_1FstSpmvArchitecture.html", "classspark_1_1spmv_1_1FstSpmvArchitecture" ], + [ "SkipEmptyRowsArchitecture", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture" ], + [ "PrefetchingArchitecture", "classspark_1_1spmv_1_1PrefetchingArchitecture.html", "classspark_1_1spmv_1_1PrefetchingArchitecture" ], + [ "EigenSparseMatrix", "SimpleSpmv_8hpp.html#a3235bbbc3c8db242db2f00947ec4ca9b", null ], + [ "__attribute__", "SimpleSpmv_8hpp.html#a8ed4b5e7d25d6d210e3f1b7f09a84c7a", null ], + [ "indptr_value", "SimpleSpmv_8hpp.html#ac37db725a01a5625a6a32d51d7fd3e78", null ], + [ "indptr_value", "SimpleSpmv_8hpp.html#a84d257f77f20931d14a7e5abb9d099c8", null ], + [ "__attribute__", "SimpleSpmv_8hpp.html#a8ad7d0fb384bbf6ef88a68b8cad95182", null ], + [ "indptr", "SimpleSpmv_8hpp.html#a164fa1a90d7bd63f14e631438885cc69", null ], + [ "value", "SimpleSpmv_8hpp.html#aee90379adb0307effb138f4871edbc5c", null ] +]; \ No newline at end of file diff --git a/docs/SimpleSpmv_8hpp_source.html b/docs/SimpleSpmv_8hpp_source.html new file mode 100644 index 0000000..4be68f0 --- /dev/null +++ b/docs/SimpleSpmv_8hpp_source.html @@ -0,0 +1,592 @@ + + + + + + +Spark: include/Spark/SimpleSpmv.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SimpleSpmv.hpp
+
+
+Go to the documentation of this file.
1 #ifndef SIMPLESPMV_H
+
2 #define SIMPLESPMV_H
+
3 
+
4 #include <sstream>
+
5 
+
6 #include <Spark/Spmv.hpp>
+
7 #include <Spark/Utils.hpp>
+
8 #include <Spark/Model.hpp>
+ + +
11 
+
12 
+
13 namespace spark {
+
14  namespace spmv {
+
15 
+
16  using EigenSparseMatrix = Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>;
+
17 
+
18  // pack values and colptr to reduce number of streams
+
19 #pragma pack(1)
+
20  struct indptr_value {
+
21  double value;
+
22  int indptr;
+
23  indptr_value(double _value, int _indptr) : value(_value), indptr(_indptr) {}
+
24  indptr_value() : value(0), indptr(0) {}
+
25  } __attribute__((packed));
+
26 #pragma pack()
+
27 
+
28  struct Partition {
+ + + + +
33  std::vector<int> m_colptr;
+
34  std::vector<indptr_value> m_indptr_values;
+
35 
+
36  std::string to_string() {
+
37  std::stringstream s;
+
38  s << "Vector load cycles " << vector_load_cycles << std::endl;
+
39  s << "Padding cycles = " << paddingCycles << std::endl;
+
40  s << "Total cycles = " << totalCycles << std::endl;
+
41  s << "Nrows = " << n << std::endl;
+
42  s << "Partitions = " << nBlocks << std::endl;
+
43  s << "Reduction cycles = " << reductionCycles << std::endl;
+
44  std::cout << "Empty cycles = " << emptyCycles << std::endl;
+
45  return s.str();
+
46  }
+
47  };
+
48 
+
49  // A parameterised, generic architecture for SpMV. Supported parameters are:
+
50  // - input width
+
51  // - number of pipes
+
52  // - cache size per pipe
+
53  // - TODO data type
+ +
55  // architecture specific properties
+
56  protected:
+
57 
+
58  // design parameters
+ +
60 
+ +
62  std::vector<Partition> partitions;
+ +
64 
+
65  virtual int countComputeCycles(uint32_t* v, int size, int inputWidth);
+
66 
+
67  virtual bool equals(const SpmvArchitecture& a) const override {
+
68  const SimpleSpmvArchitecture* other = dynamic_cast<const SimpleSpmvArchitecture*>(&a);
+
69  return other != nullptr && *other == *this;
+
70  }
+
71 
+
72  public:
+
73 
+
74  bool operator==(const SimpleSpmvArchitecture& other) const {
+
75  return
+
76  cacheSize == other.cacheSize &&
+
77  inputWidth == other.inputWidth &&
+
78  numPipes == other.numPipes &&
+
79  maxRows == other.maxRows;
+
80  }
+
81 
+
82  virtual boost::property_tree::ptree write_params() override {
+
83  boost::property_tree::ptree tree;
+
84  tree.put("num_pipes", numPipes);
+
85  tree.put("cache_size", cacheSize);
+
86  tree.put("input_width", inputWidth);
+
87  tree.put("max_rows", maxRows);
+
88  return tree;
+
89  }
+
90 
+ + + + + +
96 
+
97  SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
+
98  cacheSize(_cacheSize),
+
99  inputWidth(_inputWidth),
+
100  numPipes(_numPipes),
+
101  maxRows(_maxRows) {}
+
102 
+ +
108  cacheSize(_impl->cacheSize()),
+
109  inputWidth(_impl->inputWidth()),
+
110  numPipes(_impl->numPipes()),
+
111  maxRows(_impl->maxRows()),
+
112  impl(_impl) { }
+
113 
+
114  virtual std::string getLibraryName() {
+
115  std::stringstream ss;
+
116  ss << "libSpmv_";
+
117  // XXX detect target from environment configuration?
+
118  const std::string target = "sim";
+
119  ss << target << "_";
+
120  ss << "cachesize" << cacheSize << "_";
+
121  ss << "inputwidth" << inputWidth << "_";
+
122  ss << "numpipes" << numPipes << "_";
+
123  ss << "maxrows" << maxRows;
+
124  ss << ".so";
+
125  return ss.str();
+
126  }
+
127 
+
128  virtual double getEstimatedClockCycles() {
+
129  auto res = std::max_element(partitions.begin(), partitions.end(),
+
130  [](const Partition& a, const Partition& b) {
+
131  return a.totalCycles < b.totalCycles;
+
132  });
+
133  return res->totalCycles;
+
134  }
+
135 
+
136  virtual double getGFlopsCount() {
+
137  return 2 * this->mat.nonZeros() / 1E9;
+
138  }
+
139 
+
140  // NOTE: only call this after a call to preprocessMatrix
+ +
142  // XXX bram usage for altera in double precision only (512 deep, 40 bits wide, so need 2 BRAMs)
+
143  //int brams = (double)cacheSize * (double)inputWidth / 512.0 * 2.0;
+
144  using namespace spark::model;
+
145 
+
146  // XXX these should be architecture params
+
147  int maxRows = (this->mat.rows() / 512) * 512;
+
148  const int virtex6EntriesPerBram = 512;
+
149 
+
150  LogicResourceUsage interPartitionReductionKernel(2768,1505, maxRows / virtex6EntriesPerBram, 0);
+
151  LogicResourceUsage paddingKernel{400, 500, 0, 0};
+
152  LogicResourceUsage spmvKernelPerInput{1466, 2060, cacheSize / virtex6EntriesPerBram, 10}; // includes cache
+
153  LogicResourceUsage sm{800, 500, 0, 0};
+
154 
+
155  LogicResourceUsage spmvPerPipe =
+
156  interPartitionReductionKernel +
+
157  paddingKernel +
+
158  spmvKernelPerInput * inputWidth +
+
159  sm;
+
160 
+
161  LogicResourceUsage memoryPerPipe{3922, 8393, 160, 0};
+
162  LogicResourceUsage memory{24000, 32000, 0, 0};
+
163 
+
164  //LogicResourceUsage designOther{};
+
165  LogicResourceUsage designUsage = (spmvPerPipe + memoryPerPipe) * numPipes + memory;
+
166 
+
167  double memoryBandwidth =(double)inputWidth * numPipes * getFrequency() * 12.0 / 1E9;
+
168  ImplementationParameters ip{designUsage, memoryBandwidth};
+
169  //ip.clockFrequency = getFrequency() / 1E6; // MHz
+
170  return ip;
+
171  }
+
172 
+
173  virtual std::string to_string() {
+
174  std::stringstream s;
+
175  s << get_name();
+
176  s << " " << cacheSize;
+
177  s << " " << inputWidth;
+
178  s << " " << numPipes;
+
179  s << " " << getEstimatedClockCycles();
+
180  s << " " << getEstimatedGFlops();
+
181  return s.str();
+
182  }
+
183 
+
184  virtual void preprocess(const EigenSparseMatrix& mat) override;
+
185 
+
186  virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) override;
+
187 
+
188  virtual std::string get_name() override {
+
189  return std::string("Simple");
+
190  }
+
191 
+
192  private:
+
193  std::vector<EigenSparseMatrix> do_partition(
+
194  const EigenSparseMatrix& mat,
+
195  int numPipes);
+
196 
+ +
198  const Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>& mat,
+
199  int blockSize,
+
200  int inputWidth);
+
201 
+
202  template<typename U>
+
203  void logResult(std::string s, std::vector<U> vals) {
+
204  logResultR(s);
+
205  for (const auto& v : vals)
+
206  std::cout << v << ",";
+
207  std::cout << std::endl;
+
208  }
+
209 
+
210  template<typename Arg, typename... Args>
+
211  void logResult(std::string s, Arg a, Args... as) {
+
212  logResultR(s, as...);
+
213  std::cout << a << ",";
+
214  std::cout << std::endl;
+
215  }
+
216 
+
217  template<typename Arg, typename... Args>
+
218  void logResultR(std::string s, Arg a, Args... as) {
+
219  logResultR(s, as...);
+
220  std::cout << a << ",";
+
221  }
+
222 
+
223  void logResultR(std::string s) {
+
224  std::cout << "Result " << get_name() << " ";
+
225  std::cout << s << "=";
+
226  }
+
227 
+
228 
+
229  };
+
230 
+
231  template<typename T>
+ +
233  // NOTE any raw pointers returned through the API of this class
+
234  // are assumed to be wrapped in smart pointers by the base class
+
235  spark::utils::Range cacheSizeR{1024, 4096, 512};
+
236  spark::utils::Range inputWidthR{8, 100, 8};
+
237  spark::utils::Range numPipesR{1, 6, 1};
+
238  int maxRows;
+
239 
+
240  bool last = false;
+
241 
+
242  public:
+
243 
+ +
245  spark::utils::Range numPipesRange,
+
246  spark::utils::Range inputWidthRange,
+
247  spark::utils::Range cacheSizeRange,
+
248  int _maxRows) {
+
249  cacheSizeR = cacheSizeRange;
+
250  inputWidthR = inputWidthRange;
+
251  numPipesR = numPipesRange;
+
252  maxRows = _maxRows;
+
253  }
+
254 
+ +
256  }
+
257 
+
258  protected:
+
259  void restart() override {
+
260  cacheSizeR.restart();
+
261  inputWidthR.restart();
+
262  numPipesR.restart();
+
263  last = false;
+
264  }
+
265 
+
266  T* doNext(){
+
267  if (last)
+
268  return nullptr;
+
269 
+
270  T* result = new T(cacheSizeR.crt, inputWidthR.crt, numPipesR.crt, maxRows);
+
271 
+
272  ++cacheSizeR;
+
273  if (cacheSizeR.at_start()) {
+
274  ++inputWidthR;
+
275  if (inputWidthR.at_start()) {
+
276  ++numPipesR;
+
277  if (numPipesR.at_start())
+
278  last = true;
+
279  }
+
280  }
+
281 
+
282  return result;
+
283  }
+
284  };
+
285 
+
286 
+
287  // FST based architecture, for now we assume it's the same though it probably isn't
+ +
289  protected:
+
290 
+
291  virtual int countComputeCycles(uint32_t* v, int size, int inputWidth) override {
+
292  int cycles = 0;
+
293  for (int i = 0; i < size; i++) {
+
294  int toread = v[i] - (i > 0 ? v[i - 1] : 0);
+
295  do {
+
296  toread -= std::min(toread, inputWidth);
+
297  cycles++;
+
298  } while (toread > 0);
+
299  }
+
300  return cycles;
+
301  }
+
302 
+
303  public:
+ +
305 
+
306  FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
+
307  SimpleSpmvArchitecture(_cacheSize, _inputWidth, _numPipes, _maxRows) {}
+
308 
+
309  virtual std::string get_name() override {
+
310  return std::string("Fst");
+
311  }
+
312 
+
313  };
+
314 
+
315  // Model for an architecture which can skip sequences of empty rows
+ +
317  protected:
+
318 
+
319  std::vector<uint32_t> encodeEmptyRows(std::vector<uint32_t> pin, bool encode) {
+
320  std::vector<uint32_t> encoded;
+
321  if (!encode) {
+
322  return pin;
+
323  }
+
324 
+
325  int emptyRunLength = 0;
+
326  for (size_t i = 0; i < pin.size(); i++) {
+
327  uint32_t rowLength = pin[i] - (i == 0 ? 0 : pin[i - 1]);
+
328  if (rowLength == 0) {
+
329  emptyRunLength++;
+
330  } else {
+
331  if (emptyRunLength != 0) {
+
332  encoded.push_back(emptyRunLength | (1 << 31));
+
333  }
+
334  emptyRunLength = 0;
+
335  encoded.push_back(pin[i]);
+
336  }
+
337  }
+
338 
+
339  if (emptyRunLength != 0) {
+
340  encoded.push_back(emptyRunLength | (1 << 31));
+
341  }
+
342 
+
343  return encoded;
+
344  }
+
345 
+ +
347  const spark::sparse::CsrMatrix& in,
+
348  int blockNumber,
+
349  int nBlocks) override {
+
350  bool encode = blockNumber != 0 && blockNumber != nBlocks - 1;
+
351  return std::make_tuple(
+
352  encodeEmptyRows(std::get<0>(in), encode),
+
353  std::get<1>(in),
+
354  std::get<2>(in));
+
355  }
+
356 
+
357  public:
+ +
359 
+
360  SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
+
361  SimpleSpmvArchitecture(_cacheSize, _inputWidth, _numPipes, maxRows) {}
+
362 
+
363  virtual std::string get_name() override {
+
364  return std::string("SkipEmpty");
+
365  }
+
366  };
+
367 
+ +
369  protected:
+
370 
+
371  public:
+ +
373 
+
374  PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows) :
+
375  SkipEmptyRowsArchitecture(_cacheSize, _inputWidth, _numPipes, _maxRows) {}
+
376 
+
377  virtual std::string get_name() override {
+
378  return std::string("PrefetchingArchitecture");
+
379  }
+
380  };
+
381 
+
382  }
+
383 }
+
384 
+
385 
+
386 #endif /* end of include guard: SIMPLESPMV_H */
+ +
virtual std::string get_name() override
Definition: SimpleSpmv.hpp:363
+
Definition: GeneratedImplSupport.hpp:21
+
virtual int countComputeCycles(uint32_t *v, int size, int inputWidth) override
Definition: SimpleSpmv.hpp:291
+
struct spark::spmv::Partition __attribute__
+
void logResult(std::string s, Arg a, Args...as)
Definition: SimpleSpmv.hpp:211
+
int emptyCycles
Definition: SimpleSpmv.hpp:30
+
virtual std::string to_string()
Definition: SimpleSpmv.hpp:173
+
virtual void preprocess(const EigenSparseMatrix &mat) override
Definition: Spmv.cpp:303
+
int getSpmv_PartitionSize()
Definition: SpmvDeviceInterfaceMock.cpp:7
+
int vector_load_cycles
Definition: SimpleSpmv.hpp:29
+
const int maxRows
Definition: SimpleSpmv.hpp:59
+
double getEstimatedGFlops()
Definition: Spmv.hpp:16
+
Definition: SimpleSpmv.hpp:288
+ +
virtual std::string get_name() override
Definition: SimpleSpmv.hpp:377
+
indptr_value(double _value, int _indptr)
Definition: SimpleSpmv.hpp:23
+
void logResult(std::string s, std::vector< U > vals)
Definition: SimpleSpmv.hpp:203
+
int indptr
Definition: SimpleSpmv.hpp:22
+
int getSpmv_MaxRows()
Definition: SpmvDeviceInterfaceMock.cpp:19
+
SkipEmptyRowsArchitecture()
Definition: SimpleSpmv.hpp:358
+
FstSpmvArchitecture()
Definition: SimpleSpmv.hpp:304
+
int m_colptr_unpaddedLength
Definition: SimpleSpmv.hpp:31
+
Definition: Spmv.hpp:13
+
virtual spark::sparse::CsrMatrix preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) override
Definition: SimpleSpmv.hpp:346
+
SimpleSpmvArchitecture()
Definition: SimpleSpmv.hpp:91
+
virtual std::string getLibraryName()
Definition: SimpleSpmv.hpp:114
+
Definition: SimpleSpmv.hpp:368
+
EigenSparseMatrix mat
Definition: SimpleSpmv.hpp:61
+
int outSize
Definition: SimpleSpmv.hpp:29
+ +
Definition: SimpleSpmv.hpp:20
+
void logResultR(std::string s)
Definition: SimpleSpmv.hpp:223
+
bool operator==(const SimpleSpmvArchitecture &other) const
Definition: SimpleSpmv.hpp:74
+
virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) override
Definition: Spmv.cpp:181
+
virtual double getGFlopsCount()
Definition: SimpleSpmv.hpp:136
+
int totalCycles
Definition: SimpleSpmv.hpp:29
+
std::tuple< std::vector< uint32_t >, std::vector< int >, std::vector< double >> CsrMatrix
Definition: SparseMatrix.hpp:9
+
spark::runtime::GeneratedSpmvImplementation * impl
Definition: SimpleSpmv.hpp:63
+
indptr_value()
Definition: SimpleSpmv.hpp:24
+
int n
Definition: SimpleSpmv.hpp:29
+
int maxRows
Definition: SimpleSpmv.hpp:238
+
T * doNext()
Definition: SimpleSpmv.hpp:266
+
virtual bool equals(const SpmvArchitecture &a) const override
Definition: SimpleSpmv.hpp:67
+ +
Definition: SimpleSpmv.hpp:54
+
std::vector< Partition > partitions
Definition: SimpleSpmv.hpp:62
+
virtual int countComputeCycles(uint32_t *v, int size, int inputWidth)
Definition: Spmv.cpp:17
+
void restart() override
Definition: SimpleSpmv.hpp:259
+
Definition: SimpleSpmv.hpp:232
+
void logResultR(std::string s, Arg a, Args...as)
Definition: SimpleSpmv.hpp:218
+
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
Definition: SimpleSpmv.hpp:97
+
const int numPipes
Definition: SimpleSpmv.hpp:59
+
Definition: Spmv.hpp:57
+
int reductionCycles
Definition: SimpleSpmv.hpp:30
+
const int inputWidth
Definition: SimpleSpmv.hpp:59
+
virtual std::string get_name() override
Definition: SimpleSpmv.hpp:188
+
Definition: Utils.hpp:13
+
std::vector< uint32_t > encodeEmptyRows(std::vector< uint32_t > pin, bool encode)
Definition: SimpleSpmv.hpp:319
+
Partition do_blocking(const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > &mat, int blockSize, int inputWidth)
Definition: Spmv.cpp:35
+
Definition: SimpleSpmv.hpp:28
+
virtual spark::model::ImplementationParameters getImplementationParameters()
Definition: SimpleSpmv.hpp:141
+
Definition: Model.hpp:9
+ +
Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > EigenSparseMatrix
Definition: SimpleSpmv.hpp:16
+
SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation *_impl)
Definition: SimpleSpmv.hpp:107
+
virtual boost::property_tree::ptree write_params() override
Definition: SimpleSpmv.hpp:82
+
double getFrequency()
Definition: Spmv.hpp:20
+
int getSpmv_NumPipes()
Definition: SpmvDeviceInterfaceMock.cpp:15
+
SimpleSpmvArchitectureSpace()
Definition: SimpleSpmv.hpp:255
+
std::vector< int > m_colptr
Definition: SimpleSpmv.hpp:33
+
int getSpmv_InputWidth()
Definition: SpmvDeviceInterfaceMock.cpp:11
+
Definition: SimpleSpmv.hpp:316
+
virtual std::string get_name() override
Definition: SimpleSpmv.hpp:309
+
int paddingCycles
Definition: SimpleSpmv.hpp:29
+
SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
Definition: SimpleSpmv.hpp:360
+
double value
Definition: SimpleSpmv.hpp:21
+
std::string to_string()
Definition: SimpleSpmv.hpp:36
+
const int cacheSize
Definition: SimpleSpmv.hpp:59
+ +
FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
Definition: SimpleSpmv.hpp:306
+
std::vector< EigenSparseMatrix > do_partition(const EigenSparseMatrix &mat, int numPipes)
Definition: Spmv.cpp:290
+
virtual double getEstimatedClockCycles()
Definition: SimpleSpmv.hpp:128
+
PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
Definition: SimpleSpmv.hpp:374
+
PrefetchingArchitecture()
Definition: SimpleSpmv.hpp:372
+
int nBlocks
Definition: SimpleSpmv.hpp:29
+
SimpleSpmvArchitectureSpace(spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)
Definition: SimpleSpmv.hpp:244
+
int m_indptr_values_unpaddedLength
Definition: SimpleSpmv.hpp:32
+
std::vector< indptr_value > m_indptr_values
Definition: SimpleSpmv.hpp:34
+
+
+ + + + diff --git a/docs/SparseLinearSolvers_8cpp.html b/docs/SparseLinearSolvers_8cpp.html new file mode 100644 index 0000000..6e19b72 --- /dev/null +++ b/docs/SparseLinearSolvers_8cpp.html @@ -0,0 +1,215 @@ + + + + + + +Spark: src/SparseLinearSolvers.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SparseLinearSolvers.cpp File Reference
+
+
+
#include <Spark/SparseLinearSolvers.hpp>
+#include <iostream>
+#include <Eigen/Sparse>
+
+ + + + + + + +

+Functions

Eigen::VectorXd solveBICG (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd solveLU (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
Eigen::VectorXd solveCG (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd solveBICG (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd solveCG (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd solveLU (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+ +
+
+
+
+ + + + diff --git a/docs/SparseLinearSolvers_8cpp.js b/docs/SparseLinearSolvers_8cpp.js new file mode 100644 index 0000000..26512e8 --- /dev/null +++ b/docs/SparseLinearSolvers_8cpp.js @@ -0,0 +1,6 @@ +var SparseLinearSolvers_8cpp = +[ + [ "solveBICG", "SparseLinearSolvers_8cpp.html#a0917711c5c1de1d6fc6d3f5c2fa08c47", null ], + [ "solveCG", "SparseLinearSolvers_8cpp.html#a857d72c794d4097e9a37e2a1a6839567", null ], + [ "solveLU", "SparseLinearSolvers_8cpp.html#abdc884f0c76856917e9821d6242ee98a", null ] +]; \ No newline at end of file diff --git a/docs/SparseLinearSolvers_8hpp.html b/docs/SparseLinearSolvers_8hpp.html new file mode 100644 index 0000000..d5adf49 --- /dev/null +++ b/docs/SparseLinearSolvers_8hpp.html @@ -0,0 +1,146 @@ + + + + + + +Spark: include/Spark/SparseLinearSolvers.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SparseLinearSolvers.hpp File Reference
+
+ +
+ + + + diff --git a/docs/SparseLinearSolvers_8hpp_source.html b/docs/SparseLinearSolvers_8hpp_source.html new file mode 100644 index 0000000..f0bb830 --- /dev/null +++ b/docs/SparseLinearSolvers_8hpp_source.html @@ -0,0 +1,179 @@ + + + + + + +Spark: include/Spark/SparseLinearSolvers.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SparseLinearSolvers.hpp
+
+
+Go to the documentation of this file.
1 #ifndef SPARSE_LINEAR_SOLVERS_HPP
+
2 #define SPARSE_LINEAR_SOLVERS_HPP
+
3 
+
4 #include <Eigen/Sparse>
+
5 
+
6 namespace spark {
+
7  namespace sparse_linear_solvers {
+
8 
+
9  class Solver {
+
10  public:
+
11  virtual void analyze(
+
12  const Eigen::SparseMatrix<double> &A) {
+
13  }
+
14 
+
15  virtual void preprocess(
+
16  const Eigen::SparseMatrix<double> &A) {
+
17  }
+
18 
+
19  virtual Eigen::VectorXd solve(
+
20  const Eigen::SparseMatrix<double>& A,
+
21  const Eigen::VectorXd& b) = 0;
+
22  };
+
23 
+
24  class EigenSolver: public Solver {
+
25  public:
+
26  virtual Eigen::VectorXd solve(
+
27  const Eigen::SparseMatrix<double>& A,
+
28  const Eigen::VectorXd& b);
+
29  };
+
30 
+
31  class DfeCgSolver: public Solver {
+
32  public:
+
33  virtual Eigen::VectorXd solve(
+
34  const Eigen::SparseMatrix<double>& A,
+
35  const Eigen::VectorXd& b);
+
36  };
+
37 
+
38  class DfeBiCgSolver: public Solver {
+
39  public:
+
40  virtual Eigen::VectorXd solve(
+
41  const Eigen::SparseMatrix<double>& A,
+
42  const Eigen::VectorXd& b);
+
43  };
+
44  }
+
45 }
+
46 
+
47 #endif /* end of include guard: SPARSE_LINEAR_SOLVERS_HPP */
+
48 
+
Definition: SparseLinearSolvers.hpp:9
+
virtual Eigen::VectorXd solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
Definition: ConjugateGradient.cpp:105
+
virtual Eigen::VectorXd solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)=0
+
virtual Eigen::VectorXd solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
Definition: SparseLinearSolvers.cpp:61
+
Definition: SparseLinearSolvers.hpp:38
+
virtual void preprocess(const Eigen::SparseMatrix< double > &A)
Definition: SparseLinearSolvers.hpp:15
+
virtual Eigen::VectorXd solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
Definition: BiConjugateGradient.cpp:162
+
Definition: SparseLinearSolvers.hpp:31
+
virtual void analyze(const Eigen::SparseMatrix< double > &A)
Definition: SparseLinearSolvers.hpp:11
+
Definition: SparseLinearSolvers.hpp:24
+
+
+ + + + diff --git a/docs/SparseMatrix_8hpp.html b/docs/SparseMatrix_8hpp.html new file mode 100644 index 0000000..2427eb2 --- /dev/null +++ b/docs/SparseMatrix_8hpp.html @@ -0,0 +1,148 @@ + + + + + + +Spark: include/Spark/SparseMatrix.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SparseMatrix.hpp File Reference
+
+
+
#include <Eigen/Sparse>
+
+

Go to the source code of this file.

+ + + + +

+Classes

class  spark::sparse::SparkCooMatrix< value_type >
 
+ + + + + +

+Namespaces

 spark
 
 spark::sparse
 
+ + + + + +

+Typedefs

using spark::sparse::CsrMatrix = std::tuple< std::vector< uint32_t >, std::vector< int >, std::vector< double >>
 
using spark::sparse::PartitionedCsrMatrix = std::vector< CsrMatrix >
 
+
+
+ + + + diff --git a/docs/SparseMatrix_8hpp.js b/docs/SparseMatrix_8hpp.js new file mode 100644 index 0000000..e73052a --- /dev/null +++ b/docs/SparseMatrix_8hpp.js @@ -0,0 +1,6 @@ +var SparseMatrix_8hpp = +[ + [ "SparkCooMatrix", "classspark_1_1sparse_1_1SparkCooMatrix.html", "classspark_1_1sparse_1_1SparkCooMatrix" ], + [ "CsrMatrix", "SparseMatrix_8hpp.html#a0f0d804dd8f37cb44a636bca7d03f016", null ], + [ "PartitionedCsrMatrix", "SparseMatrix_8hpp.html#a15a8e3974007d1c440410bf83232f5dd", null ] +]; \ No newline at end of file diff --git a/docs/SparseMatrix_8hpp_source.html b/docs/SparseMatrix_8hpp_source.html new file mode 100644 index 0000000..c3c000d --- /dev/null +++ b/docs/SparseMatrix_8hpp_source.html @@ -0,0 +1,156 @@ + + + + + + +Spark: include/Spark/SparseMatrix.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SparseMatrix.hpp
+
+
+Go to the documentation of this file.
1 #ifndef SPARSEMATRIX_HPP_1BWMMLC8
+
2 #define SPARSEMATRIX_HPP_1BWMMLC8
+
3 
+
4 #include <Eigen/Sparse>
+
5 
+
6 namespace spark {
+
7  namespace sparse {
+
8 
+
9  using CsrMatrix = std::tuple<std::vector<uint32_t>, std::vector<int>, std::vector<double>>;
+
10 
+
11  using PartitionedCsrMatrix = std::vector<CsrMatrix>;
+
12 
+
13  template<typename value_type>
+ +
15 
+
16  public:
+
17  using CoordType = std::tuple<int, int, value_type>;
+
18 
+
19  int n, m;
+
20  std::vector<CoordType> data;
+
21 
+
22  SparkCooMatrix(int _n, int _m) : n(_n), m(_m) {}
+
23  };
+
24  }
+
25 }
+
26 
+
27 #endif /* end of include guard: SPARSEMATRIX_HPP_1BWMMLC8 */
+
std::vector< CoordType > data
Definition: SparseMatrix.hpp:20
+
Definition: SparseMatrix.hpp:14
+
std::tuple< std::vector< uint32_t >, std::vector< int >, std::vector< double >> CsrMatrix
Definition: SparseMatrix.hpp:9
+
std::tuple< int, int, value_type > CoordType
Definition: SparseMatrix.hpp:17
+
SparkCooMatrix(int _n, int _m)
Definition: SparseMatrix.hpp:22
+
int n
Definition: SparseMatrix.hpp:19
+
std::vector< CsrMatrix > PartitionedCsrMatrix
Definition: SparseMatrix.hpp:11
+
int m
Definition: SparseMatrix.hpp:19
+
+
+ + + + diff --git a/docs/SpmvDeviceInterfaceMock_8cpp.html b/docs/SpmvDeviceInterfaceMock_8cpp.html new file mode 100644 index 0000000..3a5559b --- /dev/null +++ b/docs/SpmvDeviceInterfaceMock_8cpp.html @@ -0,0 +1,417 @@ + + + + + + +Spark: src/device/SpmvDeviceInterfaceMock.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SpmvDeviceInterfaceMock.cpp File Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + +

+Functions

int getSpmv_PartitionSize ()
 
int getSpmv_InputWidth ()
 
int getSpmv_NumPipes ()
 
int getSpmv_MaxRows ()
 
bool getDramReductionEnabled ()
 
void Spmv_dramWrite (int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
 Basic static function for the interface 'dramWrite'. More...
 
void Spmv_dramRead (int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
 Basic static function for the interface 'dramRead'. More...
 
void Spmv (int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
 Basic static function for the interface 'default'. More...
 
+

Function Documentation

+ +
+
+ + + + + + + +
bool getDramReductionEnabled ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_InputWidth ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_MaxRows ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_NumPipes ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_PartitionSize ()
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv (int64_t param_nIterations,
int64_t param_nPartitions,
int64_t param_vectorLoadCycles,
const int64_t * param_colPtrStartAddresses,
const int32_t * param_colptrSizes,
const int64_t * param_indptrValuesAddresses,
const int32_t * param_indptrValuesSizes,
const int32_t * param_nrows,
const int64_t * param_outStartAddresses,
const int32_t * param_reductionCycles,
const int32_t * param_totalCycles,
const int64_t * param_vStartAddresses 
)
+
+ +

Basic static function for the interface 'default'.

+
Parameters
+ + + + + + + + + + + + + + + + + + +
[in]param_nIterationsInterface Parameter "nIterations".
[in]param_nPartitionsInterface Parameter "nPartitions".
[in]param_vectorLoadCyclesInterface Parameter "vectorLoadCycles".
[in]param_vectorSizeInterface Parameter "vectorSize".
[in]param_colPtrStartAddressesInterface Parameter array colPtrStartAddresses[] should be of size 1.
[in]param_colptrSizesInterface Parameter array colptrSizes[] should be of size 1.
[in]param_colptrUnpaddedlengthsInterface Parameter array colptrUnpaddedlengths[] should be of size 1.
[in]param_indptrValuesAddressesInterface Parameter array indptrValuesAddresses[] should be of size 1.
[in]param_indptrValuesSizesInterface Parameter array indptrValuesSizes[] should be of size 1.
[in]param_indptrValuesUnpaddedLengthsInterface Parameter array indptrValuesUnpaddedLengths[] should be of size 1.
[in]param_nrowsInterface Parameter array nrows[] should be of size 1.
[in]param_outResultSizesInterface Parameter array outResultSizes[] should be of size 1.
[in]param_outStartAddressesInterface Parameter array outStartAddresses[] should be of size 1.
[in]param_paddingCyclesInterface Parameter array paddingCycles[] should be of size 1.
[in]param_reductionCyclesInterface Parameter array reductionCycles[] should be of size 1.
[in]param_totalCyclesInterface Parameter array totalCycles[] should be of size 1.
[in]param_vStartAddressesInterface Parameter array vStartAddresses[] should be of size 1.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv_dramRead (int64_t param_size_bytes,
int64_t param_start_bytes,
uint8_t * outstream_tocpu 
)
+
+ +

Basic static function for the interface 'dramRead'.

+
Parameters
+ + + + +
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[out]outstream_tocpuThe stream should be of size param_size_bytes bytes.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv_dramWrite (int64_t param_size_bytes,
int64_t param_start_bytes,
const uint8_t * instream_fromcpu 
)
+
+ +

Basic static function for the interface 'dramWrite'.

+
Parameters
+ + + + +
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[in]instream_fromcpuThe stream should be of size param_size_bytes bytes.
+
+
+ +
+
+
+
+ + + + diff --git a/docs/SpmvDeviceInterfaceMock_8cpp.js b/docs/SpmvDeviceInterfaceMock_8cpp.js new file mode 100644 index 0000000..35e5260 --- /dev/null +++ b/docs/SpmvDeviceInterfaceMock_8cpp.js @@ -0,0 +1,11 @@ +var SpmvDeviceInterfaceMock_8cpp = +[ + [ "getDramReductionEnabled", "SpmvDeviceInterfaceMock_8cpp.html#a7455f3ef0da88ac52c353068d257471c", null ], + [ "getSpmv_InputWidth", "SpmvDeviceInterfaceMock_8cpp.html#a7da25ac12467c17172038c1e670c08cf", null ], + [ "getSpmv_MaxRows", "SpmvDeviceInterfaceMock_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12", null ], + [ "getSpmv_NumPipes", "SpmvDeviceInterfaceMock_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0", null ], + [ "getSpmv_PartitionSize", "SpmvDeviceInterfaceMock_8cpp.html#ad67c30a9c3947922102b25b24bef66f4", null ], + [ "Spmv", "SpmvDeviceInterfaceMock_8cpp.html#a2f0caf835f75923c7b64abf5b530f56a", null ], + [ "Spmv_dramRead", "SpmvDeviceInterfaceMock_8cpp.html#adebd1881a3ee58569e68ed629237f86e", null ], + [ "Spmv_dramWrite", "SpmvDeviceInterfaceMock_8cpp.html#a3638c97531a2affd1e27a0c2418b8314", null ] +]; \ No newline at end of file diff --git a/docs/SpmvDeviceInterface_8cpp.html b/docs/SpmvDeviceInterface_8cpp.html new file mode 100644 index 0000000..c8619bc --- /dev/null +++ b/docs/SpmvDeviceInterface_8cpp.html @@ -0,0 +1,215 @@ + + + + + + +Spark: src/spmv/src/SpmvDeviceInterface.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SpmvDeviceInterface.cpp File Reference
+
+
+
#include <Spark/device/SpmvDeviceInterface.h>
+#include <GeneratedImplemntations.h>
+
+ + + + + + + + + + + +

+Functions

int getSpmv_InputWidth ()
 
int getSpmv_NumPipes ()
 
int getSpmv_MaxRows ()
 
int getSpmv_PartitionSize ()
 
bool getDramReductionEnabled ()
 
+

Function Documentation

+ +
+
+ + + + + + + +
bool getDramReductionEnabled ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_InputWidth ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_MaxRows ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_NumPipes ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_PartitionSize ()
+
+ +
+
+
+
+ + + + diff --git a/docs/SpmvDeviceInterface_8cpp.js b/docs/SpmvDeviceInterface_8cpp.js new file mode 100644 index 0000000..3c8cf1b --- /dev/null +++ b/docs/SpmvDeviceInterface_8cpp.js @@ -0,0 +1,8 @@ +var SpmvDeviceInterface_8cpp = +[ + [ "getDramReductionEnabled", "SpmvDeviceInterface_8cpp.html#a7455f3ef0da88ac52c353068d257471c", null ], + [ "getSpmv_InputWidth", "SpmvDeviceInterface_8cpp.html#a7da25ac12467c17172038c1e670c08cf", null ], + [ "getSpmv_MaxRows", "SpmvDeviceInterface_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12", null ], + [ "getSpmv_NumPipes", "SpmvDeviceInterface_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0", null ], + [ "getSpmv_PartitionSize", "SpmvDeviceInterface_8cpp.html#ad67c30a9c3947922102b25b24bef66f4", null ] +]; \ No newline at end of file diff --git a/docs/SpmvDeviceInterface_8h.html b/docs/SpmvDeviceInterface_8h.html new file mode 100644 index 0000000..e0ad3f5 --- /dev/null +++ b/docs/SpmvDeviceInterface_8h.html @@ -0,0 +1,419 @@ + + + + + + +Spark: include/Spark/device/SpmvDeviceInterface.h File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SpmvDeviceInterface.h File Reference
+
+
+
#include <cstdint>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + +

+Functions

int getSpmv_PartitionSize ()
 
int getSpmv_InputWidth ()
 
int getSpmv_NumPipes ()
 
int getSpmv_MaxRows ()
 
bool getDramReductionEnabled ()
 
void Spmv_dramWrite (int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
 Basic static function for the interface 'dramWrite'. More...
 
void Spmv_dramRead (int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
 Basic static function for the interface 'dramRead'. More...
 
void Spmv (int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
 Basic static function for the interface 'default'. More...
 
+

Function Documentation

+ +
+
+ + + + + + + +
bool getDramReductionEnabled ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_InputWidth ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_MaxRows ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_NumPipes ()
+
+ +
+
+ +
+
+ + + + + + + +
int getSpmv_PartitionSize ()
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv (int64_t param_nIterations,
int64_t param_nPartitions,
int64_t param_vectorLoadCycles,
const int64_t * param_colPtrStartAddresses,
const int32_t * param_colptrSizes,
const int64_t * param_indptrValuesAddresses,
const int32_t * param_indptrValuesSizes,
const int32_t * param_nrows,
const int64_t * param_outStartAddresses,
const int32_t * param_reductionCycles,
const int32_t * param_totalCycles,
const int64_t * param_vStartAddresses 
)
+
+ +

Basic static function for the interface 'default'.

+
Parameters
+ + + + + + + + + + + + + + + + + + +
[in]param_nIterationsInterface Parameter "nIterations".
[in]param_nPartitionsInterface Parameter "nPartitions".
[in]param_vectorLoadCyclesInterface Parameter "vectorLoadCycles".
[in]param_vectorSizeInterface Parameter "vectorSize".
[in]param_colPtrStartAddressesInterface Parameter array colPtrStartAddresses[] should be of size 1.
[in]param_colptrSizesInterface Parameter array colptrSizes[] should be of size 1.
[in]param_colptrUnpaddedlengthsInterface Parameter array colptrUnpaddedlengths[] should be of size 1.
[in]param_indptrValuesAddressesInterface Parameter array indptrValuesAddresses[] should be of size 1.
[in]param_indptrValuesSizesInterface Parameter array indptrValuesSizes[] should be of size 1.
[in]param_indptrValuesUnpaddedLengthsInterface Parameter array indptrValuesUnpaddedLengths[] should be of size 1.
[in]param_nrowsInterface Parameter array nrows[] should be of size 1.
[in]param_outResultSizesInterface Parameter array outResultSizes[] should be of size 1.
[in]param_outStartAddressesInterface Parameter array outStartAddresses[] should be of size 1.
[in]param_paddingCyclesInterface Parameter array paddingCycles[] should be of size 1.
[in]param_reductionCyclesInterface Parameter array reductionCycles[] should be of size 1.
[in]param_totalCyclesInterface Parameter array totalCycles[] should be of size 1.
[in]param_vStartAddressesInterface Parameter array vStartAddresses[] should be of size 1.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv_dramRead (int64_t param_size_bytes,
int64_t param_start_bytes,
uint8_t * outstream_tocpu 
)
+
+ +

Basic static function for the interface 'dramRead'.

+
Parameters
+ + + + +
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[out]outstream_tocpuThe stream should be of size param_size_bytes bytes.
+
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Spmv_dramWrite (int64_t param_size_bytes,
int64_t param_start_bytes,
const uint8_t * instream_fromcpu 
)
+
+ +

Basic static function for the interface 'dramWrite'.

+
Parameters
+ + + + +
[in]param_size_bytesInterface Parameter "size_bytes".
[in]param_start_bytesInterface Parameter "start_bytes".
[in]instream_fromcpuThe stream should be of size param_size_bytes bytes.
+
+
+ +
+
+
+
+ + + + diff --git a/docs/SpmvDeviceInterface_8h.js b/docs/SpmvDeviceInterface_8h.js new file mode 100644 index 0000000..2497006 --- /dev/null +++ b/docs/SpmvDeviceInterface_8h.js @@ -0,0 +1,11 @@ +var SpmvDeviceInterface_8h = +[ + [ "getDramReductionEnabled", "SpmvDeviceInterface_8h.html#a7455f3ef0da88ac52c353068d257471c", null ], + [ "getSpmv_InputWidth", "SpmvDeviceInterface_8h.html#a7da25ac12467c17172038c1e670c08cf", null ], + [ "getSpmv_MaxRows", "SpmvDeviceInterface_8h.html#a4b12a86c9a868106e2ad57766f8bed12", null ], + [ "getSpmv_NumPipes", "SpmvDeviceInterface_8h.html#a4565bdddcd8404afd9b6fbd6dcf39ee0", null ], + [ "getSpmv_PartitionSize", "SpmvDeviceInterface_8h.html#ad67c30a9c3947922102b25b24bef66f4", null ], + [ "Spmv", "SpmvDeviceInterface_8h.html#a2f0caf835f75923c7b64abf5b530f56a", null ], + [ "Spmv_dramRead", "SpmvDeviceInterface_8h.html#adebd1881a3ee58569e68ed629237f86e", null ], + [ "Spmv_dramWrite", "SpmvDeviceInterface_8h.html#a3638c97531a2affd1e27a0c2418b8314", null ] +]; \ No newline at end of file diff --git a/docs/SpmvDeviceInterface_8h_source.html b/docs/SpmvDeviceInterface_8h_source.html new file mode 100644 index 0000000..ebfa253 --- /dev/null +++ b/docs/SpmvDeviceInterface_8h_source.html @@ -0,0 +1,171 @@ + + + + + + +Spark: include/Spark/device/SpmvDeviceInterface.h Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SpmvDeviceInterface.h
+
+
+Go to the documentation of this file.
1 #ifdef __cplusplus
+
2 extern "C" {
+
3 #endif /* __cplusplus */
+
4 #include <cstdint>
+
5 
+
6 // access device parameters
+ + +
9 int getSpmv_NumPipes();
+
10 int getSpmv_MaxRows();
+ +
12 
+
13 
+
21 void Spmv_dramWrite(
+
22  int64_t param_size_bytes,
+
23  int64_t param_start_bytes,
+
24  const uint8_t *instream_fromcpu);
+
25 
+
26 
+
34 void Spmv_dramRead(
+
35  int64_t param_size_bytes,
+
36  int64_t param_start_bytes,
+
37  uint8_t *outstream_tocpu);
+
38 
+
39 
+
61 void Spmv(
+
62  int64_t param_nIterations,
+
63  int64_t param_nPartitions,
+
64  int64_t param_vectorLoadCycles,
+
65  const int64_t *param_colPtrStartAddresses,
+
66  const int32_t *param_colptrSizes,
+
67  const int64_t *param_indptrValuesAddresses,
+
68  const int32_t *param_indptrValuesSizes,
+
69  const int32_t *param_nrows,
+
70  const int64_t *param_outStartAddresses,
+
71  const int32_t *param_reductionCycles,
+
72  const int32_t *param_totalCycles,
+
73  const int64_t *param_vStartAddresses);
+
74 
+
75 #ifdef __cplusplus
+
76 }
+
77 #endif /* __cplusplus */
+
int getSpmv_PartitionSize()
Definition: SpmvDeviceInterfaceMock.cpp:7
+
int getSpmv_MaxRows()
Definition: SpmvDeviceInterfaceMock.cpp:19
+
int getSpmv_NumPipes()
Definition: SpmvDeviceInterfaceMock.cpp:15
+
int getSpmv_InputWidth()
Definition: SpmvDeviceInterfaceMock.cpp:11
+
void Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
Basic static function for the interface 'dramRead'.
Definition: SpmvDeviceInterfaceMock.cpp:32
+
bool getDramReductionEnabled()
Definition: SpmvDeviceInterfaceMock.cpp:23
+
void Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
Basic static function for the interface 'dramWrite'.
Definition: SpmvDeviceInterfaceMock.cpp:27
+
void Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
Basic static function for the interface 'default'.
Definition: SpmvDeviceInterfaceMock.cpp:37
+
+
+ + + + diff --git a/docs/SpmvKernel_8java.html b/docs/SpmvKernel_8java.html new file mode 100644 index 0000000..d3043bd --- /dev/null +++ b/docs/SpmvKernel_8java.html @@ -0,0 +1,141 @@ + + + + + + +Spark: src/spmv/src/SpmvKernel.java File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SpmvKernel.java File Reference
+
+
+ + + + + + + + + + + + + + + + +

+Classes

class  SpmvKernel
 
class  SpmvCacheKernel
 
class  SpmvReductionKernel
 
class  DramSpmvReductionKernel
 
class  BramSpmvReductionKernel
 
class  PaddingKernel
 
class  UnpaddingKernel
 
+
+
+ + + + diff --git a/docs/SpmvManager_8java.html b/docs/SpmvManager_8java.html new file mode 100644 index 0000000..cd538fe --- /dev/null +++ b/docs/SpmvManager_8java.html @@ -0,0 +1,129 @@ + + + + + + +Spark: src/spmv/src/SpmvManager.java File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SpmvManager.java File Reference
+
+
+ + + + +

+Classes

class  SpmvManager
 
+
+
+ + + + diff --git a/docs/Spmv_8cpp.html b/docs/Spmv_8cpp.html new file mode 100644 index 0000000..de06515 --- /dev/null +++ b/docs/Spmv_8cpp.html @@ -0,0 +1,250 @@ + + + + + + +Spark: src/spmv/src/Spmv.cpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Spmv.cpp File Reference
+
+
+
#include <Spark/Spmv.hpp>
+#include <Spark/SimpleSpmv.hpp>
+#include <Spark/Converters.hpp>
+#include <iostream>
+#include <tuple>
+#include <dfesnippets/VectorUtils.hpp>
+#include <dfesnippets/Timing.hpp>
+#include <Spark/GeneratedImplSupport.hpp>
+
+ + + +

+Classes

struct  PartitionWriteResult
 
+ + + +

+Typedefs

using ssarch = spark::spmv::SimpleSpmvArchitecture
 
+ + + + + + + + +

+Functions

template<typename T >
long size_bytes (const std::vector< T > &v)
 
int align (int bytes, int to)
 
PartitionWriteResult writeDataForPartition (spark::runtime::GeneratedSpmvImplementation *impl, int offset, const Partition &br, const std::vector< double > &v)
 
+

Typedef Documentation

+ +
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
int align (int bytes,
int to 
)
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + +
long size_bytes (const std::vector< T > & v)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PartitionWriteResult writeDataForPartition (spark::runtime::GeneratedSpmvImplementation * impl,
int offset,
const Partition & br,
const std::vector< double > & v 
)
+
+ +
+
+
+
+ + + + diff --git a/docs/Spmv_8cpp.js b/docs/Spmv_8cpp.js new file mode 100644 index 0000000..3ae6e31 --- /dev/null +++ b/docs/Spmv_8cpp.js @@ -0,0 +1,8 @@ +var Spmv_8cpp = +[ + [ "PartitionWriteResult", "structPartitionWriteResult.html", "structPartitionWriteResult" ], + [ "ssarch", "Spmv_8cpp.html#a73ed93bfd16d2b54084241251efe53ca", null ], + [ "align", "Spmv_8cpp.html#af110ee89567b09ff002ff971364c551d", null ], + [ "size_bytes", "Spmv_8cpp.html#a725a1b7ac05f04b3bc61b2a270346ea6", null ], + [ "writeDataForPartition", "Spmv_8cpp.html#a77e3cd072d94e0fe9e5376bb05ac1c6e", null ] +]; \ No newline at end of file diff --git a/docs/Spmv_8hpp.html b/docs/Spmv_8hpp.html new file mode 100644 index 0000000..fcbb3a1 --- /dev/null +++ b/docs/Spmv_8hpp.html @@ -0,0 +1,154 @@ + + + + + + +Spark: include/Spark/Spmv.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Spmv.hpp File Reference
+
+
+
#include <Spark/SparseMatrix.hpp>
+#include <Spark/Model.hpp>
+#include <boost/property_tree/ptree.hpp>
+#include <Eigen/Sparse>
+
+

Go to the source code of this file.

+ + + + + + +

+Classes

class  spark::spmv::SpmvArchitecture
 
class  spark::spmv::SpmvArchitectureSpace
 
+ + + + + +

+Namespaces

 spark
 
 spark::spmv
 
+ + + + + + +

+Functions

std::ostream & spark::spmv::operator<< (std::ostream &s, SpmvArchitecture &a)
 
template<typename T >
void spark::spmv::align (std::vector< T > &v, int widthInBytes)
 
+
+
+ + + + diff --git a/docs/Spmv_8hpp.js b/docs/Spmv_8hpp.js new file mode 100644 index 0000000..295f71d --- /dev/null +++ b/docs/Spmv_8hpp.js @@ -0,0 +1,7 @@ +var Spmv_8hpp = +[ + [ "SpmvArchitecture", "classspark_1_1spmv_1_1SpmvArchitecture.html", "classspark_1_1spmv_1_1SpmvArchitecture" ], + [ "SpmvArchitectureSpace", "classspark_1_1spmv_1_1SpmvArchitectureSpace.html", "classspark_1_1spmv_1_1SpmvArchitectureSpace" ], + [ "align", "Spmv_8hpp.html#abaf9d6fbe5cd5df67ea6314fccd769e0", null ], + [ "operator<<", "Spmv_8hpp.html#ad1e89fa7b9bf647e70186d2dc8385961", null ] +]; \ No newline at end of file diff --git a/docs/Spmv_8hpp_source.html b/docs/Spmv_8hpp_source.html new file mode 100644 index 0000000..8db9a4c --- /dev/null +++ b/docs/Spmv_8hpp_source.html @@ -0,0 +1,231 @@ + + + + + + +Spark: include/Spark/Spmv.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Spmv.hpp
+
+
+Go to the documentation of this file.
1 #ifndef SPMV_H
+
2 #define SPMV_H
+
3 
+
4 #include <Spark/SparseMatrix.hpp>
+
5 #include <Spark/Model.hpp>
+
6 #include <boost/property_tree/ptree.hpp>
+
7 #include <Eigen/Sparse>
+
8 
+
9 namespace spark {
+
10  namespace spmv {
+
11 
+
12  // A generic architecture for SpMV
+ +
14 
+
15  public:
+
16  double getEstimatedGFlops() {
+ +
18  }
+
19 
+
20  double getFrequency() {
+
21  return 100 * 1E6;
+
22  }
+
23 
+
24  virtual double getEstimatedClockCycles() = 0;
+
25  virtual double getGFlopsCount() = 0;
+
26  virtual std::string to_string() = 0;
+ +
28  virtual void preprocess(const Eigen::SparseMatrix<double, Eigen::RowMajor>& mat) = 0;
+
29  virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) = 0;
+
30  virtual std::string get_name() = 0;
+
31  virtual boost::property_tree::ptree write_params() = 0;
+
32  virtual std::string getLibraryName() = 0;
+
33  bool operator==(const SpmvArchitecture& other) {
+
34  return equals(other);
+
35  }
+
36 
+
37  virtual ~SpmvArchitecture() {}
+
38 
+
39  protected:
+ +
41  const spark::sparse::CsrMatrix& in,
+
42  int blockNumber,
+
43  int nBlocks) {
+
44  return in;
+
45  }
+
46  virtual bool equals(const SpmvArchitecture& a) const = 0;
+
47  };
+
48 
+
49  inline std::ostream& operator<<(std::ostream& s, SpmvArchitecture& a) {
+
50  s << " Estimated clock cycles = " << a.getEstimatedClockCycles();
+
51  return s;
+
52  }
+
53 
+
54  // An ArchitectureSpace provides a simple way to iterate over the design space
+
55  // of an architecture, abstracting the details of the architecture's parameters
+
56  // XXX actually implemnt the STL iterator (if it makes sense?)
+ +
58  public:
+
59  std::shared_ptr<SpmvArchitecture> next() {
+
60  return std::shared_ptr<SpmvArchitecture>(doNext());
+
61  }
+
62 
+
63  // restart the exploration process
+
64  virtual void restart() = 0;
+
65 
+
66  protected:
+
67  // returns nullptr if at end
+
68  virtual SpmvArchitecture* doNext() = 0;
+
69  };
+
70 
+
71  template<typename T>
+
72  void align(std::vector<T>& v, int widthInBytes) {
+
73  int limit = widthInBytes / sizeof(T);
+
74  while ((v.size() * sizeof(T)) % widthInBytes != 0 && limit != 0) {
+
75  v.push_back(T{});
+
76  limit--;
+
77  }
+
78  }
+
79 
+
80 }
+
81 }
+
82 
+
83 
+
84 #endif /* end of include guard: SPMV_H */
+ + +
virtual boost::property_tree::ptree write_params()=0
+
virtual SpmvArchitecture * doNext()=0
+
double getEstimatedGFlops()
Definition: Spmv.hpp:16
+ +
virtual spark::sparse::CsrMatrix preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
Definition: Spmv.hpp:40
+
virtual std::string to_string()=0
+
virtual void preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
+
virtual bool equals(const SpmvArchitecture &a) const =0
+
Definition: Spmv.hpp:13
+
virtual double getEstimatedClockCycles()=0
+
virtual double getGFlopsCount()=0
+ +
std::tuple< std::vector< uint32_t >, std::vector< int >, std::vector< double >> CsrMatrix
Definition: SparseMatrix.hpp:9
+
virtual std::string get_name()=0
+
virtual std::string getLibraryName()=0
+
virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x)=0
+
Definition: Spmv.hpp:57
+
std::ostream & operator<<(std::ostream &s, SpmvArchitecture &a)
Definition: Spmv.hpp:49
+
bool operator==(const SpmvArchitecture &other)
Definition: Spmv.hpp:33
+
virtual ~SpmvArchitecture()
Definition: Spmv.hpp:37
+
double getFrequency()
Definition: Spmv.hpp:20
+
virtual spark::model::ImplementationParameters getImplementationParameters()=0
+
std::shared_ptr< SpmvArchitecture > next()
Definition: Spmv.hpp:59
+
void align(std::vector< T > &v, int widthInBytes)
Definition: Spmv.hpp:72
+
+
+ + + + diff --git a/docs/UserInput_8hpp.html b/docs/UserInput_8hpp.html new file mode 100644 index 0000000..3ffbc7d --- /dev/null +++ b/docs/UserInput_8hpp.html @@ -0,0 +1,148 @@ + + + + + + +Spark: include/Spark/UserInput.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
UserInput.hpp File Reference
+
+
+
#include <vector>
+#include <boost/algorithm/string.hpp>
+#include <unordered_map>
+
+

Go to the source code of this file.

+ + + + + + +

+Namespaces

 spark
 
 spark::userio
 
+ + + +

+Typedefs

using spark::userio::UserInputParams = std::unordered_map< std::string, int >
 
+ + + +

+Functions

UserInputParams spark::userio::parseBuildParams (std::string params)
 
+
+
+ + + + diff --git a/docs/UserInput_8hpp.js b/docs/UserInput_8hpp.js new file mode 100644 index 0000000..de53ffe --- /dev/null +++ b/docs/UserInput_8hpp.js @@ -0,0 +1,5 @@ +var UserInput_8hpp = +[ + [ "UserInputParams", "UserInput_8hpp.html#a61705a89ecd4794e1aaf8e56bc89a5ae", null ], + [ "parseBuildParams", "UserInput_8hpp.html#a3dd99cbd0dfbe620ddebf4f95351b15b", null ] +]; \ No newline at end of file diff --git a/docs/UserInput_8hpp_source.html b/docs/UserInput_8hpp_source.html new file mode 100644 index 0000000..110062c --- /dev/null +++ b/docs/UserInput_8hpp_source.html @@ -0,0 +1,162 @@ + + + + + + +Spark: include/Spark/UserInput.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
UserInput.hpp
+
+
+Go to the documentation of this file.
1 #ifndef USERINPUT_H
+
2 
+
3 #define USERINPUT_H
+
4 
+
5 #include <vector>
+
6 #include <boost/algorithm/string.hpp>
+
7 #include <unordered_map>
+
8 
+
9 namespace spark {
+
10  namespace userio {
+
11 
+
12  using UserInputParams = std::unordered_map<std::string, int>;
+
13 
+
14  inline UserInputParams parseBuildParams(std::string params) {
+
15  std::string delimiters("= ");
+
16  std::vector<std::string> parts;
+
17  boost::split(parts, params, boost::is_any_of(delimiters));
+
18  for (auto s : parts)
+
19  std::cout << s << std::endl;
+
20  // TODO need a more flexible approach
+
21  // for now we assume we have -> param + int value pairs
+
22  UserInputParams buildParams;
+
23 
+
24  bool param_name = true;
+
25  std::cout << "parts size " << parts.size() << std::endl;
+
26  for (int i = 0; i < parts.size(); i+=2) {
+
27  buildParams.insert(std::make_pair(parts[i], std::stoi(parts[i + 1])));
+
28  }
+
29 
+
30  return buildParams;
+
31  }
+
32 
+
33  }
+
34 };
+
35 
+
36 
+
37 
+
38 
+
39 #endif /* end of include guard: USERINPUT_H */
+
std::unordered_map< std::string, int > UserInputParams
Definition: UserInput.hpp:12
+
UserInputParams parseBuildParams(std::string params)
Definition: UserInput.hpp:14
+
+
+ + + + diff --git a/docs/Utils_8hpp.html b/docs/Utils_8hpp.html new file mode 100644 index 0000000..fb600c3 --- /dev/null +++ b/docs/Utils_8hpp.html @@ -0,0 +1,150 @@ + + + + + + +Spark: include/Spark/Utils.hpp File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
Utils.hpp File Reference
+
+
+
#include <string>
+#include <vector>
+#include <sstream>
+#include <iostream>
+#include <boost/algorithm/string.hpp>
+
+

Go to the source code of this file.

+ + + + +

+Classes

struct  spark::utils::Range
 
+ + + + + +

+Namespaces

 spark
 
 spark::utils
 
+ + + +

+Functions

std::ostream & spark::utils::operator<< (std::ostream &s, const Range &r)
 
+
+
+ + + + diff --git a/docs/Utils_8hpp.js b/docs/Utils_8hpp.js new file mode 100644 index 0000000..36ac612 --- /dev/null +++ b/docs/Utils_8hpp.js @@ -0,0 +1,5 @@ +var Utils_8hpp = +[ + [ "Range", "structspark_1_1utils_1_1Range.html", "structspark_1_1utils_1_1Range" ], + [ "operator<<", "Utils_8hpp.html#a58716b1e1a4e2b2a3115f339aba795ef", null ] +]; \ No newline at end of file diff --git a/docs/Utils_8hpp_source.html b/docs/Utils_8hpp_source.html new file mode 100644 index 0000000..e6f33fc --- /dev/null +++ b/docs/Utils_8hpp_source.html @@ -0,0 +1,198 @@ + + + + + + +Spark: include/Spark/Utils.hpp Source File + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Utils.hpp
+
+
+Go to the documentation of this file.
1 #ifndef UTILS_HPP_DASDASD
+
2 #define UTILS_HPP_DASDASD
+
3 
+
4 #include <string>
+
5 #include <vector>
+
6 #include <sstream>
+
7 #include <iostream>
+
8 
+
9 #include <boost/algorithm/string.hpp>
+
10 
+
11 namespace spark {
+
12  namespace utils {
+
13  struct Range {
+
14  int start, end, step, crt;
+
15  Range(int _s, int _e, int _stp) : start(_s), end(_e), step(_stp), crt(_s) {}
+
16  Range(std::string range) {
+
17  std::vector<std::string> strs;
+
18  if (range.find(",") != std::string::npos) {
+
19  // assume a (start, end, step) range format
+
20  boost::split(strs, range, boost::is_any_of(","));
+
21  start = std::stoi(strs[0]);
+
22  end = std::stoi(strs[1]);
+
23  step = std::stoi(strs[2]);
+
24  } else {
+
25  // assume a single element range (start, start + 1, 1)
+
26  start = std::stoi(range);
+
27  end = start + 1;
+
28  step = 1;
+
29  }
+
30 
+
31  crt = start;
+
32  }
+
33 
+
34  std::string to_string() {
+
35  std::stringstream ss;
+
36  ss << start << ", " << end << ", " << step;
+
37  return ss.str();
+
38  }
+
39 
+
40  void restart() {
+
41  crt = start;
+
42  }
+
43 
+
44  bool at_start() {
+
45  return crt == start;
+
46  }
+
47 
+
48  int operator++() {
+
49  crt = crt + step;
+
50  if (crt == end) {
+
51  crt = start;
+
52  }
+
53  return crt;
+
54  }
+
55  };
+
56 
+
57  inline std::ostream& operator<<(std::ostream& s, const Range& r) {
+
58  std::cout << "Range{";
+
59  std::cout << r.start << "," << r.end << "," << r.step << "}";
+
60  return s;
+
61  }
+
62  }
+
63 }
+
64 
+
65 #endif /* end of include guard: UTILS_H */
+
bool at_start()
Definition: Utils.hpp:44
+
int operator++()
Definition: Utils.hpp:48
+
int step
Definition: Utils.hpp:14
+
int start
Definition: Utils.hpp:14
+
Range(int _s, int _e, int _stp)
Definition: Utils.hpp:15
+
Range(std::string range)
Definition: Utils.hpp:16
+
int crt
Definition: Utils.hpp:14
+
std::ostream & operator<<(std::ostream &s, const Range &r)
Definition: Utils.hpp:57
+
Definition: Utils.hpp:13
+
std::string to_string()
Definition: Utils.hpp:34
+
void restart()
Definition: Utils.hpp:40
+
int end
Definition: Utils.hpp:14
+
+
+ + + + diff --git a/docs/annotated.html b/docs/annotated.html new file mode 100644 index 0000000..69cc426 --- /dev/null +++ b/docs/annotated.html @@ -0,0 +1,180 @@ + + + + + + +Spark: Class List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/annotated.js b/docs/annotated.js new file mode 100644 index 0000000..6481030 --- /dev/null +++ b/docs/annotated.js @@ -0,0 +1,16 @@ +var annotated = +[ + [ "spark", "namespacespark.html", "namespacespark" ], + [ "BramSpmvReductionKernel", "classBramSpmvReductionKernel.html", "classBramSpmvReductionKernel" ], + [ "DramSpmvReductionKernel", "classDramSpmvReductionKernel.html", "classDramSpmvReductionKernel" ], + [ "PaddingKernel", "classPaddingKernel.html", "classPaddingKernel" ], + [ "ParallelCsrReadControl", "classParallelCsrReadControl.html", "classParallelCsrReadControl" ], + [ "PartitionWriteResult", "structPartitionWriteResult.html", "structPartitionWriteResult" ], + [ "SpmvCacheKernel", "classSpmvCacheKernel.html", "classSpmvCacheKernel" ], + [ "SpmvEqual", "structSpmvEqual.html", "structSpmvEqual" ], + [ "SpmvHash", "structSpmvHash.html", "structSpmvHash" ], + [ "SpmvKernel", "classSpmvKernel.html", "classSpmvKernel" ], + [ "SpmvManager", "classSpmvManager.html", "classSpmvManager" ], + [ "SpmvReductionKernel", "classSpmvReductionKernel.html", "classSpmvReductionKernel" ], + [ "UnpaddingKernel", "classUnpaddingKernel.html", "classUnpaddingKernel" ] +]; \ No newline at end of file diff --git a/docs/bc_s.png b/docs/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..224b29aa9847d5a4b3902efd602b7ddf7d33e6c2 GIT binary patch literal 676 zcmV;V0$crwP)y__>=_9%My z{n931IS})GlGUF8K#6VIbs%684A^L3@%PlP2>_sk`UWPq@f;rU*V%rPy_ekbhXT&s z(GN{DxFv}*vZp`F>S!r||M`I*nOwwKX+BC~3P5N3-)Y{65c;ywYiAh-1*hZcToLHK ztpl1xomJ+Yb}K(cfbJr2=GNOnT!UFA7Vy~fBz8?J>XHsbZoDad^8PxfSa0GDgENZS zuLCEqzb*xWX2CG*b&5IiO#NzrW*;`VC9455M`o1NBh+(k8~`XCEEoC1Ybwf;vr4K3 zg|EB<07?SOqHp9DhLpS&bzgo70I+ghB_#)K7H%AMU3v}xuyQq9&Bm~++VYhF09a+U zl7>n7Jjm$K#b*FONz~fj;I->Bf;ule1prFN9FovcDGBkpg>)O*-}eLnC{6oZHZ$o% zXKW$;0_{8hxHQ>l;_*HATI(`7t#^{$(zLe}h*mqwOc*nRY9=?Sx4OOeVIfI|0V(V2 zBrW#G7Ss9wvzr@>H*`r>zE z+e8bOBgqIgldUJlG(YUDviMB`9+DH8n-s9SXRLyJHO1!=wY^79WYZMTa(wiZ!zP66 zA~!21vmF3H2{ngD;+`6j#~6j;$*f*G_2ZD1E;9(yaw7d-QnSCpK(cR1zU3qU0000< KMNUMnLSTYoA~SLT literal 0 HcmV?d00001 diff --git a/docs/bdwn.png b/docs/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..940a0b950443a0bb1b216ac03c45b8a16c955452 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZC{Gv1kP61Pb5HX&C2wk~_T + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
BramSpmvReductionKernel Member List
+
+
+ +

This is the complete list of members for BramSpmvReductionKernel, including all inherited members.

+ + +
BramSpmvReductionKernel(KernelParameters parameters, int fpl, int maxRows, boolean dbg)BramSpmvReductionKernelinlineprotected
+
+ + + + diff --git a/docs/classBramSpmvReductionKernel.html b/docs/classBramSpmvReductionKernel.html new file mode 100644 index 0000000..e3e5eaa --- /dev/null +++ b/docs/classBramSpmvReductionKernel.html @@ -0,0 +1,190 @@ + + + + + + +Spark: BramSpmvReductionKernel Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
BramSpmvReductionKernel Class Reference
+
+
+
+Inheritance diagram for BramSpmvReductionKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 BramSpmvReductionKernel (KernelParameters parameters, int fpl, int maxRows, boolean dbg)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BramSpmvReductionKernel.BramSpmvReductionKernel (KernelParameters parameters,
int fpl,
int maxRows,
boolean dbg 
)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classBramSpmvReductionKernel.js b/docs/classBramSpmvReductionKernel.js new file mode 100644 index 0000000..17e8400 --- /dev/null +++ b/docs/classBramSpmvReductionKernel.js @@ -0,0 +1,4 @@ +var classBramSpmvReductionKernel = +[ + [ "BramSpmvReductionKernel", "classBramSpmvReductionKernel.html#a68264df2094dfb810030e2147b3cacaa", null ] +]; \ No newline at end of file diff --git a/docs/classBramSpmvReductionKernel.png b/docs/classBramSpmvReductionKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..c02c70344562171b5b7f32350c93710da4ad3860 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^OMy6mgBeKruX1$)QW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;O$K zUz{4!FBR+fS(P2V;1(|0skVQ{OkaLA&&k5mCOvVE@S4QWH!b@>>Z$X~KWyB?H}i;5 z>Yn-8FKcR-KK`1_ciOio{i5Hi=uEEDTXKw6rmLOa+c<6hIism*ujbjVh(6s}wddBo z%5t0c?;rk~v+TI)OMAGfiJG2vHpecV$th!)Q_1LaURfu8y?Tb-p-;L$8P29hxb-tv z2u@?LYf)|BPvm^y9KrNM04MkG`>iI%v*maaiVg`KXy3r{K{0w+7?VWd&!-u09=xl222d_5@2JD}H>ucD&sC84fn7!Q4RVB{%wRYmQ$6J=X{5efOqU*P@ zKKpg&&pW={GFsKiJ}tFLwUYn-rCU|$k$$fy1g&Yld{Zpi|887GS^Tup)sxK6*B!IT z{CV2F$~VS(-By{jId3Z7O}q6eCwA5sn>Ws~%l7Ql5B3f_*?i9?YMX7GU7xydbGYq2TS>lY4BKm7{|^Cr v|3mpShWiRSj5QqI4D!>SZ<%@X$sfjJF{ybOCEH7Yan9iB>gTe~DWM4fh+z(J literal 0 HcmV?d00001 diff --git a/docs/classDramSpmvReductionKernel-members.html b/docs/classDramSpmvReductionKernel-members.html new file mode 100644 index 0000000..cfce127 --- /dev/null +++ b/docs/classDramSpmvReductionKernel-members.html @@ -0,0 +1,126 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
DramSpmvReductionKernel Member List
+
+
+ +

This is the complete list of members for DramSpmvReductionKernel, including all inherited members.

+ + +
DramSpmvReductionKernel(KernelParameters parameters)DramSpmvReductionKernelinlineprotected
+
+ + + + diff --git a/docs/classDramSpmvReductionKernel.html b/docs/classDramSpmvReductionKernel.html new file mode 100644 index 0000000..76a361e --- /dev/null +++ b/docs/classDramSpmvReductionKernel.html @@ -0,0 +1,168 @@ + + + + + + +Spark: DramSpmvReductionKernel Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
DramSpmvReductionKernel Class Reference
+
+
+
+Inheritance diagram for DramSpmvReductionKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 DramSpmvReductionKernel (KernelParameters parameters)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
DramSpmvReductionKernel.DramSpmvReductionKernel (KernelParameters parameters)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classDramSpmvReductionKernel.js b/docs/classDramSpmvReductionKernel.js new file mode 100644 index 0000000..641e661 --- /dev/null +++ b/docs/classDramSpmvReductionKernel.js @@ -0,0 +1,4 @@ +var classDramSpmvReductionKernel = +[ + [ "DramSpmvReductionKernel", "classDramSpmvReductionKernel.html#a85cd96e69eec800ebfdea2c7bb6f7376", null ] +]; \ No newline at end of file diff --git a/docs/classDramSpmvReductionKernel.png b/docs/classDramSpmvReductionKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..c51a5ccbb9927c24b56505664636031e71cbe934 GIT binary patch literal 585 zcmeAS@N?(olHy`uVBq!ia0vp^%YZn5gBeIJnfuQXNJ#|vgt-3y{~ySF@#br3|Dg#$ z78oBmaDcV*jy#adQ4-`A%m7pb0#{Fk7%?y~-tcsB45?szJNM$GW(6Ks|G29E|NFyT z1tz?Dms8fYIkP&dSE&Esh43?Hp0Q6}a+A~7^OKT^>Pc?)v$_XUr`-=fQnegb#G%=KkBbZ05~B2@IQsXEDUJs5OYY8h;f&FyZ&& zyALnl^iB|wc45!tJ9}Et{3l!caW99zk;&ILTVAH%6cx&3OytO~q8TtM)dNX_0)vHx!m9JKx4ZNCX61_M- z`zr5x@RXch4X8DWA&2PUve!l1OmddLy z@BS*d#IoagaDC)L&Id>NO&RSRGngs_fj(XHdh5)aZ)zC7tV-jwnS9j(81D?8u6{1- HoD!M + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
PaddingKernel Member List
+
+
+ +

This is the complete list of members for PaddingKernel, including all inherited members.

+ + +
PaddingKernel(KernelParameters parameters)PaddingKernelinlineprotected
+
+ + + + diff --git a/docs/classPaddingKernel.html b/docs/classPaddingKernel.html new file mode 100644 index 0000000..96619ba --- /dev/null +++ b/docs/classPaddingKernel.html @@ -0,0 +1,168 @@ + + + + + + +Spark: PaddingKernel Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
PaddingKernel Class Reference
+
+
+
+Inheritance diagram for PaddingKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 PaddingKernel (KernelParameters parameters)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
PaddingKernel.PaddingKernel (KernelParameters parameters)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classPaddingKernel.js b/docs/classPaddingKernel.js new file mode 100644 index 0000000..09f8e4e --- /dev/null +++ b/docs/classPaddingKernel.js @@ -0,0 +1,4 @@ +var classPaddingKernel = +[ + [ "PaddingKernel", "classPaddingKernel.html#a6087bd04eca705d5c45d7978892ba7b0", null ] +]; \ No newline at end of file diff --git a/docs/classPaddingKernel.png b/docs/classPaddingKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..a827051d731dbd4da8c454e933521aad07de323a GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^@jx8F!3-oljzkIpDTx4|5ZC|z{{xvX-h3_XKQsZz z0^Bu^K|kP61Pa|0(gEAX(H>;L`t-+rIg z0*+&^u52kT-|{9yQAaRnzM(NU%j6{nZSj+8_Pw3&&hH#|#{QxG#7333MTh1y&09LB z?)?1{`}lib(`yr>40LDhzV~H$NNUh&+kZtzE-(MMd|maq?JlN2?+4jmO>=p3ev|ZF z%R2$~lfLjB*7vjnVfhcUXC7rNXk~X$IQZ|la#>@-|6uuD4qN_TzkdD$vy8zX2D`)j z4~$W$&+q@Fr8OonB=XodoIn2O<%Y(sQzt%MCuwyiXXc)$TasTn0=BPw|Knh6eO*t? z&X-2pchy%e6Pmlva#7UY&(Almd>eNv_L{!uRl%#%-o5*8wraN7ZmIuW&)44!%m43mnI0J5JI`QOe;_|i>^Q&2Mav0V+XFuXV}QZa)z4*}Q$iB}Ne|>S literal 0 HcmV?d00001 diff --git a/docs/classParallelCsrReadControl-members.html b/docs/classParallelCsrReadControl-members.html new file mode 100644 index 0000000..295da7a --- /dev/null +++ b/docs/classParallelCsrReadControl-members.html @@ -0,0 +1,168 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
ParallelCsrReadControl Member List
+
+
+ +

This is the complete list of members for ParallelCsrReadControl, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
buildReadMask(DFEsmValue canread)ParallelCsrReadControlinlinepackage
canRead()ParallelCsrReadControlinlinepackage
cat(DFEsmValue...args)ParallelCsrReadControlinlinepackage
cat(DFEsmValue left, DFEsmValue right)ParallelCsrReadControlinlinepackage
crtPosParallelCsrReadControlprivate
cycleCounterParallelCsrReadControlprivate
dbgParallelCsrReadControlprivate
firstReadPositionParallelCsrReadControlprivate
fls()ParallelCsrReadControlinlinepackage
iLengthParallelCsrReadControlprivate
iLengthReadyParallelCsrReadControlpackage
inputWidthParallelCsrReadControlprivate
iterationsProcessedParallelCsrReadControlprivate
makeCommand(DFEsmValue p_crtPos, DFEsmValue p_toread, DFEsmValue p_rowLengthData, DFEsmValue p_firstReadPosition, DFEsmValue p_cycleCounter)ParallelCsrReadControlinlinepackage
makeOutput(DFEsmValue readEnable, DFEsmValue rowFinished, DFEsmValue readMask, DFEsmValue rowLength, DFEsmValue cycleCounterP, DFEsmValue firstReadPositionP, DFEsmValue vectorLoad)ParallelCsrReadControlinlinepackage
min(DFEsmValue a, DFEsmValue b)ParallelCsrReadControlinlinepackage
modeParallelCsrReadControlprivate
needToRead()ParallelCsrReadControlinlinepackage
nextState()ParallelCsrReadControlinlineprotected
nIterationsParallelCsrReadControlpackage
nPartitionsParallelCsrReadControlpackage
nRowsParallelCsrReadControlpackage
oControlParallelCsrReadControlprivate
oControlDataParallelCsrReadControlprivate
one()ParallelCsrReadControlinlinepackage
outputFunction()ParallelCsrReadControlinlineprotected
outputNotStall()ParallelCsrReadControlinlinepackage
outValidParallelCsrReadControlprivate
ParallelCsrReadControl(DFEManager owner, int inputWidth, boolean dbg)ParallelCsrReadControlinline
partitionsProcessedParallelCsrReadControlpackage
prevDataParallelCsrReadControlpackage
processRows(DFEsmValue r, DFEsmValue requestRead)ParallelCsrReadControlinlinepackage
readLengthParallelCsrReadControlpackage
readMaskDataParallelCsrReadControlprivate
rowLengthDataParallelCsrReadControlpackage
rowsProcessedParallelCsrReadControlprivate
toreadParallelCsrReadControlpackage
totalOutputsParallelCsrReadControlpackage
tru()ParallelCsrReadControlinlinepackage
vectorLoadCommandsParallelCsrReadControlpackage
vectorLoadCyclesParallelCsrReadControlprivate
zero()ParallelCsrReadControlinlinepackage
zero(int bitWidth)ParallelCsrReadControlinlinepackage
+
+ + + + diff --git a/docs/classParallelCsrReadControl.html b/docs/classParallelCsrReadControl.html new file mode 100644 index 0000000..775196f --- /dev/null +++ b/docs/classParallelCsrReadControl.html @@ -0,0 +1,1289 @@ + + + + + + +Spark: ParallelCsrReadControl Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+
+Inheritance diagram for ParallelCsrReadControl:
+
+
+ + + +
+ + + + +

+Classes

enum  Mode
 
+ + + +

+Public Member Functions

 ParallelCsrReadControl (DFEManager owner, int inputWidth, boolean dbg)
 
+ + + + + +

+Protected Member Functions

void nextState ()
 
void outputFunction ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Package Functions

DFEsmValue outputNotStall ()
 
DFEsmValue needToRead ()
 
DFEsmValue canRead ()
 
void processRows (DFEsmValue r, DFEsmValue requestRead)
 
void makeCommand (DFEsmValue p_crtPos, DFEsmValue p_toread, DFEsmValue p_rowLengthData, DFEsmValue p_firstReadPosition, DFEsmValue p_cycleCounter)
 
void makeOutput (DFEsmValue readEnable, DFEsmValue rowFinished, DFEsmValue readMask, DFEsmValue rowLength, DFEsmValue cycleCounterP, DFEsmValue firstReadPositionP, DFEsmValue vectorLoad)
 
DFEsmValue min (DFEsmValue a, DFEsmValue b)
 
DFEsmValue buildReadMask (DFEsmValue canread)
 
DFEsmValue fls ()
 
DFEsmValue tru ()
 
DFEsmValue one ()
 
DFEsmValue zero ()
 
DFEsmValue zero (int bitWidth)
 
DFEsmValue cat (DFEsmValue...args)
 
DFEsmValue cat (DFEsmValue left, DFEsmValue right)
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Package Attributes

final DFEsmInput nRows
 
final DFEsmInput nPartitions
 
final DFEsmInput nIterations
 
final DFEsmStateValue prevData
 
final DFEsmStateValue readLength
 
final DFEsmStateValue iLengthReady
 
final DFEsmStateValue rowLengthData
 
final DFEsmStateValue vectorLoadCommands
 
final DFEsmStateValue partitionsProcessed
 
final DFEsmStateValue totalOutputs
 
final DFEsmStateValue toread
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Private Attributes

final DFEsmStateEnum< Mode > mode
 
final DFEsmPullInput iLength
 
final DFEsmInput vectorLoadCycles
 
final DFEsmPushOutput oControl
 
final DFEsmStateValue oControlData
 
final DFEsmStateValue outValid
 
final DFEsmStateValue readMaskData
 
final DFEsmStateValue cycleCounter
 
final DFEsmStateValue firstReadPosition
 
final DFEsmStateValue rowsProcessed
 
final DFEsmStateValue iterationsProcessed
 
final DFEsmStateValue crtPos
 
final int inputWidth
 
final boolean dbg
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
ParallelCsrReadControl.ParallelCsrReadControl (DFEManager owner,
int inputWidth,
boolean dbg 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
DFEsmValue ParallelCsrReadControl.buildReadMask (DFEsmValue canread)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.canRead ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DFEsmValue ParallelCsrReadControl.cat (DFEsmValue... args)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
DFEsmValue ParallelCsrReadControl.cat (DFEsmValue left,
DFEsmValue right 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.fls ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ParallelCsrReadControl.makeCommand (DFEsmValue p_crtPos,
DFEsmValue p_toread,
DFEsmValue p_rowLengthData,
DFEsmValue p_firstReadPosition,
DFEsmValue p_cycleCounter 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ParallelCsrReadControl.makeOutput (DFEsmValue readEnable,
DFEsmValue rowFinished,
DFEsmValue readMask,
DFEsmValue rowLength,
DFEsmValue cycleCounterP,
DFEsmValue firstReadPositionP,
DFEsmValue vectorLoad 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
DFEsmValue ParallelCsrReadControl.min (DFEsmValue a,
DFEsmValue b 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.needToRead ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void ParallelCsrReadControl.nextState ()
+
+inlineprotected
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.one ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void ParallelCsrReadControl.outputFunction ()
+
+inlineprotected
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.outputNotStall ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ParallelCsrReadControl.processRows (DFEsmValue r,
DFEsmValue requestRead 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.tru ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEsmValue ParallelCsrReadControl.zero ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DFEsmValue ParallelCsrReadControl.zero (int bitWidth)
+
+inlinepackage
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.crtPos
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.cycleCounter
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean ParallelCsrReadControl.dbg
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.firstReadPosition
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmPullInput ParallelCsrReadControl.iLength
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.iLengthReady
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int ParallelCsrReadControl.inputWidth
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.iterationsProcessed
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateEnum<Mode> ParallelCsrReadControl.mode
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmInput ParallelCsrReadControl.nIterations
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmInput ParallelCsrReadControl.nPartitions
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmInput ParallelCsrReadControl.nRows
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmPushOutput ParallelCsrReadControl.oControl
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.oControlData
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.outValid
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.partitionsProcessed
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.prevData
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.readLength
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.readMaskData
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.rowLengthData
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.rowsProcessed
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.toread
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.totalOutputs
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmStateValue ParallelCsrReadControl.vectorLoadCommands
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEsmInput ParallelCsrReadControl.vectorLoadCycles
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classParallelCsrReadControl.js b/docs/classParallelCsrReadControl.js new file mode 100644 index 0000000..1fcebbb --- /dev/null +++ b/docs/classParallelCsrReadControl.js @@ -0,0 +1,47 @@ +var classParallelCsrReadControl = +[ + [ "Mode", "enumParallelCsrReadControl_1_1Mode.html", "enumParallelCsrReadControl_1_1Mode" ], + [ "ParallelCsrReadControl", "classParallelCsrReadControl.html#abcbdd7c1a9d3193fa28f097ffb47e110", null ], + [ "buildReadMask", "classParallelCsrReadControl.html#ac16da093fd2a7f25322d24d8be66593f", null ], + [ "canRead", "classParallelCsrReadControl.html#a2aa999eee54eca7e025dcb2be11dc900", null ], + [ "cat", "classParallelCsrReadControl.html#aff22ed75d30f759a6fa33b1d8a20b602", null ], + [ "cat", "classParallelCsrReadControl.html#ac1026ad92d6b9e38d84c81aaced9c3b7", null ], + [ "fls", "classParallelCsrReadControl.html#aa9acfae4966606e3e5645eb1592f5736", null ], + [ "makeCommand", "classParallelCsrReadControl.html#a75734eee54f3dfaaabf8794ba378ccfa", null ], + [ "makeOutput", "classParallelCsrReadControl.html#a999c16ceab5da519c9e90a6b5765359c", null ], + [ "min", "classParallelCsrReadControl.html#af39c2cd937063656ee7d2bdb4a21e8db", null ], + [ "needToRead", "classParallelCsrReadControl.html#af55c1da545422cde5c57c61a861017d8", null ], + [ "nextState", "classParallelCsrReadControl.html#acac4d268696bea31cb88a0293e7484ec", null ], + [ "one", "classParallelCsrReadControl.html#af04777655393a3fb3dc8265c4047d0a6", null ], + [ "outputFunction", "classParallelCsrReadControl.html#a9f87d1cc0071a87de47a8ede3cd8508c", null ], + [ "outputNotStall", "classParallelCsrReadControl.html#a5ba3304bde2ca9c746fc58f4f632092e", null ], + [ "processRows", "classParallelCsrReadControl.html#a0860f8fe7c3841a51d7b9faa16b1f26a", null ], + [ "tru", "classParallelCsrReadControl.html#ab6214aafff1d0650206637e7a9f15729", null ], + [ "zero", "classParallelCsrReadControl.html#ae2dc7d8decaf5a2458d11eee8f0e5f33", null ], + [ "zero", "classParallelCsrReadControl.html#a6a81725c82d1c2631d13b35ea2bce758", null ], + [ "crtPos", "classParallelCsrReadControl.html#ab0f5b6539f65df26eccc3c40b234752c", null ], + [ "cycleCounter", "classParallelCsrReadControl.html#a51cfb6d5b02eb3e5b204e4ea8f16fce4", null ], + [ "dbg", "classParallelCsrReadControl.html#a522323c9bbe60e7a02f48e1ff6f7db06", null ], + [ "firstReadPosition", "classParallelCsrReadControl.html#af30ed96f729b948fec5bd989acc13a56", null ], + [ "iLength", "classParallelCsrReadControl.html#a85aaa3cdd7bbfe023bc74bcd02bc21b4", null ], + [ "iLengthReady", "classParallelCsrReadControl.html#a7ffcf81575bcc0d92af9b198653dcf28", null ], + [ "inputWidth", "classParallelCsrReadControl.html#a3458a62c53ce83128cedb6c7765ca6fc", null ], + [ "iterationsProcessed", "classParallelCsrReadControl.html#aca9dea6888fb835dc40d3df86fa60156", null ], + [ "mode", "classParallelCsrReadControl.html#aa98eb2e85dadf134870803067fa13ad8", null ], + [ "nIterations", "classParallelCsrReadControl.html#ad8041b856c97ae1d5ac6ea96a5cb0b04", null ], + [ "nPartitions", "classParallelCsrReadControl.html#a82a4d8d9d682f6c65537975de9483540", null ], + [ "nRows", "classParallelCsrReadControl.html#afda30a96f0ffe1c758ce548cfd8d5907", null ], + [ "oControl", "classParallelCsrReadControl.html#acadabffbfd3d06c672dabfe98ee0ca23", null ], + [ "oControlData", "classParallelCsrReadControl.html#acfc1f32a0362606d06eeb514a7738af8", null ], + [ "outValid", "classParallelCsrReadControl.html#a998688c17de6d3dee32bb3005124d484", null ], + [ "partitionsProcessed", "classParallelCsrReadControl.html#abaf944d93404a6d08eaa4f17e8ee4d0c", null ], + [ "prevData", "classParallelCsrReadControl.html#aae3d7861bddbf53bea616be8e308afa8", null ], + [ "readLength", "classParallelCsrReadControl.html#afe43fc900641b277ae1069dde875a88b", null ], + [ "readMaskData", "classParallelCsrReadControl.html#a0f2333314c34fb9b3a1cd57c7d2d6d37", null ], + [ "rowLengthData", "classParallelCsrReadControl.html#a309e5d2abd0d3bdaca25a19f280cd029", null ], + [ "rowsProcessed", "classParallelCsrReadControl.html#ad0b253e90543c25af346b9afff908d87", null ], + [ "toread", "classParallelCsrReadControl.html#af87a65fc4f7423554e3a36f0a059cbf1", null ], + [ "totalOutputs", "classParallelCsrReadControl.html#a869e17d0a43818cd085f01898143f2cc", null ], + [ "vectorLoadCommands", "classParallelCsrReadControl.html#a4627fcdaeb69d3836053e91cc70a80f2", null ], + [ "vectorLoadCycles", "classParallelCsrReadControl.html#aa609515db6c67afd973f1d15431e1684", null ] +]; \ No newline at end of file diff --git a/docs/classParallelCsrReadControl.png b/docs/classParallelCsrReadControl.png new file mode 100644 index 0000000000000000000000000000000000000000..9b8f7874f03c33746e885698c2de752fa6e622ee GIT binary patch literal 655 zcmeAS@N?(olHy`uVBq!ia0vp^6M;B@gBeKbZAu4{3=#o8A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;K^^T_vf#cX9D;zQ*-&AIxE?qHdt=V{d?HUbpJidX4|TLqn5QC$7p` zquc4?QYLhu{{`!YsoRvR_Le!{>U+VvMesLuDf~Z+J|RFPJIW(Qhj-^)Pt4`njxgN@xNANwF*8 literal 0 HcmV?d00001 diff --git a/docs/classSpmvCacheKernel-members.html b/docs/classSpmvCacheKernel-members.html new file mode 100644 index 0000000..b78680d --- /dev/null +++ b/docs/classSpmvCacheKernel-members.html @@ -0,0 +1,137 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SpmvCacheKernel Member List
+
+
+ +

This is the complete list of members for SpmvCacheKernel, including all inherited members.

+ + + + + + + + + + + + + +
addressTSpmvCacheKernelprivate
getMatrixValues()SpmvCacheKernelinlinepackage
getVectorValues()SpmvCacheKernelinlinepackage
indptrVectorSpmvCacheKernelprivate
ivtypeSpmvCacheKernelpackage
matrixValuesSpmvCacheKernelprivate
resolveVectorReads(DFEVector< DFEVar > reads)SpmvCacheKernelinlinepackage
selectValues(DFEVector< DFEVar > in, DFEVar readMask)SpmvCacheKernelinlinepackage
SpmvCacheKernel(KernelLib owner, DFEVar vRomLoadEnable, DFEVar cacheReadEnable, DFEVar readMask, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth)SpmvCacheKernelinlineprotected
vectorValuesSpmvCacheKernelprivate
vromsSpmvCacheKernelprivate
vtypeSpmvCacheKernelprivate
+
+ + + + diff --git a/docs/classSpmvCacheKernel.html b/docs/classSpmvCacheKernel.html new file mode 100644 index 0000000..dbdf23d --- /dev/null +++ b/docs/classSpmvCacheKernel.html @@ -0,0 +1,494 @@ + + + + + + +Spark: SpmvCacheKernel Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+
+Inheritance diagram for SpmvCacheKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 SpmvCacheKernel (KernelLib owner, DFEVar vRomLoadEnable, DFEVar cacheReadEnable, DFEVar readMask, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth)
 
+ + + + + + + + + +

+Package Functions

DFEVector< DFEVar > getMatrixValues ()
 
DFEVector< DFEVar > getVectorValues ()
 
DFEVector< DFEVar > selectValues (DFEVector< DFEVar > in, DFEVar readMask)
 
DFEVector< DFEVar > resolveVectorReads (DFEVector< DFEVar > reads)
 
+ + + +

+Package Attributes

final DFEVectorType< DFEVar > ivtype
 
+ + + + + + + + + + + + + +

+Private Attributes

final DFEVectorType< DFEVar > vtype
 
final List< Memory< DFEVar > > vroms
 
final DFEType addressT
 
final DFEVector< DFEVar > matrixValues
 
final DFEVector< DFEVar > vectorValues
 
final DFEVector< DFEVar > indptrVector
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpmvCacheKernel.SpmvCacheKernel (KernelLib owner,
DFEVar vRomLoadEnable,
DFEVar cacheReadEnable,
DFEVar readMask,
int inputWidth,
int cacheSize,
int indexWidth,
int mantissaWidth 
)
+
+inlineprotected
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
DFEVector<DFEVar> SpmvCacheKernel.getMatrixValues ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
DFEVector<DFEVar> SpmvCacheKernel.getVectorValues ()
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DFEVector<DFEVar> SpmvCacheKernel.resolveVectorReads (DFEVector< DFEVar > reads)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
DFEVector<DFEVar> SpmvCacheKernel.selectValues (DFEVector< DFEVar > in,
DFEVar readMask 
)
+
+inlinepackage
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
final DFEType SpmvCacheKernel.addressT
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVector<DFEVar> SpmvCacheKernel.indptrVector
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVectorType<DFEVar> SpmvCacheKernel.ivtype
+
+package
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVector<DFEVar> SpmvCacheKernel.matrixValues
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVector<DFEVar> SpmvCacheKernel.vectorValues
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final List<Memory<DFEVar> > SpmvCacheKernel.vroms
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final DFEVectorType<DFEVar> SpmvCacheKernel.vtype
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classSpmvCacheKernel.js b/docs/classSpmvCacheKernel.js new file mode 100644 index 0000000..cb43521 --- /dev/null +++ b/docs/classSpmvCacheKernel.js @@ -0,0 +1,15 @@ +var classSpmvCacheKernel = +[ + [ "SpmvCacheKernel", "classSpmvCacheKernel.html#acd4688b7b45eb067763e70a072acc496", null ], + [ "getMatrixValues", "classSpmvCacheKernel.html#a1c512fd317ade4f64a5e7f7215dd0c53", null ], + [ "getVectorValues", "classSpmvCacheKernel.html#a937fcc2032a9fc1e390bef6cb425fd55", null ], + [ "resolveVectorReads", "classSpmvCacheKernel.html#a8c2591875950cd9bb288c779aacccd54", null ], + [ "selectValues", "classSpmvCacheKernel.html#a3864c0d130426bcad05724a9a864c7db", null ], + [ "addressT", "classSpmvCacheKernel.html#a33ae456838bd9708e94df43436703305", null ], + [ "indptrVector", "classSpmvCacheKernel.html#a334b1e969200dfe46d013bef0e5b1934", null ], + [ "ivtype", "classSpmvCacheKernel.html#a7fc692be3af6b331cdf30edbb6db98e6", null ], + [ "matrixValues", "classSpmvCacheKernel.html#a2c0074e62c391424c276981965dc4bf4", null ], + [ "vectorValues", "classSpmvCacheKernel.html#a866881c55c08adf35042aeeb18c9cffd", null ], + [ "vroms", "classSpmvCacheKernel.html#ad7249c675981ec57613b0f3d69a39342", null ], + [ "vtype", "classSpmvCacheKernel.html#a4a13093fa8aa4a3a053cf3d7122c6866", null ] +]; \ No newline at end of file diff --git a/docs/classSpmvCacheKernel.png b/docs/classSpmvCacheKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..49fe08e8d13a4c684ecd97f236788db3301a4b4e GIT binary patch literal 516 zcmV+f0{i`mP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004#NkllyXhQ?TBn2Fr5HLVLYJeJ!fJh9OBh)e~xjZu(9gKsz#{K8f-JYFxWX zs??-DiSqLZuV1o?8oHdQ#Z=W^TeX*{`E+*?e(AmL^QEJ^XI3NDujH^Ky{$==Bu`DM zBzbBW)y%B70RE^CKz9wHem*0xL#PXM0Co)Zr*e2w0bDhy0G^su08dRSfTt!Ez*Cb7 z;HgOk@YJLN+{?_YyD)&xnp6N!ji#=t1#qI~c-gbIt|zIecTcp(kJRhXHL0N^JiPpF zv&3rJ^Ik-EYDM4X30LW;Bb3w^1Iw?^?134ih6Xk za<~{yjq-Jctg5J~bBkuagVNE=raNlA=te8ck(Q%LHOTLjAcs}8iz*B6BAlX935$sU0000 + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SpmvKernel Member List
+
+
+ +

This is the complete list of members for SpmvKernel, including all inherited members.

+ + + +
fpLSpmvKernelprivatestatic
SpmvKernel(KernelParameters parameters, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth, boolean dbg)SpmvKernelinlineprotected
+
+ + + + diff --git a/docs/classSpmvKernel.html b/docs/classSpmvKernel.html new file mode 100644 index 0000000..eaf95b2 --- /dev/null +++ b/docs/classSpmvKernel.html @@ -0,0 +1,229 @@ + + + + + + +Spark: SpmvKernel Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+
+Inheritance diagram for SpmvKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 SpmvKernel (KernelParameters parameters, int inputWidth, int cacheSize, int indexWidth, int mantissaWidth, boolean dbg)
 
+ + + +

+Static Private Attributes

static final int fpL = 16
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SpmvKernel.SpmvKernel (KernelParameters parameters,
int inputWidth,
int cacheSize,
int indexWidth,
int mantissaWidth,
boolean dbg 
)
+
+inlineprotected
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
final int SpmvKernel.fpL = 16
+
+staticprivate
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classSpmvKernel.js b/docs/classSpmvKernel.js new file mode 100644 index 0000000..6c865e9 --- /dev/null +++ b/docs/classSpmvKernel.js @@ -0,0 +1,5 @@ +var classSpmvKernel = +[ + [ "SpmvKernel", "classSpmvKernel.html#ad09b317bceedc13d1f50865cbdb4cd91", null ], + [ "fpL", "classSpmvKernel.html#a0bf2a803445d2454781d5e09937de571", null ] +]; \ No newline at end of file diff --git a/docs/classSpmvKernel.png b/docs/classSpmvKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..57cf5d7157930ecdae54806ce205b770f1270a10 GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r53?z4+XPOVBBm#UwT>t<74`jZ0^R=}9&;%e0 zj1L?*z}k679?0b=3GxeO04f53tEWPY7#J8WJY5_^Dj46+b==mhz{8*}UHo6VUa_Ic zOFQNA_e|@nlPnaEy%QAt$PyU(HJLLs^m&EQv8#D&+Y|h6-2Yv@koBAT>AK_F=N>0m{-BQ{p`&bx_4^#xs^ZU_o?J$REuVEpv) zu_?ZHul!#2^pbbpOD&tbXS}NHpZ+Rjl6b`4%3!RcctGZ%rI_Hy$Nct*1~RR_&lQ2; O%HZkh=d#Wzp$P!&Ft!!| literal 0 HcmV?d00001 diff --git a/docs/classSpmvManager-members.html b/docs/classSpmvManager-members.html new file mode 100644 index 0000000..a8b3c2b --- /dev/null +++ b/docs/classSpmvManager-members.html @@ -0,0 +1,152 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SpmvManager Member List
+
+
+ +

This is the complete list of members for SpmvManager, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
addComputePipe(int id, int inputWidth)SpmvManagerinlinepackage
addPaddingKernel(String stream)SpmvManagerinlinepackage
addUnpaddingKernel(String stream, int bitwidth, int id)SpmvManagerinlinepackage
cacheSizeSpmvManagerprivate
DBG_PAR_CSR_CTLSpmvManagerprivatestatic
DBG_REDUCTION_KERNELSpmvManagerprivatestatic
DBG_SPMV_KERNELSpmvManagerprivatestatic
dramReductionEnabledSpmvManagerprivatestatic
FLOATING_POINT_LATENCYSpmvManagerprivatestatic
getComputeKernel(int id)SpmvManagerinlinepackage
getFanoutName(int id)SpmvManagerinlinepackage
getPaddingCycles(InterfaceParam outSizeBytes, InterfaceParam outWidthBytes)SpmvManagerinlineprivate
getPaddingKernel(String id)SpmvManagerinlinepackage
getReadControl(int id)SpmvManagerinlinepackage
getReductionKernel(int id)SpmvManagerinlinepackage
getUnpaddingKernel(String stream)SpmvManagerinlinepackage
indexWidthSpmvManagerprivatestatic
inputWidthSpmvManagerprivate
interfaceDefault()SpmvManagerinlineprivate
main(String[] args)SpmvManagerinlinestatic
mantissaWidthSpmvManagerprivatestatic
maxRowsSpmvManagerprivate
numPipesSpmvManagerprivate
setUpComputePipe(EngineInterface ei, int id, InterfaceParam vectorLoadCycles, InterfaceParam nPartitions, InterfaceParam n, InterfaceParam outResultStartAddress, InterfaceParam outResultSize, InterfaceParam vStartAddress, InterfaceParam colPtrStartAddress, InterfaceParam colptrSize, InterfaceParam indptrValuesStartAddress, InterfaceParam indptrValuesSize, InterfaceParam totalCycles, InterfaceParam reductionCycles, InterfaceParam nIterations)SpmvManagerinlinepackage
setupUnpaddingKernel(EngineInterface ei, String kernelId, String memoryStream, InterfaceParam size, InterfaceParam inputWidthBytes, InterfaceParam iterations, InterfaceParam startAddress)SpmvManagerinlineprivate
smallestMultipleLargerThan(InterfaceParam x, long y)SpmvManagerinlineprivate
SpmvManager(SpmvEngineParams ep)SpmvManagerinlinepackage
+
+ + + + diff --git a/docs/classSpmvManager.html b/docs/classSpmvManager.html new file mode 100644 index 0000000..d2c416f --- /dev/null +++ b/docs/classSpmvManager.html @@ -0,0 +1,1000 @@ + + + + + + +Spark: SpmvManager Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ + +
+
+Inheritance diagram for SpmvManager:
+
+
+ + + +
+ + + + +

+Static Public Member Functions

static void main (String[] args)
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Package Functions

 SpmvManager (SpmvEngineParams ep)
 
void addComputePipe (int id, int inputWidth)
 
DFELink addPaddingKernel (String stream)
 
DFELink addUnpaddingKernel (String stream, int bitwidth, int id)
 
String getComputeKernel (int id)
 
String getReductionKernel (int id)
 
String getPaddingKernel (String id)
 
String getReadControl (int id)
 
String getFanoutName (int id)
 
String getUnpaddingKernel (String stream)
 
void setUpComputePipe (EngineInterface ei, int id, InterfaceParam vectorLoadCycles, InterfaceParam nPartitions, InterfaceParam n, InterfaceParam outResultStartAddress, InterfaceParam outResultSize, InterfaceParam vStartAddress, InterfaceParam colPtrStartAddress, InterfaceParam colptrSize, InterfaceParam indptrValuesStartAddress, InterfaceParam indptrValuesSize, InterfaceParam totalCycles, InterfaceParam reductionCycles, InterfaceParam nIterations)
 
+ + + + + + + + + +

+Private Member Functions

void setupUnpaddingKernel (EngineInterface ei, String kernelId, String memoryStream, InterfaceParam size, InterfaceParam inputWidthBytes, InterfaceParam iterations, InterfaceParam startAddress)
 
InterfaceParam smallestMultipleLargerThan (InterfaceParam x, long y)
 
InterfaceParam getPaddingCycles (InterfaceParam outSizeBytes, InterfaceParam outWidthBytes)
 
EngineInterface interfaceDefault ()
 
+ + + + + + + + + +

+Private Attributes

final int cacheSize
 
final int inputWidth
 
final int maxRows
 
final int numPipes
 
+ + + + + + + + + + + + + + + +

+Static Private Attributes

static final int mantissaWidth = 53
 
static final int indexWidth = 32
 
static final int FLOATING_POINT_LATENCY = 16
 
static final boolean DBG_PAR_CSR_CTL = false
 
static final boolean DBG_SPMV_KERNEL = false
 
static final boolean DBG_REDUCTION_KERNEL = false
 
static final boolean dramReductionEnabled = false
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
SpmvManager.SpmvManager (SpmvEngineParams ep)
+
+inlinepackage
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SpmvManager.addComputePipe (int id,
int inputWidth 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
DFELink SpmvManager.addPaddingKernel (String stream)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
DFELink SpmvManager.addUnpaddingKernel (String stream,
int bitwidth,
int id 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getComputeKernel (int id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getFanoutName (int id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
InterfaceParam SpmvManager.getPaddingCycles (InterfaceParam outSizeBytes,
InterfaceParam outWidthBytes 
)
+
+inlineprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getPaddingKernel (String id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getReadControl (int id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getReductionKernel (int id)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
String SpmvManager.getUnpaddingKernel (String stream)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
EngineInterface SpmvManager.interfaceDefault ()
+
+inlineprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
static void SpmvManager.main (String[] args)
+
+inlinestatic
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void SpmvManager.setUpComputePipe (EngineInterface ei,
int id,
InterfaceParam vectorLoadCycles,
InterfaceParam nPartitions,
InterfaceParam n,
InterfaceParam outResultStartAddress,
InterfaceParam outResultSize,
InterfaceParam vStartAddress,
InterfaceParam colPtrStartAddress,
InterfaceParam colptrSize,
InterfaceParam indptrValuesStartAddress,
InterfaceParam indptrValuesSize,
InterfaceParam totalCycles,
InterfaceParam reductionCycles,
InterfaceParam nIterations 
)
+
+inlinepackage
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void SpmvManager.setupUnpaddingKernel (EngineInterface ei,
String kernelId,
String memoryStream,
InterfaceParam size,
InterfaceParam inputWidthBytes,
InterfaceParam iterations,
InterfaceParam startAddress 
)
+
+inlineprivate
+
+

An unpadding kernel reads a stream from memory and discards the bytes which were added to pad the data to a multiple of BURST_SIZE_BYTES.

+
Parameters
+ + + + +
sizesize in number of elements of the stream
memoryStreamthe stream from memory to unpad
inputWidthBytesthe number of bytes the kernel should read (and write) every cycle
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
InterfaceParam SpmvManager.smallestMultipleLargerThan (InterfaceParam x,
long y 
)
+
+inlineprivate
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.cacheSize
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean SpmvManager.DBG_PAR_CSR_CTL = false
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean SpmvManager.DBG_REDUCTION_KERNEL = false
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean SpmvManager.DBG_SPMV_KERNEL = false
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final boolean SpmvManager.dramReductionEnabled = false
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.FLOATING_POINT_LATENCY = 16
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.indexWidth = 32
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.inputWidth
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.mantissaWidth = 53
+
+staticprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.maxRows
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
final int SpmvManager.numPipes
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classSpmvManager.js b/docs/classSpmvManager.js new file mode 100644 index 0000000..8e376b4 --- /dev/null +++ b/docs/classSpmvManager.js @@ -0,0 +1,30 @@ +var classSpmvManager = +[ + [ "SpmvManager", "classSpmvManager.html#aaeaf51093060e192ab53048bf0c2fa9d", null ], + [ "addComputePipe", "classSpmvManager.html#ac993f1b6041594ae5bd7211d4f498702", null ], + [ "addPaddingKernel", "classSpmvManager.html#ab025ef7147d5d645028cc92b7d1a513f", null ], + [ "addUnpaddingKernel", "classSpmvManager.html#ae2858b4c2bd5a17d5710d0d34429e2b3", null ], + [ "getComputeKernel", "classSpmvManager.html#a6776e0fc817b9cce1698ad46bef5c1ad", null ], + [ "getFanoutName", "classSpmvManager.html#aa4b9b4fd7299e8967130613ce89df06e", null ], + [ "getPaddingCycles", "classSpmvManager.html#a64afe0643711d9cd06053a68f187f8da", null ], + [ "getPaddingKernel", "classSpmvManager.html#a0cc931d1320ec4754066dacceeaff9c0", null ], + [ "getReadControl", "classSpmvManager.html#aca5d9419bca8dbc02b44df878cac0009", null ], + [ "getReductionKernel", "classSpmvManager.html#a0e7f3c94df7eafa7a899a2447f16155d", null ], + [ "getUnpaddingKernel", "classSpmvManager.html#aff135aa6706cfaf3cea42f1353dd3ea7", null ], + [ "interfaceDefault", "classSpmvManager.html#ad0360a20a24483e22664a4bda8428ec6", null ], + [ "main", "classSpmvManager.html#abf7df885f5ea650b0128628cad8bf33b", null ], + [ "setUpComputePipe", "classSpmvManager.html#a8f777c0e6b5572b85bf90427b1419039", null ], + [ "setupUnpaddingKernel", "classSpmvManager.html#a42510179831b9c539721ffbf0506c0f2", null ], + [ "smallestMultipleLargerThan", "classSpmvManager.html#a3297286373eb2b5536b6cc04481cc996", null ], + [ "cacheSize", "classSpmvManager.html#a9a9f9ca14bf99119d5ed0d7106acdcd9", null ], + [ "DBG_PAR_CSR_CTL", "classSpmvManager.html#a234ea438d3c8363b41db2581e3d8a51a", null ], + [ "DBG_REDUCTION_KERNEL", "classSpmvManager.html#a5c29c11c95c8f9980aa3201d8f25ff3d", null ], + [ "DBG_SPMV_KERNEL", "classSpmvManager.html#aece403b7ff81eeebfaf75b35aacb2b1f", null ], + [ "dramReductionEnabled", "classSpmvManager.html#adfc3a8c884874f553215941bf86692fa", null ], + [ "FLOATING_POINT_LATENCY", "classSpmvManager.html#a3a947b39653f09305c7712af18ddd113", null ], + [ "indexWidth", "classSpmvManager.html#a01ee1f96ba381149f4233fae1c87c821", null ], + [ "inputWidth", "classSpmvManager.html#a778e13e71f500522f13c6207e6f4e8a4", null ], + [ "mantissaWidth", "classSpmvManager.html#a6c6ea06d3d9cb5f752e3cbc3ca7cbafa", null ], + [ "maxRows", "classSpmvManager.html#a5746b324d3b38fc407d1577739b969ef", null ], + [ "numPipes", "classSpmvManager.html#a2b1f61839183d1301ddc3975f4ad3ae9", null ] +]; \ No newline at end of file diff --git a/docs/classSpmvManager.png b/docs/classSpmvManager.png new file mode 100644 index 0000000000000000000000000000000000000000..d86ac1b1309958e5b902526682d8496c2f47d1b0 GIT binary patch literal 547 zcmV+;0^I$HP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d00059NklO$T>S>W@$NKzXipN>%k-6|@Id^!t-y%z?@_S>{Vum$H|ovwh~e?LPzg zmb!FYvLn}A3J>m9jrDu`x&@pwYvbW<>zY9g$ zR9#4VA9P0uVV=K7wQ79nsp#H(vg-e=SWVSEc{B80zmJ1_zMj47Iyc$+OsJ}k>MKDa zA`=Agwq5`;Gz;{4O(M+#{c`4zrh&e&>J|uKObY}sqy+*P(gFbtX@LNSv_JquS|ETS zEl~Os5t$(b;CU?&z>xk5l*$93tFkoWTLh)?`7!3il`jBYbwGJ`8>YoPNb;Z@x@|OT zGxoK3c9Xi=<%9F11!My^V;jqQnK0f}F_@zuu^m7bf7u)?cfw`WMGuSNS(cvQytDF+ za|tTNa1V;kw_Q_JCm;de+|Lamgn9oS)v7xMrOK*tn$=X@?alBXx5e3`9|bk}dMu)g l3v7KR0EYCHAQ6!X`T + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SpmvReductionKernel Member List
+
+
+ +

This is the complete list of members for SpmvReductionKernel, including all inherited members.

+ + +
SpmvReductionKernel(KernelParameters parameters, int fpl, int maxRows)SpmvReductionKernelinlineprotected
+
+ + + + diff --git a/docs/classSpmvReductionKernel.html b/docs/classSpmvReductionKernel.html new file mode 100644 index 0000000..a545599 --- /dev/null +++ b/docs/classSpmvReductionKernel.html @@ -0,0 +1,184 @@ + + + + + + +Spark: SpmvReductionKernel Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SpmvReductionKernel Class Reference
+
+
+
+Inheritance diagram for SpmvReductionKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 SpmvReductionKernel (KernelParameters parameters, int fpl, int maxRows)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
SpmvReductionKernel.SpmvReductionKernel (KernelParameters parameters,
int fpl,
int maxRows 
)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classSpmvReductionKernel.js b/docs/classSpmvReductionKernel.js new file mode 100644 index 0000000..d2ac2bf --- /dev/null +++ b/docs/classSpmvReductionKernel.js @@ -0,0 +1,4 @@ +var classSpmvReductionKernel = +[ + [ "SpmvReductionKernel", "classSpmvReductionKernel.html#a6cf50bef530943f0e812c5a684b2b26a", null ] +]; \ No newline at end of file diff --git a/docs/classSpmvReductionKernel.png b/docs/classSpmvReductionKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..0a468e327ad1825014a9e00aee7055edb4df075f GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^9Y7qw!3-q7a-LNJQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;#OHD#{yZ(5+eaJ56y$Gmro_1RW_{q;lAL8+v0mZ);KN^&Pwa?-D+8*A-^4mqJ<^x5R_v`xw_e2zAKY?&=Z7xU+bT<0c-DGTsI& zM~1*AhD9ulE}TpqLM#HR9130n4pS5wG~g2dxsRO5VNGV3Uk*`deIjfpL$G@y^KL%> z`^=kfs94Qh*0|@yj63u8i@f;SG57sX5f!G1G1tQHIGj4>a(_F!+`(V50{&YnPn|K< zw@dBg+iX9p>}J~4^3Vyj5ppt3zZdkK+QPeY_tp7n@oRW5EC@fd`}28@vU3l^V&xNF zJy$p%rY_8K;k)Cjv{z2Mw%Tf66Bej_zTI(2!tqVkjD{~v|5#n=cz3>LGur}j_sieb zt^TImQFgY@l5a`su62@CxpB(+v*jM-&jEVr|8FLcPqiCo%+!6L?~)yCef?ng8DLB@ Nc)I$ztaD0e0sx{Y>#zU- literal 0 HcmV?d00001 diff --git a/docs/classUnpaddingKernel-members.html b/docs/classUnpaddingKernel-members.html new file mode 100644 index 0000000..86a5852 --- /dev/null +++ b/docs/classUnpaddingKernel-members.html @@ -0,0 +1,126 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
UnpaddingKernel Member List
+
+
+ +

This is the complete list of members for UnpaddingKernel, including all inherited members.

+ + +
UnpaddingKernel(KernelParameters parameters, int bitWidth, int id)UnpaddingKernelinlineprotected
+
+ + + + diff --git a/docs/classUnpaddingKernel.html b/docs/classUnpaddingKernel.html new file mode 100644 index 0000000..cc9012c --- /dev/null +++ b/docs/classUnpaddingKernel.html @@ -0,0 +1,184 @@ + + + + + + +Spark: UnpaddingKernel Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
UnpaddingKernel Class Reference
+
+
+
+Inheritance diagram for UnpaddingKernel:
+
+
+ + + +
+ + + + +

+Protected Member Functions

 UnpaddingKernel (KernelParameters parameters, int bitWidth, int id)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
UnpaddingKernel.UnpaddingKernel (KernelParameters parameters,
int bitWidth,
int id 
)
+
+inlineprotected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classUnpaddingKernel.js b/docs/classUnpaddingKernel.js new file mode 100644 index 0000000..7dfad21 --- /dev/null +++ b/docs/classUnpaddingKernel.js @@ -0,0 +1,4 @@ +var classUnpaddingKernel = +[ + [ "UnpaddingKernel", "classUnpaddingKernel.html#a52a201168b15d7ab1e1378178a5abd5e", null ] +]; \ No newline at end of file diff --git a/docs/classUnpaddingKernel.png b/docs/classUnpaddingKernel.png new file mode 100644 index 0000000000000000000000000000000000000000..a542a698e8c4a6ab398e9bc1904e96f60a7136b5 GIT binary patch literal 473 zcmV;~0Ve*5P)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0004KNklV!KN<(caSJ#l;aU!0HhP20)fUk&%gn_8429Y*ZRS*89trQ(r zUYq8+?YPj{W_8bd#=e)sK9}HYn`M83OEC;DnTx(Rk|^XN9oGBKXEPqVDDHNno>`mmW? zCu|uAjJ#(nkDF6l9d6YNTbtnAwih<@uTB}(cGxACuG^SjS&w&e-m`YPwUo^{^yI4_ zT0?d{xwsS?YXkcC^(V|b&!W$4=eIS`y+2%A?R|g? + + + + + +Spark: Class Index + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Class Index
+
+
+
B | D | E | F | G | I | L | M | P | R | S | U
+ + + + + + + + + + + + + + + + + +
  B  
+
  F  
+
  M  
+
  S  
+
SpmvHash   
SpmvImplementationLoader (spark::runtime)   
Benchmark (spark::dse)   FstSpmvArchitecture (spark::spmv)   MmReader (spark::io)   SharedLibLoader (spark::execution)   SpmvKernel   
BramSpmvReductionKernel   
  G  
+
ParallelCsrReadControl.Mode   SimpleSpmvArchitecture (spark::spmv)   SpmvManager   
  D  
+
  P  
+
SimpleSpmvArchitectureSpace (spark::spmv)   SpmvReductionKernel   
GeneratedImplementation (spark::runtime)   SkipEmptyRowsArchitecture (spark::spmv)   
  U  
+
DfeBiCgSolver (spark::sparse_linear_solvers)   GeneratedSpmvImplementation (spark::runtime)   PaddingKernel   Solver (spark::sparse_linear_solvers)   
DfeCgSolver (spark::sparse_linear_solvers)   GeneratedSpmvImplementationMock (spark::runtime)   ParallelCsrReadControl   SparkCooMatrix (spark::sparse)   UnpaddingKernel   
DramSpmvReductionKernel   
  I  
+
Partition (spark::spmv)   SparkDse (spark::dse)   
  i  
+
DseParameters (spark::dse)   PartitionWriteResult   SpmvArchitecture (spark::spmv)   
DseResult (spark::dse)   ImplementationLoader (spark::runtime)   PrefetchingArchitecture (spark::spmv)   SpmvArchitectureSpace (spark::spmv)   indptr_value (spark::spmv)   
  E  
+
ImplementationParameters (spark::model)   
  R  
+
SpmvCacheKernel   
  L  
+
SpmvEqual   
EigenSolver (spark::sparse_linear_solvers)   Range (spark::utils)   
LogicResourceUsage (spark::model)   
+
B | D | E | F | G | I | L | M | P | R | S | U
+
+
+ + + + diff --git a/docs/classspark_1_1dse_1_1Benchmark-members.html b/docs/classspark_1_1dse_1_1Benchmark-members.html new file mode 100644 index 0000000..a9a52d0 --- /dev/null +++ b/docs/classspark_1_1dse_1_1Benchmark-members.html @@ -0,0 +1,129 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::dse::Benchmark Member List
+
+
+ +

This is the complete list of members for spark::dse::Benchmark, including all inherited members.

+ + + + + +
add_matrix_path(std::string path)spark::dse::Benchmarkinline
get_benchmark_size() const spark::dse::Benchmarkinline
get_matrix_path(int id) const spark::dse::Benchmarkinline
pathsspark::dse::Benchmarkprivate
+
+ + + + diff --git a/docs/classspark_1_1dse_1_1Benchmark.html b/docs/classspark_1_1dse_1_1Benchmark.html new file mode 100644 index 0000000..5eefdef --- /dev/null +++ b/docs/classspark_1_1dse_1_1Benchmark.html @@ -0,0 +1,240 @@ + + + + + + +Spark: spark::dse::Benchmark Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::dse::Benchmark Class Reference
+
+
+ +

#include <Dse.hpp>

+ + + + + + + + +

+Public Member Functions

std::string get_matrix_path (int id) const
 
void add_matrix_path (std::string path)
 
int get_benchmark_size () const
 
+ + + +

+Private Attributes

std::vector< std::string > paths
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void spark::dse::Benchmark::add_matrix_path (std::string path)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::dse::Benchmark::get_benchmark_size () const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
std::string spark::dse::Benchmark::get_matrix_path (int id) const
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::vector<std::string> spark::dse::Benchmark::paths
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1dse_1_1Benchmark.js b/docs/classspark_1_1dse_1_1Benchmark.js new file mode 100644 index 0000000..e45dbdb --- /dev/null +++ b/docs/classspark_1_1dse_1_1Benchmark.js @@ -0,0 +1,7 @@ +var classspark_1_1dse_1_1Benchmark = +[ + [ "add_matrix_path", "classspark_1_1dse_1_1Benchmark.html#a18854065058a9f70a0fbb4127212d81f", null ], + [ "get_benchmark_size", "classspark_1_1dse_1_1Benchmark.html#a1692f6d32fb3d2a6de8ad8c85cf7fc39", null ], + [ "get_matrix_path", "classspark_1_1dse_1_1Benchmark.html#a42578888522f08d21a620fa6ce17cfb3", null ], + [ "paths", "classspark_1_1dse_1_1Benchmark.html#aa21c70d1c142db7c1ee3fb81fc5e81c5", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1dse_1_1DseParameters-members.html b/docs/classspark_1_1dse_1_1DseParameters-members.html new file mode 100644 index 0000000..1d08c3a --- /dev/null +++ b/docs/classspark_1_1dse_1_1DseParameters-members.html @@ -0,0 +1,129 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/classspark_1_1dse_1_1DseParameters.html b/docs/classspark_1_1dse_1_1DseParameters.html new file mode 100644 index 0000000..1aaf049 --- /dev/null +++ b/docs/classspark_1_1dse_1_1DseParameters.html @@ -0,0 +1,192 @@ + + + + + + +Spark: spark::dse::DseParameters Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::dse::DseParameters Class Reference
+
+
+ +

#include <Dse.hpp>

+ + + + + + + + + + +

+Public Attributes

bool gflopsOnly
 
spark::utils::Range numPipesRange {1, 4, 1}
 
spark::utils::Range inputWidthRange {1, 3, 1}
 
spark::utils::Range cacheSizeRange {1024, 2048, 1024}
 
+

Member Data Documentation

+ +
+
+ + + + +
spark::utils::Range spark::dse::DseParameters::cacheSizeRange {1024, 2048, 1024}
+
+ +
+
+ +
+
+ + + + +
bool spark::dse::DseParameters::gflopsOnly
+
+ +
+
+ +
+
+ + + + +
spark::utils::Range spark::dse::DseParameters::inputWidthRange {1, 3, 1}
+
+ +
+
+ +
+
+ + + + +
spark::utils::Range spark::dse::DseParameters::numPipesRange {1, 4, 1}
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1dse_1_1DseParameters.js b/docs/classspark_1_1dse_1_1DseParameters.js new file mode 100644 index 0000000..1261af8 --- /dev/null +++ b/docs/classspark_1_1dse_1_1DseParameters.js @@ -0,0 +1,7 @@ +var classspark_1_1dse_1_1DseParameters = +[ + [ "cacheSizeRange", "classspark_1_1dse_1_1DseParameters.html#a407b33c26d55c84c1436a3535576f380", null ], + [ "gflopsOnly", "classspark_1_1dse_1_1DseParameters.html#a903571a00336065eb295887170686770", null ], + [ "inputWidthRange", "classspark_1_1dse_1_1DseParameters.html#af54d3b84a9781ce472374fb4d4dbecb1", null ], + [ "numPipesRange", "classspark_1_1dse_1_1DseParameters.html#a312071f767470577bf393c3d190d72bd", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1dse_1_1DseResult-members.html b/docs/classspark_1_1dse_1_1DseResult-members.html new file mode 100644 index 0000000..61b600e --- /dev/null +++ b/docs/classspark_1_1dse_1_1DseResult-members.html @@ -0,0 +1,129 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::dse::DseResult Member List
+
+
+ +

This is the complete list of members for spark::dse::DseResult, including all inherited members.

+ + + + + +
bestArchitecturespark::dse::DseResult
DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)spark::dse::DseResultinline
DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)spark::dse::DseResultinline
matricesspark::dse::DseResult
+
+ + + + diff --git a/docs/classspark_1_1dse_1_1DseResult.html b/docs/classspark_1_1dse_1_1DseResult.html new file mode 100644 index 0000000..e286226 --- /dev/null +++ b/docs/classspark_1_1dse_1_1DseResult.html @@ -0,0 +1,232 @@ + + + + + + +Spark: spark::dse::DseResult Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::dse::DseResult Class Reference
+
+
+ +

#include <Dse.hpp>

+ + + + + + +

+Public Member Functions

 DseResult (std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
 
 DseResult (std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
 
+ + + + + +

+Public Attributes

std::shared_ptr
+< spark::spmv::SpmvArchitecture > 
bestArchitecture
 
std::vector< std::string > matrices
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
spark::dse::DseResult::DseResult (std::string path,
std::shared_ptr< spark::spmv::SpmvArchitecture > arch 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
spark::dse::DseResult::DseResult (std::shared_ptr< spark::spmv::SpmvArchitecture > arch)
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
std::shared_ptr<spark::spmv::SpmvArchitecture> spark::dse::DseResult::bestArchitecture
+
+ +
+
+ +
+
+ + + + +
std::vector<std::string> spark::dse::DseResult::matrices
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1dse_1_1DseResult.js b/docs/classspark_1_1dse_1_1DseResult.js new file mode 100644 index 0000000..f9f4755 --- /dev/null +++ b/docs/classspark_1_1dse_1_1DseResult.js @@ -0,0 +1,7 @@ +var classspark_1_1dse_1_1DseResult = +[ + [ "DseResult", "classspark_1_1dse_1_1DseResult.html#a1d1342fbcf4346f77de3cb29c23622ba", null ], + [ "DseResult", "classspark_1_1dse_1_1DseResult.html#ac8b6f838e0112d684058ee911b9e2ab5", null ], + [ "bestArchitecture", "classspark_1_1dse_1_1DseResult.html#a2a23395d873d124a4da624ed94ab4d76", null ], + [ "matrices", "classspark_1_1dse_1_1DseResult.html#a797ff2ef1c189cb2cff7fa18cfede2a9", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1dse_1_1SparkDse-members.html b/docs/classspark_1_1dse_1_1SparkDse-members.html new file mode 100644 index 0000000..6a007e3 --- /dev/null +++ b/docs/classspark_1_1dse_1_1SparkDse-members.html @@ -0,0 +1,127 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::dse::SparkDse Member List
+
+
+ +

This is the complete list of members for spark::dse::SparkDse, including all inherited members.

+ + + +
run(const Benchmark &benchmark, const DseParameters &dseParams)spark::dse::SparkDse
SparkDse()spark::dse::SparkDseinline
+
+ + + + diff --git a/docs/classspark_1_1dse_1_1SparkDse.html b/docs/classspark_1_1dse_1_1SparkDse.html new file mode 100644 index 0000000..ecd2016 --- /dev/null +++ b/docs/classspark_1_1dse_1_1SparkDse.html @@ -0,0 +1,191 @@ + + + + + + +Spark: spark::dse::SparkDse Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::dse::SparkDse Class Reference
+
+
+ +

#include <Dse.hpp>

+ + + + + + +

+Public Member Functions

 SparkDse ()
 
std::vector< DseResult > run (const Benchmark &benchmark, const DseParameters &dseParams)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::dse::SparkDse::SparkDse ()
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
std::vector< DseResult > spark::dse::SparkDse::run (const Benchmark & benchmark,
const DseParameters & dseParams 
)
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/classspark_1_1dse_1_1SparkDse.js b/docs/classspark_1_1dse_1_1SparkDse.js new file mode 100644 index 0000000..d11b279 --- /dev/null +++ b/docs/classspark_1_1dse_1_1SparkDse.js @@ -0,0 +1,5 @@ +var classspark_1_1dse_1_1SparkDse = +[ + [ "SparkDse", "classspark_1_1dse_1_1SparkDse.html#acf3f66892ae92b0d4c4d0e250da9ebde", null ], + [ "run", "classspark_1_1dse_1_1SparkDse.html#abefe26e252597bb164ef8236e5460210", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1execution_1_1SharedLibLoader-members.html b/docs/classspark_1_1execution_1_1SharedLibLoader-members.html new file mode 100644 index 0000000..9bdd89b --- /dev/null +++ b/docs/classspark_1_1execution_1_1SharedLibLoader-members.html @@ -0,0 +1,131 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/classspark_1_1execution_1_1SharedLibLoader.html b/docs/classspark_1_1execution_1_1SharedLibLoader.html new file mode 100644 index 0000000..7913af9 --- /dev/null +++ b/docs/classspark_1_1execution_1_1SharedLibLoader.html @@ -0,0 +1,257 @@ + + + + + + +Spark: spark::execution::SharedLibLoader Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::execution::SharedLibLoader Class Reference
+
+
+ +

#include <Execution.hpp>

+ + + + + + + + + + +

+Public Member Functions

 SharedLibLoader (std::string _libDirectoryPath)
 
std::vector< std::string > available_libraries ()
 
bool load_library (std::string path)
 
bool unload_library ()
 
+ + + + + +

+Private Attributes

std::string libPath
 
void * handle
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
spark::execution::SharedLibLoader::SharedLibLoader (std::string _libDirectoryPath)
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
vector< string > spark::execution::SharedLibLoader::available_libraries ()
+
+ +
+
+ +
+
+ + + + + + + + +
bool spark::execution::SharedLibLoader::load_library (std::string path)
+
+ +
+
+ +
+
+ + + + + + + +
bool spark::execution::SharedLibLoader::unload_library ()
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
void* spark::execution::SharedLibLoader::handle
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
std::string spark::execution::SharedLibLoader::libPath
+
+private
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/classspark_1_1execution_1_1SharedLibLoader.js b/docs/classspark_1_1execution_1_1SharedLibLoader.js new file mode 100644 index 0000000..80910aa --- /dev/null +++ b/docs/classspark_1_1execution_1_1SharedLibLoader.js @@ -0,0 +1,9 @@ +var classspark_1_1execution_1_1SharedLibLoader = +[ + [ "SharedLibLoader", "classspark_1_1execution_1_1SharedLibLoader.html#ab53348ee739c8cae93b1be38e0ddb342", null ], + [ "available_libraries", "classspark_1_1execution_1_1SharedLibLoader.html#a024d798f951a004334aeaddc7b086f61", null ], + [ "load_library", "classspark_1_1execution_1_1SharedLibLoader.html#aa04c935e0dd9c179246655474c951ad1", null ], + [ "unload_library", "classspark_1_1execution_1_1SharedLibLoader.html#aaa01ed393ccd28d202950dca243389a8", null ], + [ "handle", "classspark_1_1execution_1_1SharedLibLoader.html#a1a9fe4ed515e64c4b5a0cd24233599e7", null ], + [ "libPath", "classspark_1_1execution_1_1SharedLibLoader.html#af01a44b23ea21a6f653194aa8f312ee2", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1io_1_1MmReader-members.html b/docs/classspark_1_1io_1_1MmReader-members.html new file mode 100644 index 0000000..8384613 --- /dev/null +++ b/docs/classspark_1_1io_1_1MmReader-members.html @@ -0,0 +1,142 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/classspark_1_1io_1_1MmReader.html b/docs/classspark_1_1io_1_1MmReader.html new file mode 100644 index 0000000..f9a4f22 --- /dev/null +++ b/docs/classspark_1_1io_1_1MmReader.html @@ -0,0 +1,586 @@ + + + + + + +Spark: spark::io::MmReader< value_type > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::io::MmReader< value_type > Class Template Reference
+
+
+ +

#include <Io.hpp>

+ + + + + + + + + + +

+Public Member Functions

 MmReader (std::string _path)
 
virtual ~MmReader ()
 
std::vector< double > readVector ()
 
spark::sparse::SparkCooMatrix
+< value_type > 
mmreadMatrix (std::string path)
 
+ + + + + +

+Private Types

using SparseMatrix = spark::sparse::SparkCooMatrix< value_type >
 
using CoordType = typename SparseMatrix::CoordType
 
+ + + + + + + +

+Private Member Functions

SparseMatrix::CoordType mmparse (const std::string line)
 
void parseHeader (std::string line)
 
bool parseHeader (bool pprint=false)
 
+ + + + + + + + + + + + + + + + + +

+Private Attributes

bool sparse = false
 
bool symmetric = false
 
bool matrix = false
 
int ncols
 
int nrows
 
int nnzs = -1
 
std::ifstream * f
 
std::string path
 
+

Member Typedef Documentation

+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
using spark::io::MmReader< value_type >::CoordType = typename SparseMatrix::CoordType
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
using spark::io::MmReader< value_type >::SparseMatrix = spark::sparse::SparkCooMatrix<value_type>
+
+private
+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + + + + + +
spark::io::MmReader< value_type >::MmReader (std::string _path)
+
+inline
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + + + + +
virtual spark::io::MmReader< value_type >::~MmReader ()
+
+inlinevirtual
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + + + + + +
SparseMatrix::CoordType spark::io::MmReader< value_type >::mmparse (const std::string line)
+
+inlineprivate
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + + + + + +
spark::sparse::SparkCooMatrix<value_type> spark::io::MmReader< value_type >::mmreadMatrix (std::string path)
+
+inline
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + + + + + +
void spark::io::MmReader< value_type >::parseHeader (std::string line)
+
+inlineprivate
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + + + + + +
bool spark::io::MmReader< value_type >::parseHeader (bool pprint = false)
+
+inlineprivate
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + + + + +
std::vector<double> spark::io::MmReader< value_type >::readVector ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
std::ifstream* spark::io::MmReader< value_type >::f
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
bool spark::io::MmReader< value_type >::matrix = false
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
int spark::io::MmReader< value_type >::ncols
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
int spark::io::MmReader< value_type >::nnzs = -1
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
int spark::io::MmReader< value_type >::nrows
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
std::string spark::io::MmReader< value_type >::path
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
bool spark::io::MmReader< value_type >::sparse = false
+
+private
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + +
bool spark::io::MmReader< value_type >::symmetric = false
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1io_1_1MmReader.js b/docs/classspark_1_1io_1_1MmReader.js new file mode 100644 index 0000000..fa7b097 --- /dev/null +++ b/docs/classspark_1_1io_1_1MmReader.js @@ -0,0 +1,20 @@ +var classspark_1_1io_1_1MmReader = +[ + [ "CoordType", "classspark_1_1io_1_1MmReader.html#a43348db7743f21cff1854197cf7f9819", null ], + [ "SparseMatrix", "classspark_1_1io_1_1MmReader.html#a4b6628e5d0886325e152e8ffdae1964c", null ], + [ "MmReader", "classspark_1_1io_1_1MmReader.html#a18da82e5b71af2ce6f5946f7b66f8cd5", null ], + [ "~MmReader", "classspark_1_1io_1_1MmReader.html#afff251fc01bc6a47007e5b562f002ed3", null ], + [ "mmparse", "classspark_1_1io_1_1MmReader.html#a73bef88acba33d35b9f714365456ab39", null ], + [ "mmreadMatrix", "classspark_1_1io_1_1MmReader.html#ae0ed6d286d9c5c08ad3bd3e910f3554a", null ], + [ "parseHeader", "classspark_1_1io_1_1MmReader.html#a5f474abc81a8d634a45b80750d816df9", null ], + [ "parseHeader", "classspark_1_1io_1_1MmReader.html#a3575f75893a9ece651ef17b111d959fd", null ], + [ "readVector", "classspark_1_1io_1_1MmReader.html#a3aa3d0ea6867f58d326674b632f7b045", null ], + [ "f", "classspark_1_1io_1_1MmReader.html#a65848ca959d0961ab594205b40335072", null ], + [ "matrix", "classspark_1_1io_1_1MmReader.html#a8bf3a76c76dad47d667f28052adbfaa5", null ], + [ "ncols", "classspark_1_1io_1_1MmReader.html#a7b783ac977c5badcd28069cea5368adc", null ], + [ "nnzs", "classspark_1_1io_1_1MmReader.html#a55b7ae127a34af4d09bca7079c443866", null ], + [ "nrows", "classspark_1_1io_1_1MmReader.html#a3698c442e4b847c2f1479dd11fef9a15", null ], + [ "path", "classspark_1_1io_1_1MmReader.html#a853387b508034ba82ede19c2500c5030", null ], + [ "sparse", "classspark_1_1io_1_1MmReader.html#abaeb856fe8052dada1094aeeba575482", null ], + [ "symmetric", "classspark_1_1io_1_1MmReader.html#a339fd452b0db39fdabb6fc9b9994624d", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1model_1_1ImplementationParameters-members.html b/docs/classspark_1_1model_1_1ImplementationParameters-members.html new file mode 100644 index 0000000..5d45bdb --- /dev/null +++ b/docs/classspark_1_1model_1_1ImplementationParameters-members.html @@ -0,0 +1,130 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::model::ImplementationParameters Member List
+
+
+ +

This is the complete list of members for spark::model::ImplementationParameters, including all inherited members.

+ + + + + + +
ImplementationParameters(const LogicResourceUsage &_ru, double _memoryBandwidth)spark::model::ImplementationParametersinline
memoryBandwidthspark::model::ImplementationParameters
operator<(const ImplementationParameters &other) const spark::model::ImplementationParametersinline
ruspark::model::ImplementationParameters
to_string()spark::model::ImplementationParametersinline
+
+ + + + diff --git a/docs/classspark_1_1model_1_1ImplementationParameters.html b/docs/classspark_1_1model_1_1ImplementationParameters.html new file mode 100644 index 0000000..65a48ba --- /dev/null +++ b/docs/classspark_1_1model_1_1ImplementationParameters.html @@ -0,0 +1,257 @@ + + + + + + +Spark: spark::model::ImplementationParameters Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::model::ImplementationParameters Class Reference
+
+
+ +

#include <Model.hpp>

+ + + + + + + + +

+Public Member Functions

 ImplementationParameters (const LogicResourceUsage &_ru, double _memoryBandwidth)
 
std::string to_string ()
 
bool operator< (const ImplementationParameters &other) const
 
+ + + + + +

+Public Attributes

LogicResourceUsage ru
 
double memoryBandwidth
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
spark::model::ImplementationParameters::ImplementationParameters (const LogicResourceUsage & _ru,
double _memoryBandwidth 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
bool spark::model::ImplementationParameters::operator< (const ImplementationParameters & other) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string spark::model::ImplementationParameters::to_string ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
double spark::model::ImplementationParameters::memoryBandwidth
+
+ +
+
+ +
+
+ + + + +
LogicResourceUsage spark::model::ImplementationParameters::ru
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1model_1_1ImplementationParameters.js b/docs/classspark_1_1model_1_1ImplementationParameters.js new file mode 100644 index 0000000..949a839 --- /dev/null +++ b/docs/classspark_1_1model_1_1ImplementationParameters.js @@ -0,0 +1,8 @@ +var classspark_1_1model_1_1ImplementationParameters = +[ + [ "ImplementationParameters", "classspark_1_1model_1_1ImplementationParameters.html#af2b90d99043967462da25c003c7f7e17", null ], + [ "operator<", "classspark_1_1model_1_1ImplementationParameters.html#acf5199cb8cb126ddb4977b02f1cebddd", null ], + [ "to_string", "classspark_1_1model_1_1ImplementationParameters.html#a0e71a3875d830daed887869a9f86c374", null ], + [ "memoryBandwidth", "classspark_1_1model_1_1ImplementationParameters.html#a7935fb3d5d9d782c66530a541d6f705c", null ], + [ "ru", "classspark_1_1model_1_1ImplementationParameters.html#ac82ef6a8d3fd73cd40fff27d1ec9b943", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1model_1_1LogicResourceUsage-members.html b/docs/classspark_1_1model_1_1LogicResourceUsage-members.html new file mode 100644 index 0000000..fd51e1c --- /dev/null +++ b/docs/classspark_1_1model_1_1LogicResourceUsage-members.html @@ -0,0 +1,137 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::model::LogicResourceUsage Member List
+
+ +
+ + + + diff --git a/docs/classspark_1_1model_1_1LogicResourceUsage.html b/docs/classspark_1_1model_1_1LogicResourceUsage.html new file mode 100644 index 0000000..2778c91 --- /dev/null +++ b/docs/classspark_1_1model_1_1LogicResourceUsage.html @@ -0,0 +1,426 @@ + + + + + + +Spark: spark::model::LogicResourceUsage Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::model::LogicResourceUsage Class Reference
+
+
+ +

#include <Model.hpp>

+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 LogicResourceUsage ()
 
 LogicResourceUsage (int _l, int _f, int _b, int _d)
 
 LogicResourceUsage (const LogicResourceUsage &ru)
 
std::string to_string ()
 
const LogicResourceUsage operator+ (const LogicResourceUsage &ru) const
 
const LogicResourceUsage operator* (int x) const
 
const LogicResourceUsage operator* (double x) const
 
const bool operator< (const LogicResourceUsage &ru) const
 
+ + + + + + + + + +

+Public Attributes

int luts
 
int ffs
 
int brams
 
int dsps
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::model::LogicResourceUsage::LogicResourceUsage ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::model::LogicResourceUsage::LogicResourceUsage (int _l,
int _f,
int _b,
int _d 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
spark::model::LogicResourceUsage::LogicResourceUsage (const LogicResourceUsage & ru)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
const LogicResourceUsage spark::model::LogicResourceUsage::operator* (int x) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const LogicResourceUsage spark::model::LogicResourceUsage::operator* (double x) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const LogicResourceUsage spark::model::LogicResourceUsage::operator+ (const LogicResourceUsage & ru) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const bool spark::model::LogicResourceUsage::operator< (const LogicResourceUsage & ru) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string spark::model::LogicResourceUsage::to_string ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
int spark::model::LogicResourceUsage::brams
+
+ +
+
+ +
+
+ + + + +
int spark::model::LogicResourceUsage::dsps
+
+ +
+
+ +
+
+ + + + +
int spark::model::LogicResourceUsage::ffs
+
+ +
+
+ +
+
+ + + + +
int spark::model::LogicResourceUsage::luts
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1model_1_1LogicResourceUsage.js b/docs/classspark_1_1model_1_1LogicResourceUsage.js new file mode 100644 index 0000000..bce1eee --- /dev/null +++ b/docs/classspark_1_1model_1_1LogicResourceUsage.js @@ -0,0 +1,15 @@ +var classspark_1_1model_1_1LogicResourceUsage = +[ + [ "LogicResourceUsage", "classspark_1_1model_1_1LogicResourceUsage.html#a5b88cae38db7b5ab535f4a17fa643a15", null ], + [ "LogicResourceUsage", "classspark_1_1model_1_1LogicResourceUsage.html#a64aef671cc1360f9c760eddecc95dfe5", null ], + [ "LogicResourceUsage", "classspark_1_1model_1_1LogicResourceUsage.html#a303a7df506637540e2b7eb4d871f9029", null ], + [ "operator*", "classspark_1_1model_1_1LogicResourceUsage.html#accca14ba38323db0242d77a654b22520", null ], + [ "operator*", "classspark_1_1model_1_1LogicResourceUsage.html#ae939cb8a86e0fe1209d312317627d3a1", null ], + [ "operator+", "classspark_1_1model_1_1LogicResourceUsage.html#a48bf8cd8225540f1fa0da63719657e6a", null ], + [ "operator<", "classspark_1_1model_1_1LogicResourceUsage.html#aea20a053d751c2de91d491e38688f776", null ], + [ "to_string", "classspark_1_1model_1_1LogicResourceUsage.html#a0f6ff26d2cab74fc11bca87f60bdce35", null ], + [ "brams", "classspark_1_1model_1_1LogicResourceUsage.html#a9e1bfd322976881da5fc6d0501ecbf32", null ], + [ "dsps", "classspark_1_1model_1_1LogicResourceUsage.html#adb488affc0a051d6c8458d9e2a35d201", null ], + [ "ffs", "classspark_1_1model_1_1LogicResourceUsage.html#ad67dec36e8bd5ba1937687b538d97a8e", null ], + [ "luts", "classspark_1_1model_1_1LogicResourceUsage.html#a620a5a18ce206d8dbc7cd5adbcb48d7b", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation-members.html b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation-members.html new file mode 100644 index 0000000..29d76a1 --- /dev/null +++ b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation-members.html @@ -0,0 +1,147 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::runtime::GeneratedSpmvImplementation Member List
+
+
+ +

This is the complete list of members for spark::runtime::GeneratedSpmvImplementation, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
cache_sizespark::runtime::GeneratedSpmvImplementationprotected
cacheSize()spark::runtime::GeneratedSpmvImplementationinline
dram_reduction_enabledspark::runtime::GeneratedSpmvImplementationprotected
dramReadspark::runtime::GeneratedSpmvImplementationprotected
dramWritespark::runtime::GeneratedSpmvImplementationprotected
GeneratedSpmvImplementation(SpmvFunctionPtr _fptr, SpmvDramWriteFunctionPtr _dramWrite, SpmvDramReadFunctionPtr _dramRead, int _max_rows, int _num_pipes, int _cache_size, int _input_width, int _dram_reduction_enabled)spark::runtime::GeneratedSpmvImplementationinline
getDramReductionEnabled()spark::runtime::GeneratedSpmvImplementationinline
input_widthspark::runtime::GeneratedSpmvImplementationprotected
inputWidth()spark::runtime::GeneratedSpmvImplementationinline
max_rowsspark::runtime::GeneratedSpmvImplementationprotected
maxRows()spark::runtime::GeneratedSpmvImplementationinline
num_pipesspark::runtime::GeneratedSpmvImplementationprotected
numPipes()spark::runtime::GeneratedSpmvImplementationinline
read(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)spark::runtime::GeneratedSpmvImplementationinlinevirtual
runSpmvspark::runtime::GeneratedSpmvImplementationprotected
Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)spark::runtime::GeneratedSpmvImplementationinlinevirtual
SpmvDramReadFunctionPtr typedefspark::runtime::GeneratedSpmvImplementationprivate
SpmvDramWriteFunctionPtr typedefspark::runtime::GeneratedSpmvImplementationprivate
SpmvFunctionPtr typedefspark::runtime::GeneratedSpmvImplementationprivate
write(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)spark::runtime::GeneratedSpmvImplementationinlinevirtual
~GeneratedImplementation()spark::runtime::GeneratedImplementationinlinevirtual
~GeneratedSpmvImplementation()spark::runtime::GeneratedSpmvImplementationinlinevirtual
+
+ + + + diff --git a/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.html b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.html new file mode 100644 index 0000000..c907138 --- /dev/null +++ b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.html @@ -0,0 +1,810 @@ + + + + + + +Spark: spark::runtime::GeneratedSpmvImplementation Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::runtime::GeneratedSpmvImplementation Class Reference
+
+
+ +

#include <GeneratedImplSupport.hpp>

+
+Inheritance diagram for spark::runtime::GeneratedSpmvImplementation:
+
+
+ + +spark::runtime::GeneratedImplementation +spark::runtime::GeneratedSpmvImplementationMock + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 GeneratedSpmvImplementation (SpmvFunctionPtr _fptr, SpmvDramWriteFunctionPtr _dramWrite, SpmvDramReadFunctionPtr _dramRead, int _max_rows, int _num_pipes, int _cache_size, int _input_width, int _dram_reduction_enabled)
 
virtual ~GeneratedSpmvImplementation ()
 
int maxRows ()
 
int numPipes ()
 
int cacheSize ()
 
int inputWidth ()
 
bool getDramReductionEnabled ()
 
virtual void Spmv (int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
 
virtual void write (int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
 
virtual void read (int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
 
- Public Member Functions inherited from spark::runtime::GeneratedImplementation
virtual ~GeneratedImplementation ()
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

const SpmvFunctionPtr runSpmv
 
const SpmvDramWriteFunctionPtr dramWrite
 
const SpmvDramReadFunctionPtr dramRead
 
const int max_rows
 
const int num_pipes
 
const int cache_size
 
const int input_width
 
const int dram_reduction_enabled
 
+ + + + + + + +

+Private Types

using SpmvFunctionPtr = void(*)(int64_t, int64_t, int64_t, const int64_t *, const int32_t *, const int64_t *, const int32_t *, const int32_t *, const int64_t *, const int32_t *, const int32_t *, const int64_t *)
 
using SpmvDramWriteFunctionPtr = void(*)(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
 
using SpmvDramReadFunctionPtr = void(*)(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *instream_fromcpu)
 
+

Member Typedef Documentation

+ +
+
+ + + + + +
+ + + + +
using spark::runtime::GeneratedSpmvImplementation::SpmvDramReadFunctionPtr = void (*)( int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *instream_fromcpu)
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
using spark::runtime::GeneratedSpmvImplementation::SpmvDramWriteFunctionPtr = void (*)( int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
using spark::runtime::GeneratedSpmvImplementation::SpmvFunctionPtr = void (*)( int64_t, int64_t, int64_t, const int64_t*, const int32_t*, const int64_t*, const int32_t*, const int32_t*, const int64_t*, const int32_t*, const int32_t*, const int64_t*)
+
+private
+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::runtime::GeneratedSpmvImplementation::GeneratedSpmvImplementation (SpmvFunctionPtr _fptr,
SpmvDramWriteFunctionPtr _dramWrite,
SpmvDramReadFunctionPtr _dramRead,
int _max_rows,
int _num_pipes,
int _cache_size,
int _input_width,
int _dram_reduction_enabled 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::runtime::GeneratedSpmvImplementation::~GeneratedSpmvImplementation ()
+
+inlinevirtual
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
int spark::runtime::GeneratedSpmvImplementation::cacheSize ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool spark::runtime::GeneratedSpmvImplementation::getDramReductionEnabled ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::runtime::GeneratedSpmvImplementation::inputWidth ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::runtime::GeneratedSpmvImplementation::maxRows ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::runtime::GeneratedSpmvImplementation::numPipes ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void spark::runtime::GeneratedSpmvImplementation::read (int64_t param_size_bytes,
int64_t param_start_bytes,
uint8_t * outstream_tocpu 
)
+
+inlinevirtual
+
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
virtual void spark::runtime::GeneratedSpmvImplementation::Spmv (int64_t param_nIterations,
int64_t param_nPartitions,
int64_t param_vectorLoadCycles,
const int64_t * param_colPtrStartAddresses,
const int32_t * param_colptrSizes,
const int64_t * param_indptrValuesAddresses,
const int32_t * param_indptrValuesSizes,
const int32_t * param_nrows,
const int64_t * param_outStartAddresses,
const int32_t * param_reductionCycles,
const int32_t * param_totalCycles,
const int64_t * param_vStartAddresses 
)
+
+inlinevirtual
+
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual void spark::runtime::GeneratedSpmvImplementation::write (int64_t param_size_bytes,
int64_t param_start_bytes,
const uint8_t * instream_fromcpu 
)
+
+inlinevirtual
+
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const int spark::runtime::GeneratedSpmvImplementation::cache_size
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::runtime::GeneratedSpmvImplementation::dram_reduction_enabled
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const SpmvDramReadFunctionPtr spark::runtime::GeneratedSpmvImplementation::dramRead
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const SpmvDramWriteFunctionPtr spark::runtime::GeneratedSpmvImplementation::dramWrite
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::runtime::GeneratedSpmvImplementation::input_width
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::runtime::GeneratedSpmvImplementation::max_rows
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::runtime::GeneratedSpmvImplementation::num_pipes
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const SpmvFunctionPtr spark::runtime::GeneratedSpmvImplementation::runSpmv
+
+protected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.js b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.js new file mode 100644 index 0000000..ed7f850 --- /dev/null +++ b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.js @@ -0,0 +1,24 @@ +var classspark_1_1runtime_1_1GeneratedSpmvImplementation = +[ + [ "SpmvDramReadFunctionPtr", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a6e776af1e59842d77e5c52b630c7285e", null ], + [ "SpmvDramWriteFunctionPtr", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a71dba3c10ed1d9a8ba37d5b757f702c8", null ], + [ "SpmvFunctionPtr", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a0d16762eb3714e898a6d30e71b34c377", null ], + [ "GeneratedSpmvImplementation", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a96cbb988649950498d305ac895ea2f6f", null ], + [ "~GeneratedSpmvImplementation", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a0882ce5039b4ac50a3f2e2471645abe5", null ], + [ "cacheSize", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#abdaf540e5d182a8956fcb1ce78d0d777", null ], + [ "getDramReductionEnabled", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a6a77e31894e5bdd3d76a955484c942fb", null ], + [ "inputWidth", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#abe0a820e9d0d36ee8586d0abdca0eed5", null ], + [ "maxRows", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ac32c1ffb1ce8a2ae4d4592a463c7d7aa", null ], + [ "numPipes", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a69fd21c14863cb756e3e1f1014068a97", null ], + [ "read", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ab8bae0bfea8769c07ec9e24b1813b204", null ], + [ "Spmv", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a7b466d50691186b19e72887aa7cd4227", null ], + [ "write", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#added3b47d76e9b08f06096ad7b27c133", null ], + [ "cache_size", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a9cb503ef9f3172c73bd3d2fc9d4564d2", null ], + [ "dram_reduction_enabled", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a1923e1b519a07ca526ada5cee811f955", null ], + [ "dramRead", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a1ce48c5da7060505ad44f95c2655c06a", null ], + [ "dramWrite", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a903b93b96dad8d74bffb0ba1e3ec7937", null ], + [ "input_width", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a42d52b9e6c121e9284bfc5bbae863e75", null ], + [ "max_rows", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a5519058ca752a5dd30d53fc1d8280530", null ], + [ "num_pipes", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ad67d01b403f7203c61c55866e0409257", null ], + [ "runSpmv", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a531009b6858338ca6fcc646d1e7d0d85", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.png b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementation.png new file mode 100644 index 0000000000000000000000000000000000000000..bc0218fd63af0614328bb8d1238c22c5eb0e4b88 GIT binary patch literal 1631 zcmb_dc~H_>9RJzok)?KMhk4|Bl-25#;*q79vWA)FwdA5!p6i*07p|gdn;9mC+UB)c zf~F*KA-u%%yZ5TN{Z@= z001aKPTRWyfXpE&zM=5l`uf|6E7EQEIVTUWL?V$w!Nfu=`bCZu{WV)!T4Xc(wWU-c z#?9FskX~9J?AIPg0YG*VVsGn_AR{Uf)(supB3Fd2qDXXIKFV%IRTqoO$3kf({^?o6 zW<2U}F+2y(Am->B=3w`}$k$s|fMSMqy&)KMls?3|S#%K6RT#VowohEk#ae}TCUx{( z4Q+{a#h8w$ctg61tGnG7m`xaLd~{QL zMUlR%+SMcA9v0fkKP#`WHT!+A$&M7Wc4RMmj6M}MU4j5HJgq#7mfz9~nlG8v7@(3) z%plv?Nz^eL$AO(W*cm~qaSxA;1U>r+V@cR0oFY75!5wvB^CuQPVf{}jz0sjzaQ2TK z)bxe)cPa82;V*@j{dYYv1cbj5xh)TCGt9iH_>YK-QjsLTuS@xrwiWndxbhXovT`bO zNMOGx0rg)LT5w@F?$WQ0`2tcG4 zxz~57KE7slsXl|~^+`;mK|2mbQ7!J(6e!cVq4S?9YvHk`hG>{04D#MgQ|GL@yHoX( zwY!4+rhI%^YJIlJBBGUh-YQIhbiG$A`ei5EZ{CcwGupZZ@g`ukD`1wMmXT_dXqn6* zjM+6*(8$RRdIk;^uhfNn2XSF|aDgCa!uEj;r)1z>0e;~D1(qHZ{5cID=VG*m=FA$5 z3mnRI$_I$#il$Ded=U=BZ5|0-;M0`|e@9`j+5lGI_dX6(U}=}F9R(V!Sy2fm(spDy zXd|D>LB*cY`K2eaUN-alKudN6+Egi`Dy|bb^n}YCVQ0I;ituKBOUfLd(mj_ygsv(p zzf`RVZmd0!nvDXHnm6&N&s{sG*cx9f>>&VYQL@uo|FQD84=&Fw$IUSwNYYYC1$cL& zWO*NF6ubbf7iy`fimDu0-ac=cgiY>%we$cjt?GKqEGa<0DYbs<$*@e(Ko`T;EM8$$ zPj@MOaKuPM2btYQ&}(-fVf3^Y2^hUlnT9wWY3N$tNw)1UJ7ajcx#AO_1;R00j7uv}6 zViP#~pwOpaRGU-E^`i2s269o7vIa`~v6b5)H$oPxCxu4y?B_utXB&m^Et;F5c=HRR zrSZP8;(P=y&UkD;c-LGbzP)456^ba7EVtjvQF65*%o~zhrb6{j$A7LOIlBG28rF^q{TDN&Njmi-@?n8G(&ugwx(5N%G@Homs>v5K=zF?`F42-#e>HrfNh_ zX~A~Pyo`n7N_}DLmu_4J*N0ryJNs2*UhgIe + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::runtime::GeneratedSpmvImplementationMock Member List
+
+
+ +

This is the complete list of members for spark::runtime::GeneratedSpmvImplementationMock, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + +
cache_sizespark::runtime::GeneratedSpmvImplementationprotected
cacheSize()spark::runtime::GeneratedSpmvImplementationMockinline
dram_reduction_enabledspark::runtime::GeneratedSpmvImplementationprotected
dramReadspark::runtime::GeneratedSpmvImplementationprotected
dramWritespark::runtime::GeneratedSpmvImplementationprotected
GeneratedSpmvImplementation(SpmvFunctionPtr _fptr, SpmvDramWriteFunctionPtr _dramWrite, SpmvDramReadFunctionPtr _dramRead, int _max_rows, int _num_pipes, int _cache_size, int _input_width, int _dram_reduction_enabled)spark::runtime::GeneratedSpmvImplementationinline
GeneratedSpmvImplementationMock(int _max_rows, int _num_pipes, int _cache_size, int _input_width, int _dram_reduction_enabled)spark::runtime::GeneratedSpmvImplementationMockinline
getDramReductionEnabled()spark::runtime::GeneratedSpmvImplementationMockinline
input_widthspark::runtime::GeneratedSpmvImplementationprotected
inputWidth()spark::runtime::GeneratedSpmvImplementationMockinline
max_rowsspark::runtime::GeneratedSpmvImplementationprotected
maxRows()spark::runtime::GeneratedSpmvImplementationMockinline
num_pipesspark::runtime::GeneratedSpmvImplementationprotected
numPipes()spark::runtime::GeneratedSpmvImplementationMockinline
read(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)spark::runtime::GeneratedSpmvImplementationMockinlinevirtual
runSpmvspark::runtime::GeneratedSpmvImplementationprotected
Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)spark::runtime::GeneratedSpmvImplementationMockinlinevirtual
write(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)spark::runtime::GeneratedSpmvImplementationMockinlinevirtual
~GeneratedImplementation()spark::runtime::GeneratedImplementationinlinevirtual
~GeneratedSpmvImplementation()spark::runtime::GeneratedSpmvImplementationinlinevirtual
~GeneratedSpmvImplementationMock()spark::runtime::GeneratedSpmvImplementationMockinlinevirtual
+
+ + + + diff --git a/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html new file mode 100644 index 0000000..676c0a8 --- /dev/null +++ b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html @@ -0,0 +1,575 @@ + + + + + + +Spark: spark::runtime::GeneratedSpmvImplementationMock Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::runtime::GeneratedSpmvImplementationMock Class Reference
+
+
+ +

#include <GeneratedImplSupport.hpp>

+
+Inheritance diagram for spark::runtime::GeneratedSpmvImplementationMock:
+
+
+ + +spark::runtime::GeneratedSpmvImplementation +spark::runtime::GeneratedImplementation + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 GeneratedSpmvImplementationMock (int _max_rows, int _num_pipes, int _cache_size, int _input_width, int _dram_reduction_enabled)
 
virtual ~GeneratedSpmvImplementationMock ()
 
int maxRows ()
 
int numPipes ()
 
int cacheSize ()
 
int inputWidth ()
 
bool getDramReductionEnabled ()
 
void Spmv (int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses)
 
void write (int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu)
 
void read (int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu)
 
- Public Member Functions inherited from spark::runtime::GeneratedSpmvImplementation
 GeneratedSpmvImplementation (SpmvFunctionPtr _fptr, SpmvDramWriteFunctionPtr _dramWrite, SpmvDramReadFunctionPtr _dramRead, int _max_rows, int _num_pipes, int _cache_size, int _input_width, int _dram_reduction_enabled)
 
virtual ~GeneratedSpmvImplementation ()
 
int maxRows ()
 
int numPipes ()
 
int cacheSize ()
 
int inputWidth ()
 
bool getDramReductionEnabled ()
 
- Public Member Functions inherited from spark::runtime::GeneratedImplementation
virtual ~GeneratedImplementation ()
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from spark::runtime::GeneratedSpmvImplementation
const SpmvFunctionPtr runSpmv
 
const SpmvDramWriteFunctionPtr dramWrite
 
const SpmvDramReadFunctionPtr dramRead
 
const int max_rows
 
const int num_pipes
 
const int cache_size
 
const int input_width
 
const int dram_reduction_enabled
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::runtime::GeneratedSpmvImplementationMock::GeneratedSpmvImplementationMock (int _max_rows,
int _num_pipes,
int _cache_size,
int _input_width,
int _dram_reduction_enabled 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::runtime::GeneratedSpmvImplementationMock::~GeneratedSpmvImplementationMock ()
+
+inlinevirtual
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
int spark::runtime::GeneratedSpmvImplementationMock::cacheSize ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool spark::runtime::GeneratedSpmvImplementationMock::getDramReductionEnabled ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::runtime::GeneratedSpmvImplementationMock::inputWidth ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::runtime::GeneratedSpmvImplementationMock::maxRows ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::runtime::GeneratedSpmvImplementationMock::numPipes ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void spark::runtime::GeneratedSpmvImplementationMock::read (int64_t param_size_bytes,
int64_t param_start_bytes,
uint8_t * outstream_tocpu 
)
+
+inlinevirtual
+
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void spark::runtime::GeneratedSpmvImplementationMock::Spmv (int64_t param_nIterations,
int64_t param_nPartitions,
int64_t param_vectorLoadCycles,
const int64_t * param_colPtrStartAddresses,
const int32_t * param_colptrSizes,
const int64_t * param_indptrValuesAddresses,
const int32_t * param_indptrValuesSizes,
const int32_t * param_nrows,
const int64_t * param_outStartAddresses,
const int32_t * param_reductionCycles,
const int32_t * param_totalCycles,
const int64_t * param_vStartAddresses 
)
+
+inlinevirtual
+
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void spark::runtime::GeneratedSpmvImplementationMock::write (int64_t param_size_bytes,
int64_t param_start_bytes,
const uint8_t * instream_fromcpu 
)
+
+inlinevirtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.js b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.js new file mode 100644 index 0000000..c9c7bd8 --- /dev/null +++ b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.js @@ -0,0 +1,13 @@ +var classspark_1_1runtime_1_1GeneratedSpmvImplementationMock = +[ + [ "GeneratedSpmvImplementationMock", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#af33e3e01c1d5fc32e69cb23c422e44d5", null ], + [ "~GeneratedSpmvImplementationMock", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a105adcf3d8937093d294b93efc880064", null ], + [ "cacheSize", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a9d417edc09f273a58dea1cd9aa866679", null ], + [ "getDramReductionEnabled", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a263a1bdfe74153bfd281e526423d1d40", null ], + [ "inputWidth", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a1c25321fdf7068a9db469fb8cf62a0f5", null ], + [ "maxRows", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a209c982b13e58fedc9c9acbfd8a84440", null ], + [ "numPipes", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#ae26d5df16fcf6c40749e666ffe3257b3", null ], + [ "read", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#acd57170f2d13598d15f54973d4a579b9", null ], + [ "Spmv", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a51277607133bd9efc7d05df0c398923a", null ], + [ "write", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a4b551b84b89443f0d096740ca64c63c3", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.png b/docs/classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.png new file mode 100644 index 0000000000000000000000000000000000000000..f51e5e05794dd10ad56073b7f93da603bfb460dc GIT binary patch literal 1628 zcmb`IX;9Ng7{>omQG@~_l&Pq}$_=$MP=lf*mP67%r$9&$5~#v}Bp^ou$Zd;?6eW-V z5)QS5qYw;ogi{Hk9D+o-f*_}XNFV_LH3)_@wqvK$cKXSk+1=;&&iiSfXLnOhIU$u4 zG!*~$YGC3!F8$oVMm#IHyYip}q%9xf6 zqiZh)-m;~45jnF4^^0%&82x&RRs2q>#YU&!TI58ab$Pd-vSpy72>lvmE!6SX_( z+Kky0dnTWlPUO_5>l&sP?QP4_c`uKl%xGgl3OQ64M6?Kv!2Vo}_@qsY1nl2$b`HT8 zeGi*zG5~W|6q!1K9Il{jeFF#fyNxmHcBa3p6vsU$wn!aSy&g`irA6;p)Gwv^AB3^d z^d9_k)aE(wI%1@7yqhT>~sXR#xlB$&{u{pjM8tXLNWE@@WzgrI!9 zH&se!Sh*B%9%=EN_-W&DbYd^*T*4jO$;4suoix4KFfh>g@rx4eBGC7jvMjEO+WqkQ z@Cfx#ZWte7dZT0Xw6&NTLk>pP{H8&#f55uBx}9UM$Gf3N4biaJM(SgvL{67apf(0P z>d9!3N_X?SPFkhMJJi)UkPJtxK}pr3u*ILrOlWBVy9GFVv-&mwXxIp&j)*Wxum z9yq@f1AL1>SZQ2L4wajFS#0D7IVz60&>8L2P0a_~%=QwFTRm;BCTgk#$G^+=LUV#V?1N*V(VE_IJd?{4qq ztnb8#Zel-Z-I)csePjn~hvtxosHk5nmCfu4)s9QPa~=(z@aUS2X1;s94-JVI7bdup zOvpG#e@;5DiXqU<7aB+uxy-QLRJsZqo5YZmH`qOccAWKD6=~j!goV&N7ba2u7tz-2 zuu&m@wvQb?n)6>#iE_PV*yMF)eD{{M;iC%ctlWox+Da$N?E)PB;q!$?JHz4w#hHt1 aD!ENj!|xBvKaza~0C>{LhH3TV&%XofSswWS literal 0 HcmV?d00001 diff --git a/docs/classspark_1_1runtime_1_1ImplementationLoader-members.html b/docs/classspark_1_1runtime_1_1ImplementationLoader-members.html new file mode 100644 index 0000000..57b77ec --- /dev/null +++ b/docs/classspark_1_1runtime_1_1ImplementationLoader-members.html @@ -0,0 +1,128 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::runtime::ImplementationLoader Member List
+
+ +
+ + + + diff --git a/docs/classspark_1_1runtime_1_1ImplementationLoader.html b/docs/classspark_1_1runtime_1_1ImplementationLoader.html new file mode 100644 index 0000000..8d9ee16 --- /dev/null +++ b/docs/classspark_1_1runtime_1_1ImplementationLoader.html @@ -0,0 +1,226 @@ + + + + + + +Spark: spark::runtime::ImplementationLoader Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::runtime::ImplementationLoader Class Reference
+
+
+ +

#include <GeneratedImplSupport.hpp>

+
+Inheritance diagram for spark::runtime::ImplementationLoader:
+
+
+ + +spark::runtime::SpmvImplementationLoader + +
+ + + + + + +

+Public Member Functions

 ImplementationLoader ()
 
virtual ~ImplementationLoader ()
 
+ + + +

+Protected Attributes

std::vector
+< GeneratedImplementation * > 
impls
 
+

Detailed Description

+

Loads generated implementations.

+

Meant more as a base for classes generated from spark.py.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::runtime::ImplementationLoader::ImplementationLoader ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::runtime::ImplementationLoader::~ImplementationLoader ()
+
+inlinevirtual
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::vector<GeneratedImplementation*> spark::runtime::ImplementationLoader::impls
+
+protected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1runtime_1_1ImplementationLoader.js b/docs/classspark_1_1runtime_1_1ImplementationLoader.js new file mode 100644 index 0000000..ce00ea8 --- /dev/null +++ b/docs/classspark_1_1runtime_1_1ImplementationLoader.js @@ -0,0 +1,6 @@ +var classspark_1_1runtime_1_1ImplementationLoader = +[ + [ "ImplementationLoader", "classspark_1_1runtime_1_1ImplementationLoader.html#a878f373604956baae5db5198e9689132", null ], + [ "~ImplementationLoader", "classspark_1_1runtime_1_1ImplementationLoader.html#ac74997119774d1820894780fa2841ef4", null ], + [ "impls", "classspark_1_1runtime_1_1ImplementationLoader.html#a4d12a2b939120bb3f16a5603824c0189", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1runtime_1_1ImplementationLoader.png b/docs/classspark_1_1runtime_1_1ImplementationLoader.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a5e62ca899a5cedfa18f94d21e99663af3bd70 GIT binary patch literal 896 zcmeAS@N?(olHy`uVBq!ia0vp^KY=)agBeJ^X;N+hQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;%ZJXRE5>2ZxS&&81VOEMic(qQHJ)sUzP6@BWkechWzvbWhkZXOE@J z#Q8p~JH9bLVOaRj*s|er|Ah1JcOTs~<9`1Bvo~}9UfWoo@YPn0xj{%ys!v?gcltN$2ESJb7@Ta<=gX z?M=^Wdl~lHP1ru++iLDD@P*V&5Kw#PW<)QoY4>`uNAYWHt)b%c7cLA{t*N8NC+pt+BE(_yd&Y+Iqw8 zO}9#=t@3o0-uzHgU*{Hr^w>GGKUxq;=&ZJXZSipgrR zOPal|*5bX@9liZ_J}Oxo`Z=`;&8E zxBtt-X=?<3b?AMB#M9v`;X5koU+vvd|E!(sdykF9RlEF7Tf3yMNu=bGMzoPCc%_c-fTQCd)pz{E4{DFIe7|dJY^_ zBC)yr_n%LHAM9DRMmn%QEy>gBvVy + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/classspark_1_1runtime_1_1SpmvImplementationLoader.html b/docs/classspark_1_1runtime_1_1SpmvImplementationLoader.html new file mode 100644 index 0000000..9877d8d --- /dev/null +++ b/docs/classspark_1_1runtime_1_1SpmvImplementationLoader.html @@ -0,0 +1,228 @@ + + + + + + +Spark: spark::runtime::SpmvImplementationLoader Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::runtime::SpmvImplementationLoader Class Reference
+
+
+ +

#include <GeneratedImplSupport.hpp>

+
+Inheritance diagram for spark::runtime::SpmvImplementationLoader:
+
+
+ + +spark::runtime::ImplementationLoader + +
+ + + + + + + + + + + + + +

+Public Member Functions

 SpmvImplementationLoader ()
 
GeneratedSpmvImplementation * architectureWithParams (int maxRows)
 
GeneratedSpmvImplementation * architectureWithId (int id)
 
- Public Member Functions inherited from spark::runtime::ImplementationLoader
 ImplementationLoader ()
 
virtual ~ImplementationLoader ()
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from spark::runtime::ImplementationLoader
std::vector
+< GeneratedImplementation * > 
impls
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
spark::runtime::SpmvImplementationLoader::SpmvImplementationLoader ()
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
GeneratedSpmvImplementation* spark::runtime::SpmvImplementationLoader::architectureWithId (int id)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
GeneratedSpmvImplementation* spark::runtime::SpmvImplementationLoader::architectureWithParams (int maxRows)
+
+inline
+
+

Load the generated spmv implementation which supports the given number of rows. If more exists, picks the one with smallest maxRows.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1runtime_1_1SpmvImplementationLoader.js b/docs/classspark_1_1runtime_1_1SpmvImplementationLoader.js new file mode 100644 index 0000000..07e6b24 --- /dev/null +++ b/docs/classspark_1_1runtime_1_1SpmvImplementationLoader.js @@ -0,0 +1,6 @@ +var classspark_1_1runtime_1_1SpmvImplementationLoader = +[ + [ "SpmvImplementationLoader", "classspark_1_1runtime_1_1SpmvImplementationLoader.html#a074828b53d9f547867fe20e1fe55f5b9", null ], + [ "architectureWithId", "classspark_1_1runtime_1_1SpmvImplementationLoader.html#a8ff8e4c8507363cc1c252ccb3b01e6f5", null ], + [ "architectureWithParams", "classspark_1_1runtime_1_1SpmvImplementationLoader.html#a72c4e570271b170119909c81a6729c7d", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1runtime_1_1SpmvImplementationLoader.png b/docs/classspark_1_1runtime_1_1SpmvImplementationLoader.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f23671c77b29bc9cb00481384545fcd5d24d2e GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^KY=)agBeJ^X;N+hQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;SZ+_{|fA##? zEE_s6FOe+`k6QfDOgN{9U*glLO*-CQ8$E)Ye2Y9!E%ns%-1)_-^X|8awb#oI z%TkjAEeND9a&ZBzrbx)0V^4v|!qT;2qHdkMNyHu|+Bqy8gwltrm z1<$=S{v5Y!cZ#Mg3DiGP?eTj(_Z2H#Vs9H?IL&Uo?8F; zpFaveF86bFv|jn`a}qvb*qI$@`KlFqo{g^mnTKT|eu|q$%E$Vw~;JHMtysaRO0X;#-$kKjXaZHEj`vkc3@#+TIEH)>zrh zdG-AX!@{uJ-KC5ls`_OPyfpq)S}wOfde`sd&9`4}W6XYjIsLz0nfdP1x+UEEzHa5% zmR-J5@K{Ifu78jBye^nsS1WPe?aqnsK3Pttov#9|cW>OCr(eqH^L}5?S<`~7ShJ`X zH3brT&Whb^S$p%@lM}xsey_J)S$AB6eV~=Px4QX z+T*P+mfUUNR?;di>frFsU256Kw(jf4?>27#_NUrG%@ OVeoYIb6Mw<&;$SxT&TbR literal 0 HcmV?d00001 diff --git a/docs/classspark_1_1sparse_1_1SparkCooMatrix-members.html b/docs/classspark_1_1sparse_1_1SparkCooMatrix-members.html new file mode 100644 index 0000000..3a26b1c --- /dev/null +++ b/docs/classspark_1_1sparse_1_1SparkCooMatrix-members.html @@ -0,0 +1,130 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/classspark_1_1sparse_1_1SparkCooMatrix.html b/docs/classspark_1_1sparse_1_1SparkCooMatrix.html new file mode 100644 index 0000000..c3cd737 --- /dev/null +++ b/docs/classspark_1_1sparse_1_1SparkCooMatrix.html @@ -0,0 +1,248 @@ + + + + + + +Spark: spark::sparse::SparkCooMatrix< value_type > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::sparse::SparkCooMatrix< value_type > Class Template Reference
+
+
+ +

#include <SparseMatrix.hpp>

+ + + + +

+Public Types

using CoordType = std::tuple< int, int, value_type >
 
+ + + +

+Public Member Functions

 SparkCooMatrix (int _n, int _m)
 
+ + + + + + + +

+Public Attributes

int n
 
int m
 
std::vector< CoordType > data
 
+

Member Typedef Documentation

+ +
+
+
+template<typename value_type>
+ + + + +
using spark::sparse::SparkCooMatrix< value_type >::CoordType = std::tuple<int, int, value_type>
+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<typename value_type>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
spark::sparse::SparkCooMatrix< value_type >::SparkCooMatrix (int _n,
int _m 
)
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+
+template<typename value_type>
+ + + + +
std::vector<CoordType> spark::sparse::SparkCooMatrix< value_type >::data
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + +
int spark::sparse::SparkCooMatrix< value_type >::m
+
+ +
+
+ +
+
+
+template<typename value_type>
+ + + + +
int spark::sparse::SparkCooMatrix< value_type >::n
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1sparse_1_1SparkCooMatrix.js b/docs/classspark_1_1sparse_1_1SparkCooMatrix.js new file mode 100644 index 0000000..9f11956 --- /dev/null +++ b/docs/classspark_1_1sparse_1_1SparkCooMatrix.js @@ -0,0 +1,8 @@ +var classspark_1_1sparse_1_1SparkCooMatrix = +[ + [ "CoordType", "classspark_1_1sparse_1_1SparkCooMatrix.html#a4a9de150aa2a040306403bc97687b40f", null ], + [ "SparkCooMatrix", "classspark_1_1sparse_1_1SparkCooMatrix.html#ad81f39eca4950c1e4623cdb120f094b0", null ], + [ "data", "classspark_1_1sparse_1_1SparkCooMatrix.html#a4a0b72ae9e7b1deed9b6228cf40e9f32", null ], + [ "m", "classspark_1_1sparse_1_1SparkCooMatrix.html#ae3892beabaaf78e2e9a67269c22c8f8e", null ], + [ "n", "classspark_1_1sparse_1_1SparkCooMatrix.html#a582426cd2434334fe15c5f3c23aa0c54", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html b/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html new file mode 100644 index 0000000..bdcee97 --- /dev/null +++ b/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver-members.html @@ -0,0 +1,128 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::sparse_linear_solvers::DfeBiCgSolver Member List
+
+
+ +

This is the complete list of members for spark::sparse_linear_solvers::DfeBiCgSolver, including all inherited members.

+ + + + +
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)spark::sparse_linear_solvers::DfeBiCgSolvervirtual
+
+ + + + diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html b/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html new file mode 100644 index 0000000..adc7e0d --- /dev/null +++ b/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html @@ -0,0 +1,189 @@ + + + + + + +Spark: spark::sparse_linear_solvers::DfeBiCgSolver Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::sparse_linear_solvers::DfeBiCgSolver Class Reference
+
+
+ +

#include <SparseLinearSolvers.hpp>

+
+Inheritance diagram for spark::sparse_linear_solvers::DfeBiCgSolver:
+
+
+ + +spark::sparse_linear_solvers::Solver + +
+ + + + + + + + + +

+Public Member Functions

virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
- Public Member Functions inherited from spark::sparse_linear_solvers::Solver
virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd spark::sparse_linear_solvers::DfeBiCgSolver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+virtual
+
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.js b/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.js new file mode 100644 index 0000000..e648a39 --- /dev/null +++ b/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.js @@ -0,0 +1,4 @@ +var classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver = +[ + [ "solve", "classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html#adaa588ced5dd2ce56da4cc095c88c4c3", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.png b/docs/classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.png new file mode 100644 index 0000000000000000000000000000000000000000..713a05b8579b2b0f45356f650bdd7a0002d8c4c0 GIT binary patch literal 907 zcmeAS@N?(olHy`uVBq!ia0y~yVB`R@12~w0ZQd`TJl0 z9TtNg{Y{FwX4Ts^PrbzA?etIQWc@~+(@C*nIx3l_9L)-vNdjz+K~GWzI#uE?wm;6j z&&~Jp<9G9$wJa>2_b%-`pH(<(FXNF@mbw3JH|DRe{CD{~o7+?2wH>!2YD}K(+ps_9 zs#?{~&kLD7*{qm1E}y&k{Kn!3F7qxKUs5l0`MR=V>-}3V9$A$rob=FdusHns`Znci zx35l9(vm}Wm3_Nx4JG|1*TDu}kP2V_^mnjhT6W%6iUUeUzZQ_)}+?ORkQcRB`-`_-$FjvD-fNR7pL(du`>b_lY%UGy03$ zZue|m8?#L~0t9YubGg=eKeu;rUX_B=VxRcx#Wne6V)OmZ?EQR;QKI2SPgB + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::sparse_linear_solvers::DfeCgSolver Member List
+
+
+ +

This is the complete list of members for spark::sparse_linear_solvers::DfeCgSolver, including all inherited members.

+ + + + +
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)spark::sparse_linear_solvers::DfeCgSolvervirtual
+
+ + + + diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html b/docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html new file mode 100644 index 0000000..68a9e4a --- /dev/null +++ b/docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html @@ -0,0 +1,189 @@ + + + + + + +Spark: spark::sparse_linear_solvers::DfeCgSolver Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::sparse_linear_solvers::DfeCgSolver Class Reference
+
+
+ +

#include <SparseLinearSolvers.hpp>

+
+Inheritance diagram for spark::sparse_linear_solvers::DfeCgSolver:
+
+
+ + +spark::sparse_linear_solvers::Solver + +
+ + + + + + + + + +

+Public Member Functions

virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
- Public Member Functions inherited from spark::sparse_linear_solvers::Solver
virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd spark::sparse_linear_solvers::DfeCgSolver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+virtual
+
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.js b/docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.js new file mode 100644 index 0000000..552fdf6 --- /dev/null +++ b/docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.js @@ -0,0 +1,4 @@ +var classspark_1_1sparse__linear__solvers_1_1DfeCgSolver = +[ + [ "solve", "classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html#a55a4b35ed35b40ee3f712024d9b45206", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.png b/docs/classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.png new file mode 100644 index 0000000000000000000000000000000000000000..dc67ab899a6dd2bfb72cc4b86f90c25452cf6099 GIT binary patch literal 864 zcmV-m1E2hfP)vTJkN^MxkN^Mxkifve1&Q1r00008bW%=J0RR90|NsC0)yh;d0008-NklSg}Y_P)&MCim6F2 zNip>aeUhY4v^qZaz2T77f1hRd+w_w3NMoPP;xzj%`mLhr{pVHSckI`H`>>8tdB^U3 zZESpO%za^h*d`af#JzNoB&Q4dJ=dIa4w$1Q>HM^e?45o@>r)lUU-{_9_0mC-ysqib znD)}2vX)W3(96wPm97mK-`;uC`wo)ib))l-E^5}YXS6RA6RFHC8ylZCOl~$8-4E2h zgCsd!PrY8@i+J5)yAkhprn{R>nDU&T$Ni>*BvpER?klQ+(YW&)^u9>PS0{zBgCu!9 zn)yYtcH}gSu4aBYk&RD#<{y(Fk8pE1%-OkikR+$!`~KGJ^OG03B>lC1g?<}9{rAp8 zGfDa;&ApeTn40vG6jPI4l45G5UzTNwDu6%K7eH8rrvLhij31hQg%6A$n|{uGfT)`E z05LV`0b**>1H{y%2Z*Uj4-iw69w4SBJwQxNdVrXk^Z+q6=>cMD(gVcQqzCvbrIb=w zkpO~f(gVcQqz8zpG5yEYSsfqyjvd~k`h8X2t&Hvj{aJc|N4i0uzY5yYxAhai>7?JP zwf=m&?tk9vCQ!$yykqyiHa0#s=Dx5$Y?F&_P+n0_qav2g_cEwWW6w3GoQ<l72ar5l(VbEq@16=Eq7dgQ1=t*`zK)>xyF)IO_ZkhqymLDkqef?*9|FE1D qJwPB$dVrXk^Z+rn(x;SCRQ&_^Dm5f+e$`C?0000 + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::sparse_linear_solvers::EigenSolver Member List
+
+
+ +

This is the complete list of members for spark::sparse_linear_solvers::EigenSolver, including all inherited members.

+ + + + +
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)spark::sparse_linear_solvers::EigenSolvervirtual
+
+ + + + diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html b/docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html new file mode 100644 index 0000000..8594764 --- /dev/null +++ b/docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.html @@ -0,0 +1,189 @@ + + + + + + +Spark: spark::sparse_linear_solvers::EigenSolver Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::sparse_linear_solvers::EigenSolver Class Reference
+
+
+ +

#include <SparseLinearSolvers.hpp>

+
+Inheritance diagram for spark::sparse_linear_solvers::EigenSolver:
+
+
+ + +spark::sparse_linear_solvers::Solver + +
+ + + + + + + + + +

+Public Member Functions

virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)
 
- Public Member Functions inherited from spark::sparse_linear_solvers::Solver
virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Eigen::VectorXd spark::sparse_linear_solvers::EigenSolver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+virtual
+
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.js b/docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.js new file mode 100644 index 0000000..7c04374 --- /dev/null +++ b/docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.js @@ -0,0 +1,4 @@ +var classspark_1_1sparse__linear__solvers_1_1EigenSolver = +[ + [ "solve", "classspark_1_1sparse__linear__solvers_1_1EigenSolver.html#a3c0f45b239cb7127fe8da07673cbfd52", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.png b/docs/classspark_1_1sparse__linear__solvers_1_1EigenSolver.png new file mode 100644 index 0000000000000000000000000000000000000000..5d03df221755bb1dab559f0396d6727822738b23 GIT binary patch literal 855 zcmeAS@N?(olHy`uVBq!ia0vp^KY=)agBeJ^X;N+hQW60^A+G=b{|7Q(y!l$%e`o@b z1;z&s9ANFdBM;x9aey&W{f4wei;;GiS zIMLJXW<6Kjf8BUf*Pt?0V&1pwCo`{Ya6iSJ_v^5gnOWQqvkJ>WZ+wpVjd$KMIEQ?>qtg`aJgW9^+Uw?d)j+^vPvhLtdv#hH3(~g^X z{^EEx&pSxR=lLWN?#nw>jvjhd6FE&)iQ%8*J_aYHHJ{h7UvcfQReUe|R=Mjx=e%XO zXfT)g$e|KG0q)C|4nS=T8wm>R@1GLH#VO?A09SqE=k2MH%<{+km_Nn5GyeW`=iB2=NR=itewBa`rLM}wg2BO{CR#~UW=7V{qc8|o@Rz&#`;g%b5~rMJ9Tc-jGvDB z&z3ImReWB#D?@`l`$`D zw + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::sparse_linear_solvers::Solver Member List
+
+
+ +

This is the complete list of members for spark::sparse_linear_solvers::Solver, including all inherited members.

+ + + + +
analyze(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
preprocess(const Eigen::SparseMatrix< double > &A)spark::sparse_linear_solvers::Solverinlinevirtual
solve(const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)=0spark::sparse_linear_solvers::Solverpure virtual
+
+ + + + diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1Solver.html b/docs/classspark_1_1sparse__linear__solvers_1_1Solver.html new file mode 100644 index 0000000..b6e7c81 --- /dev/null +++ b/docs/classspark_1_1sparse__linear__solvers_1_1Solver.html @@ -0,0 +1,237 @@ + + + + + + +Spark: spark::sparse_linear_solvers::Solver Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::sparse_linear_solvers::Solver Class Referenceabstract
+
+
+ +

#include <SparseLinearSolvers.hpp>

+
+Inheritance diagram for spark::sparse_linear_solvers::Solver:
+
+
+ + +spark::sparse_linear_solvers::DfeBiCgSolver +spark::sparse_linear_solvers::DfeCgSolver +spark::sparse_linear_solvers::EigenSolver + +
+ + + + + + + + +

+Public Member Functions

virtual void analyze (const Eigen::SparseMatrix< double > &A)
 
virtual void preprocess (const Eigen::SparseMatrix< double > &A)
 
virtual Eigen::VectorXd solve (const Eigen::SparseMatrix< double > &A, const Eigen::VectorXd &b)=0
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void spark::sparse_linear_solvers::Solver::analyze (const Eigen::SparseMatrix< double > & A)
+
+inlinevirtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void spark::sparse_linear_solvers::Solver::preprocess (const Eigen::SparseMatrix< double > & A)
+
+inlinevirtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Eigen::VectorXd spark::sparse_linear_solvers::Solver::solve (const Eigen::SparseMatrix< double > & A,
const Eigen::VectorXd & b 
)
+
+pure virtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1Solver.js b/docs/classspark_1_1sparse__linear__solvers_1_1Solver.js new file mode 100644 index 0000000..726cd47 --- /dev/null +++ b/docs/classspark_1_1sparse__linear__solvers_1_1Solver.js @@ -0,0 +1,6 @@ +var classspark_1_1sparse__linear__solvers_1_1Solver = +[ + [ "analyze", "classspark_1_1sparse__linear__solvers_1_1Solver.html#a5922d0592d66ae9966bfbf4bb78a1c55", null ], + [ "preprocess", "classspark_1_1sparse__linear__solvers_1_1Solver.html#ae5a1a27b9213613cf6d67dc6e635f42d", null ], + [ "solve", "classspark_1_1sparse__linear__solvers_1_1Solver.html#aeab2189d0b72aaeda51f9defb2fd64b4", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1sparse__linear__solvers_1_1Solver.png b/docs/classspark_1_1sparse__linear__solvers_1_1Solver.png new file mode 100644 index 0000000000000000000000000000000000000000..f8cb4daa2f2a4c1e989c82dd22aff377fa209b16 GIT binary patch literal 1579 zcmbVMc~H|w6ix_)fP?@lagD7WG0Bj*>SovyZgQOcHXz|+c%r*?dbwn)KUb2 zKycSnPCg(I1PNeo7z9`c(cm0l)9^m+=PZ><0XVxLyiD#X0?_BlX0zpTdAfiJi}UgH z1p$Y)2e;qP3Dw z@LKYyw7D}&PG(S?!C?F9h=_&laCfvGn?A`l#7czkB`nUOq-$ywJ3rJ{z2%nD#6v_U zk6Dds&-XH4557sy=R?bi7!D+>?7aa&zl)cDWbSO!f=AE?!|^FgW-Y006%Q})qez+x zJ7mjNpI!Uobt;Z2u9j$<8xu|n??aXe{%KY|({R)Mp&6h{*W-E5D|P83o_5*~-k|9P zJ+Yd+j|C6Yt@8 z4C`8KvISO~G2XhF9_UuEcKFpl543YT-Ha;LcJdcdYhaHIczWX=gBZQZSA_)b)q%2p+SabG zuLMX6c~|lb1Xj***N4bj>Y3y!sk|k%8<_nYumoNx#tqO`Fr+CX3o|_clnkCO=eX_w z48zX`5odS-aGoJe* zXZDJAXJmt%i(z0$4XiUyUsVR`q#C!|SzlHuM}PL4JSUijit{jPSFVbwUS4&bk=nix zhh4}0&loteNk&&1YEEU5!2c&f`c?gbCgic9Bn)LLI~TwJCnfBCzYl76K%^h)s*w*W z$Pn3h62&Eb5!{nK<%bd~>K1y5_8u*_$If?2BC%gJhzO#+H>8-z?hNF&kt-4Ct&<*W zchWq`f;|)(tv1miW1vbx??{Ulc-eoCiuzO6YrgVn{Totf7EWVe7;Z^ip8HJFkj5nw;iVvQduw8R+lzxUL_`A zf=AvNAqltp!cLjTrVf`T9|^^brZn@`b6O_+F4v7zuk{n3w9a_mUF=$17{%V&W2!vh z+$MDGT3tp@EQTdH=VvmysRt6869`o=ZXw*$i^$f~nM;JhN|q+KOj8IJ~tT&Fuq@BR+{IH;)la#A`qinV(KFgPRMg%5q`RJ z$UgQls&J$)wykAhkae~&fjYJOkaEw5;G0T!(mco($kqCIyWciiSkDu?%J864Igy}U zGVY>1Y=9iP&lij8S6(%B*E}xP2TCN)0V4G@HM9k;&DsjI+s;)&MMfAF_aLMG#VTM zr_t6gRAOd%TGDGs4n5kx_~^??DRzJW8%U@|geS+KQC#DK>mxLpCd&?a%xIuFV55<- zao8i+x0=?up5R3}$la{lsa$V4r nFpOhlVHk#@0(3aWdQ0A_rZ#*EXX6I^>>yWXPp1aQkSl)y#)#rx literal 0 HcmV?d00001 diff --git a/docs/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html b/docs/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html new file mode 100644 index 0000000..3fde51a --- /dev/null +++ b/docs/classspark_1_1spmv_1_1FstSpmvArchitecture-members.html @@ -0,0 +1,155 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::spmv::FstSpmvArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::FstSpmvArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth) overridespark::spmv::FstSpmvArchitectureinlineprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
FstSpmvArchitecture()spark::spmv::FstSpmvArchitectureinline
FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::FstSpmvArchitectureinline
get_name() overridespark::spmv::FstSpmvArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getLibraryName()spark::spmv::SimpleSpmvArchitectureinlinevirtual
implspark::spmv::SimpleSpmvArchitectureprotected
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)spark::spmv::SpmvArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation *_impl)spark::spmv::SimpleSpmvArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1FstSpmvArchitecture.html b/docs/classspark_1_1spmv_1_1FstSpmvArchitecture.html new file mode 100644 index 0000000..fe6b16e --- /dev/null +++ b/docs/classspark_1_1spmv_1_1FstSpmvArchitecture.html @@ -0,0 +1,356 @@ + + + + + + +Spark: spark::spmv::FstSpmvArchitecture Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv::FstSpmvArchitecture Class Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::FstSpmvArchitecture:
+
+
+ + +spark::spmv::SimpleSpmvArchitecture +spark::spmv::SpmvArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FstSpmvArchitecture ()
 
 FstSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
 SimpleSpmvArchitecture (spark::runtime::GeneratedSpmvImplementation *_impl)
 
virtual std::string getLibraryName ()
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + + + + + +

+Protected Member Functions

virtual int countComputeCycles (uint32_t *v, int size, int inputWidth) override
 
- Protected Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
virtual bool equals (const SpmvArchitecture &a) const override
 
- Protected Member Functions inherited from spark::spmv::SpmvArchitecture
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from spark::spmv::SimpleSpmvArchitecture
const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
spark::runtime::GeneratedSpmvImplementation * impl
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual int spark::spmv::FstSpmvArchitecture::countComputeCycles (uint32_t * v,
int size,
int inputWidth 
)
+
+inlineoverrideprotectedvirtual
+
+ +

Reimplemented from spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::FstSpmvArchitecture::get_name ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from spark::spmv::SimpleSpmvArchitecture.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1FstSpmvArchitecture.js b/docs/classspark_1_1spmv_1_1FstSpmvArchitecture.js new file mode 100644 index 0000000..e9eee58 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1FstSpmvArchitecture.js @@ -0,0 +1,7 @@ +var classspark_1_1spmv_1_1FstSpmvArchitecture = +[ + [ "FstSpmvArchitecture", "classspark_1_1spmv_1_1FstSpmvArchitecture.html#ab1db27169d0bc9921d4c5048592e3d24", null ], + [ "FstSpmvArchitecture", "classspark_1_1spmv_1_1FstSpmvArchitecture.html#add2548a017451c5caae61cd3e9021467", null ], + [ "countComputeCycles", "classspark_1_1spmv_1_1FstSpmvArchitecture.html#a328db4b67f8f9c6763117c8a82f81577", null ], + [ "get_name", "classspark_1_1spmv_1_1FstSpmvArchitecture.html#a90397fa9aa179cb86021fac39afc3f27", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1spmv_1_1FstSpmvArchitecture.png b/docs/classspark_1_1spmv_1_1FstSpmvArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c815234e1d6165d49a997b7a587f871e70e281c1 GIT binary patch literal 1225 zcmeAS@N?(olHy`uVBq!ia0vp^_kg&AgBeKf&s&-gq$C1-LR|m<{|{uoc=NTi|Ih>= z3ycpOIKbL@M;^%KC<*clW&kPzfvcxNj2IYLB0OCjLn;{G&b_$qu@;Z3xOLF~|C94? zwIoP;+}=5NqJzxFsq+$g#LdoW-`^)zt znrD0eO@G$A)p!3h-aGv#&v#eykLrr`#`nM5J+hW}H%O~aF7Zv>S+UDa^8E}>zWL|( zl>dtjo9^kksq%?GvwG*POS{u&Qd`acdr{itW9x_iYWC zda>)TTG90=E4O_fRX11fdindz--~y--&#pM-5IgJcCpm@S`ov=`?bzp+9tE?t#tU} z)k@{1ca1;&RSl_rG3R;r4u?rnRlo24eqsFCTG{j0La})&doS*&m}IgJ$m(6ys_wZs z>o_n}W`{BS58`jAG&R5X*wFO;oeJx_XKE%tUVDzyV4axUffZ2|42!cKGWM)$Wj9zw zNZ^BU?(J=7waq+dg>w5(asvnUS2=ypOX6O?%t$UpP&D%VBUR8a;vSR&tp5!GLy1z+)DHOT{@PStxDq4 z3=5K+nt5{hlrtTXJs(3V_)NlrL+6C^ZvAk}@v6D1XJSmJeyi}#-sPv)beBt%d^n}H zZEJ{U{?R(&DX*nGHy!@-$<0e^@tqbc!Kt}deOKFk`1Y>VPp0=%%$oZuJ1^?2+P54M z8S*0OFFp7!f9t)(ksPpZ-C2&gn*wWcyG0(hH0U z%ieBvPvgvoo|k|jJ;`KM*&bjBX0m?J|H?2Uy!f%LT=3_!z1uIJJ!5Wp@6{ZJ$3#a3 zJhJSAy)@5i3msSkkIDQG`)oQkm(D!;t-iqv8XNOlKAV4RFe+*&_mes}Mcn>ywd_Z` z!j@t?KJU%54RrSa1_qm~1ebO+s|7hr9lUwZHjQ08cS+P22_5xs3 zyb*oAc7Kh^-B7m6JG>Iyw{~}~oB7c1Qt#H%OD0{vXYYRQvwn^#H2@2F7f+FF9q8mhvmY{+nCQtJ_yG@^=jvulr=(r2SI~`g + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::spmv::PrefetchingArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::PrefetchingArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth)spark::spmv::SimpleSpmvArchitectureprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
encodeEmptyRows(std::vector< uint32_t > pin, bool encode)spark::spmv::SkipEmptyRowsArchitectureinlineprotected
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
get_name() overridespark::spmv::PrefetchingArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getLibraryName()spark::spmv::SimpleSpmvArchitectureinlinevirtual
implspark::spmv::SimpleSpmvArchitectureprotected
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
PrefetchingArchitecture()spark::spmv::PrefetchingArchitectureinline
PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::PrefetchingArchitectureinline
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) overridespark::spmv::SkipEmptyRowsArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation *_impl)spark::spmv::SimpleSpmvArchitectureinline
SkipEmptyRowsArchitecture()spark::spmv::SkipEmptyRowsArchitectureinline
SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SkipEmptyRowsArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1PrefetchingArchitecture.html b/docs/classspark_1_1spmv_1_1PrefetchingArchitecture.html new file mode 100644 index 0000000..4249fcd --- /dev/null +++ b/docs/classspark_1_1spmv_1_1PrefetchingArchitecture.html @@ -0,0 +1,318 @@ + + + + + + +Spark: spark::spmv::PrefetchingArchitecture Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv::PrefetchingArchitecture Class Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::PrefetchingArchitecture:
+
+
+ + +spark::spmv::SkipEmptyRowsArchitecture +spark::spmv::SimpleSpmvArchitecture +spark::spmv::SpmvArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PrefetchingArchitecture ()
 
 PrefetchingArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SkipEmptyRowsArchitecture
 SkipEmptyRowsArchitecture ()
 
 SkipEmptyRowsArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
- Public Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
 SimpleSpmvArchitecture (spark::runtime::GeneratedSpmvImplementation *_impl)
 
virtual std::string getLibraryName ()
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from spark::spmv::SkipEmptyRowsArchitecture
std::vector< uint32_t > encodeEmptyRows (std::vector< uint32_t > pin, bool encode)
 
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) override
 
- Protected Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
virtual int countComputeCycles (uint32_t *v, int size, int inputWidth)
 
virtual bool equals (const SpmvArchitecture &a) const override
 
- Protected Attributes inherited from spark::spmv::SimpleSpmvArchitecture
const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
spark::runtime::GeneratedSpmvImplementation * impl
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::PrefetchingArchitecture::get_name ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from spark::spmv::SkipEmptyRowsArchitecture.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1PrefetchingArchitecture.js b/docs/classspark_1_1spmv_1_1PrefetchingArchitecture.js new file mode 100644 index 0000000..76cff55 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1PrefetchingArchitecture.js @@ -0,0 +1,6 @@ +var classspark_1_1spmv_1_1PrefetchingArchitecture = +[ + [ "PrefetchingArchitecture", "classspark_1_1spmv_1_1PrefetchingArchitecture.html#ae614b247e6e43b41b6ee2ec4565a55c6", null ], + [ "PrefetchingArchitecture", "classspark_1_1spmv_1_1PrefetchingArchitecture.html#a12e8b6b4d9135f559d1800dacf5f25f1", null ], + [ "get_name", "classspark_1_1spmv_1_1PrefetchingArchitecture.html#a91515587bbfe2ac62a891f17363d508f", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1spmv_1_1PrefetchingArchitecture.png b/docs/classspark_1_1spmv_1_1PrefetchingArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..dc4ec72f7c36ee57d5a4ad01d2a59fa3cdecc080 GIT binary patch literal 1721 zcma)-2~d+)5XXZEwLqnSC}$G|2NfC*(10Lv!-v6AS9CqS{IQ1#b^qbE&8=o_e($NpC!LAzDKELC^+kS z-_(?S5*Ht0(^6C=St>)$M8d7vbwRj{y3ZvgQ|3z+VWqU2(JE-S7B#uXazX9CzRt+A zUHcBKI_<`XVCliIV|`P4F@OceUJdpoWWypN4bt=D5(P@0E}ry0osB!g_|Rp~A>N{1 z%#|mm0!W2DMawT7rk%s`&^5zk80=$jFpo;sIlu#7`CGy&wJ;VnVSLT@5!0iP30?)8 z{TgNmu*;j)hadJ-jRsJMYY7W`l@%{nY&)Soq>`2{`JHWkS@(4YvEI^!v*@+2Oc;)B zvCV$CqLKb_#Xzb>sio@V56Wo|Y1&m(S+5Om{0Lb@rzXb1@cA6K;%PFkAZB=JXd-cK z<;G=g*J1PKBj(BD?!di+XXmwTOT>QjmSH~OmZ4U@dv@(^>2^}J(U2g6oT|4B#9vW{ zaO=&KkqoijUclGY#MTbey7lL$Ux&e{jig04m~qPZ!3P1VS`^hF4mh zpz87c*0V%`{crI-COiE3x@Oq_;P9`Yuzmj&0YPpHAZTKli-RGFL`n&0sH>+i881a^ z!sY7aWybnpwXogDyEoU9h7UtW<<_82+QH0h_Utzs?M9J})2;am*EY7ZT`xMT{q5xQ370B-_qGV=)nO$3T-i zm{W}~QPzd0H=Vuf1*C^F5N_sx@s`U?b?tV}y@@tnaZfI&D7Va%1+xNDaKR8Rp_xL@ zqgOk-;0}f5?b?mlsR*m>`M!~zlGl6i-1f=g&xPRyRv$Ai)~6UH`oFPw#=NT>vd^~0 z#-B0;Lix8MX6GHY4YW8l_*Suo3XaJ_;i!yA)lW?Mz_ED5FC(3z(B4N0Ne+WiS;QN~ zmyvu{Z=(CG2;jhx9ed(}Qf97Q?MUDCp3`du8UCDrm|M|bnjhT@URGfD z`h88wV>3D?%S|m_Ym$^I2G=yt`N*^!X?v{U+3pz_cM_Ip7lqcptglgYUWwOIB;ej$ zwLwpopS_)m(~l#lLu$F^%ev_-5wb*lmwWGrDP|`$t)` zdaZ}xd*;{6tsp;%xkX3W@&su=r0iu^q^3-;&CY0yu>47CE1e3Fg+tAw0^ZH8<{eeE czK~_@iu2_A2aBT?!G8t<_#XFRc}0EwJ4?h}s{jB1 literal 0 HcmV?d00001 diff --git a/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html new file mode 100644 index 0000000..4ee21d4 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture-members.html @@ -0,0 +1,159 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::spmv::SimpleSpmvArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::SimpleSpmvArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth)spark::spmv::SimpleSpmvArchitectureprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
do_blocking(const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > &mat, int blockSize, int inputWidth)spark::spmv::SimpleSpmvArchitectureprivate
do_partition(const EigenSparseMatrix &mat, int numPipes)spark::spmv::SimpleSpmvArchitectureprivate
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
get_name() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getLibraryName()spark::spmv::SimpleSpmvArchitectureinlinevirtual
implspark::spmv::SimpleSpmvArchitectureprotected
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
logResult(std::string s, std::vector< U > vals)spark::spmv::SimpleSpmvArchitectureinlineprivate
logResult(std::string s, Arg a, Args...as)spark::spmv::SimpleSpmvArchitectureinlineprivate
logResultR(std::string s, Arg a, Args...as)spark::spmv::SimpleSpmvArchitectureinlineprivate
logResultR(std::string s)spark::spmv::SimpleSpmvArchitectureinlineprivate
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)spark::spmv::SpmvArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation *_impl)spark::spmv::SimpleSpmvArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html new file mode 100644 index 0000000..2baf006 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.html @@ -0,0 +1,1008 @@ + + + + + + +Spark: spark::spmv::SimpleSpmvArchitecture Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv::SimpleSpmvArchitecture Class Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::SimpleSpmvArchitecture:
+
+
+ + +spark::spmv::SpmvArchitecture +spark::spmv::FstSpmvArchitecture +spark::spmv::SkipEmptyRowsArchitecture +spark::spmv::PrefetchingArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
 SimpleSpmvArchitecture (spark::runtime::GeneratedSpmvImplementation *_impl)
 
virtual std::string getLibraryName ()
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + + + + +

+Protected Member Functions

virtual int countComputeCycles (uint32_t *v, int size, int inputWidth)
 
virtual bool equals (const SpmvArchitecture &a) const override
 
- Protected Member Functions inherited from spark::spmv::SpmvArchitecture
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
 
+ + + + + + + + + + + + + + + +

+Protected Attributes

const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
spark::runtime::GeneratedSpmvImplementation * impl
 
+ + + + + + + + + + + + + + + + +

+Private Member Functions

std::vector< EigenSparseMatrix > do_partition (const EigenSparseMatrix &mat, int numPipes)
 
Partition do_blocking (const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > &mat, int blockSize, int inputWidth)
 
template<typename U >
void logResult (std::string s, std::vector< U > vals)
 
template<typename Arg , typename... Args>
void logResult (std::string s, Arg a, Args...as)
 
template<typename Arg , typename... Args>
void logResultR (std::string s, Arg a, Args...as)
 
void logResultR (std::string s)
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture (spark::runtime::GeneratedSpmvImplementation * _impl)
+
+inline
+
+

For execution we build the architecture and give it a pointer to the device implementation.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
int ssarch::countComputeCycles (uint32_t * v,
int size,
int inputWidth 
)
+
+protectedvirtual
+
+ +

Reimplemented in spark::spmv::FstSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Eigen::VectorXd ssarch::dfespmv (Eigen::VectorXd x)
+
+overridevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::Partition ssarch::do_blocking (const Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t > & mat,
int blockSize,
int inputWidth 
)
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector< EigenSparseMatrix > ssarch::do_partition (const EigenSparseMatrix & mat,
int numPipes 
)
+
+private
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool spark::spmv::SimpleSpmvArchitecture::equals (const SpmvArchitecture & a) const
+
+inlineoverrideprotectedvirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SimpleSpmvArchitecture::get_name ()
+
+inlineoverridevirtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual double spark::spmv::SimpleSpmvArchitecture::getEstimatedClockCycles ()
+
+inlinevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual double spark::spmv::SimpleSpmvArchitecture::getGFlopsCount ()
+
+inlinevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::model::ImplementationParameters spark::spmv::SimpleSpmvArchitecture::getImplementationParameters ()
+
+inlinevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SimpleSpmvArchitecture::getLibraryName ()
+
+inlinevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+
+template<typename U >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void spark::spmv::SimpleSpmvArchitecture::logResult (std::string s,
std::vector< U > vals 
)
+
+inlineprivate
+
+ +
+
+ +
+
+
+template<typename Arg , typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void spark::spmv::SimpleSpmvArchitecture::logResult (std::string s,
Arg a,
Args... as 
)
+
+inlineprivate
+
+ +
+
+ +
+
+
+template<typename Arg , typename... Args>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void spark::spmv::SimpleSpmvArchitecture::logResultR (std::string s,
Arg a,
Args... as 
)
+
+inlineprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void spark::spmv::SimpleSpmvArchitecture::logResultR (std::string s)
+
+inlineprivate
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool spark::spmv::SimpleSpmvArchitecture::operator== (const SimpleSpmvArchitecture & other) const
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void ssarch::preprocess (const EigenSparseMatrix & mat)
+
+overridevirtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SimpleSpmvArchitecture::to_string ()
+
+inlinevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual boost::property_tree::ptree spark::spmv::SimpleSpmvArchitecture::write_params ()
+
+inlineoverridevirtual
+
+ +

Implements spark::spmv::SpmvArchitecture.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const int spark::spmv::SimpleSpmvArchitecture::cacheSize
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
spark::runtime::GeneratedSpmvImplementation* spark::spmv::SimpleSpmvArchitecture::impl
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::spmv::SimpleSpmvArchitecture::inputWidth
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
EigenSparseMatrix spark::spmv::SimpleSpmvArchitecture::mat
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::spmv::SimpleSpmvArchitecture::maxRows
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
const int spark::spmv::SimpleSpmvArchitecture::numPipes
+
+protected
+
+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<Partition> spark::spmv::SimpleSpmvArchitecture::partitions
+
+protected
+
+ +
+
+
The documentation for this class was generated from the following files: +
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.js b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.js new file mode 100644 index 0000000..0dce855 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.js @@ -0,0 +1,31 @@ +var classspark_1_1spmv_1_1SimpleSpmvArchitecture = +[ + [ "SimpleSpmvArchitecture", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae0357e972b3380edb382868d3616542d", null ], + [ "SimpleSpmvArchitecture", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a254d3c473b526699bdf5d7994da756b9", null ], + [ "SimpleSpmvArchitecture", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a84c629c0046f93dbd7892d970650c767", null ], + [ "countComputeCycles", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ab2b61b0a02aa4dfa40a38ad98a84bbb4", null ], + [ "dfespmv", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a8c7ca2d2ac7284e46506f23728dde499", null ], + [ "do_blocking", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aedb22fc8e413dd6bc2c54d74bf03ed2d", null ], + [ "do_partition", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac3cd16da984d35b091f0833edd919a56", null ], + [ "equals", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac9cd3ac1f8a7ff7c2634d707a2d33356", null ], + [ "get_name", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac91efdbe0c3de7a45edde0052f478638", null ], + [ "getEstimatedClockCycles", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ad109173c60a0469e99d188010e09fa9c", null ], + [ "getGFlopsCount", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a1b45bc81758c2e9ef21e6620d8fbd4db", null ], + [ "getImplementationParameters", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3c5900f38fdfafa6481508d9c90819ff", null ], + [ "getLibraryName", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a7dd9917bb3685f9235972026c3d72c49", null ], + [ "logResult", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac30acafe28fa8aefac50da03b867f928", null ], + [ "logResult", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a2443f3bebc9b04350fe736fd17b199d2", null ], + [ "logResultR", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#abb11d2ac348c1bdc14ebb7f367b4db5d", null ], + [ "logResultR", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aeda39c3024d1efa75e0714e25a8d919c", null ], + [ "operator==", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9ff8f85bf609bf02b087b39674dc1b25", null ], + [ "preprocess", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3aed67e40e87a0ea0dd79fd30f76a7cf", null ], + [ "to_string", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af12e62e4f0c6a5d0f6e37bf3a326956b", null ], + [ "write_params", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9acabcfa6d09c76000290982c33a36f0", null ], + [ "cacheSize", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a0fd07f4d1e241d9bb5e525fc1f9c4ab2", null ], + [ "impl", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af57f57adeebaae9edeb9db32b9579b28", null ], + [ "inputWidth", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a4083f351467c940c767fa9122d3a727c", null ], + [ "mat", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae295666cf3885149b0e37766c4feffc7", null ], + [ "maxRows", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a577fd6e73f088b437a5632ba3ca89c61", null ], + [ "numPipes", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac51f502488f2b7d2dbffb5a9939b4271", null ], + [ "partitions", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a90e1699cd2d8ee0abd21e4461d8c7d32", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.png b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..c1f11bf591cfbb7a90b6355eecd30492edc6ca5c GIT binary patch literal 2306 zcmb`JeN>WJ9>*~gt+bufw5#T8E#zn>jlEboq-bq{MMhwnrIwYW2u#8QzT`_iM!_K=OJ@ocoN8O zz64nx-=?M}tGq5Z=+lNlz#oJ`ixwXBQ=%_4bQ!x7Lrk_9;f@rQdfQtm+736&hh(t7 zcw2#$Y;2t~y+C(<-3tq9eT{0e$9k59!_FbG1VmLNyEz7AuY??2Vt(6zmT4ux>;&$OpnU`vM zo9$DHwxqg6w>h6X8e$-LV&fo>+`ESxP^aJYXUNT7C*@VXC9@-G+m;Gz53RSa@F~FS z;B3ZsKuE`u6ouL&{tnG{$ZFCv@bJry(YG1p7}g&%_9EDfENFpa9Y3=D`XG0}aHWs^9NZ=w zu-y4NLDy(;JO+fFy_=Y|0h)5Ca&ouT*nI|v9OeL)=N?EbASGbO?o$8v=_Wx$(aAik z!0_g_SO4O+`%6)^D#^_8t8}GcVDv{XM_MO+JJA#0Y3#c1CzSzFcvlx85T3_t4T8NK)7b&P>m& z^Mr4o-P0edz{wSJQ;rP3UmqvNf`ZmF%7%>~9ovJI1|Bj!3|&E)cOjxjj^#?US(c#M zU6a0bZZ#GXe~*_7>e-c{YP;jN3X_ul>;zn(2=T0XARvY5w~cQ56i9E3zUiq#oas`P zr+tWj=l`nJIp)zZUp;$Zvg2!IfbeD>-{f4512zr6n5`A`!AA2hZRQ*z8Ct4820M_P za3CtGp#|>7fRu89vNN@y);W&s6a5xzW!{PvOJSB{SRWYNeGw${dBx9-7TM5m2Yz~4 zPs?(E2yplQPY4*p_!KLU-mo7p+?W4%$V|WLI*1!wcZ7f&bUMdNWApcPN|2r_H0!Yt zY}lnaKnTHMp$?2~1TP}c%B1;9C#@VAA5#VLj-Y};vS=dPXy1QLP`72>_qrLSB)}$l zF7?cx#C*crWjx^C^|sfUVJu#lez=@N#d(y<$mn)}rXQMpP0{Nqy{B-%vnbMzw|#wK zX=YTw*2F8pniA@{u8<5tSM1;rL$H@2PvMb48Br>WSIefV)3~97$(&ZHriVCXYM;~5 zP=&jr`2>?s^a<%WoW;O+(s$ZCDw=4 z_#W1rg_gTFXLejyP_aX0vc53$tyvqEgg5Z6OeE*{z9dAoNM&wwQUbP z`j~57!t$ye-&ea37qC2wXxobKlXK(f%M+yxWck7V<@NnpVi zwGtyn0N!!2-f4J&U>$4~W#_Cv`PRQggeEnA4{r)5>xa zo^)UuP^bf5NcGPWB+ng1o(taT!MAs2>b^Gl2EV^w23P{y@O>{%&qSc2T!Zb z!pvv5@xTJ>lPdhH?svmfdI6#?T+EjwE~|g@+)y@NE9hO(X`t3eWz>_Oh{?XZ8M)d{ z^0-@;bNg}QS^jMZfJtY55SEnUwTB(me*>UE+fM8QJv>AR^K$4^ literal 0 HcmV?d00001 diff --git a/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html new file mode 100644 index 0000000..f5d9948 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace-members.html @@ -0,0 +1,135 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html new file mode 100644 index 0000000..30d1c86 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html @@ -0,0 +1,413 @@ + + + + + + +Spark: spark::spmv::SimpleSpmvArchitectureSpace< T > Class Template Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv::SimpleSpmvArchitectureSpace< T > Class Template Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::SimpleSpmvArchitectureSpace< T >:
+
+
+ + +spark::spmv::SpmvArchitectureSpace + +
+ + + + + + + + + +

+Public Member Functions

 SimpleSpmvArchitectureSpace (spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)
 
 SimpleSpmvArchitectureSpace ()
 
- Public Member Functions inherited from spark::spmv::SpmvArchitectureSpace
std::shared_ptr< SpmvArchitecture > next ()
 
+ + + + + +

+Protected Member Functions

void restart () override
 
T * doNext ()
 
+ + + + + + + + + + + +

+Private Attributes

spark::utils::Range cacheSizeR {1024, 4096, 512}
 
spark::utils::Range inputWidthR {8, 100, 8}
 
spark::utils::Range numPipesR {1, 6, 1}
 
int maxRows
 
bool last = false
 
+

Constructor & Destructor Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::SimpleSpmvArchitectureSpace< T >::SimpleSpmvArchitectureSpace (spark::utils::Range numPipesRange,
spark::utils::Range inputWidthRange,
spark::utils::Range cacheSizeRange,
int _maxRows 
)
+
+inline
+
+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
spark::spmv::SimpleSpmvArchitectureSpace< T >::SimpleSpmvArchitectureSpace ()
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
T* spark::spmv::SimpleSpmvArchitectureSpace< T >::doNext ()
+
+inlineprotectedvirtual
+
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + + + + +
void spark::spmv::SimpleSpmvArchitectureSpace< T >::restart ()
+
+inlineoverrideprotectedvirtual
+
+
+

Member Data Documentation

+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
spark::utils::Range spark::spmv::SimpleSpmvArchitectureSpace< T >::cacheSizeR {1024, 4096, 512}
+
+private
+
+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
spark::utils::Range spark::spmv::SimpleSpmvArchitectureSpace< T >::inputWidthR {8, 100, 8}
+
+private
+
+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
bool spark::spmv::SimpleSpmvArchitectureSpace< T >::last = false
+
+private
+
+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
int spark::spmv::SimpleSpmvArchitectureSpace< T >::maxRows
+
+private
+
+ +
+
+ +
+
+
+template<typename T>
+ + + + + +
+ + + + +
spark::utils::Range spark::spmv::SimpleSpmvArchitectureSpace< T >::numPipesR {1, 6, 1}
+
+private
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.js b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.js new file mode 100644 index 0000000..24165f0 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.js @@ -0,0 +1,12 @@ +var classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace = +[ + [ "SimpleSpmvArchitectureSpace", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a045eb9b1b8b025ae7ebff4a4f6cd3246", null ], + [ "SimpleSpmvArchitectureSpace", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abd7023a217d39076e9c47a4226580c4f", null ], + [ "doNext", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abde19171c284739290c7a7c145d7deb7", null ], + [ "restart", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a50a6bb214092c694e0c3e8b9978f607c", null ], + [ "cacheSizeR", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a5eb1ea4c3054ef0b99c199732c004195", null ], + [ "inputWidthR", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#ab7dd6b46e80d1fe85694b964ce761e85", null ], + [ "last", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a618c39ec4cde84cb595f089fb881ce7c", null ], + [ "maxRows", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#acaac03fcff370b3f0945823b1f13a90f", null ], + [ "numPipesR", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a2250dba56bfc36df530fcba2ae8e5573", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.png b/docs/classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.png new file mode 100644 index 0000000000000000000000000000000000000000..651f4ff49a3495391a9a31c983e3d7dac7ca61cb GIT binary patch literal 1058 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM12~w0Wa25~pFm0?z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-op4;)Ij%DpLK%l)w-kD<&W&XvwnSgOOEA^vpsHh>hT#t8xLQf#BaJJ z+j!g4TkIQs-)!f&Il*21OUtv9{cDe2cS!%Tv&bjIJVM}A)E3Q^_nvx6*I!$C+-dF- zd6oQGFAklU_G(pI+oc&6XZo*S=KJ^7?#a7^{E~A&n|GK=ah}cmwQE*R#*KIS-xq$= zGhXt`tR~jh`O~w8bv-$|%Z^{Wn|hr4{ez~M+kda_e&g8sZ_Y%OTKD_>lUh_XgM=n6 z@#yFDyi~sw7HIHL6kiyX?Rz!qbqvG*DRvA&4BV=U4G!}1og4{kRagXGuxbc0>P&56 zNK%z=@bKhN2ohrIn9{9AsL9^&Rr>*Lat^Zd>e}84b zG$VVC?Y%v6hwmh<-0s+5c5XJe!QdE!}?wBJyJJnpx&^GmY;*9l%r?cNkvEJEnYJKQ-_v>p*X6kaj zW#e|btl;jq{Pef^)|v12zguvATaN!W|9MW*b%Gj)U(`h^bLDPPww-b~!+OfGBZ+l; zeyNr2Z+ljIB6j_~7jr(dZ)}jfe0gJBri#h(m#?!ny;fYl9+o)ntW%pm-FCsB51htk<3DI17<}3TVy*9H?U;C~J%+L&;u6{1-oD!M + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::spmv::SkipEmptyRowsArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::SkipEmptyRowsArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
cacheSizespark::spmv::SimpleSpmvArchitectureprotected
countComputeCycles(uint32_t *v, int size, int inputWidth)spark::spmv::SimpleSpmvArchitectureprotectedvirtual
dfespmv(Eigen::VectorXd x) overridespark::spmv::SimpleSpmvArchitecturevirtual
encodeEmptyRows(std::vector< uint32_t > pin, bool encode)spark::spmv::SkipEmptyRowsArchitectureinlineprotected
equals(const SpmvArchitecture &a) const overridespark::spmv::SimpleSpmvArchitectureinlineprotectedvirtual
get_name() overridespark::spmv::SkipEmptyRowsArchitectureinlinevirtual
getEstimatedClockCycles()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getImplementationParameters()spark::spmv::SimpleSpmvArchitectureinlinevirtual
getLibraryName()spark::spmv::SimpleSpmvArchitectureinlinevirtual
implspark::spmv::SimpleSpmvArchitectureprotected
inputWidthspark::spmv::SimpleSpmvArchitectureprotected
matspark::spmv::SimpleSpmvArchitectureprotected
maxRowsspark::spmv::SimpleSpmvArchitectureprotected
numPipesspark::spmv::SimpleSpmvArchitectureprotected
operator==(const SimpleSpmvArchitecture &other) const spark::spmv::SimpleSpmvArchitectureinline
spark::spmv::SpmvArchitecture::operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
partitionsspark::spmv::SimpleSpmvArchitectureprotected
preprocess(const EigenSparseMatrix &mat) overridespark::spmv::SimpleSpmvArchitecturevirtual
spark::spmv::SpmvArchitecture::preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) overridespark::spmv::SkipEmptyRowsArchitectureinlineprotectedvirtual
SimpleSpmvArchitecture()spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SimpleSpmvArchitectureinline
SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation *_impl)spark::spmv::SimpleSpmvArchitectureinline
SkipEmptyRowsArchitecture()spark::spmv::SkipEmptyRowsArchitectureinline
SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)spark::spmv::SkipEmptyRowsArchitectureinline
to_string()spark::spmv::SimpleSpmvArchitectureinlinevirtual
write_params() overridespark::spmv::SimpleSpmvArchitectureinlinevirtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html b/docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html new file mode 100644 index 0000000..3a13a84 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html @@ -0,0 +1,394 @@ + + + + + + +Spark: spark::spmv::SkipEmptyRowsArchitecture Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv::SkipEmptyRowsArchitecture Class Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+
+Inheritance diagram for spark::spmv::SkipEmptyRowsArchitecture:
+
+
+ + +spark::spmv::SimpleSpmvArchitecture +spark::spmv::SpmvArchitecture +spark::spmv::PrefetchingArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SkipEmptyRowsArchitecture ()
 
 SkipEmptyRowsArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
virtual std::string get_name () override
 
- Public Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
bool operator== (const SimpleSpmvArchitecture &other) const
 
virtual boost::property_tree::ptree write_params () override
 
 SimpleSpmvArchitecture ()
 
 SimpleSpmvArchitecture (int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)
 
 SimpleSpmvArchitecture (spark::runtime::GeneratedSpmvImplementation *_impl)
 
virtual std::string getLibraryName ()
 
virtual double getEstimatedClockCycles ()
 
virtual double getGFlopsCount ()
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()
 
virtual std::string to_string ()
 
virtual void preprocess (const EigenSparseMatrix &mat) override
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x) override
 
- Public Member Functions inherited from spark::spmv::SpmvArchitecture
double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + + + + + + +

+Protected Member Functions

std::vector< uint32_t > encodeEmptyRows (std::vector< uint32_t > pin, bool encode)
 
virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks) override
 
- Protected Member Functions inherited from spark::spmv::SimpleSpmvArchitecture
virtual int countComputeCycles (uint32_t *v, int size, int inputWidth)
 
virtual bool equals (const SpmvArchitecture &a) const override
 
+ + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Attributes inherited from spark::spmv::SimpleSpmvArchitecture
const int cacheSize
 
const int inputWidth
 
const int numPipes
 
const int maxRows
 
EigenSparseMatrix mat
 
std::vector< Partition > partitions
 
spark::runtime::GeneratedSpmvImplementation * impl
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture (int _cacheSize,
int _inputWidth,
int _numPipes,
int _maxRows 
)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::vector<uint32_t> spark::spmv::SkipEmptyRowsArchitecture::encodeEmptyRows (std::vector< uint32_t > pin,
bool encode 
)
+
+inlineprotected
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SkipEmptyRowsArchitecture::get_name ()
+
+inlineoverridevirtual
+
+ +

Reimplemented from spark::spmv::SimpleSpmvArchitecture.

+ +

Reimplemented in spark::spmv::PrefetchingArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual spark::sparse::CsrMatrix spark::spmv::SkipEmptyRowsArchitecture::preprocessBlock (const spark::sparse::CsrMatrix & in,
int blockNumber,
int nBlocks 
)
+
+inlineoverrideprotectedvirtual
+
+ +

Reimplemented from spark::spmv::SpmvArchitecture.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.js b/docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.js new file mode 100644 index 0000000..7639e25 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.js @@ -0,0 +1,8 @@ +var classspark_1_1spmv_1_1SkipEmptyRowsArchitecture = +[ + [ "SkipEmptyRowsArchitecture", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ad7f11ef476f1343c237b4bd41f19559b", null ], + [ "SkipEmptyRowsArchitecture", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ab8dadd53ee054e2152cd86b979b4304e", null ], + [ "encodeEmptyRows", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#a0336d2d0c76a4ad1586b904bafaefb3d", null ], + [ "get_name", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ae9604bff9ee8258920e8b599e0bb1a1d", null ], + [ "preprocessBlock", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#adefa266d246a395b8a67a83912272e2d", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.png b/docs/classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe420795c4a266bc465b1595df1b4afe77cdad2 GIT binary patch literal 1728 zcmb7FdoBrTELSu7ofHnLu~@s4y#m|?o-65FhmBsy*_S(laE zTIw)E;&qz|Q!a^V8q(bM{_33Ge>?B@oagd=&i9Y+^L#$f^Q0a><_cb?vkn9TfzfVG zUVxPWQm3{G&}&z}Hv|6j{gS%6I+fIZ7;sgK@jB)W0v`Q5 z-Obp2AkZ35w39tHUTG@tL*^uWgY(wyY=xp}S1UNzz3*<$myDFO@}f5oQ?s#~kl-Ee zPG}vp7LJi1bYc|^&RLGY(I{nNx5;%_dCW&aQkYDM5yRd-FY{mFwYf2poq){oI+{TG?LX7E zq$AjINP#*3AQP1As*&<^zpiZ9e8)_@VEwo7cdPW<(!lMn4foke?+8GzNcyX0IjI}k zYyK3N)@y(apU^+r;dV#B=&CV%wsVeSEwE>t-fi-F!E7c1#VD$79$apb?OqsM`%RVZ zH?weicJA%CS>@2efsv%>if%FLqZQZRmlP9Qg*hD9!|NRCkIz@ec&f^JvRfAtb(M6b z5it`?CSHY{8#8yR)d*Fzmzko9XYNZpqsDSPOX zE!ol~s$uNI%jyF?CD@c1yX71+WLa<1gV8486Uo8Q%@hUg=g(#WlP5Rv$linvl~ZWO zil-JiJOn-A{U1SJz#AdM$CZCT4}+L{(Irt~237=SzdfK-=I?Z;+*n_S_G< zB-NKvxX4-FU|Zl;p5>vMj*>gK%A=#ggaZ#g&kx_R3B!qnnIrMyMT4$Z$1P1CCwJUi z>QhoDXGt?+@|T{d(fZ`QOV!D+g19QvKHKK%=K>GVL9{Zx2)b zfiz*kTMDB_55FO^j5p%buTriB)Suwob$zcInwm7`3l?n?r9R6(7Z$v6?S(G2B9?Jm zF1Ol}-ey^@SK1d|h-4Jg zG+5Th+l`Ka*Ik2kHOan_DJzzAC14n>89%ADtso8)k^*$)9|9UidvOB*x8lAv~Idd}1sp~_~&Dxwwo)&o^HM9ab zw)_+mZMffsDAdcUJ%0p=B7QlqpvIeL>lUJ-n=a+-vvQLfUGFk#s?d>bS(&I$iBu{+ zO?=L$Kk7Vg(Nn`!bYNGI + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::spmv::SpmvArchitecture Member List
+
+
+ +

This is the complete list of members for spark::spmv::SpmvArchitecture, including all inherited members.

+ + + + + + + + + + + + + + + + +
dfespmv(Eigen::VectorXd x)=0spark::spmv::SpmvArchitecturepure virtual
equals(const SpmvArchitecture &a) const =0spark::spmv::SpmvArchitectureprotectedpure virtual
get_name()=0spark::spmv::SpmvArchitecturepure virtual
getEstimatedClockCycles()=0spark::spmv::SpmvArchitecturepure virtual
getEstimatedGFlops()spark::spmv::SpmvArchitectureinline
getFrequency()spark::spmv::SpmvArchitectureinline
getGFlopsCount()=0spark::spmv::SpmvArchitecturepure virtual
getImplementationParameters()=0spark::spmv::SpmvArchitecturepure virtual
getLibraryName()=0spark::spmv::SpmvArchitecturepure virtual
operator==(const SpmvArchitecture &other)spark::spmv::SpmvArchitectureinline
preprocess(const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0spark::spmv::SpmvArchitecturepure virtual
preprocessBlock(const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)spark::spmv::SpmvArchitectureinlineprotectedvirtual
to_string()=0spark::spmv::SpmvArchitecturepure virtual
write_params()=0spark::spmv::SpmvArchitecturepure virtual
~SpmvArchitecture()spark::spmv::SpmvArchitectureinlinevirtual
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1SpmvArchitecture.html b/docs/classspark_1_1spmv_1_1SpmvArchitecture.html new file mode 100644 index 0000000..3822ced --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SpmvArchitecture.html @@ -0,0 +1,570 @@ + + + + + + +Spark: spark::spmv::SpmvArchitecture Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv::SpmvArchitecture Class Referenceabstract
+
+
+ +

#include <Spmv.hpp>

+
+Inheritance diagram for spark::spmv::SpmvArchitecture:
+
+
+ + +spark::spmv::SimpleSpmvArchitecture +spark::spmv::FstSpmvArchitecture +spark::spmv::SkipEmptyRowsArchitecture +spark::spmv::PrefetchingArchitecture + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

double getEstimatedGFlops ()
 
double getFrequency ()
 
virtual double getEstimatedClockCycles ()=0
 
virtual double getGFlopsCount ()=0
 
virtual std::string to_string ()=0
 
virtual
+spark::model::ImplementationParameters 
getImplementationParameters ()=0
 
virtual void preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > &mat)=0
 
virtual Eigen::VectorXd dfespmv (Eigen::VectorXd x)=0
 
virtual std::string get_name ()=0
 
virtual boost::property_tree::ptree write_params ()=0
 
virtual std::string getLibraryName ()=0
 
bool operator== (const SpmvArchitecture &other)
 
virtual ~SpmvArchitecture ()
 
+ + + + + +

+Protected Member Functions

virtual spark::sparse::CsrMatrix preprocessBlock (const spark::sparse::CsrMatrix &in, int blockNumber, int nBlocks)
 
virtual bool equals (const SpmvArchitecture &a) const =0
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::spmv::SpmvArchitecture::~SpmvArchitecture ()
+
+inlinevirtual
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Eigen::VectorXd spark::spmv::SpmvArchitecture::dfespmv (Eigen::VectorXd x)
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual bool spark::spmv::SpmvArchitecture::equals (const SpmvArchitecture & a) const
+
+protectedpure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SpmvArchitecture::get_name ()
+
+pure virtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual double spark::spmv::SpmvArchitecture::getEstimatedClockCycles ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double spark::spmv::SpmvArchitecture::getEstimatedGFlops ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double spark::spmv::SpmvArchitecture::getFrequency ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual double spark::spmv::SpmvArchitecture::getGFlopsCount ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::model::ImplementationParameters spark::spmv::SpmvArchitecture::getImplementationParameters ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SpmvArchitecture::getLibraryName ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool spark::spmv::SpmvArchitecture::operator== (const SpmvArchitecture & other)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
virtual void spark::spmv::SpmvArchitecture::preprocess (const Eigen::SparseMatrix< double, Eigen::RowMajor > & mat)
+
+pure virtual
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
virtual spark::sparse::CsrMatrix spark::spmv::SpmvArchitecture::preprocessBlock (const spark::sparse::CsrMatrix & in,
int blockNumber,
int nBlocks 
)
+
+inlineprotectedvirtual
+
+ +

Reimplemented in spark::spmv::SkipEmptyRowsArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual std::string spark::spmv::SpmvArchitecture::to_string ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual boost::property_tree::ptree spark::spmv::SpmvArchitecture::write_params ()
+
+pure virtual
+
+ +

Implemented in spark::spmv::SimpleSpmvArchitecture.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1SpmvArchitecture.js b/docs/classspark_1_1spmv_1_1SpmvArchitecture.js new file mode 100644 index 0000000..6d66133 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SpmvArchitecture.js @@ -0,0 +1,18 @@ +var classspark_1_1spmv_1_1SpmvArchitecture = +[ + [ "~SpmvArchitecture", "classspark_1_1spmv_1_1SpmvArchitecture.html#abec906effc222dd9f12781c75e3b40c1", null ], + [ "dfespmv", "classspark_1_1spmv_1_1SpmvArchitecture.html#a1d557e23529a5040a858beafb9971acc", null ], + [ "equals", "classspark_1_1spmv_1_1SpmvArchitecture.html#aa3aebf2b76c95d7b96e37865637a1104", null ], + [ "get_name", "classspark_1_1spmv_1_1SpmvArchitecture.html#a4dfdec260889947cf9844eed98e5dbbe", null ], + [ "getEstimatedClockCycles", "classspark_1_1spmv_1_1SpmvArchitecture.html#af60acfd57143cbb06c582bd6c1e6a3a9", null ], + [ "getEstimatedGFlops", "classspark_1_1spmv_1_1SpmvArchitecture.html#a745a51a90e0d0e027be6f927e41e267a", null ], + [ "getFrequency", "classspark_1_1spmv_1_1SpmvArchitecture.html#a3eafac9b3bffd4a17d86a6f99eb97503", null ], + [ "getGFlopsCount", "classspark_1_1spmv_1_1SpmvArchitecture.html#a1be404ebea121baa4b28f1548ad6207d", null ], + [ "getImplementationParameters", "classspark_1_1spmv_1_1SpmvArchitecture.html#a31274a6b708f9db92d810d2a161d812a", null ], + [ "getLibraryName", "classspark_1_1spmv_1_1SpmvArchitecture.html#a701b198937568b2f47f4beb05dc349cc", null ], + [ "operator==", "classspark_1_1spmv_1_1SpmvArchitecture.html#a113cc5b7d55d561f862e007e0252cc82", null ], + [ "preprocess", "classspark_1_1spmv_1_1SpmvArchitecture.html#a4f14b957c8585ed81ff2af46ab26340f", null ], + [ "preprocessBlock", "classspark_1_1spmv_1_1SpmvArchitecture.html#a7cd5036aa7c21a4439b8ddfb8a969bf0", null ], + [ "to_string", "classspark_1_1spmv_1_1SpmvArchitecture.html#aa6bc86fc3b1f6d37836c7219d00c49a0", null ], + [ "write_params", "classspark_1_1spmv_1_1SpmvArchitecture.html#acb14edc8b1c5a5e961304e3bf92c97c7", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1spmv_1_1SpmvArchitecture.png b/docs/classspark_1_1spmv_1_1SpmvArchitecture.png new file mode 100644 index 0000000000000000000000000000000000000000..ba2cf1d84906726e31eb26e724d646b534d9248d GIT binary patch literal 2314 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 + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::spmv::SpmvArchitectureSpace Member List
+
+
+ +

This is the complete list of members for spark::spmv::SpmvArchitectureSpace, including all inherited members.

+ + + + +
doNext()=0spark::spmv::SpmvArchitectureSpaceprotectedpure virtual
next()spark::spmv::SpmvArchitectureSpaceinline
restart()=0spark::spmv::SpmvArchitectureSpacepure virtual
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.html b/docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.html new file mode 100644 index 0000000..7a67317 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.html @@ -0,0 +1,228 @@ + + + + + + +Spark: spark::spmv::SpmvArchitectureSpace Class Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv::SpmvArchitectureSpace Class Referenceabstract
+
+
+ +

#include <Spmv.hpp>

+
+Inheritance diagram for spark::spmv::SpmvArchitectureSpace:
+
+
+ + +spark::spmv::SimpleSpmvArchitectureSpace< T > + +
+ + + + + + +

+Public Member Functions

std::shared_ptr< SpmvArchitecture > next ()
 
virtual void restart ()=0
 
+ + + +

+Protected Member Functions

virtual SpmvArchitecture * doNext ()=0
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual SpmvArchitecture* spark::spmv::SpmvArchitectureSpace::doNext ()
+
+protectedpure virtual
+
+
+ +
+
+ + + + + +
+ + + + + + + +
std::shared_ptr<SpmvArchitecture> spark::spmv::SpmvArchitectureSpace::next ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void spark::spmv::SpmvArchitectureSpace::restart ()
+
+pure virtual
+
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.js b/docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.js new file mode 100644 index 0000000..51a87e7 --- /dev/null +++ b/docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.js @@ -0,0 +1,6 @@ +var classspark_1_1spmv_1_1SpmvArchitectureSpace = +[ + [ "doNext", "classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a414ec6872fdf32550af1a6efbb4394d5", null ], + [ "next", "classspark_1_1spmv_1_1SpmvArchitectureSpace.html#aa9e55d9a1af4b951561705869dd2e2fe", null ], + [ "restart", "classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a76b80d8f6d287bf6b90f38a0ac215354", null ] +]; \ No newline at end of file diff --git a/docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.png b/docs/classspark_1_1spmv_1_1SpmvArchitectureSpace.png new file mode 100644 index 0000000000000000000000000000000000000000..51861730be057d4fbe9b97472733b89c239abcc9 GIT binary patch literal 1065 zcmeAS@N?(olHy`uVBq!ia0y~yU{nOM12~w0Wa25~pFm0?z$e7@|Ns9$=8HF9OZyK^ z0J6aNz<~p-opMPpzYHryN6mY4e47C$_EDTl)6*$JM>B zH@?4rM!q^uvUG{nd8WTJbh2b?1l|{^zqM}3vD|UC$IVVXJ|p1GhpkVXd0*b@$=&(Q zF-Q2fu9Ml5i=4I#D?cSm#52#mnEiCdg}e<4SGHyZ2kkvQ*Q{=RaDS_nr@hBLlZ&kr zb+3l<@-8(joFTt{x9p$WwI}W#y!T?xXZFHe6QNm`zm%HZys+VJ{5$8zv1uM(bARlr zYI|~)F;?oaqpDKFQlQY9C(Phb zMhkQ*abLa{T($Mu{w3~fxBgQNRMk}V3|3Y2?3&V|q8TJKX^DrY$0Vh_>LDsG+fIEp zE`J>->o&>cx<&P#O1rk5M}zX4J+dCB+7|yPbejG1&hovyJ$}s$hud53u}xH2ys}Wa zJhPMs3FQM7dO1-r+K_RV|FcK-d@-NgouJ*U4; zxZ>uMasRQ{hTCsvF7Mh^X!~vL%%92D*A{#?bNf8iD(LPf*H_0?HkE#G+;jS;`kAiH z)i;GVJ$>+~$IbcHx(gv!jwRe$<)w8Omqi@c%yEBe_nG)NcxbK+G z`i zO08VcTehUVNFulW(hQ3;{o(hQ*sWh!DPMGbwYk;vKaM(+Brjjy7?-JHvi#-itWB>K zm#_c6@S~pbl3!+b)~U^(ZoA-aL3yNc)Y_EWTdi-u)3c7NU>ARK>gDS4$OPq+J^ej) zMLYIRQn`E8yjcYr^pliTJT*OYVO)4j*m7Qt%3gIX>iIAJ$Y$$FtC(l!1M@Y5r>mdK II;Vst0Gu}JuK)l5 literal 0 HcmV?d00001 diff --git a/docs/closed.png b/docs/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..98cc2c909da37a6df914fbf67780eebd99c597f5 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V-kvUwAr*{o@8{^CZMh(5KoB^r_<4^zF@3)Cp&&t3hdujKf f*?bjBoY!V+E))@{xMcbjXe@)LtDnm{r-UW|*e5JT literal 0 HcmV?d00001 diff --git a/docs/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html b/docs/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html new file mode 100644 index 0000000..0ec9ee8 --- /dev/null +++ b/docs/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html @@ -0,0 +1,121 @@ + + + + + + +Spark: src/bicg/src Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
src Directory Reference
+
+
+ + + + +

+Files

file  BiConjugateGradient.cpp
 
+
+
+ + + + diff --git a/docs/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.js b/docs/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.js new file mode 100644 index 0000000..1da7719 --- /dev/null +++ b/docs/dir_00a81d8b20939ac7c0ce0f7cdde0e98b.js @@ -0,0 +1,4 @@ +var dir_00a81d8b20939ac7c0ce0f7cdde0e98b = +[ + [ "BiConjugateGradient.cpp", "BiConjugateGradient_8cpp.html", "BiConjugateGradient_8cpp" ] +]; \ No newline at end of file diff --git a/docs/dir_16dc92632bab467dc50b01bd02b3341a.html b/docs/dir_16dc92632bab467dc50b01bd02b3341a.html new file mode 100644 index 0000000..a6b580e --- /dev/null +++ b/docs/dir_16dc92632bab467dc50b01bd02b3341a.html @@ -0,0 +1,121 @@ + + + + + + +Spark: src/device Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
device Directory Reference
+
+
+ + + + +

+Files

file  SpmvDeviceInterfaceMock.cpp
 
+
+
+ + + + diff --git a/docs/dir_16dc92632bab467dc50b01bd02b3341a.js b/docs/dir_16dc92632bab467dc50b01bd02b3341a.js new file mode 100644 index 0000000..6c36cb7 --- /dev/null +++ b/docs/dir_16dc92632bab467dc50b01bd02b3341a.js @@ -0,0 +1,4 @@ +var dir_16dc92632bab467dc50b01bd02b3341a = +[ + [ "SpmvDeviceInterfaceMock.cpp", "SpmvDeviceInterfaceMock_8cpp.html", "SpmvDeviceInterfaceMock_8cpp" ] +]; \ No newline at end of file diff --git a/docs/dir_376f1c4177942cba0305052d5eaaa828.html b/docs/dir_376f1c4177942cba0305052d5eaaa828.html new file mode 100644 index 0000000..23feb82 --- /dev/null +++ b/docs/dir_376f1c4177942cba0305052d5eaaa828.html @@ -0,0 +1,121 @@ + + + + + + +Spark: src/cg/src Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
src Directory Reference
+
+
+ + + + +

+Files

file  ConjugateGradient.cpp
 
+
+
+ + + + diff --git a/docs/dir_376f1c4177942cba0305052d5eaaa828.js b/docs/dir_376f1c4177942cba0305052d5eaaa828.js new file mode 100644 index 0000000..12dae6a --- /dev/null +++ b/docs/dir_376f1c4177942cba0305052d5eaaa828.js @@ -0,0 +1,4 @@ +var dir_376f1c4177942cba0305052d5eaaa828 = +[ + [ "ConjugateGradient.cpp", "ConjugateGradient_8cpp.html", null ] +]; \ No newline at end of file diff --git a/docs/dir_55daf1889a6971c13f7bc2c2ab706314.html b/docs/dir_55daf1889a6971c13f7bc2c2ab706314.html new file mode 100644 index 0000000..d060e58 --- /dev/null +++ b/docs/dir_55daf1889a6971c13f7bc2c2ab706314.html @@ -0,0 +1,121 @@ + + + + + + +Spark: src/cg Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
cg Directory Reference
+
+
+ + + + +

+Directories

directory  src
 
+
+
+ + + + diff --git a/docs/dir_55daf1889a6971c13f7bc2c2ab706314.js b/docs/dir_55daf1889a6971c13f7bc2c2ab706314.js new file mode 100644 index 0000000..65620bb --- /dev/null +++ b/docs/dir_55daf1889a6971c13f7bc2c2ab706314.js @@ -0,0 +1,4 @@ +var dir_55daf1889a6971c13f7bc2c2ab706314 = +[ + [ "src", "dir_376f1c4177942cba0305052d5eaaa828.html", "dir_376f1c4177942cba0305052d5eaaa828" ] +]; \ No newline at end of file diff --git a/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..5a16d79 --- /dev/null +++ b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,138 @@ + + + + + + +Spark: src Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
src Directory Reference
+
+
+ + + + + + + + + + + + + + +

+Directories

directory  bicg
 
directory  cg
 
directory  device
 
directory  dse
 
directory  execution
 
directory  spmv
 
+ + + + + +

+Files

file  main.cpp
 
file  SparseLinearSolvers.cpp
 
+
+
+ + + + diff --git a/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js new file mode 100644 index 0000000..ecef38a --- /dev/null +++ b/docs/dir_68267d1309a1af8e8297ef4c3efbcdba.js @@ -0,0 +1,11 @@ +var dir_68267d1309a1af8e8297ef4c3efbcdba = +[ + [ "bicg", "dir_6d2d4b597c0c9fbf0dac624a287f2dec.html", "dir_6d2d4b597c0c9fbf0dac624a287f2dec" ], + [ "cg", "dir_55daf1889a6971c13f7bc2c2ab706314.html", "dir_55daf1889a6971c13f7bc2c2ab706314" ], + [ "device", "dir_16dc92632bab467dc50b01bd02b3341a.html", "dir_16dc92632bab467dc50b01bd02b3341a" ], + [ "dse", "dir_d7c482895ed73b33d89221a7692a7a0a.html", "dir_d7c482895ed73b33d89221a7692a7a0a" ], + [ "execution", "dir_bd0755c95a42e835fb06f38bbeb1d6ed.html", "dir_bd0755c95a42e835fb06f38bbeb1d6ed" ], + [ "spmv", "dir_817fd82c291ca2ce5189d4384ec10041.html", "dir_817fd82c291ca2ce5189d4384ec10041" ], + [ "main.cpp", "main_8cpp.html", "main_8cpp" ], + [ "SparseLinearSolvers.cpp", "SparseLinearSolvers_8cpp.html", "SparseLinearSolvers_8cpp" ] +]; \ No newline at end of file diff --git a/docs/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html b/docs/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html new file mode 100644 index 0000000..c64f8d0 --- /dev/null +++ b/docs/dir_6d2d4b597c0c9fbf0dac624a287f2dec.html @@ -0,0 +1,121 @@ + + + + + + +Spark: src/bicg Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
bicg Directory Reference
+
+
+ + + + +

+Directories

directory  src
 
+
+
+ + + + diff --git a/docs/dir_6d2d4b597c0c9fbf0dac624a287f2dec.js b/docs/dir_6d2d4b597c0c9fbf0dac624a287f2dec.js new file mode 100644 index 0000000..df0efb8 --- /dev/null +++ b/docs/dir_6d2d4b597c0c9fbf0dac624a287f2dec.js @@ -0,0 +1,4 @@ +var dir_6d2d4b597c0c9fbf0dac624a287f2dec = +[ + [ "src", "dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html", "dir_00a81d8b20939ac7c0ce0f7cdde0e98b" ] +]; \ No newline at end of file diff --git a/docs/dir_817fd82c291ca2ce5189d4384ec10041.html b/docs/dir_817fd82c291ca2ce5189d4384ec10041.html new file mode 100644 index 0000000..d0a7436 --- /dev/null +++ b/docs/dir_817fd82c291ca2ce5189d4384ec10041.html @@ -0,0 +1,121 @@ + + + + + + +Spark: src/spmv Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spmv Directory Reference
+
+
+ + + + +

+Directories

directory  src
 
+
+
+ + + + diff --git a/docs/dir_817fd82c291ca2ce5189d4384ec10041.js b/docs/dir_817fd82c291ca2ce5189d4384ec10041.js new file mode 100644 index 0000000..5ae4b39 --- /dev/null +++ b/docs/dir_817fd82c291ca2ce5189d4384ec10041.js @@ -0,0 +1,4 @@ +var dir_817fd82c291ca2ce5189d4384ec10041 = +[ + [ "src", "dir_d8b7011e84264c6173d8b11c4e58b2d3.html", "dir_d8b7011e84264c6173d8b11c4e58b2d3" ] +]; \ No newline at end of file diff --git a/docs/dir_bcdd1c0198fc998763f86146a43d3c64.html b/docs/dir_bcdd1c0198fc998763f86146a43d3c64.html new file mode 100644 index 0000000..424f8a6 --- /dev/null +++ b/docs/dir_bcdd1c0198fc998763f86146a43d3c64.html @@ -0,0 +1,150 @@ + + + + + + +Spark: include/Spark Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Spark Directory Reference
+
+
+ + + + +

+Directories

directory  device
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  Converters.hpp [code]
 
file  Dse.hpp [code]
 
file  Execution.hpp [code]
 
file  FileUtils.hpp [code]
 
file  GeneratedImplSupport.hpp [code]
 
file  Io.hpp [code]
 
file  Model.hpp [code]
 
file  SimpleSpmv.hpp [code]
 
file  SparseLinearSolvers.hpp [code]
 
file  SparseMatrix.hpp [code]
 
file  Spmv.hpp [code]
 
file  UserInput.hpp [code]
 
file  Utils.hpp [code]
 
+
+
+ + + + diff --git a/docs/dir_bcdd1c0198fc998763f86146a43d3c64.js b/docs/dir_bcdd1c0198fc998763f86146a43d3c64.js new file mode 100644 index 0000000..b2b07bc --- /dev/null +++ b/docs/dir_bcdd1c0198fc998763f86146a43d3c64.js @@ -0,0 +1,35 @@ +var dir_bcdd1c0198fc998763f86146a43d3c64 = +[ + [ "device", "dir_e1e695598025e13caf4d9e666dd56479.html", "dir_e1e695598025e13caf4d9e666dd56479" ], + [ "Converters.hpp", "Converters_8hpp.html", "Converters_8hpp" ], + [ "Dse.hpp", "Dse_8hpp.html", "Dse_8hpp" ], + [ "Execution.hpp", "Execution_8hpp.html", [ + [ "SharedLibLoader", "classspark_1_1execution_1_1SharedLibLoader.html", "classspark_1_1execution_1_1SharedLibLoader" ] + ] ], + [ "FileUtils.hpp", "FileUtils_8hpp.html", "FileUtils_8hpp" ], + [ "GeneratedImplSupport.hpp", "GeneratedImplSupport_8hpp.html", [ + [ "GeneratedImplementation", "structspark_1_1runtime_1_1GeneratedImplementation.html", "structspark_1_1runtime_1_1GeneratedImplementation" ], + [ "GeneratedSpmvImplementation", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html", "classspark_1_1runtime_1_1GeneratedSpmvImplementation" ], + [ "GeneratedSpmvImplementationMock", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock" ], + [ "ImplementationLoader", "classspark_1_1runtime_1_1ImplementationLoader.html", "classspark_1_1runtime_1_1ImplementationLoader" ], + [ "SpmvImplementationLoader", "classspark_1_1runtime_1_1SpmvImplementationLoader.html", "classspark_1_1runtime_1_1SpmvImplementationLoader" ] + ] ], + [ "Io.hpp", "Io_8hpp.html", [ + [ "MmReader", "classspark_1_1io_1_1MmReader.html", "classspark_1_1io_1_1MmReader" ] + ] ], + [ "Model.hpp", "Model_8hpp.html", [ + [ "LogicResourceUsage", "classspark_1_1model_1_1LogicResourceUsage.html", "classspark_1_1model_1_1LogicResourceUsage" ], + [ "ImplementationParameters", "classspark_1_1model_1_1ImplementationParameters.html", "classspark_1_1model_1_1ImplementationParameters" ] + ] ], + [ "SimpleSpmv.hpp", "SimpleSpmv_8hpp.html", "SimpleSpmv_8hpp" ], + [ "SparseLinearSolvers.hpp", "SparseLinearSolvers_8hpp.html", [ + [ "Solver", "classspark_1_1sparse__linear__solvers_1_1Solver.html", "classspark_1_1sparse__linear__solvers_1_1Solver" ], + [ "EigenSolver", "classspark_1_1sparse__linear__solvers_1_1EigenSolver.html", "classspark_1_1sparse__linear__solvers_1_1EigenSolver" ], + [ "DfeCgSolver", "classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html", "classspark_1_1sparse__linear__solvers_1_1DfeCgSolver" ], + [ "DfeBiCgSolver", "classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html", "classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver" ] + ] ], + [ "SparseMatrix.hpp", "SparseMatrix_8hpp.html", "SparseMatrix_8hpp" ], + [ "Spmv.hpp", "Spmv_8hpp.html", "Spmv_8hpp" ], + [ "UserInput.hpp", "UserInput_8hpp.html", "UserInput_8hpp" ], + [ "Utils.hpp", "Utils_8hpp.html", "Utils_8hpp" ] +]; \ No newline at end of file diff --git a/docs/dir_bd0755c95a42e835fb06f38bbeb1d6ed.html b/docs/dir_bd0755c95a42e835fb06f38bbeb1d6ed.html new file mode 100644 index 0000000..59d972b --- /dev/null +++ b/docs/dir_bd0755c95a42e835fb06f38bbeb1d6ed.html @@ -0,0 +1,121 @@ + + + + + + +Spark: src/execution Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
execution Directory Reference
+
+
+ + + + +

+Files

file  SharedLibLoader.cpp
 
+
+
+ + + + diff --git a/docs/dir_bd0755c95a42e835fb06f38bbeb1d6ed.js b/docs/dir_bd0755c95a42e835fb06f38bbeb1d6ed.js new file mode 100644 index 0000000..dffc149 --- /dev/null +++ b/docs/dir_bd0755c95a42e835fb06f38bbeb1d6ed.js @@ -0,0 +1,4 @@ +var dir_bd0755c95a42e835fb06f38bbeb1d6ed = +[ + [ "SharedLibLoader.cpp", "SharedLibLoader_8cpp.html", null ] +]; \ No newline at end of file diff --git a/docs/dir_d44c64559bbebec7f509842c48db8b23.html b/docs/dir_d44c64559bbebec7f509842c48db8b23.html new file mode 100644 index 0000000..667c378 --- /dev/null +++ b/docs/dir_d44c64559bbebec7f509842c48db8b23.html @@ -0,0 +1,121 @@ + + + + + + +Spark: include Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
include Directory Reference
+
+
+ + + + +

+Directories

directory  Spark
 
+
+
+ + + + diff --git a/docs/dir_d44c64559bbebec7f509842c48db8b23.js b/docs/dir_d44c64559bbebec7f509842c48db8b23.js new file mode 100644 index 0000000..add1fd9 --- /dev/null +++ b/docs/dir_d44c64559bbebec7f509842c48db8b23.js @@ -0,0 +1,4 @@ +var dir_d44c64559bbebec7f509842c48db8b23 = +[ + [ "Spark", "dir_bcdd1c0198fc998763f86146a43d3c64.html", "dir_bcdd1c0198fc998763f86146a43d3c64" ] +]; \ No newline at end of file diff --git a/docs/dir_d7c482895ed73b33d89221a7692a7a0a.html b/docs/dir_d7c482895ed73b33d89221a7692a7a0a.html new file mode 100644 index 0000000..b8b5033 --- /dev/null +++ b/docs/dir_d7c482895ed73b33d89221a7692a7a0a.html @@ -0,0 +1,121 @@ + + + + + + +Spark: src/dse Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
dse Directory Reference
+
+
+ + + + +

+Files

file  Dse.cpp
 
+
+
+ + + + diff --git a/docs/dir_d7c482895ed73b33d89221a7692a7a0a.js b/docs/dir_d7c482895ed73b33d89221a7692a7a0a.js new file mode 100644 index 0000000..d4e94f4 --- /dev/null +++ b/docs/dir_d7c482895ed73b33d89221a7692a7a0a.js @@ -0,0 +1,4 @@ +var dir_d7c482895ed73b33d89221a7692a7a0a = +[ + [ "Dse.cpp", "Dse_8cpp.html", "Dse_8cpp" ] +]; \ No newline at end of file diff --git a/docs/dir_d8b7011e84264c6173d8b11c4e58b2d3.html b/docs/dir_d8b7011e84264c6173d8b11c4e58b2d3.html new file mode 100644 index 0000000..ea9e697 --- /dev/null +++ b/docs/dir_d8b7011e84264c6173d8b11c4e58b2d3.html @@ -0,0 +1,129 @@ + + + + + + +Spark: src/spmv/src Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
src Directory Reference
+
+
+ + + + + + + + + + + + +

+Files

file  ParallelCsrReadControl.java
 
file  Spmv.cpp
 
file  SpmvDeviceInterface.cpp
 
file  SpmvKernel.java
 
file  SpmvManager.java
 
+
+
+ + + + diff --git a/docs/dir_d8b7011e84264c6173d8b11c4e58b2d3.js b/docs/dir_d8b7011e84264c6173d8b11c4e58b2d3.js new file mode 100644 index 0000000..2adaed3 --- /dev/null +++ b/docs/dir_d8b7011e84264c6173d8b11c4e58b2d3.js @@ -0,0 +1,21 @@ +var dir_d8b7011e84264c6173d8b11c4e58b2d3 = +[ + [ "ParallelCsrReadControl.java", "ParallelCsrReadControl_8java.html", [ + [ "ParallelCsrReadControl", "classParallelCsrReadControl.html", "classParallelCsrReadControl" ], + [ "Mode", "enumParallelCsrReadControl_1_1Mode.html", "enumParallelCsrReadControl_1_1Mode" ] + ] ], + [ "Spmv.cpp", "Spmv_8cpp.html", "Spmv_8cpp" ], + [ "SpmvDeviceInterface.cpp", "SpmvDeviceInterface_8cpp.html", "SpmvDeviceInterface_8cpp" ], + [ "SpmvKernel.java", "SpmvKernel_8java.html", [ + [ "SpmvKernel", "classSpmvKernel.html", "classSpmvKernel" ], + [ "SpmvCacheKernel", "classSpmvCacheKernel.html", "classSpmvCacheKernel" ], + [ "SpmvReductionKernel", "classSpmvReductionKernel.html", "classSpmvReductionKernel" ], + [ "DramSpmvReductionKernel", "classDramSpmvReductionKernel.html", "classDramSpmvReductionKernel" ], + [ "BramSpmvReductionKernel", "classBramSpmvReductionKernel.html", "classBramSpmvReductionKernel" ], + [ "PaddingKernel", "classPaddingKernel.html", "classPaddingKernel" ], + [ "UnpaddingKernel", "classUnpaddingKernel.html", "classUnpaddingKernel" ] + ] ], + [ "SpmvManager.java", "SpmvManager_8java.html", [ + [ "SpmvManager", "classSpmvManager.html", "classSpmvManager" ] + ] ] +]; \ No newline at end of file diff --git a/docs/dir_e1e695598025e13caf4d9e666dd56479.html b/docs/dir_e1e695598025e13caf4d9e666dd56479.html new file mode 100644 index 0000000..6a12cd6 --- /dev/null +++ b/docs/dir_e1e695598025e13caf4d9e666dd56479.html @@ -0,0 +1,121 @@ + + + + + + +Spark: include/Spark/device Directory Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
device Directory Reference
+
+
+ + + + +

+Files

file  SpmvDeviceInterface.h [code]
 
+
+
+ + + + diff --git a/docs/dir_e1e695598025e13caf4d9e666dd56479.js b/docs/dir_e1e695598025e13caf4d9e666dd56479.js new file mode 100644 index 0000000..62746e8 --- /dev/null +++ b/docs/dir_e1e695598025e13caf4d9e666dd56479.js @@ -0,0 +1,4 @@ +var dir_e1e695598025e13caf4d9e666dd56479 = +[ + [ "SpmvDeviceInterface.h", "SpmvDeviceInterface_8h.html", "SpmvDeviceInterface_8h" ] +]; \ No newline at end of file diff --git a/docs/doxygen.css b/docs/doxygen.css new file mode 100644 index 0000000..f0f36f8 --- /dev/null +++ b/docs/doxygen.css @@ -0,0 +1,1366 @@ +/* The standard CSS for doxygen 1.8.6 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/docs/doxygen.png b/docs/doxygen.png new file mode 100644 index 0000000000000000000000000000000000000000..3ff17d807fd8aa003bed8bb2a69e8f0909592fd1 GIT binary patch literal 3779 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 literal 0 HcmV?d00001 diff --git a/docs/dynsections.js b/docs/dynsections.js new file mode 100644 index 0000000..ed092c7 --- /dev/null +++ b/docs/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/enumParallelCsrReadControl_1_1Mode.html b/docs/enumParallelCsrReadControl_1_1Mode.html new file mode 100644 index 0000000..38fcfbc --- /dev/null +++ b/docs/enumParallelCsrReadControl_1_1Mode.html @@ -0,0 +1,190 @@ + + + + + + +Spark: ParallelCsrReadControl.Mode Enum Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
ParallelCsrReadControl.Mode Enum Reference
+
+
+ + + + + + + + + + +

+Public Attributes

 VectorLoad
 
 ReadingLength
 
 OutputtingCommands
 
 Done
 
+

Member Data Documentation

+ +
+
+ + + + +
ParallelCsrReadControl.Mode.Done
+
+ +
+
+ +
+
+ + + + +
ParallelCsrReadControl.Mode.OutputtingCommands
+
+ +
+
+ +
+
+ + + + +
ParallelCsrReadControl.Mode.ReadingLength
+
+ +
+
+ +
+
+ + + + +
ParallelCsrReadControl.Mode.VectorLoad
+
+ +
+
+
The documentation for this enum was generated from the following file: +
+
+ + + + diff --git a/docs/enumParallelCsrReadControl_1_1Mode.js b/docs/enumParallelCsrReadControl_1_1Mode.js new file mode 100644 index 0000000..4b7d5ed --- /dev/null +++ b/docs/enumParallelCsrReadControl_1_1Mode.js @@ -0,0 +1,7 @@ +var enumParallelCsrReadControl_1_1Mode = +[ + [ "Done", "enumParallelCsrReadControl_1_1Mode.html#a4af99d8c25b54128c920d384091485d0", null ], + [ "OutputtingCommands", "enumParallelCsrReadControl_1_1Mode.html#a1fe6df0a1446f33e43e80b9ad3e0cd49", null ], + [ "ReadingLength", "enumParallelCsrReadControl_1_1Mode.html#a0bf9792309f43608f812f047b288bcd9", null ], + [ "VectorLoad", "enumParallelCsrReadControl_1_1Mode.html#aa2414caa80d02424c7a80c3946160a2d", null ] +]; \ No newline at end of file diff --git a/docs/files.html b/docs/files.html new file mode 100644 index 0000000..41d6917 --- /dev/null +++ b/docs/files.html @@ -0,0 +1,163 @@ + + + + + + +Spark: File List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/files.js b/docs/files.js new file mode 100644 index 0000000..a4478b0 --- /dev/null +++ b/docs/files.js @@ -0,0 +1,5 @@ +var files = +[ + [ "include", "dir_d44c64559bbebec7f509842c48db8b23.html", "dir_d44c64559bbebec7f509842c48db8b23" ], + [ "src", "dir_68267d1309a1af8e8297ef4c3efbcdba.html", "dir_68267d1309a1af8e8297ef4c3efbcdba" ] +]; \ No newline at end of file diff --git a/docs/ftv2blank.png b/docs/ftv2blank.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/docs/ftv2cl.png b/docs/ftv2cl.png new file mode 100644 index 0000000000000000000000000000000000000000..132f6577bf7f085344904602815a260d29f55d9b GIT binary patch literal 453 zcmV;$0XqJPP)VBF;ev;toEj8_OB0EQg5eYilIj#JZG_m^33l3^k4mtzx!TVD?g)Y$ zrvwRDSqT!wLIM$dWCIa$vtxE|mzbTzu-y&$FvF6WA2a{Wr1g}`WdPT-0JzEZ0IxAv z-Z+ejZc&H;I5-pb_SUB}04j0^V)3t{`z<7asDl2Tw3w3sP%)0^8$bhEg)IOTBcRXv zFfq~3&gvJ$F-U7mpBW8z1GY~HK&7h4^YI~Orv~wLnC0PP_dAkv;nzX{9Q|8Gv=2ca z@v)c9T;D#h`TZ2X&&$ff2wedmot995de~-s3I)yauahg;7qn*?1n?F$e+PwP37}~; z1NKUk7reVK^7A;$QRW7qAx40HHUZ<|k3U%nz(Ec`#i+q9K!dgcROAlCS?`L= v>#=f?wF5ZND!1uAfQsk;KN^4&*8~0npJiJ%2dj9(00000NkvXXu0mjfWVFf_ literal 0 HcmV?d00001 diff --git a/docs/ftv2doc.png b/docs/ftv2doc.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/docs/ftv2folderclosed.png b/docs/ftv2folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8ab35edce8e97554e360005ee9fc5bffb36e66 GIT binary patch literal 616 zcmV-u0+;=XP)a9#ETzayK)T~Jw&MMH>OIr#&;dC}is*2Mqdf&akCc=O@`qC+4i z5Iu3w#1M@KqXCz8TIZd1wli&kkl2HVcAiZ8PUn5z_kG@-y;?yK06=cA0U%H0PH+kU zl6dp}OR(|r8-RG+YLu`zbI}5TlOU6ToR41{9=uz^?dGTNL;wIMf|V3`d1Wj3y!#6` zBLZ?xpKR~^2x}?~zA(_NUu3IaDB$tKma*XUdOZN~c=dLt_h_k!dbxm_*ibDM zlFX`g{k$X}yIe%$N)cn1LNu=q9_CS)*>A zsX_mM4L@`(cSNQKMFc$RtYbx{79#j-J7hk*>*+ZZhM4Hw?I?rsXCi#mRWJ=-0LGV5a-WR0Qgt<|Nqf)C-@80`5gIz45^_20000IqP)X=#(TiCT&PiIIVc55T}TU}EUh*{q$|`3@{d>{Tc9Bo>e= zfmF3!f>fbI9#GoEHh0f`i5)wkLpva0ztf%HpZneK?w-7AK@b4Itw{y|Zd3k!fH?q2 zlhckHd_V2M_X7+)U&_Xcfvtw60l;--DgZmLSw-Y?S>)zIqMyJ1#FwLU*%bl38ok+! zh78H87n`ZTS;uhzAR$M`zZ`bVhq=+%u9^$5jDplgxd44}9;IRqUH1YHH|@6oFe%z( zo4)_>E$F&^P-f(#)>(TrnbE>Pefs9~@iN=|)Rz|V`sGfHNrJ)0gJb8xx+SBmRf@1l zvuzt=vGfI)<-F9!o&3l?>9~0QbUDT(wFdnQPv%xdD)m*g%!20>Bc9iYmGAp<9YAa( z0QgYgTWqf1qN++Gqp z8@AYPTB3E|6s=WLG?xw0tm|U!o=&zd+H0oRYE;Dbx+Na9s^STqX|Gnq%H8s(nGDGJ j8vwW|`Ts`)fSK|Kx=IK@RG@g200000NkvXXu0mjfauFEA literal 0 HcmV?d00001 diff --git a/docs/ftv2lastnode.png b/docs/ftv2lastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/docs/ftv2link.png b/docs/ftv2link.png new file mode 100644 index 0000000000000000000000000000000000000000..17edabff95f7b8da13c9516a04efe05493c29501 GIT binary patch literal 746 zcmV7=@pnbNXRFEm&G8P!&WHG=d)>K?YZ1bzou)2{$)) zumDct!>4SyxL;zgaG>wy`^Hv*+}0kUfCrz~BCOViSb$_*&;{TGGn2^x9K*!Sf0=lV zpP=7O;GA0*Jm*tTYj$IoXvimpnV4S1Z5f$p*f$Db2iq2zrVGQUz~yq`ahn7ck(|CE z7Gz;%OP~J6)tEZWDzjhL9h2hdfoU2)Nd%T<5Kt;Y0XLt&<@6pQx!nw*5`@bq#?l*?3z{Hlzoc=Pr>oB5(9i6~_&-}A(4{Q$>c>%rV&E|a(r&;?i5cQB=} zYSDU5nXG)NS4HEs0it2AHe2>shCyr7`6@4*6{r@8fXRbTA?=IFVWAQJL&H5H{)DpM#{W(GL+Idzf^)uRV@oB8u$ z8v{MfJbTiiRg4bza<41NAzrl{=3fl_D+$t+^!xlQ8S}{UtY`e z;;&9UhyZqQRN%2pot{*Ei0*4~hSF_3AH2@fKU!$NSflS>{@tZpDT4`M2WRTTVH+D? z)GFlEGGHe?koB}i|1w45!BF}N_q&^HJ&-tyR{(afC6H7|aml|tBBbv}55C5DNP8p3 z)~jLEO4Z&2hZmP^i-e%(@d!(E|KRafiU8Q5u(wU((j8un3OR*Hvj+t literal 0 HcmV?d00001 diff --git a/docs/ftv2mlastnode.png b/docs/ftv2mlastnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/docs/ftv2mnode.png b/docs/ftv2mnode.png new file mode 100644 index 0000000000000000000000000000000000000000..0b63f6d38c4b9ec907b820192ebe9724ed6eca22 GIT binary patch literal 246 zcmVkw!R34#Lv2LOS^S2tZA31X++9RY}n zChwn@Z)Wz*WWHH{)HDtJnq&A2hk$b-y(>?@z0iHr41EKCGp#T5?07*qoM6N<$f(V3Pvj6}9 literal 0 HcmV?d00001 diff --git a/docs/ftv2mo.png b/docs/ftv2mo.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfb80f76e65815989a9350ad79d8ce45380e2b1 GIT binary patch literal 403 zcmV;E0c`$>P)${!fXv7NWJ%@%u4(KapRY>T6_x;E zxE7kt!}Tiw8@d9Sd`rTGum>z#Q14vIm`wm1#-byD1muMi02@YNO5LRF0o!Y{`a!Ya z{^&p0Su|s705&2QxmqdexG+-zNKL3f@8gTQSJrKByfo+oNJ^-{|Mn||Q5SDwjQVsS zr1}7o5-QMs>gYIMD>GRw@$lT`z4r-_m{5U#cR{urD_)TOeY)(UD|qZ^&y`IVijqk~ xs(9-kWFr7E^!lgi8GsFK5kOY_{Xbgf0^etEU%fLevs?fG002ovPDHLkV1nB&vX1}& literal 0 HcmV?d00001 diff --git a/docs/ftv2node.png b/docs/ftv2node.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/docs/ftv2ns.png b/docs/ftv2ns.png new file mode 100644 index 0000000000000000000000000000000000000000..72e3d71c2892d6f00e259facebc88b45f6db2e35 GIT binary patch literal 388 zcmV-~0ek+5P)f+++#cT|!CkD&4pnIkeMEUEM*>`*9>+Juji$!h-mW%M^8s9957{3nvbrz^&=u<~TAUrFROkmt%^F~Ez+-c53Lv%iH3d38!Rv?K zrb&MYAhp;Gf<}wS;9ZZq2@;!uYG;=Z>~GKE^{HD4keu}lnyqhc>kWX^tQn|warJ~h zT+rtMkdz6aHoN%z(o|&wpu@@OpJnF_z{PA)6(FHw02iHslz^(N{4*+K9)QJHR87wT iTyp>aXaF{u2lxRou|^4tux6eB0000^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/docs/ftv2pnode.png b/docs/ftv2pnode.png new file mode 100644 index 0000000000000000000000000000000000000000..c6ee22f937a07d1dbfc27c669d11f8ed13e2f152 GIT binary patch literal 229 zcmV^P)R?RzRoKvklcaQ%HF6%rK2&ZgO(-ihJ_C zzrKgp4jgO( fd_(yg|3PpEQb#9`a?Pz_00000NkvXXu0mjftR`5K literal 0 HcmV?d00001 diff --git a/docs/ftv2splitbar.png b/docs/ftv2splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe895f2c58179b471a22d8320b39a4bd7312ec8e GIT binary patch literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf(#6djGiuzAr*{o?=JLmPLyc> z_*`QK&+BH@jWrYJ7>r6%keRM@)Qyv8R=enp0jiI>aWlGyB58O zFVR20d+y`K7vDw(hJF3;>dD*3-?v=<8M)@x|EEGLnJsniYK!2U1 Y!`|5biEc?d1`HDhPgg&ebxsLQ02F6;9RL6T literal 0 HcmV?d00001 diff --git a/docs/ftv2vertline.png b/docs/ftv2vertline.png new file mode 100644 index 0000000000000000000000000000000000000000..63c605bb4c3d941c921a4b6cfa74951e946bcb48 GIT binary patch literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRr!3HExu9B$%QnH>djv*C{Z|`mdau^P8_z}#X h?B8GEpdi4(BFDx$je&7RrDQEg&ePS;Wt~$(69Dh@6T1Ka literal 0 HcmV?d00001 diff --git a/docs/functions.html b/docs/functions.html new file mode 100644 index 0000000..4c401e3 --- /dev/null +++ b/docs/functions.html @@ -0,0 +1,186 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- a -

+
+
+ + + + diff --git a/docs/functions_b.html b/docs/functions_b.html new file mode 100644 index 0000000..f002b32 --- /dev/null +++ b/docs/functions_b.html @@ -0,0 +1,168 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- b -

+
+
+ + + + diff --git a/docs/functions_c.html b/docs/functions_c.html new file mode 100644 index 0000000..a82cf9c --- /dev/null +++ b/docs/functions_c.html @@ -0,0 +1,200 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/functions_d.html b/docs/functions_d.html new file mode 100644 index 0000000..031f0af --- /dev/null +++ b/docs/functions_d.html @@ -0,0 +1,209 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- d -

+
+
+ + + + diff --git a/docs/functions_dup.js b/docs/functions_dup.js new file mode 100644 index 0000000..f10b39f --- /dev/null +++ b/docs/functions_dup.js @@ -0,0 +1,25 @@ +var functions_dup = +[ + [ "a", "functions.html", null ], + [ "b", "functions_b.html", null ], + [ "c", "functions_c.html", null ], + [ "d", "functions_d.html", null ], + [ "e", "functions_e.html", null ], + [ "f", "functions_f.html", null ], + [ "g", "functions_g.html", null ], + [ "h", "functions_h.html", null ], + [ "i", "functions_i.html", null ], + [ "l", "functions_l.html", null ], + [ "m", "functions_m.html", null ], + [ "n", "functions_n.html", null ], + [ "o", "functions_o.html", null ], + [ "p", "functions_p.html", null ], + [ "r", "functions_r.html", null ], + [ "s", "functions_s.html", null ], + [ "t", "functions_t.html", null ], + [ "u", "functions_u.html", null ], + [ "v", "functions_v.html", null ], + [ "w", "functions_w.html", null ], + [ "z", "functions_z.html", null ], + [ "~", "functions_~.html", null ] +]; \ No newline at end of file diff --git a/docs/functions_e.html b/docs/functions_e.html new file mode 100644 index 0000000..5aaf980 --- /dev/null +++ b/docs/functions_e.html @@ -0,0 +1,169 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- e -

+
+
+ + + + diff --git a/docs/functions_f.html b/docs/functions_f.html new file mode 100644 index 0000000..cbd077d --- /dev/null +++ b/docs/functions_f.html @@ -0,0 +1,177 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- f -

+
+
+ + + + diff --git a/docs/functions_func.html b/docs/functions_func.html new file mode 100644 index 0000000..eb956cd --- /dev/null +++ b/docs/functions_func.html @@ -0,0 +1,624 @@ + + + + + + +Spark: Class Members - Functions + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- z -

+ + +

- ~ -

+
+
+ + + + diff --git a/docs/functions_g.html b/docs/functions_g.html new file mode 100644 index 0000000..18b509d --- /dev/null +++ b/docs/functions_g.html @@ -0,0 +1,231 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- g -

+
+
+ + + + diff --git a/docs/functions_h.html b/docs/functions_h.html new file mode 100644 index 0000000..33043ff --- /dev/null +++ b/docs/functions_h.html @@ -0,0 +1,159 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- h -

+
+
+ + + + diff --git a/docs/functions_i.html b/docs/functions_i.html new file mode 100644 index 0000000..05d71a9 --- /dev/null +++ b/docs/functions_i.html @@ -0,0 +1,217 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- i -

+
+
+ + + + diff --git a/docs/functions_l.html b/docs/functions_l.html new file mode 100644 index 0000000..2458b4e --- /dev/null +++ b/docs/functions_l.html @@ -0,0 +1,177 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- l -

+
+
+ + + + diff --git a/docs/functions_m.html b/docs/functions_m.html new file mode 100644 index 0000000..1e8714a --- /dev/null +++ b/docs/functions_m.html @@ -0,0 +1,223 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- m -

+
+
+ + + + diff --git a/docs/functions_n.html b/docs/functions_n.html new file mode 100644 index 0000000..3bd5d18 --- /dev/null +++ b/docs/functions_n.html @@ -0,0 +1,205 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/functions_o.html b/docs/functions_o.html new file mode 100644 index 0000000..0f13d1a --- /dev/null +++ b/docs/functions_o.html @@ -0,0 +1,205 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- o -

+
+
+ + + + diff --git a/docs/functions_p.html b/docs/functions_p.html new file mode 100644 index 0000000..3f1ba49 --- /dev/null +++ b/docs/functions_p.html @@ -0,0 +1,198 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- p -

+
+
+ + + + diff --git a/docs/functions_r.html b/docs/functions_r.html new file mode 100644 index 0000000..56bd47c --- /dev/null +++ b/docs/functions_r.html @@ -0,0 +1,201 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- r -

+
+
+ + + + diff --git a/docs/functions_s.html b/docs/functions_s.html new file mode 100644 index 0000000..c184522 --- /dev/null +++ b/docs/functions_s.html @@ -0,0 +1,235 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- s -

+
+
+ + + + diff --git a/docs/functions_t.html b/docs/functions_t.html new file mode 100644 index 0000000..60f854b --- /dev/null +++ b/docs/functions_t.html @@ -0,0 +1,176 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/functions_type.html b/docs/functions_type.html new file mode 100644 index 0000000..f9f797d --- /dev/null +++ b/docs/functions_type.html @@ -0,0 +1,144 @@ + + + + + + +Spark: Class Members - Typedefs + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/functions_u.html b/docs/functions_u.html new file mode 100644 index 0000000..6fb4ddb --- /dev/null +++ b/docs/functions_u.html @@ -0,0 +1,162 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- u -

+
+
+ + + + diff --git a/docs/functions_v.html b/docs/functions_v.html new file mode 100644 index 0000000..0b0abd7 --- /dev/null +++ b/docs/functions_v.html @@ -0,0 +1,183 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- v -

+
+
+ + + + diff --git a/docs/functions_vars.html b/docs/functions_vars.html new file mode 100644 index 0000000..29e5758 --- /dev/null +++ b/docs/functions_vars.html @@ -0,0 +1,564 @@ + + + + + + +Spark: Class Members - Variables + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- v -

+
+
+ + + + diff --git a/docs/functions_w.html b/docs/functions_w.html new file mode 100644 index 0000000..29d85f5 --- /dev/null +++ b/docs/functions_w.html @@ -0,0 +1,164 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- w -

+
+
+ + + + diff --git a/docs/functions_z.html b/docs/functions_z.html new file mode 100644 index 0000000..ee0bbd8 --- /dev/null +++ b/docs/functions_z.html @@ -0,0 +1,159 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- z -

+
+
+ + + + diff --git a/docs/functions_~.html b/docs/functions_~.html new file mode 100644 index 0000000..20b9257 --- /dev/null +++ b/docs/functions_~.html @@ -0,0 +1,174 @@ + + + + + + +Spark: Class Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- ~ -

+
+
+ + + + diff --git a/docs/globals.html b/docs/globals.html new file mode 100644 index 0000000..da40d93 --- /dev/null +++ b/docs/globals.html @@ -0,0 +1,280 @@ + + + + + + +Spark: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all file members with links to the files they belong to:
+ +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- s -

+ + +

- v -

+ + +

- w -

+
+
+ + + + diff --git a/docs/globals_func.html b/docs/globals_func.html new file mode 100644 index 0000000..5c507c9 --- /dev/null +++ b/docs/globals_func.html @@ -0,0 +1,263 @@ + + + + + + +Spark: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- g -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- s -

+ + +

- w -

+
+
+ + + + diff --git a/docs/globals_type.html b/docs/globals_type.html new file mode 100644 index 0000000..0ff23cd --- /dev/null +++ b/docs/globals_type.html @@ -0,0 +1,132 @@ + + + + + + +Spark: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/globals_vars.html b/docs/globals_vars.html new file mode 100644 index 0000000..536c3e3 --- /dev/null +++ b/docs/globals_vars.html @@ -0,0 +1,132 @@ + + + + + + +Spark: File Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/hierarchy.html b/docs/hierarchy.html new file mode 100644 index 0000000..da8805e --- /dev/null +++ b/docs/hierarchy.html @@ -0,0 +1,171 @@ + + + + + + +Spark: Class Hierarchy + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Class Hierarchy
+
+ +
+ + + + diff --git a/docs/hierarchy.js b/docs/hierarchy.js new file mode 100644 index 0000000..f10e1cb --- /dev/null +++ b/docs/hierarchy.js @@ -0,0 +1,60 @@ +var hierarchy = +[ + [ "spark::dse::Benchmark", "classspark_1_1dse_1_1Benchmark.html", null ], + [ "spark::dse::DseParameters", "classspark_1_1dse_1_1DseParameters.html", null ], + [ "spark::dse::DseResult", "classspark_1_1dse_1_1DseResult.html", null ], + [ "spark::runtime::GeneratedImplementation", "structspark_1_1runtime_1_1GeneratedImplementation.html", [ + [ "spark::runtime::GeneratedSpmvImplementation", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html", [ + [ "spark::runtime::GeneratedSpmvImplementationMock", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html", null ] + ] ] + ] ], + [ "spark::runtime::ImplementationLoader", "classspark_1_1runtime_1_1ImplementationLoader.html", [ + [ "spark::runtime::SpmvImplementationLoader", "classspark_1_1runtime_1_1SpmvImplementationLoader.html", null ] + ] ], + [ "spark::model::ImplementationParameters", "classspark_1_1model_1_1ImplementationParameters.html", null ], + [ "spark::spmv::indptr_value", "structspark_1_1spmv_1_1indptr__value.html", null ], + [ "Kernel", null, [ + [ "BramSpmvReductionKernel", "classBramSpmvReductionKernel.html", null ], + [ "DramSpmvReductionKernel", "classDramSpmvReductionKernel.html", null ], + [ "PaddingKernel", "classPaddingKernel.html", null ], + [ "SpmvKernel", "classSpmvKernel.html", null ], + [ "SpmvReductionKernel", "classSpmvReductionKernel.html", null ], + [ "UnpaddingKernel", "classUnpaddingKernel.html", null ] + ] ], + [ "KernelLib", null, [ + [ "SpmvCacheKernel", "classSpmvCacheKernel.html", null ] + ] ], + [ "spark::model::LogicResourceUsage", "classspark_1_1model_1_1LogicResourceUsage.html", null ], + [ "spark::io::MmReader< value_type >", "classspark_1_1io_1_1MmReader.html", null ], + [ "ParallelCsrReadControl.Mode", "enumParallelCsrReadControl_1_1Mode.html", null ], + [ "spark::spmv::Partition", "structspark_1_1spmv_1_1Partition.html", null ], + [ "PartitionWriteResult", "structPartitionWriteResult.html", null ], + [ "spark::utils::Range", "structspark_1_1utils_1_1Range.html", null ], + [ "spark::execution::SharedLibLoader", "classspark_1_1execution_1_1SharedLibLoader.html", null ], + [ "spark::sparse_linear_solvers::Solver", "classspark_1_1sparse__linear__solvers_1_1Solver.html", [ + [ "spark::sparse_linear_solvers::DfeBiCgSolver", "classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html", null ], + [ "spark::sparse_linear_solvers::DfeCgSolver", "classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html", null ], + [ "spark::sparse_linear_solvers::EigenSolver", "classspark_1_1sparse__linear__solvers_1_1EigenSolver.html", null ] + ] ], + [ "spark::sparse::SparkCooMatrix< value_type >", "classspark_1_1sparse_1_1SparkCooMatrix.html", null ], + [ "spark::dse::SparkDse", "classspark_1_1dse_1_1SparkDse.html", null ], + [ "spark::spmv::SpmvArchitecture", "classspark_1_1spmv_1_1SpmvArchitecture.html", [ + [ "spark::spmv::SimpleSpmvArchitecture", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html", [ + [ "spark::spmv::FstSpmvArchitecture", "classspark_1_1spmv_1_1FstSpmvArchitecture.html", null ], + [ "spark::spmv::SkipEmptyRowsArchitecture", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html", [ + [ "spark::spmv::PrefetchingArchitecture", "classspark_1_1spmv_1_1PrefetchingArchitecture.html", null ] + ] ] + ] ] + ] ], + [ "spark::spmv::SpmvArchitectureSpace", "classspark_1_1spmv_1_1SpmvArchitectureSpace.html", [ + [ "spark::spmv::SimpleSpmvArchitectureSpace< T >", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html", null ] + ] ], + [ "SpmvEqual", "structSpmvEqual.html", null ], + [ "SpmvHash", "structSpmvHash.html", null ], + [ "CustomManager", null, [ + [ "SpmvManager", "classSpmvManager.html", null ] + ] ], + [ "ManagerStateMachine", null, [ + [ "ParallelCsrReadControl", "classParallelCsrReadControl.html", null ] + ] ] +]; \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..e587a23 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,156 @@ + + + + + + +Spark: Main Page + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Spark Documentation
+
+
+

Introduction

+

Spark is a library for sparse linear algebra architectures which uses customised implementations on FPGA (and eventually CPU and GPU). Spark simplifies and if necessary abstracts the generation and tuning process for sparse linear algebra problems based on the problem instance(s).

+

This document presents the Spark flow. The flow is exemplified on the Sparse Matrix Vector Multiplication Kernel (SpMV kernel). The flow can similarly be applied to any Kernel implemented in Spark (presently Conjugate Gradient and Bi Conjugate Gradient implementations are planned and considered feasible but not implemented).

+

Using Spark for problem specific tunning

+

Spark can be used to generate custom architectures based on given sparse benchmark.

+

Spark Usage

+

The example below shows how to use the SparkSpmv implementation from the client perspective. Similarly it can be extended to support other calls such as Conjugate Gradient directly etc.

+
#include <Spark/Spmv>
+
+void doSmth() {
+  EigenSparseVec x;
+  EigenSparseMatrix mat;
+
+  // the implementation hint is used to narrow down the
+  // search space; optionally the _force_ flag could be set
+  // to force a certain implementation
+  SparkImplHint hint(...);
+  SparkSpmv spmv(hint); // could use arguments to select impl
+
+  // analyze and pre-process step allow Spark to
+  // select optimal implementation internally
+
+  spmv.analyze(mat);
+  spmv.preprocess(mat);
+  spmv.load(mat);
+
+  for (int i = 0; i < its; i++) {
+    EigenSparseVec v = spmv.run(x);
+    // do smth with v
+  }
+}
+

Two possibilities:

+
    +
  • provide C interface + library
  • +
  • provide C++ interface + class + library
      +
    • some elements still need to be provided as lib
    • +
    • for example the maxeler implementations
    • +
    +
  • +
+

``` include/ Spmv.cpp spmv(mat, v) BiCg.cpp

+

src/ spmv/ dfe/ SpmvDfeInterface.cpp cpu/ gpu/ common/ Preprocessing.hpp (?) Preprocessing.cpp Compression Blocking Partitionining Scheduling etc. cg/ dfe/ SpmvCgInterface.cpp cpu/ common/ ```

+
+
+ + + + diff --git a/docs/jquery.js b/docs/jquery.js new file mode 100644 index 0000000..3db33e6 --- /dev/null +++ b/docs/jquery.js @@ -0,0 +1,72 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); +/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null; +p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + +
+ +
+
main.cpp File Reference
+
+
+
#include <Spark/Dse.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/program_options.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+#include <iostream>
+#include <string>
+#include <chrono>
+#include <sstream>
+
+ + + + + + + + + +

+Functions

spark::dse::DseParameters loadParams (const boost::filesystem::path &parf)
 
spark::dse::Benchmark loadBenchmark (const boost::filesystem::path &p)
 
void write_dse_results (const std::vector< spark::dse::DseResult > &results, double took)
 
int main (int argc, char **argv)
 
+

Function Documentation

+ +
+
+ + + + + + + + +
spark::dse::Benchmark loadBenchmark (const boost::filesystem::path & p)
+
+ +
+
+ +
+
+ + + + + + + + +
spark::dse::DseParameters loadParams (const boost::filesystem::path & parf)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
int main (int argc,
char ** argv 
)
+
+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void write_dse_results (const std::vector< spark::dse::DseResult > & results,
double took 
)
+
+ +
+
+ + + + + + diff --git a/docs/main_8cpp.js b/docs/main_8cpp.js new file mode 100644 index 0000000..28b616d --- /dev/null +++ b/docs/main_8cpp.js @@ -0,0 +1,7 @@ +var main_8cpp = +[ + [ "loadBenchmark", "main_8cpp.html#a75bc35b120d6b6f0834ae4d32856036c", null ], + [ "loadParams", "main_8cpp.html#a84bdcf570024843f14fc9624770bf035", null ], + [ "main", "main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627", null ], + [ "write_dse_results", "main_8cpp.html#a8d444a99dbaa5e94893a71e578e1d902", null ] +]; \ No newline at end of file diff --git a/docs/md_README.html b/docs/md_README.html new file mode 100644 index 0000000..8ac0f11 --- /dev/null +++ b/docs/md_README.html @@ -0,0 +1,151 @@ + + + + + + +Spark: spark + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark
+
+
+

spark is a tool for exploring customised architectures for sparse linear algebra. It focuses on micro-architectural optimsations for iterative solvers and the sparse matrix vector multiplication kernel.

+

Installation

+

``` git clone https://github.com/paul-g/spark.git git submodule update –init cd spark && mkdir build && cd build && cmake .. make -C main ```

+

Requires

+

All builds are performed on the local machine which must have:

+
    +
  1. Maxeler MaxCompiler 2013.2.2 or higher
  2. +
  3. g++ 4.9.2 or higher
  4. +
  5. Boost 1.55 or higher
  6. +
+

Usage

+

DSE flow

+

First, compile the DSE program:

+

```` mkdir build && cd build && cmake .. && make main ````

+

You can then use the DSE flow through scripts/spark.py.

+

``` bash-4.1$ python spark.py -h usage: spark.py [-h] [-d] -t {dfe,sim} -p PARAM_FILE -b BENCHMARK_DIR [-m MAX_BUILDS]

+

Run Spark DSE flow

+

optional arguments: -h, –help show this help message and exit -d, –dse -t {dfe,sim}, –target {dfe,sim} -p PARAM_FILE, –param-file PARAM_FILE -b BENCHMARK_DIR, –benchmark-dir BENCHMARK_DIR -m MAX_BUILDS, –max-builds MAX_BUILDS ```

+

spark.py automates:

+
    +
  1. DSE process based on a set of benchmark matrices
  2. +
  3. generating simulation and hardware configurations
  4. +
  5. running and benchmarking simulation and hardware configurations
  6. +
+

CMake Flow

+

Once a simulation / hardware library has been generated through the DSE flow, it will be available in lib-generated.

+

From here you can use also CMake directly to rebuild the client targets, for example test_spmv_sim. Just build the corresponding Makefile target:

+

``` make -C build test_spmv_sim ```

+

Running tests

+

Tests are provided for both software, hardware simulation and hardware runs. These should always pass on the master branch. Beware though that it's not practical to test every design parameter configuration, so awkward issues may arise.

+

First, compile the test binaries (e.g.): make -C build test_spmv_sim Then you can:

+
    +
  1. Run unit tests with ctest -R unit
  2. +
  3. Run hardware simulation tests with ctest -R sim
  4. +
  5. Run hardware tests with ctest -R hw
  6. +
+

Note Some simulation tests may take a long time to run (`~60s), particularly if a large architecture is simulated.

+
+
+ + + + diff --git a/docs/md_docs_user_guide.html b/docs/md_docs_user_guide.html new file mode 100644 index 0000000..dfaa6af --- /dev/null +++ b/docs/md_docs_user_guide.html @@ -0,0 +1,135 @@ + + + + + + +Spark: user_guide + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
user_guide
+
+
+

% Spark User Guide

+

Glossary

+

Warning! This document is work in progress. Until this notice is removed, please treat it as such

+

Application code refers to the code using libraries generated by Spark.

+

Basic Usage

+

Compiling and Running Application Code

+

Application code is compiled and linked against the CPU interface mocks provided. At runtime, Spark selects the optimal implementation from a number of pre-optimised shared libraries. If not suitable library can be found an exception is thrown.

+

Running Benchmarking

+

Benchmarking is important to validate performance models. Benchmarking is different from typical usage, because it requires control over the loaded implementation. In general, for maximum flexibility, disable the auto load function and provide the shared library under test on LD_PRELOAD or LD_LIBRARY_PATH.

+

Benchmarking can be done either:

+
    +
  1. in simulation – useful to check the performance model corresponds correctly to the design. But simulation does not account for some underlying physical or logical performance aspects such as memory bandwidth, resource usage, stalls
  2. +
  3. in hardware – ideally provides an accurate measurement of performance, but is expensive to perform; it is also sensitive to interference by other processes on the target machine
  4. +
+

Benchmarking can be automated through spark.py. The following configurations are available:

+
    +
  1. Best fit – picks the best library for each matrix, this corresponds to typical usage
  2. +
  3. One to all – picks one library and benchmarks it on all matrices; if a matrix is not supported by the library, an exception will be thrown
  4. +
  5. All to all – Run each library, in turn on all benchmarks
  6. +
+

TODO Data is collected in CSV format and plots can be generated from it.

+
+
+ + + + diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html new file mode 100644 index 0000000..bfa1183 --- /dev/null +++ b/docs/namespacemembers.html @@ -0,0 +1,165 @@ + + + + + + +Spark: Namespace Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
Here is a list of all namespace members with links to the namespace documentation for each member:
+
+
+ + + + diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html new file mode 100644 index 0000000..2f7c124 --- /dev/null +++ b/docs/namespacemembers_func.html @@ -0,0 +1,152 @@ + + + + + + +Spark: Namespace Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+  +
+
+ + + + diff --git a/docs/namespacemembers_type.html b/docs/namespacemembers_type.html new file mode 100644 index 0000000..a80f5a4 --- /dev/null +++ b/docs/namespacemembers_type.html @@ -0,0 +1,139 @@ + + + + + + +Spark: Namespace Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+  +
+
+ + + + diff --git a/docs/namespacemembers_vars.html b/docs/namespacemembers_vars.html new file mode 100644 index 0000000..859da13 --- /dev/null +++ b/docs/namespacemembers_vars.html @@ -0,0 +1,129 @@ + + + + + + +Spark: Namespace Members + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/namespaces.html b/docs/namespaces.html new file mode 100644 index 0000000..87746ea --- /dev/null +++ b/docs/namespaces.html @@ -0,0 +1,137 @@ + + + + + + +Spark: Namespace List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Namespace List
+
+
+
Here is a list of all namespaces with brief descriptions:
+
+
+ + + + diff --git a/docs/namespaces.js b/docs/namespaces.js new file mode 100644 index 0000000..c1ff39b --- /dev/null +++ b/docs/namespaces.js @@ -0,0 +1,4 @@ +var namespaces = +[ + [ "spark", "namespacespark.html", "namespacespark" ] +]; \ No newline at end of file diff --git a/docs/namespacespark.html b/docs/namespacespark.html new file mode 100644 index 0000000..b419127 --- /dev/null +++ b/docs/namespacespark.html @@ -0,0 +1,151 @@ + + + + + + +Spark: spark Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark Namespace Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Namespaces

 converters
 
 dse
 
 execution
 
 file_utils
 
 io
 
 model
 
 runtime
 
 sparse
 
 sparse_linear_solvers
 
 spmv
 
 userio
 
 utils
 
+
+
+ + + + diff --git a/docs/namespacespark.js b/docs/namespacespark.js new file mode 100644 index 0000000..5bb4cbb --- /dev/null +++ b/docs/namespacespark.js @@ -0,0 +1,15 @@ +var namespacespark = +[ + [ "converters", "namespacespark_1_1converters.html", null ], + [ "dse", "namespacespark_1_1dse.html", "namespacespark_1_1dse" ], + [ "execution", "namespacespark_1_1execution.html", "namespacespark_1_1execution" ], + [ "file_utils", "namespacespark_1_1file__utils.html", null ], + [ "io", "namespacespark_1_1io.html", "namespacespark_1_1io" ], + [ "model", "namespacespark_1_1model.html", "namespacespark_1_1model" ], + [ "runtime", "namespacespark_1_1runtime.html", "namespacespark_1_1runtime" ], + [ "sparse", "namespacespark_1_1sparse.html", "namespacespark_1_1sparse" ], + [ "sparse_linear_solvers", "namespacespark_1_1sparse__linear__solvers.html", "namespacespark_1_1sparse__linear__solvers" ], + [ "spmv", "namespacespark_1_1spmv.html", "namespacespark_1_1spmv" ], + [ "userio", "namespacespark_1_1userio.html", null ], + [ "utils", "namespacespark_1_1utils.html", "namespacespark_1_1utils" ] +]; \ No newline at end of file diff --git a/docs/namespacespark_1_1converters.html b/docs/namespacespark_1_1converters.html new file mode 100644 index 0000000..fd998e5 --- /dev/null +++ b/docs/namespacespark_1_1converters.html @@ -0,0 +1,225 @@ + + + + + + +Spark: spark::converters Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::converters Namespace Reference
+
+
+ + + + +

+Typedefs

using EigenSparseMatrix = std::unique_ptr< Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >>
 
+ + + + + + + +

+Functions

EigenSparseMatrix tripletToEigen (spark::sparse::SparkCooMatrix< double > mat)
 
Eigen::VectorXd stdvectorToEigen (std::vector< double > v)
 
std::vector< double > eigenVectorToStdVector (const Eigen::VectorXd &v)
 
+

Typedef Documentation

+ +
+
+ + + + +
using spark::converters::EigenSparseMatrix = typedef std::unique_ptr<Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>>
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
std::vector<double> spark::converters::eigenVectorToStdVector (const Eigen::VectorXd & v)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
Eigen::VectorXd spark::converters::stdvectorToEigen (std::vector< double > v)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
EigenSparseMatrix spark::converters::tripletToEigen (spark::sparse::SparkCooMatrix< double > mat)
+
+inline
+
+ +
+
+
+
+ + + + diff --git a/docs/namespacespark_1_1dse.html b/docs/namespacespark_1_1dse.html new file mode 100644 index 0000000..9946239 --- /dev/null +++ b/docs/namespacespark_1_1dse.html @@ -0,0 +1,212 @@ + + + + + + +Spark: spark::dse Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::dse Namespace Reference
+
+
+ + + + + + + + + + +

+Classes

class  Benchmark
 
class  DseParameters
 
class  DseResult
 
class  SparkDse
 
+ + + + + +

+Functions

std::ostream & operator<< (std::ostream &s, Benchmark &b)
 
std::ostream & operator<< (std::ostream &s, DseParameters &d)
 
+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& spark::dse::operator<< (std::ostream & s,
Benchmark & b 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& spark::dse::operator<< (std::ostream & s,
DseParameters & d 
)
+
+inline
+
+ +
+
+
+
+ + + + diff --git a/docs/namespacespark_1_1dse.js b/docs/namespacespark_1_1dse.js new file mode 100644 index 0000000..1d0bf3c --- /dev/null +++ b/docs/namespacespark_1_1dse.js @@ -0,0 +1,7 @@ +var namespacespark_1_1dse = +[ + [ "Benchmark", "classspark_1_1dse_1_1Benchmark.html", "classspark_1_1dse_1_1Benchmark" ], + [ "DseParameters", "classspark_1_1dse_1_1DseParameters.html", "classspark_1_1dse_1_1DseParameters" ], + [ "DseResult", "classspark_1_1dse_1_1DseResult.html", "classspark_1_1dse_1_1DseResult" ], + [ "SparkDse", "classspark_1_1dse_1_1SparkDse.html", "classspark_1_1dse_1_1SparkDse" ] +]; \ No newline at end of file diff --git a/docs/namespacespark_1_1execution.html b/docs/namespacespark_1_1execution.html new file mode 100644 index 0000000..1df6dcb --- /dev/null +++ b/docs/namespacespark_1_1execution.html @@ -0,0 +1,129 @@ + + + + + + +Spark: spark::execution Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::execution Namespace Reference
+
+
+ + + + +

+Classes

class  SharedLibLoader
 
+
+
+ + + + diff --git a/docs/namespacespark_1_1execution.js b/docs/namespacespark_1_1execution.js new file mode 100644 index 0000000..4abbad7 --- /dev/null +++ b/docs/namespacespark_1_1execution.js @@ -0,0 +1,4 @@ +var namespacespark_1_1execution = +[ + [ "SharedLibLoader", "classspark_1_1execution_1_1SharedLibLoader.html", "classspark_1_1execution_1_1SharedLibLoader" ] +]; \ No newline at end of file diff --git a/docs/namespacespark_1_1file__utils.html b/docs/namespacespark_1_1file__utils.html new file mode 100644 index 0000000..eb6c7ad --- /dev/null +++ b/docs/namespacespark_1_1file__utils.html @@ -0,0 +1,146 @@ + + + + + + +Spark: spark::file_utils Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::file_utils Namespace Reference
+
+
+ + + + +

+Functions

std::vector< std::string > child_files (std::string dirPath)
 
+

Function Documentation

+ +
+
+ + + + + + + + +
std::vector<std::string> spark::file_utils::child_files (std::string dirPath)
+
+ +
+
+
+
+ + + + diff --git a/docs/namespacespark_1_1io.html b/docs/namespacespark_1_1io.html new file mode 100644 index 0000000..05858c0 --- /dev/null +++ b/docs/namespacespark_1_1io.html @@ -0,0 +1,129 @@ + + + + + + +Spark: spark::io Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::io Namespace Reference
+
+
+ + + + +

+Classes

class  MmReader
 
+
+
+ + + + diff --git a/docs/namespacespark_1_1io.js b/docs/namespacespark_1_1io.js new file mode 100644 index 0000000..468b553 --- /dev/null +++ b/docs/namespacespark_1_1io.js @@ -0,0 +1,4 @@ +var namespacespark_1_1io = +[ + [ "MmReader", "classspark_1_1io_1_1MmReader.html", "classspark_1_1io_1_1MmReader" ] +]; \ No newline at end of file diff --git a/docs/namespacespark_1_1model.html b/docs/namespacespark_1_1model.html new file mode 100644 index 0000000..4d9ec5b --- /dev/null +++ b/docs/namespacespark_1_1model.html @@ -0,0 +1,131 @@ + + + + + + +Spark: spark::model Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::model Namespace Reference
+
+
+ + + + + + +

+Classes

class  LogicResourceUsage
 
class  ImplementationParameters
 
+
+
+ + + + diff --git a/docs/namespacespark_1_1model.js b/docs/namespacespark_1_1model.js new file mode 100644 index 0000000..2d1754d --- /dev/null +++ b/docs/namespacespark_1_1model.js @@ -0,0 +1,5 @@ +var namespacespark_1_1model = +[ + [ "LogicResourceUsage", "classspark_1_1model_1_1LogicResourceUsage.html", "classspark_1_1model_1_1LogicResourceUsage" ], + [ "ImplementationParameters", "classspark_1_1model_1_1ImplementationParameters.html", "classspark_1_1model_1_1ImplementationParameters" ] +]; \ No newline at end of file diff --git a/docs/namespacespark_1_1runtime.html b/docs/namespacespark_1_1runtime.html new file mode 100644 index 0000000..19f3586 --- /dev/null +++ b/docs/namespacespark_1_1runtime.html @@ -0,0 +1,137 @@ + + + + + + +Spark: spark::runtime Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::runtime Namespace Reference
+
+
+ + + + + + + + + + + + +

+Classes

struct  GeneratedImplementation
 
class  GeneratedSpmvImplementation
 
class  GeneratedSpmvImplementationMock
 
class  ImplementationLoader
 
class  SpmvImplementationLoader
 
+
+
+ + + + diff --git a/docs/namespacespark_1_1runtime.js b/docs/namespacespark_1_1runtime.js new file mode 100644 index 0000000..ec55a50 --- /dev/null +++ b/docs/namespacespark_1_1runtime.js @@ -0,0 +1,8 @@ +var namespacespark_1_1runtime = +[ + [ "GeneratedImplementation", "structspark_1_1runtime_1_1GeneratedImplementation.html", "structspark_1_1runtime_1_1GeneratedImplementation" ], + [ "GeneratedSpmvImplementation", "classspark_1_1runtime_1_1GeneratedSpmvImplementation.html", "classspark_1_1runtime_1_1GeneratedSpmvImplementation" ], + [ "GeneratedSpmvImplementationMock", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html", "classspark_1_1runtime_1_1GeneratedSpmvImplementationMock" ], + [ "ImplementationLoader", "classspark_1_1runtime_1_1ImplementationLoader.html", "classspark_1_1runtime_1_1ImplementationLoader" ], + [ "SpmvImplementationLoader", "classspark_1_1runtime_1_1SpmvImplementationLoader.html", "classspark_1_1runtime_1_1SpmvImplementationLoader" ] +]; \ No newline at end of file diff --git a/docs/namespacespark_1_1sparse.html b/docs/namespacespark_1_1sparse.html new file mode 100644 index 0000000..f6bfde9 --- /dev/null +++ b/docs/namespacespark_1_1sparse.html @@ -0,0 +1,162 @@ + + + + + + +Spark: spark::sparse Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::sparse Namespace Reference
+
+
+ + + + +

+Classes

class  SparkCooMatrix
 
+ + + + + +

+Typedefs

using CsrMatrix = std::tuple< std::vector< uint32_t >, std::vector< int >, std::vector< double >>
 
using PartitionedCsrMatrix = std::vector< CsrMatrix >
 
+

Typedef Documentation

+ +
+
+ + + + +
using spark::sparse::CsrMatrix = typedef std::tuple<std::vector<uint32_t>, std::vector<int>, std::vector<double>>
+
+ +
+
+ +
+
+ + + + +
using spark::sparse::PartitionedCsrMatrix = typedef std::vector<CsrMatrix>
+
+ +
+
+
+
+ + + + diff --git a/docs/namespacespark_1_1sparse.js b/docs/namespacespark_1_1sparse.js new file mode 100644 index 0000000..64e1e81 --- /dev/null +++ b/docs/namespacespark_1_1sparse.js @@ -0,0 +1,4 @@ +var namespacespark_1_1sparse = +[ + [ "SparkCooMatrix", "classspark_1_1sparse_1_1SparkCooMatrix.html", "classspark_1_1sparse_1_1SparkCooMatrix" ] +]; \ No newline at end of file diff --git a/docs/namespacespark_1_1sparse__linear__solvers.html b/docs/namespacespark_1_1sparse__linear__solvers.html new file mode 100644 index 0000000..022029d --- /dev/null +++ b/docs/namespacespark_1_1sparse__linear__solvers.html @@ -0,0 +1,135 @@ + + + + + + +Spark: spark::sparse_linear_solvers Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::sparse_linear_solvers Namespace Reference
+
+
+ + + + + + + + + + +

+Classes

class  Solver
 
class  EigenSolver
 
class  DfeCgSolver
 
class  DfeBiCgSolver
 
+
+
+ + + + diff --git a/docs/namespacespark_1_1sparse__linear__solvers.js b/docs/namespacespark_1_1sparse__linear__solvers.js new file mode 100644 index 0000000..c41a656 --- /dev/null +++ b/docs/namespacespark_1_1sparse__linear__solvers.js @@ -0,0 +1,7 @@ +var namespacespark_1_1sparse__linear__solvers = +[ + [ "Solver", "classspark_1_1sparse__linear__solvers_1_1Solver.html", "classspark_1_1sparse__linear__solvers_1_1Solver" ], + [ "EigenSolver", "classspark_1_1sparse__linear__solvers_1_1EigenSolver.html", "classspark_1_1sparse__linear__solvers_1_1EigenSolver" ], + [ "DfeCgSolver", "classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html", "classspark_1_1sparse__linear__solvers_1_1DfeCgSolver" ], + [ "DfeBiCgSolver", "classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html", "classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver" ] +]; \ No newline at end of file diff --git a/docs/namespacespark_1_1spmv.html b/docs/namespacespark_1_1spmv.html new file mode 100644 index 0000000..6d3616d --- /dev/null +++ b/docs/namespacespark_1_1spmv.html @@ -0,0 +1,273 @@ + + + + + + +Spark: spark::spmv Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv Namespace Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Classes

struct  indptr_value
 
struct  Partition
 
class  SimpleSpmvArchitecture
 
class  SimpleSpmvArchitectureSpace
 
class  FstSpmvArchitecture
 
class  SkipEmptyRowsArchitecture
 
class  PrefetchingArchitecture
 
class  SpmvArchitecture
 
class  SpmvArchitectureSpace
 
+ + + +

+Typedefs

using EigenSparseMatrix = Eigen::SparseMatrix< double, Eigen::RowMajor, int32_t >
 
+ + + + + + + + +

+Functions

struct spark::spmv::indptr_value __attribute__ ((packed))
 
std::ostream & operator<< (std::ostream &s, SpmvArchitecture &a)
 
template<typename T >
void align (std::vector< T > &v, int widthInBytes)
 
+ + + +

+Variables

struct spark::spmv::Partition __attribute__
 
+

Typedef Documentation

+ +
+
+ + + + +
using spark::spmv::EigenSparseMatrix = typedef Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + + + + +
struct spark::spmv::indptr_value spark::spmv::__attribute__ ((packed) )
+
+ +
+
+ +
+
+
+template<typename T >
+ + + + + + + + + + + + + + + + + + +
void spark::spmv::align (std::vector< T > & v,
int widthInBytes 
)
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& spark::spmv::operator<< (std::ostream & s,
SpmvArchitecture & a 
)
+
+inline
+
+ +
+
+

Variable Documentation

+ +
+
+ + + + +
struct spark::spmv::Partition spark::spmv::__attribute__
+
+ +
+
+
+
+ + + + diff --git a/docs/namespacespark_1_1spmv.js b/docs/namespacespark_1_1spmv.js new file mode 100644 index 0000000..f77c12e --- /dev/null +++ b/docs/namespacespark_1_1spmv.js @@ -0,0 +1,12 @@ +var namespacespark_1_1spmv = +[ + [ "indptr_value", "structspark_1_1spmv_1_1indptr__value.html", "structspark_1_1spmv_1_1indptr__value" ], + [ "Partition", "structspark_1_1spmv_1_1Partition.html", "structspark_1_1spmv_1_1Partition" ], + [ "SimpleSpmvArchitecture", "classspark_1_1spmv_1_1SimpleSpmvArchitecture.html", "classspark_1_1spmv_1_1SimpleSpmvArchitecture" ], + [ "SimpleSpmvArchitectureSpace", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html", "classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace" ], + [ "FstSpmvArchitecture", "classspark_1_1spmv_1_1FstSpmvArchitecture.html", "classspark_1_1spmv_1_1FstSpmvArchitecture" ], + [ "SkipEmptyRowsArchitecture", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html", "classspark_1_1spmv_1_1SkipEmptyRowsArchitecture" ], + [ "PrefetchingArchitecture", "classspark_1_1spmv_1_1PrefetchingArchitecture.html", "classspark_1_1spmv_1_1PrefetchingArchitecture" ], + [ "SpmvArchitecture", "classspark_1_1spmv_1_1SpmvArchitecture.html", "classspark_1_1spmv_1_1SpmvArchitecture" ], + [ "SpmvArchitectureSpace", "classspark_1_1spmv_1_1SpmvArchitectureSpace.html", "classspark_1_1spmv_1_1SpmvArchitectureSpace" ] +]; \ No newline at end of file diff --git a/docs/namespacespark_1_1userio.html b/docs/namespacespark_1_1userio.html new file mode 100644 index 0000000..a390a7e --- /dev/null +++ b/docs/namespacespark_1_1userio.html @@ -0,0 +1,173 @@ + + + + + + +Spark: spark::userio Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::userio Namespace Reference
+
+
+ + + + +

+Typedefs

using UserInputParams = std::unordered_map< std::string, int >
 
+ + + +

+Functions

UserInputParams parseBuildParams (std::string params)
 
+

Typedef Documentation

+ +
+
+ + + + +
using spark::userio::UserInputParams = typedef std::unordered_map<std::string, int>
+
+ +
+
+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
UserInputParams spark::userio::parseBuildParams (std::string params)
+
+inline
+
+ +
+
+
+
+ + + + diff --git a/docs/namespacespark_1_1utils.html b/docs/namespacespark_1_1utils.html new file mode 100644 index 0000000..6ed47ef --- /dev/null +++ b/docs/namespacespark_1_1utils.html @@ -0,0 +1,170 @@ + + + + + + +Spark: spark::utils Namespace Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::utils Namespace Reference
+
+
+ + + + +

+Classes

struct  Range
 
+ + + +

+Functions

std::ostream & operator<< (std::ostream &s, const Range &r)
 
+

Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
std::ostream& spark::utils::operator<< (std::ostream & s,
const Range & r 
)
+
+inline
+
+ +
+
+
+
+ + + + diff --git a/docs/namespacespark_1_1utils.js b/docs/namespacespark_1_1utils.js new file mode 100644 index 0000000..a03be7a --- /dev/null +++ b/docs/namespacespark_1_1utils.js @@ -0,0 +1,4 @@ +var namespacespark_1_1utils = +[ + [ "Range", "structspark_1_1utils_1_1Range.html", "structspark_1_1utils_1_1Range" ] +]; \ No newline at end of file diff --git a/docs/nav_f.png b/docs/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..72a58a529ed3a9ed6aa0c51a79cf207e026deee2 GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQVE_ejv*C{Z|{2ZH7M}7UYxc) zn!W8uqtnIQ>_z8U literal 0 HcmV?d00001 diff --git a/docs/nav_g.png b/docs/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KF$B+ufw|5=67#uj90@pIL wZ=Q8~_Ju`#59=RjDrmm`tMD@M=!-l18IR?&vFVdQ&MBb@0HFXL=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + if ($.browser.msie && $.browser.version<=8) { + // script.onload does not work with older versions of IE + script.onreadystatechange = function() { + if (script.readyState=='complete' || script.readyState=='loaded') { + func(); if (show) showRoot(); + } + } + } + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("img"); + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.width = 16; + imgNode.height = 22; + imgNode.border = 0; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.src = node.relpath+"ftv2pnode.png"; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + imgNode.src = node.relpath+"ftv2pnode.png"; + } else { + var span = document.createElement("span"); + span.style.display = 'inline-block'; + span.style.width = 16*(level+1)+'px'; + span.style.height = '22px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + if (anchor.parent().attr('class')=='memItemLeft' || + anchor.parent().attr('class')=='fieldtype' || + anchor.parent().is(':header')) + { + pos = anchor.parent().position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath($(location).attr('pathname')); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',0,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } if (imm || ($.browser.msie && $.browser.version>8)) { + // somehow slideDown jumps to the start of tree for IE9 :-( + $(node.getChildrenUL()).show(); + } else { + $(node.getChildrenUL()).slideDown("fast"); + } + if (node.isLast) { + node.plus_img.src = node.relpath+"ftv2mlastnode.png"; + } else { + node.plus_img.src = node.relpath+"ftv2mnode.png"; + } + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = $(location).attr('hash'); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+ + window.location.hash.substring(1)+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parents().slice(2).prop('tagName')=='TR') { + glowEffect(anchor.parents('div.memitem'),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + gotoAnchor(anchor,aname,false); +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath($(location).attr('pathname'))+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + $('#nav-sync').css('top','30px'); + } else { + $('#nav-sync').css('top','5px'); + } + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + if (node.isLast) { + node.plus_img.src = node.relpath+"ftv2mlastnode.png"; + } else { + node.plus_img.src = node.relpath+"ftv2mnode.png"; + } + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1]; + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + //root=root.replace(/_source\./,'.'); // source link to doc link + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2($(location).attr('pathname'))+$(location).attr('hash')); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("img"); + o.node.plus_img.src = relpath+"ftv2pnode.png"; + o.node.plus_img.width = 16; + o.node.plus_img.height = 22; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + $(window).load(function(){ + navTo(o,toroot,window.location.hash,relpath); + showRoot(); + }); + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath($(location).attr('pathname'))+':'+ + $(location).attr('hash').substring(1); + a=$('.item a[class$="'+clslink+'"]'); + } + if (a==null || !$(a).parent().parent().hasClass('selected')){ + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + } + var link=stripPath2($(location).attr('pathname')); + navTo(o,link,$(location).attr('hash'),relpath); + } else if (!animationInProgress) { + $('#doc-content').scrollTop(0); + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + navTo(o,toroot,window.location.hash,relpath); + } + }) +} + diff --git a/docs/navtreeindex0.js b/docs/navtreeindex0.js new file mode 100644 index 0000000..d9b614d --- /dev/null +++ b/docs/navtreeindex0.js @@ -0,0 +1,253 @@ +var NAVTREEINDEX0 = +{ +"BiConjugateGradient_8cpp.html":[4,0,1,0,0,0], +"BiConjugateGradient_8cpp.html#a61f485fb4164897d20404192b8a20927":[4,0,1,0,0,0,0], +"BiConjugateGradient_8cpp.html#aa6ded0f7e5d8161252912d0eb17f27c0":[4,0,1,0,0,0,2], +"BiConjugateGradient_8cpp.html#ab1ada1c516bfa9599e8e43b4b9666a10":[4,0,1,0,0,0,1], +"BiConjugateGradient_8cpp.html#ac3a55e37d1559a049fcef0af776feb3b":[4,0,1,0,0,0,3], +"ConjugateGradient_8cpp.html":[4,0,1,1,0,0], +"Converters_8hpp.html":[4,0,0,0,1], +"Converters_8hpp.html#a724347922bbc7e56429febfd000be78b":[4,0,0,0,1,0], +"Converters_8hpp.html#a78a095076b8d4daa406d3dc9bca7504c":[4,0,0,0,1,1], +"Converters_8hpp.html#aa6e224b8b4ce34ca7a1683910b0dd9c2":[4,0,0,0,1,2], +"Converters_8hpp.html#ad8ff5498781446bc5c51cd52922f5d72":[4,0,0,0,1,3], +"Converters_8hpp_source.html":[4,0,0,0,1], +"Dse_8cpp.html":[4,0,1,3,0], +"Dse_8cpp.html#a50c99f119df5ba972bbebeef76239c2e":[4,0,1,3,0,3], +"Dse_8cpp.html#ac63ef9b091049d2a25c5941b73512252":[4,0,1,3,0,2], +"Dse_8hpp.html":[4,0,0,0,2], +"Dse_8hpp.html#a2cba03adcd7e6708f31a01eb270ffeb9":[4,0,0,0,2,4], +"Dse_8hpp.html#ae3baaf24604e126136d1d8b583fc389d":[4,0,0,0,2,5], +"Dse_8hpp_source.html":[4,0,0,0,2], +"Execution_8hpp.html":[4,0,0,0,3], +"Execution_8hpp_source.html":[4,0,0,0,3], +"FileUtils_8hpp.html":[4,0,0,0,4], +"FileUtils_8hpp.html#a4725425d3954eff72c12d25a8b52d131":[4,0,0,0,4,0], +"FileUtils_8hpp_source.html":[4,0,0,0,4], +"GeneratedImplSupport_8hpp.html":[4,0,0,0,5], +"GeneratedImplSupport_8hpp_source.html":[4,0,0,0,5], +"Io_8hpp.html":[4,0,0,0,6], +"Io_8hpp_source.html":[4,0,0,0,6], +"Model_8hpp.html":[4,0,0,0,7], +"Model_8hpp_source.html":[4,0,0,0,7], +"ParallelCsrReadControl_8java.html":[4,0,1,5,0,0], +"SharedLibLoader_8cpp.html":[4,0,1,4,0], +"SimpleSpmv_8hpp.html":[4,0,0,0,8], +"SimpleSpmv_8hpp.html#a164fa1a90d7bd63f14e631438885cc69":[4,0,0,0,8,12], +"SimpleSpmv_8hpp.html#a3235bbbc3c8db242db2f00947ec4ca9b":[4,0,0,0,8,7], +"SimpleSpmv_8hpp.html#a84d257f77f20931d14a7e5abb9d099c8":[4,0,0,0,8,10], +"SimpleSpmv_8hpp.html#a8ad7d0fb384bbf6ef88a68b8cad95182":[4,0,0,0,8,11], +"SimpleSpmv_8hpp.html#a8ed4b5e7d25d6d210e3f1b7f09a84c7a":[4,0,0,0,8,8], +"SimpleSpmv_8hpp.html#ac37db725a01a5625a6a32d51d7fd3e78":[4,0,0,0,8,9], +"SimpleSpmv_8hpp.html#aee90379adb0307effb138f4871edbc5c":[4,0,0,0,8,13], +"SimpleSpmv_8hpp_source.html":[4,0,0,0,8], +"SparseLinearSolvers_8cpp.html":[4,0,1,7], +"SparseLinearSolvers_8cpp.html#a0917711c5c1de1d6fc6d3f5c2fa08c47":[4,0,1,7,0], +"SparseLinearSolvers_8cpp.html#a857d72c794d4097e9a37e2a1a6839567":[4,0,1,7,1], +"SparseLinearSolvers_8cpp.html#abdc884f0c76856917e9821d6242ee98a":[4,0,1,7,2], +"SparseLinearSolvers_8hpp.html":[4,0,0,0,9], +"SparseLinearSolvers_8hpp_source.html":[4,0,0,0,9], +"SparseMatrix_8hpp.html":[4,0,0,0,10], +"SparseMatrix_8hpp.html#a0f0d804dd8f37cb44a636bca7d03f016":[4,0,0,0,10,1], +"SparseMatrix_8hpp.html#a15a8e3974007d1c440410bf83232f5dd":[4,0,0,0,10,2], +"SparseMatrix_8hpp_source.html":[4,0,0,0,10], +"SpmvDeviceInterfaceMock_8cpp.html":[4,0,1,2,0], +"SpmvDeviceInterfaceMock_8cpp.html#a2f0caf835f75923c7b64abf5b530f56a":[4,0,1,2,0,5], +"SpmvDeviceInterfaceMock_8cpp.html#a3638c97531a2affd1e27a0c2418b8314":[4,0,1,2,0,7], +"SpmvDeviceInterfaceMock_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0":[4,0,1,2,0,3], +"SpmvDeviceInterfaceMock_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12":[4,0,1,2,0,2], +"SpmvDeviceInterfaceMock_8cpp.html#a7455f3ef0da88ac52c353068d257471c":[4,0,1,2,0,0], +"SpmvDeviceInterfaceMock_8cpp.html#a7da25ac12467c17172038c1e670c08cf":[4,0,1,2,0,1], +"SpmvDeviceInterfaceMock_8cpp.html#ad67c30a9c3947922102b25b24bef66f4":[4,0,1,2,0,4], +"SpmvDeviceInterfaceMock_8cpp.html#adebd1881a3ee58569e68ed629237f86e":[4,0,1,2,0,6], +"SpmvDeviceInterface_8cpp.html":[4,0,1,5,0,2], +"SpmvDeviceInterface_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0":[4,0,1,5,0,2,3], +"SpmvDeviceInterface_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12":[4,0,1,5,0,2,2], +"SpmvDeviceInterface_8cpp.html#a7455f3ef0da88ac52c353068d257471c":[4,0,1,5,0,2,0], +"SpmvDeviceInterface_8cpp.html#a7da25ac12467c17172038c1e670c08cf":[4,0,1,5,0,2,1], +"SpmvDeviceInterface_8cpp.html#ad67c30a9c3947922102b25b24bef66f4":[4,0,1,5,0,2,4], +"SpmvDeviceInterface_8h.html":[4,0,0,0,0,0], +"SpmvDeviceInterface_8h.html#a2f0caf835f75923c7b64abf5b530f56a":[4,0,0,0,0,0,5], +"SpmvDeviceInterface_8h.html#a3638c97531a2affd1e27a0c2418b8314":[4,0,0,0,0,0,7], +"SpmvDeviceInterface_8h.html#a4565bdddcd8404afd9b6fbd6dcf39ee0":[4,0,0,0,0,0,3], +"SpmvDeviceInterface_8h.html#a4b12a86c9a868106e2ad57766f8bed12":[4,0,0,0,0,0,2], +"SpmvDeviceInterface_8h.html#a7455f3ef0da88ac52c353068d257471c":[4,0,0,0,0,0,0], +"SpmvDeviceInterface_8h.html#a7da25ac12467c17172038c1e670c08cf":[4,0,0,0,0,0,1], +"SpmvDeviceInterface_8h.html#ad67c30a9c3947922102b25b24bef66f4":[4,0,0,0,0,0,4], +"SpmvDeviceInterface_8h.html#adebd1881a3ee58569e68ed629237f86e":[4,0,0,0,0,0,6], +"SpmvDeviceInterface_8h_source.html":[4,0,0,0,0,0], +"SpmvKernel_8java.html":[4,0,1,5,0,3], +"SpmvManager_8java.html":[4,0,1,5,0,4], +"Spmv_8cpp.html":[4,0,1,5,0,1], +"Spmv_8cpp.html#a725a1b7ac05f04b3bc61b2a270346ea6":[4,0,1,5,0,1,3], +"Spmv_8cpp.html#a73ed93bfd16d2b54084241251efe53ca":[4,0,1,5,0,1,1], +"Spmv_8cpp.html#a77e3cd072d94e0fe9e5376bb05ac1c6e":[4,0,1,5,0,1,4], +"Spmv_8cpp.html#af110ee89567b09ff002ff971364c551d":[4,0,1,5,0,1,2], +"Spmv_8hpp.html":[4,0,0,0,11], +"Spmv_8hpp.html#abaf9d6fbe5cd5df67ea6314fccd769e0":[4,0,0,0,11,2], +"Spmv_8hpp.html#ad1e89fa7b9bf647e70186d2dc8385961":[4,0,0,0,11,3], +"Spmv_8hpp_source.html":[4,0,0,0,11], +"UserInput_8hpp.html":[4,0,0,0,12], +"UserInput_8hpp.html#a3dd99cbd0dfbe620ddebf4f95351b15b":[4,0,0,0,12,1], +"UserInput_8hpp.html#a61705a89ecd4794e1aaf8e56bc89a5ae":[4,0,0,0,12,0], +"UserInput_8hpp_source.html":[4,0,0,0,12], +"Utils_8hpp.html":[4,0,0,0,13], +"Utils_8hpp.html#a58716b1e1a4e2b2a3115f339aba795ef":[4,0,0,0,13,1], +"Utils_8hpp_source.html":[4,0,0,0,13], +"annotated.html":[3,0], +"classBramSpmvReductionKernel.html":[3,0,1], +"classBramSpmvReductionKernel.html#a68264df2094dfb810030e2147b3cacaa":[3,0,1,0], +"classDramSpmvReductionKernel.html":[3,0,2], +"classDramSpmvReductionKernel.html#a85cd96e69eec800ebfdea2c7bb6f7376":[3,0,2,0], +"classPaddingKernel.html":[3,0,3], +"classPaddingKernel.html#a6087bd04eca705d5c45d7978892ba7b0":[3,0,3,0], +"classParallelCsrReadControl.html":[3,0,4], +"classParallelCsrReadControl.html#a0860f8fe7c3841a51d7b9faa16b1f26a":[3,0,4,15], +"classParallelCsrReadControl.html#a0f2333314c34fb9b3a1cd57c7d2d6d37":[3,0,4,37], +"classParallelCsrReadControl.html#a2aa999eee54eca7e025dcb2be11dc900":[3,0,4,3], +"classParallelCsrReadControl.html#a309e5d2abd0d3bdaca25a19f280cd029":[3,0,4,38], +"classParallelCsrReadControl.html#a3458a62c53ce83128cedb6c7765ca6fc":[3,0,4,25], +"classParallelCsrReadControl.html#a4627fcdaeb69d3836053e91cc70a80f2":[3,0,4,42], +"classParallelCsrReadControl.html#a51cfb6d5b02eb3e5b204e4ea8f16fce4":[3,0,4,20], +"classParallelCsrReadControl.html#a522323c9bbe60e7a02f48e1ff6f7db06":[3,0,4,21], +"classParallelCsrReadControl.html#a5ba3304bde2ca9c746fc58f4f632092e":[3,0,4,14], +"classParallelCsrReadControl.html#a6a81725c82d1c2631d13b35ea2bce758":[3,0,4,18], +"classParallelCsrReadControl.html#a75734eee54f3dfaaabf8794ba378ccfa":[3,0,4,7], +"classParallelCsrReadControl.html#a7ffcf81575bcc0d92af9b198653dcf28":[3,0,4,24], +"classParallelCsrReadControl.html#a82a4d8d9d682f6c65537975de9483540":[3,0,4,29], +"classParallelCsrReadControl.html#a85aaa3cdd7bbfe023bc74bcd02bc21b4":[3,0,4,23], +"classParallelCsrReadControl.html#a869e17d0a43818cd085f01898143f2cc":[3,0,4,41], +"classParallelCsrReadControl.html#a998688c17de6d3dee32bb3005124d484":[3,0,4,33], +"classParallelCsrReadControl.html#a999c16ceab5da519c9e90a6b5765359c":[3,0,4,8], +"classParallelCsrReadControl.html#a9f87d1cc0071a87de47a8ede3cd8508c":[3,0,4,13], +"classParallelCsrReadControl.html#aa609515db6c67afd973f1d15431e1684":[3,0,4,43], +"classParallelCsrReadControl.html#aa98eb2e85dadf134870803067fa13ad8":[3,0,4,27], +"classParallelCsrReadControl.html#aa9acfae4966606e3e5645eb1592f5736":[3,0,4,6], +"classParallelCsrReadControl.html#aae3d7861bddbf53bea616be8e308afa8":[3,0,4,35], +"classParallelCsrReadControl.html#ab0f5b6539f65df26eccc3c40b234752c":[3,0,4,19], +"classParallelCsrReadControl.html#ab6214aafff1d0650206637e7a9f15729":[3,0,4,16], +"classParallelCsrReadControl.html#abaf944d93404a6d08eaa4f17e8ee4d0c":[3,0,4,34], +"classParallelCsrReadControl.html#abcbdd7c1a9d3193fa28f097ffb47e110":[3,0,4,1], +"classParallelCsrReadControl.html#ac1026ad92d6b9e38d84c81aaced9c3b7":[3,0,4,5], +"classParallelCsrReadControl.html#ac16da093fd2a7f25322d24d8be66593f":[3,0,4,2], +"classParallelCsrReadControl.html#aca9dea6888fb835dc40d3df86fa60156":[3,0,4,26], +"classParallelCsrReadControl.html#acac4d268696bea31cb88a0293e7484ec":[3,0,4,11], +"classParallelCsrReadControl.html#acadabffbfd3d06c672dabfe98ee0ca23":[3,0,4,31], +"classParallelCsrReadControl.html#acfc1f32a0362606d06eeb514a7738af8":[3,0,4,32], +"classParallelCsrReadControl.html#ad0b253e90543c25af346b9afff908d87":[3,0,4,39], +"classParallelCsrReadControl.html#ad8041b856c97ae1d5ac6ea96a5cb0b04":[3,0,4,28], +"classParallelCsrReadControl.html#ae2dc7d8decaf5a2458d11eee8f0e5f33":[3,0,4,17], +"classParallelCsrReadControl.html#af04777655393a3fb3dc8265c4047d0a6":[3,0,4,12], +"classParallelCsrReadControl.html#af30ed96f729b948fec5bd989acc13a56":[3,0,4,22], +"classParallelCsrReadControl.html#af39c2cd937063656ee7d2bdb4a21e8db":[3,0,4,9], +"classParallelCsrReadControl.html#af55c1da545422cde5c57c61a861017d8":[3,0,4,10], +"classParallelCsrReadControl.html#af87a65fc4f7423554e3a36f0a059cbf1":[3,0,4,40], +"classParallelCsrReadControl.html#afda30a96f0ffe1c758ce548cfd8d5907":[3,0,4,30], +"classParallelCsrReadControl.html#afe43fc900641b277ae1069dde875a88b":[3,0,4,36], +"classParallelCsrReadControl.html#aff22ed75d30f759a6fa33b1d8a20b602":[3,0,4,4], +"classSpmvCacheKernel.html":[3,0,6], +"classSpmvCacheKernel.html#a1c512fd317ade4f64a5e7f7215dd0c53":[3,0,6,1], +"classSpmvCacheKernel.html#a2c0074e62c391424c276981965dc4bf4":[3,0,6,8], +"classSpmvCacheKernel.html#a334b1e969200dfe46d013bef0e5b1934":[3,0,6,6], +"classSpmvCacheKernel.html#a33ae456838bd9708e94df43436703305":[3,0,6,5], +"classSpmvCacheKernel.html#a3864c0d130426bcad05724a9a864c7db":[3,0,6,4], +"classSpmvCacheKernel.html#a4a13093fa8aa4a3a053cf3d7122c6866":[3,0,6,11], +"classSpmvCacheKernel.html#a7fc692be3af6b331cdf30edbb6db98e6":[3,0,6,7], +"classSpmvCacheKernel.html#a866881c55c08adf35042aeeb18c9cffd":[3,0,6,9], +"classSpmvCacheKernel.html#a8c2591875950cd9bb288c779aacccd54":[3,0,6,3], +"classSpmvCacheKernel.html#a937fcc2032a9fc1e390bef6cb425fd55":[3,0,6,2], +"classSpmvCacheKernel.html#acd4688b7b45eb067763e70a072acc496":[3,0,6,0], +"classSpmvCacheKernel.html#ad7249c675981ec57613b0f3d69a39342":[3,0,6,10], +"classSpmvKernel.html":[3,0,9], +"classSpmvKernel.html#a0bf2a803445d2454781d5e09937de571":[3,0,9,1], +"classSpmvKernel.html#ad09b317bceedc13d1f50865cbdb4cd91":[3,0,9,0], +"classSpmvManager.html":[3,0,10], +"classSpmvManager.html#a01ee1f96ba381149f4233fae1c87c821":[3,0,10,22], +"classSpmvManager.html#a0cc931d1320ec4754066dacceeaff9c0":[3,0,10,7], +"classSpmvManager.html#a0e7f3c94df7eafa7a899a2447f16155d":[3,0,10,9], +"classSpmvManager.html#a234ea438d3c8363b41db2581e3d8a51a":[3,0,10,17], +"classSpmvManager.html#a2b1f61839183d1301ddc3975f4ad3ae9":[3,0,10,26], +"classSpmvManager.html#a3297286373eb2b5536b6cc04481cc996":[3,0,10,15], +"classSpmvManager.html#a3a947b39653f09305c7712af18ddd113":[3,0,10,21], +"classSpmvManager.html#a42510179831b9c539721ffbf0506c0f2":[3,0,10,14], +"classSpmvManager.html#a5746b324d3b38fc407d1577739b969ef":[3,0,10,25], +"classSpmvManager.html#a5c29c11c95c8f9980aa3201d8f25ff3d":[3,0,10,18], +"classSpmvManager.html#a64afe0643711d9cd06053a68f187f8da":[3,0,10,6], +"classSpmvManager.html#a6776e0fc817b9cce1698ad46bef5c1ad":[3,0,10,4], +"classSpmvManager.html#a6c6ea06d3d9cb5f752e3cbc3ca7cbafa":[3,0,10,24], +"classSpmvManager.html#a778e13e71f500522f13c6207e6f4e8a4":[3,0,10,23], +"classSpmvManager.html#a8f777c0e6b5572b85bf90427b1419039":[3,0,10,13], +"classSpmvManager.html#a9a9f9ca14bf99119d5ed0d7106acdcd9":[3,0,10,16], +"classSpmvManager.html#aa4b9b4fd7299e8967130613ce89df06e":[3,0,10,5], +"classSpmvManager.html#aaeaf51093060e192ab53048bf0c2fa9d":[3,0,10,0], +"classSpmvManager.html#ab025ef7147d5d645028cc92b7d1a513f":[3,0,10,2], +"classSpmvManager.html#abf7df885f5ea650b0128628cad8bf33b":[3,0,10,12], +"classSpmvManager.html#ac993f1b6041594ae5bd7211d4f498702":[3,0,10,1], +"classSpmvManager.html#aca5d9419bca8dbc02b44df878cac0009":[3,0,10,8], +"classSpmvManager.html#ad0360a20a24483e22664a4bda8428ec6":[3,0,10,11], +"classSpmvManager.html#adfc3a8c884874f553215941bf86692fa":[3,0,10,20], +"classSpmvManager.html#ae2858b4c2bd5a17d5710d0d34429e2b3":[3,0,10,3], +"classSpmvManager.html#aece403b7ff81eeebfaf75b35aacb2b1f":[3,0,10,19], +"classSpmvManager.html#aff135aa6706cfaf3cea42f1353dd3ea7":[3,0,10,10], +"classSpmvReductionKernel.html":[3,0,11], +"classSpmvReductionKernel.html#a6cf50bef530943f0e812c5a684b2b26a":[3,0,11,0], +"classUnpaddingKernel.html":[3,0,12], +"classUnpaddingKernel.html#a52a201168b15d7ab1e1378178a5abd5e":[3,0,12,0], +"classes.html":[3,1], +"classspark_1_1dse_1_1Benchmark.html":[3,0,0,1,0], +"classspark_1_1dse_1_1Benchmark.html#a1692f6d32fb3d2a6de8ad8c85cf7fc39":[3,0,0,1,0,1], +"classspark_1_1dse_1_1Benchmark.html#a18854065058a9f70a0fbb4127212d81f":[3,0,0,1,0,0], +"classspark_1_1dse_1_1Benchmark.html#a42578888522f08d21a620fa6ce17cfb3":[3,0,0,1,0,2], +"classspark_1_1dse_1_1Benchmark.html#aa21c70d1c142db7c1ee3fb81fc5e81c5":[3,0,0,1,0,3], +"classspark_1_1dse_1_1DseParameters.html":[3,0,0,1,1], +"classspark_1_1dse_1_1DseParameters.html#a312071f767470577bf393c3d190d72bd":[3,0,0,1,1,3], +"classspark_1_1dse_1_1DseParameters.html#a407b33c26d55c84c1436a3535576f380":[3,0,0,1,1,0], +"classspark_1_1dse_1_1DseParameters.html#a903571a00336065eb295887170686770":[3,0,0,1,1,1], +"classspark_1_1dse_1_1DseParameters.html#af54d3b84a9781ce472374fb4d4dbecb1":[3,0,0,1,1,2], +"classspark_1_1dse_1_1DseResult.html":[3,0,0,1,2], +"classspark_1_1dse_1_1DseResult.html#a1d1342fbcf4346f77de3cb29c23622ba":[3,0,0,1,2,0], +"classspark_1_1dse_1_1DseResult.html#a2a23395d873d124a4da624ed94ab4d76":[3,0,0,1,2,2], +"classspark_1_1dse_1_1DseResult.html#a797ff2ef1c189cb2cff7fa18cfede2a9":[3,0,0,1,2,3], +"classspark_1_1dse_1_1DseResult.html#ac8b6f838e0112d684058ee911b9e2ab5":[3,0,0,1,2,1], +"classspark_1_1dse_1_1SparkDse.html":[3,0,0,1,3], +"classspark_1_1dse_1_1SparkDse.html#abefe26e252597bb164ef8236e5460210":[3,0,0,1,3,1], +"classspark_1_1dse_1_1SparkDse.html#acf3f66892ae92b0d4c4d0e250da9ebde":[3,0,0,1,3,0], +"classspark_1_1execution_1_1SharedLibLoader.html":[3,0,0,2,0], +"classspark_1_1execution_1_1SharedLibLoader.html#a024d798f951a004334aeaddc7b086f61":[3,0,0,2,0,1], +"classspark_1_1execution_1_1SharedLibLoader.html#a1a9fe4ed515e64c4b5a0cd24233599e7":[3,0,0,2,0,4], +"classspark_1_1execution_1_1SharedLibLoader.html#aa04c935e0dd9c179246655474c951ad1":[3,0,0,2,0,2], +"classspark_1_1execution_1_1SharedLibLoader.html#aaa01ed393ccd28d202950dca243389a8":[3,0,0,2,0,3], +"classspark_1_1execution_1_1SharedLibLoader.html#ab53348ee739c8cae93b1be38e0ddb342":[3,0,0,2,0,0], +"classspark_1_1execution_1_1SharedLibLoader.html#af01a44b23ea21a6f653194aa8f312ee2":[3,0,0,2,0,5], +"classspark_1_1io_1_1MmReader.html":[3,0,0,4,0], +"classspark_1_1io_1_1MmReader.html#a18da82e5b71af2ce6f5946f7b66f8cd5":[3,0,0,4,0,2], +"classspark_1_1io_1_1MmReader.html#a339fd452b0db39fdabb6fc9b9994624d":[3,0,0,4,0,16], +"classspark_1_1io_1_1MmReader.html#a3575f75893a9ece651ef17b111d959fd":[3,0,0,4,0,7], +"classspark_1_1io_1_1MmReader.html#a3698c442e4b847c2f1479dd11fef9a15":[3,0,0,4,0,13], +"classspark_1_1io_1_1MmReader.html#a3aa3d0ea6867f58d326674b632f7b045":[3,0,0,4,0,8], +"classspark_1_1io_1_1MmReader.html#a43348db7743f21cff1854197cf7f9819":[3,0,0,4,0,0], +"classspark_1_1io_1_1MmReader.html#a4b6628e5d0886325e152e8ffdae1964c":[3,0,0,4,0,1], +"classspark_1_1io_1_1MmReader.html#a55b7ae127a34af4d09bca7079c443866":[3,0,0,4,0,12], +"classspark_1_1io_1_1MmReader.html#a5f474abc81a8d634a45b80750d816df9":[3,0,0,4,0,6], +"classspark_1_1io_1_1MmReader.html#a65848ca959d0961ab594205b40335072":[3,0,0,4,0,9], +"classspark_1_1io_1_1MmReader.html#a73bef88acba33d35b9f714365456ab39":[3,0,0,4,0,4], +"classspark_1_1io_1_1MmReader.html#a7b783ac977c5badcd28069cea5368adc":[3,0,0,4,0,11], +"classspark_1_1io_1_1MmReader.html#a853387b508034ba82ede19c2500c5030":[3,0,0,4,0,14], +"classspark_1_1io_1_1MmReader.html#a8bf3a76c76dad47d667f28052adbfaa5":[3,0,0,4,0,10], +"classspark_1_1io_1_1MmReader.html#abaeb856fe8052dada1094aeeba575482":[3,0,0,4,0,15], +"classspark_1_1io_1_1MmReader.html#ae0ed6d286d9c5c08ad3bd3e910f3554a":[3,0,0,4,0,5], +"classspark_1_1io_1_1MmReader.html#afff251fc01bc6a47007e5b562f002ed3":[3,0,0,4,0,3], +"classspark_1_1model_1_1ImplementationParameters.html":[3,0,0,5,1], +"classspark_1_1model_1_1ImplementationParameters.html#a0e71a3875d830daed887869a9f86c374":[3,0,0,5,1,2], +"classspark_1_1model_1_1ImplementationParameters.html#a7935fb3d5d9d782c66530a541d6f705c":[3,0,0,5,1,3], +"classspark_1_1model_1_1ImplementationParameters.html#ac82ef6a8d3fd73cd40fff27d1ec9b943":[3,0,0,5,1,4], +"classspark_1_1model_1_1ImplementationParameters.html#acf5199cb8cb126ddb4977b02f1cebddd":[3,0,0,5,1,1], +"classspark_1_1model_1_1ImplementationParameters.html#af2b90d99043967462da25c003c7f7e17":[3,0,0,5,1,0], +"classspark_1_1model_1_1LogicResourceUsage.html":[3,0,0,5,0], +"classspark_1_1model_1_1LogicResourceUsage.html#a0f6ff26d2cab74fc11bca87f60bdce35":[3,0,0,5,0,7], +"classspark_1_1model_1_1LogicResourceUsage.html#a303a7df506637540e2b7eb4d871f9029":[3,0,0,5,0,2], +"classspark_1_1model_1_1LogicResourceUsage.html#a48bf8cd8225540f1fa0da63719657e6a":[3,0,0,5,0,5], +"classspark_1_1model_1_1LogicResourceUsage.html#a5b88cae38db7b5ab535f4a17fa643a15":[3,0,0,5,0,0], +"classspark_1_1model_1_1LogicResourceUsage.html#a620a5a18ce206d8dbc7cd5adbcb48d7b":[3,0,0,5,0,11], +"classspark_1_1model_1_1LogicResourceUsage.html#a64aef671cc1360f9c760eddecc95dfe5":[3,0,0,5,0,1] +}; diff --git a/docs/navtreeindex1.js b/docs/navtreeindex1.js new file mode 100644 index 0000000..3b06cc6 --- /dev/null +++ b/docs/navtreeindex1.js @@ -0,0 +1,253 @@ +var NAVTREEINDEX1 = +{ +"classspark_1_1model_1_1LogicResourceUsage.html#a9e1bfd322976881da5fc6d0501ecbf32":[3,0,0,5,0,8], +"classspark_1_1model_1_1LogicResourceUsage.html#accca14ba38323db0242d77a654b22520":[3,0,0,5,0,3], +"classspark_1_1model_1_1LogicResourceUsage.html#ad67dec36e8bd5ba1937687b538d97a8e":[3,0,0,5,0,10], +"classspark_1_1model_1_1LogicResourceUsage.html#adb488affc0a051d6c8458d9e2a35d201":[3,0,0,5,0,9], +"classspark_1_1model_1_1LogicResourceUsage.html#ae939cb8a86e0fe1209d312317627d3a1":[3,0,0,5,0,4], +"classspark_1_1model_1_1LogicResourceUsage.html#aea20a053d751c2de91d491e38688f776":[3,0,0,5,0,6], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html":[3,0,0,6,1], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a0882ce5039b4ac50a3f2e2471645abe5":[3,0,0,6,1,4], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a0d16762eb3714e898a6d30e71b34c377":[3,0,0,6,1,2], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a1923e1b519a07ca526ada5cee811f955":[3,0,0,6,1,14], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a1ce48c5da7060505ad44f95c2655c06a":[3,0,0,6,1,15], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a42d52b9e6c121e9284bfc5bbae863e75":[3,0,0,6,1,17], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a531009b6858338ca6fcc646d1e7d0d85":[3,0,0,6,1,20], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a5519058ca752a5dd30d53fc1d8280530":[3,0,0,6,1,18], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a69fd21c14863cb756e3e1f1014068a97":[3,0,0,6,1,9], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a6a77e31894e5bdd3d76a955484c942fb":[3,0,0,6,1,6], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a6e776af1e59842d77e5c52b630c7285e":[3,0,0,6,1,0], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a71dba3c10ed1d9a8ba37d5b757f702c8":[3,0,0,6,1,1], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a7b466d50691186b19e72887aa7cd4227":[3,0,0,6,1,11], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a903b93b96dad8d74bffb0ba1e3ec7937":[3,0,0,6,1,16], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a96cbb988649950498d305ac895ea2f6f":[3,0,0,6,1,3], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a9cb503ef9f3172c73bd3d2fc9d4564d2":[3,0,0,6,1,13], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ab8bae0bfea8769c07ec9e24b1813b204":[3,0,0,6,1,10], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#abdaf540e5d182a8956fcb1ce78d0d777":[3,0,0,6,1,5], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#abe0a820e9d0d36ee8586d0abdca0eed5":[3,0,0,6,1,7], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ac32c1ffb1ce8a2ae4d4592a463c7d7aa":[3,0,0,6,1,8], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ad67d01b403f7203c61c55866e0409257":[3,0,0,6,1,19], +"classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#added3b47d76e9b08f06096ad7b27c133":[3,0,0,6,1,12], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html":[3,0,0,6,2], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a105adcf3d8937093d294b93efc880064":[3,0,0,6,2,1], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a1c25321fdf7068a9db469fb8cf62a0f5":[3,0,0,6,2,4], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a209c982b13e58fedc9c9acbfd8a84440":[3,0,0,6,2,5], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a263a1bdfe74153bfd281e526423d1d40":[3,0,0,6,2,3], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a4b551b84b89443f0d096740ca64c63c3":[3,0,0,6,2,9], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a51277607133bd9efc7d05df0c398923a":[3,0,0,6,2,8], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a9d417edc09f273a58dea1cd9aa866679":[3,0,0,6,2,2], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#acd57170f2d13598d15f54973d4a579b9":[3,0,0,6,2,7], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#ae26d5df16fcf6c40749e666ffe3257b3":[3,0,0,6,2,6], +"classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#af33e3e01c1d5fc32e69cb23c422e44d5":[3,0,0,6,2,0], +"classspark_1_1runtime_1_1ImplementationLoader.html":[3,0,0,6,3], +"classspark_1_1runtime_1_1ImplementationLoader.html#a4d12a2b939120bb3f16a5603824c0189":[3,0,0,6,3,2], +"classspark_1_1runtime_1_1ImplementationLoader.html#a878f373604956baae5db5198e9689132":[3,0,0,6,3,0], +"classspark_1_1runtime_1_1ImplementationLoader.html#ac74997119774d1820894780fa2841ef4":[3,0,0,6,3,1], +"classspark_1_1runtime_1_1SpmvImplementationLoader.html":[3,0,0,6,4], +"classspark_1_1runtime_1_1SpmvImplementationLoader.html#a074828b53d9f547867fe20e1fe55f5b9":[3,0,0,6,4,0], +"classspark_1_1runtime_1_1SpmvImplementationLoader.html#a72c4e570271b170119909c81a6729c7d":[3,0,0,6,4,2], +"classspark_1_1runtime_1_1SpmvImplementationLoader.html#a8ff8e4c8507363cc1c252ccb3b01e6f5":[3,0,0,6,4,1], +"classspark_1_1sparse_1_1SparkCooMatrix.html":[3,0,0,7,0], +"classspark_1_1sparse_1_1SparkCooMatrix.html#a4a0b72ae9e7b1deed9b6228cf40e9f32":[3,0,0,7,0,2], +"classspark_1_1sparse_1_1SparkCooMatrix.html#a4a9de150aa2a040306403bc97687b40f":[3,0,0,7,0,0], +"classspark_1_1sparse_1_1SparkCooMatrix.html#a582426cd2434334fe15c5f3c23aa0c54":[3,0,0,7,0,4], +"classspark_1_1sparse_1_1SparkCooMatrix.html#ad81f39eca4950c1e4623cdb120f094b0":[3,0,0,7,0,1], +"classspark_1_1sparse_1_1SparkCooMatrix.html#ae3892beabaaf78e2e9a67269c22c8f8e":[3,0,0,7,0,3], +"classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html":[3,0,0,8,3], +"classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html#adaa588ced5dd2ce56da4cc095c88c4c3":[3,0,0,8,3,0], +"classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html":[3,0,0,8,2], +"classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html#a55a4b35ed35b40ee3f712024d9b45206":[3,0,0,8,2,0], +"classspark_1_1sparse__linear__solvers_1_1EigenSolver.html":[3,0,0,8,1], +"classspark_1_1sparse__linear__solvers_1_1EigenSolver.html#a3c0f45b239cb7127fe8da07673cbfd52":[3,0,0,8,1,0], +"classspark_1_1sparse__linear__solvers_1_1Solver.html":[3,0,0,8,0], +"classspark_1_1sparse__linear__solvers_1_1Solver.html#a5922d0592d66ae9966bfbf4bb78a1c55":[3,0,0,8,0,0], +"classspark_1_1sparse__linear__solvers_1_1Solver.html#ae5a1a27b9213613cf6d67dc6e635f42d":[3,0,0,8,0,1], +"classspark_1_1sparse__linear__solvers_1_1Solver.html#aeab2189d0b72aaeda51f9defb2fd64b4":[3,0,0,8,0,2], +"classspark_1_1spmv_1_1FstSpmvArchitecture.html":[3,0,0,9,4], +"classspark_1_1spmv_1_1FstSpmvArchitecture.html#a328db4b67f8f9c6763117c8a82f81577":[3,0,0,9,4,2], +"classspark_1_1spmv_1_1FstSpmvArchitecture.html#a90397fa9aa179cb86021fac39afc3f27":[3,0,0,9,4,3], +"classspark_1_1spmv_1_1FstSpmvArchitecture.html#ab1db27169d0bc9921d4c5048592e3d24":[3,0,0,9,4,0], +"classspark_1_1spmv_1_1FstSpmvArchitecture.html#add2548a017451c5caae61cd3e9021467":[3,0,0,9,4,1], +"classspark_1_1spmv_1_1PrefetchingArchitecture.html":[3,0,0,9,6], +"classspark_1_1spmv_1_1PrefetchingArchitecture.html#a12e8b6b4d9135f559d1800dacf5f25f1":[3,0,0,9,6,1], +"classspark_1_1spmv_1_1PrefetchingArchitecture.html#a91515587bbfe2ac62a891f17363d508f":[3,0,0,9,6,2], +"classspark_1_1spmv_1_1PrefetchingArchitecture.html#ae614b247e6e43b41b6ee2ec4565a55c6":[3,0,0,9,6,0], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html":[3,0,0,9,2], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a0fd07f4d1e241d9bb5e525fc1f9c4ab2":[3,0,0,9,2,21], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a1b45bc81758c2e9ef21e6620d8fbd4db":[3,0,0,9,2,10], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a2443f3bebc9b04350fe736fd17b199d2":[3,0,0,9,2,14], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a254d3c473b526699bdf5d7994da756b9":[3,0,0,9,2,1], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3aed67e40e87a0ea0dd79fd30f76a7cf":[3,0,0,9,2,18], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3c5900f38fdfafa6481508d9c90819ff":[3,0,0,9,2,11], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a4083f351467c940c767fa9122d3a727c":[3,0,0,9,2,23], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a577fd6e73f088b437a5632ba3ca89c61":[3,0,0,9,2,25], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a7dd9917bb3685f9235972026c3d72c49":[3,0,0,9,2,12], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a84c629c0046f93dbd7892d970650c767":[3,0,0,9,2,2], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a8c7ca2d2ac7284e46506f23728dde499":[3,0,0,9,2,4], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a90e1699cd2d8ee0abd21e4461d8c7d32":[3,0,0,9,2,27], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9acabcfa6d09c76000290982c33a36f0":[3,0,0,9,2,20], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9ff8f85bf609bf02b087b39674dc1b25":[3,0,0,9,2,17], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ab2b61b0a02aa4dfa40a38ad98a84bbb4":[3,0,0,9,2,3], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#abb11d2ac348c1bdc14ebb7f367b4db5d":[3,0,0,9,2,15], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac30acafe28fa8aefac50da03b867f928":[3,0,0,9,2,13], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac3cd16da984d35b091f0833edd919a56":[3,0,0,9,2,6], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac51f502488f2b7d2dbffb5a9939b4271":[3,0,0,9,2,26], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac91efdbe0c3de7a45edde0052f478638":[3,0,0,9,2,8], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac9cd3ac1f8a7ff7c2634d707a2d33356":[3,0,0,9,2,7], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ad109173c60a0469e99d188010e09fa9c":[3,0,0,9,2,9], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae0357e972b3380edb382868d3616542d":[3,0,0,9,2,0], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae295666cf3885149b0e37766c4feffc7":[3,0,0,9,2,24], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aeda39c3024d1efa75e0714e25a8d919c":[3,0,0,9,2,16], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aedb22fc8e413dd6bc2c54d74bf03ed2d":[3,0,0,9,2,5], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af12e62e4f0c6a5d0f6e37bf3a326956b":[3,0,0,9,2,19], +"classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af57f57adeebaae9edeb9db32b9579b28":[3,0,0,9,2,22], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html":[3,0,0,9,3], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a045eb9b1b8b025ae7ebff4a4f6cd3246":[3,0,0,9,3,0], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a2250dba56bfc36df530fcba2ae8e5573":[3,0,0,9,3,8], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a50a6bb214092c694e0c3e8b9978f607c":[3,0,0,9,3,3], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a5eb1ea4c3054ef0b99c199732c004195":[3,0,0,9,3,4], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a618c39ec4cde84cb595f089fb881ce7c":[3,0,0,9,3,6], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#ab7dd6b46e80d1fe85694b964ce761e85":[3,0,0,9,3,5], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abd7023a217d39076e9c47a4226580c4f":[3,0,0,9,3,1], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abde19171c284739290c7a7c145d7deb7":[3,0,0,9,3,2], +"classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#acaac03fcff370b3f0945823b1f13a90f":[3,0,0,9,3,7], +"classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html":[3,0,0,9,5], +"classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#a0336d2d0c76a4ad1586b904bafaefb3d":[3,0,0,9,5,2], +"classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ab8dadd53ee054e2152cd86b979b4304e":[3,0,0,9,5,1], +"classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ad7f11ef476f1343c237b4bd41f19559b":[3,0,0,9,5,0], +"classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#adefa266d246a395b8a67a83912272e2d":[3,0,0,9,5,4], +"classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ae9604bff9ee8258920e8b599e0bb1a1d":[3,0,0,9,5,3], +"classspark_1_1spmv_1_1SpmvArchitecture.html":[3,0,0,9,7], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a113cc5b7d55d561f862e007e0252cc82":[3,0,0,9,7,10], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a1be404ebea121baa4b28f1548ad6207d":[3,0,0,9,7,7], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a1d557e23529a5040a858beafb9971acc":[3,0,0,9,7,1], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a31274a6b708f9db92d810d2a161d812a":[3,0,0,9,7,8], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a3eafac9b3bffd4a17d86a6f99eb97503":[3,0,0,9,7,6], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a4dfdec260889947cf9844eed98e5dbbe":[3,0,0,9,7,3], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a4f14b957c8585ed81ff2af46ab26340f":[3,0,0,9,7,11], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a701b198937568b2f47f4beb05dc349cc":[3,0,0,9,7,9], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a745a51a90e0d0e027be6f927e41e267a":[3,0,0,9,7,5], +"classspark_1_1spmv_1_1SpmvArchitecture.html#a7cd5036aa7c21a4439b8ddfb8a969bf0":[3,0,0,9,7,12], +"classspark_1_1spmv_1_1SpmvArchitecture.html#aa3aebf2b76c95d7b96e37865637a1104":[3,0,0,9,7,2], +"classspark_1_1spmv_1_1SpmvArchitecture.html#aa6bc86fc3b1f6d37836c7219d00c49a0":[3,0,0,9,7,13], +"classspark_1_1spmv_1_1SpmvArchitecture.html#abec906effc222dd9f12781c75e3b40c1":[3,0,0,9,7,0], +"classspark_1_1spmv_1_1SpmvArchitecture.html#acb14edc8b1c5a5e961304e3bf92c97c7":[3,0,0,9,7,14], +"classspark_1_1spmv_1_1SpmvArchitecture.html#af60acfd57143cbb06c582bd6c1e6a3a9":[3,0,0,9,7,4], +"classspark_1_1spmv_1_1SpmvArchitectureSpace.html":[3,0,0,9,8], +"classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a414ec6872fdf32550af1a6efbb4394d5":[3,0,0,9,8,0], +"classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a76b80d8f6d287bf6b90f38a0ac215354":[3,0,0,9,8,2], +"classspark_1_1spmv_1_1SpmvArchitectureSpace.html#aa9e55d9a1af4b951561705869dd2e2fe":[3,0,0,9,8,1], +"dir_00a81d8b20939ac7c0ce0f7cdde0e98b.html":[4,0,1,0,0], +"dir_16dc92632bab467dc50b01bd02b3341a.html":[4,0,1,2], +"dir_376f1c4177942cba0305052d5eaaa828.html":[4,0,1,1,0], +"dir_55daf1889a6971c13f7bc2c2ab706314.html":[4,0,1,1], +"dir_68267d1309a1af8e8297ef4c3efbcdba.html":[4,0,1], +"dir_6d2d4b597c0c9fbf0dac624a287f2dec.html":[4,0,1,0], +"dir_817fd82c291ca2ce5189d4384ec10041.html":[4,0,1,5], +"dir_bcdd1c0198fc998763f86146a43d3c64.html":[4,0,0,0], +"dir_bd0755c95a42e835fb06f38bbeb1d6ed.html":[4,0,1,4], +"dir_d44c64559bbebec7f509842c48db8b23.html":[4,0,0], +"dir_d7c482895ed73b33d89221a7692a7a0a.html":[4,0,1,3], +"dir_d8b7011e84264c6173d8b11c4e58b2d3.html":[4,0,1,5,0], +"dir_e1e695598025e13caf4d9e666dd56479.html":[4,0,0,0,0], +"enumParallelCsrReadControl_1_1Mode.html":[3,0,4,0], +"enumParallelCsrReadControl_1_1Mode.html#a0bf9792309f43608f812f047b288bcd9":[3,0,4,0,2], +"enumParallelCsrReadControl_1_1Mode.html#a1fe6df0a1446f33e43e80b9ad3e0cd49":[3,0,4,0,1], +"enumParallelCsrReadControl_1_1Mode.html#a4af99d8c25b54128c920d384091485d0":[3,0,4,0,0], +"enumParallelCsrReadControl_1_1Mode.html#aa2414caa80d02424c7a80c3946160a2d":[3,0,4,0,3], +"files.html":[4,0], +"functions.html":[3,3,0], +"functions.html":[3,3,0,0], +"functions_b.html":[3,3,0,1], +"functions_c.html":[3,3,0,2], +"functions_d.html":[3,3,0,3], +"functions_e.html":[3,3,0,4], +"functions_f.html":[3,3,0,5], +"functions_func.html":[3,3,1], +"functions_g.html":[3,3,0,6], +"functions_h.html":[3,3,0,7], +"functions_i.html":[3,3,0,8], +"functions_l.html":[3,3,0,9], +"functions_m.html":[3,3,0,10], +"functions_n.html":[3,3,0,11], +"functions_o.html":[3,3,0,12], +"functions_p.html":[3,3,0,13], +"functions_r.html":[3,3,0,14], +"functions_s.html":[3,3,0,15], +"functions_t.html":[3,3,0,16], +"functions_type.html":[3,3,3], +"functions_u.html":[3,3,0,17], +"functions_v.html":[3,3,0,18], +"functions_vars.html":[3,3,2], +"functions_w.html":[3,3,0,19], +"functions_z.html":[3,3,0,20], +"functions_~.html":[3,3,0,21], +"globals.html":[4,1,0], +"globals_func.html":[4,1,1], +"globals_type.html":[4,1,3], +"globals_vars.html":[4,1,2], +"hierarchy.html":[3,2], +"index.html":[], +"main_8cpp.html":[4,0,1,6], +"main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627":[4,0,1,6,2], +"main_8cpp.html#a75bc35b120d6b6f0834ae4d32856036c":[4,0,1,6,0], +"main_8cpp.html#a84bdcf570024843f14fc9624770bf035":[4,0,1,6,1], +"main_8cpp.html#a8d444a99dbaa5e94893a71e578e1d902":[4,0,1,6,3], +"md_README.html":[0], +"md_docs_user_guide.html":[1], +"namespacemembers.html":[2,1,0], +"namespacemembers_func.html":[2,1,1], +"namespacemembers_type.html":[2,1,3], +"namespacemembers_vars.html":[2,1,2], +"namespaces.html":[2,0], +"namespacespark.html":[3,0,0], +"namespacespark.html":[2,0,0], +"namespacespark_1_1converters.html":[2,0,0,0], +"namespacespark_1_1converters.html":[3,0,0,0], +"namespacespark_1_1dse.html":[2,0,0,1], +"namespacespark_1_1dse.html":[3,0,0,1], +"namespacespark_1_1execution.html":[3,0,0,2], +"namespacespark_1_1execution.html":[2,0,0,2], +"namespacespark_1_1file__utils.html":[2,0,0,3], +"namespacespark_1_1file__utils.html":[3,0,0,3], +"namespacespark_1_1io.html":[3,0,0,4], +"namespacespark_1_1io.html":[2,0,0,4], +"namespacespark_1_1model.html":[2,0,0,5], +"namespacespark_1_1model.html":[3,0,0,5], +"namespacespark_1_1runtime.html":[3,0,0,6], +"namespacespark_1_1runtime.html":[2,0,0,6], +"namespacespark_1_1sparse.html":[2,0,0,7], +"namespacespark_1_1sparse.html":[3,0,0,7], +"namespacespark_1_1sparse__linear__solvers.html":[2,0,0,8], +"namespacespark_1_1sparse__linear__solvers.html":[3,0,0,8], +"namespacespark_1_1spmv.html":[2,0,0,9], +"namespacespark_1_1spmv.html":[3,0,0,9], +"namespacespark_1_1userio.html":[3,0,0,10], +"namespacespark_1_1userio.html":[2,0,0,10], +"namespacespark_1_1utils.html":[3,0,0,11], +"namespacespark_1_1utils.html":[2,0,0,11], +"pages.html":[], +"structPartitionWriteResult.html":[3,0,5], +"structPartitionWriteResult.html#a1b1d42061ca85c85c68b12e3405743e5":[3,0,5,0], +"structPartitionWriteResult.html#a2a1d5b0084ae204040066b7fe3a33b07":[3,0,5,6], +"structPartitionWriteResult.html#a2ca20725ee8dcb4aad19eac57bc5c957":[3,0,5,3], +"structPartitionWriteResult.html#a389a493dd0f322031a4b176ad7251cc1":[3,0,5,2], +"structPartitionWriteResult.html#a744ceeec06294048f07cd552a340118f":[3,0,5,1], +"structPartitionWriteResult.html#a7cc1bba9c690f9a66fa15add6d1763e6":[3,0,5,4], +"structPartitionWriteResult.html#a93f6f5c23c1f0f7e18f319f3e33aee61":[3,0,5,5], +"structSpmvEqual.html":[3,0,7], +"structSpmvEqual.html#aad8f140c593abd6997a30cf6833dcfc2":[3,0,7,0], +"structSpmvHash.html":[3,0,8], +"structSpmvHash.html#a4655e26aca9f73c92dcbc679f7222e83":[3,0,8,0], +"structspark_1_1runtime_1_1GeneratedImplementation.html":[3,0,0,6,0], +"structspark_1_1runtime_1_1GeneratedImplementation.html#a285ba0d76acd1a1da62204158aec3625":[3,0,0,6,0,0], +"structspark_1_1spmv_1_1Partition.html":[3,0,0,9,1], +"structspark_1_1spmv_1_1Partition.html#a087b0019edb1ad8ef824ed7e26e19849":[3,0,0,9,1,12], +"structspark_1_1spmv_1_1Partition.html#a11004c0342811a57bba97bf31c823d64":[3,0,0,9,1,0], +"structspark_1_1spmv_1_1Partition.html#a2256e3b766ab51acd2be27a1975f0ed9":[3,0,0,9,1,11], +"structspark_1_1spmv_1_1Partition.html#a3084298925d168aafc1affa127bb4ef2":[3,0,0,9,1,7], +"structspark_1_1spmv_1_1Partition.html#a4653f40c7d63f4c663190b209b6373d7":[3,0,0,9,1,8], +"structspark_1_1spmv_1_1Partition.html#a59dfdff4762b092034d952fe2e81f95c":[3,0,0,9,1,1], +"structspark_1_1spmv_1_1Partition.html#a611bc144e0b0f3e4075e4fa27137669f":[3,0,0,9,1,9], +"structspark_1_1spmv_1_1Partition.html#a858144bacceb65f6b0c6caab04b0308b":[3,0,0,9,1,6] +}; diff --git a/docs/navtreeindex2.js b/docs/navtreeindex2.js new file mode 100644 index 0000000..5c256a3 --- /dev/null +++ b/docs/navtreeindex2.js @@ -0,0 +1,24 @@ +var NAVTREEINDEX2 = +{ +"structspark_1_1spmv_1_1Partition.html#a8aa3fa9f9be247ab7e092f968122e3a7":[3,0,0,9,1,2], +"structspark_1_1spmv_1_1Partition.html#abf0e3c933b315809c50c6e68506bb174":[3,0,0,9,1,10], +"structspark_1_1spmv_1_1Partition.html#ac28e1c351c409032a1166678f800141b":[3,0,0,9,1,3], +"structspark_1_1spmv_1_1Partition.html#ae134d0793283258fb0f95433d5448bb2":[3,0,0,9,1,4], +"structspark_1_1spmv_1_1Partition.html#ae9b189f7ec6c8fbd47202945dc3fef23":[3,0,0,9,1,5], +"structspark_1_1spmv_1_1indptr__value.html":[3,0,0,9,0], +"structspark_1_1spmv_1_1indptr__value.html#a1bb3b22d80c09f283b847a1fb907a462":[3,0,0,9,0,1], +"structspark_1_1spmv_1_1indptr__value.html#abf5ac17c5a8b83c68b8e421c9fb2b9f4":[3,0,0,9,0,0], +"structspark_1_1spmv_1_1indptr__value.html#ae0073c7eec3c96ddf6ce38dedc3312b1":[3,0,0,9,0,3], +"structspark_1_1spmv_1_1indptr__value.html#ae450af92f13728c597605f909eb7f3b6":[3,0,0,9,0,2], +"structspark_1_1utils_1_1Range.html":[3,0,0,11,0], +"structspark_1_1utils_1_1Range.html#a014c4c4aa8e0f0c9f9aaf954d3e8fba7":[3,0,0,11,0,7], +"structspark_1_1utils_1_1Range.html#a05c07c975dd7bf3ba8a097044258aa5a":[3,0,0,11,0,4], +"structspark_1_1utils_1_1Range.html#a07fd2cc26cde356c3f1db74bedd31eb5":[3,0,0,11,0,6], +"structspark_1_1utils_1_1Range.html#a2e5c2a068b494d96fa3bb9bc81f3b98b":[3,0,0,11,0,2], +"structspark_1_1utils_1_1Range.html#a6a3850b17634041447d86797929e9f2c":[3,0,0,11,0,1], +"structspark_1_1utils_1_1Range.html#a8623004edfe9d73657f831d1392fe579":[3,0,0,11,0,3], +"structspark_1_1utils_1_1Range.html#aa944c6fbb45db229c82ab2af62836237":[3,0,0,11,0,8], +"structspark_1_1utils_1_1Range.html#adafa797e5802e578a9fffc6fc25b6a24":[3,0,0,11,0,9], +"structspark_1_1utils_1_1Range.html#ae03ddb2296e4c08b7756adc10847b4b9":[3,0,0,11,0,5], +"structspark_1_1utils_1_1Range.html#af0ce17db5625ad22c87532891f4b890a":[3,0,0,11,0,0] +}; diff --git a/docs/open.png b/docs/open.png new file mode 100644 index 0000000000000000000000000000000000000000..30f75c7efe2dd0c9e956e35b69777a02751f048b GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{VPM$7~Ar*{o?;hlAFyLXmaDC0y znK1_#cQqJWPES%4Uujug^TE?jMft$}Eq^WaR~)%f)vSNs&gek&x%A9X9sM + + + + + +Spark: Related Pages + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+ + + +
ospark
\user_guide
+
+
+
+ + + + diff --git a/docs/resize.js b/docs/resize.js new file mode 100644 index 0000000..304fcb6 --- /dev/null +++ b/docs/resize.js @@ -0,0 +1,97 @@ +var cookie_namespace = 'doxygen'; +var sidenav,navtree,content,header; + +function readCookie(cookie) +{ + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) + { + var index = document.cookie.indexOf(myCookie); + if (index != -1) + { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) + { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + return 0; +} + +function writeCookie(cookie, val, expiration) +{ + if (val==undefined) return; + if (expiration == null) + { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; +} + +function resizeWidth() +{ + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + writeCookie('width',sidenavWidth, null); +} + +function restoreWidth(navWidth) +{ + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+6+"px"}); + sidenav.css({width:navWidth + "px"}); +} + +function resizeHeight() +{ + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + content.css({height:windowHeight + "px"}); + navtree.css({height:windowHeight + "px"}); + sidenav.css({height:windowHeight + "px",top: headerHeight+"px"}); +} + +function initResizable() +{ + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(window).resize(function() { resizeHeight(); }); + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(document).bind('touchmove',function(e){ + var device = navigator.userAgent.toLowerCase(); + var ios = device.match(/(iphone|ipod|ipad)/); + if (ios) { + try { + var target = e.target; + while (target) { + if ($(target).css('-webkit-overflow-scrolling')=='touch') return; + target = target.parentNode; + } + e.preventDefault(); + } catch(err) { + e.preventDefault(); + } + } + }); +} + + diff --git a/docs/search/all_0.html b/docs/search/all_0.html new file mode 100644 index 0000000..17b6da8 --- /dev/null +++ b/docs/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_0.js b/docs/search/all_0.js new file mode 100644 index 0000000..e671369 --- /dev/null +++ b/docs/search/all_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5fattribute_5f_5f',['__attribute__',['../namespacespark_1_1spmv.html#a8ad7d0fb384bbf6ef88a68b8cad95182',1,'spark::spmv::__attribute__()'],['../namespacespark_1_1spmv.html#a8ed4b5e7d25d6d210e3f1b7f09a84c7a',1,'spark::spmv::__attribute__((packed))']]] +]; diff --git a/docs/search/all_1.html b/docs/search/all_1.html new file mode 100644 index 0000000..e290644 --- /dev/null +++ b/docs/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_1.js b/docs/search/all_1.js new file mode 100644 index 0000000..2ed6b98 --- /dev/null +++ b/docs/search/all_1.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['add_5fmatrix_5fpath',['add_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a18854065058a9f70a0fbb4127212d81f',1,'spark::dse::Benchmark']]], + ['addcomputepipe',['addComputePipe',['../classSpmvManager.html#ac993f1b6041594ae5bd7211d4f498702',1,'SpmvManager']]], + ['addpaddingkernel',['addPaddingKernel',['../classSpmvManager.html#ab025ef7147d5d645028cc92b7d1a513f',1,'SpmvManager']]], + ['addresst',['addressT',['../classSpmvCacheKernel.html#a33ae456838bd9708e94df43436703305',1,'SpmvCacheKernel']]], + ['addunpaddingkernel',['addUnpaddingKernel',['../classSpmvManager.html#ae2858b4c2bd5a17d5710d0d34429e2b3',1,'SpmvManager']]], + ['align',['align',['../namespacespark_1_1spmv.html#abaf9d6fbe5cd5df67ea6314fccd769e0',1,'spark::spmv::align()'],['../Spmv_8cpp.html#af110ee89567b09ff002ff971364c551d',1,'align(): Spmv.cpp']]], + ['analyze',['analyze',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#a5922d0592d66ae9966bfbf4bb78a1c55',1,'spark::sparse_linear_solvers::Solver']]], + ['architecturewithid',['architectureWithId',['../classspark_1_1runtime_1_1SpmvImplementationLoader.html#a8ff8e4c8507363cc1c252ccb3b01e6f5',1,'spark::runtime::SpmvImplementationLoader']]], + ['architecturewithparams',['architectureWithParams',['../classspark_1_1runtime_1_1SpmvImplementationLoader.html#a72c4e570271b170119909c81a6729c7d',1,'spark::runtime::SpmvImplementationLoader']]], + ['at_5fstart',['at_start',['../structspark_1_1utils_1_1Range.html#a2e5c2a068b494d96fa3bb9bc81f3b98b',1,'spark::utils::Range']]], + ['available_5flibraries',['available_libraries',['../classspark_1_1execution_1_1SharedLibLoader.html#a024d798f951a004334aeaddc7b086f61',1,'spark::execution::SharedLibLoader']]] +]; diff --git a/docs/search/all_10.html b/docs/search/all_10.html new file mode 100644 index 0000000..c55c836 --- /dev/null +++ b/docs/search/all_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_10.js b/docs/search/all_10.js new file mode 100644 index 0000000..82bf6e1 --- /dev/null +++ b/docs/search/all_10.js @@ -0,0 +1,75 @@ +var searchData= +[ + ['converters',['converters',['../namespacespark_1_1converters.html',1,'spark']]], + ['dse',['dse',['../namespacespark_1_1dse.html',1,'spark']]], + ['execution',['execution',['../namespacespark_1_1execution.html',1,'spark']]], + ['file_5futils',['file_utils',['../namespacespark_1_1file__utils.html',1,'spark']]], + ['io',['io',['../namespacespark_1_1io.html',1,'spark']]], + ['spark',['spark',['../md_README.html',1,'']]], + ['model',['model',['../namespacespark_1_1model.html',1,'spark']]], + ['runtime',['runtime',['../namespacespark_1_1runtime.html',1,'spark']]], + ['selectvalues',['selectValues',['../classSpmvCacheKernel.html#a3864c0d130426bcad05724a9a864c7db',1,'SpmvCacheKernel']]], + ['setupcomputepipe',['setUpComputePipe',['../classSpmvManager.html#a8f777c0e6b5572b85bf90427b1419039',1,'SpmvManager']]], + ['setupunpaddingkernel',['setupUnpaddingKernel',['../classSpmvManager.html#a42510179831b9c539721ffbf0506c0f2',1,'SpmvManager']]], + ['sharedlibloader',['SharedLibLoader',['../classspark_1_1execution_1_1SharedLibLoader.html',1,'spark::execution']]], + ['sharedlibloader',['SharedLibLoader',['../classspark_1_1execution_1_1SharedLibLoader.html#ab53348ee739c8cae93b1be38e0ddb342',1,'spark::execution::SharedLibLoader']]], + ['sharedlibloader_2ecpp',['SharedLibLoader.cpp',['../SharedLibLoader_8cpp.html',1,'']]], + ['simplespmv_2ehpp',['SimpleSpmv.hpp',['../SimpleSpmv_8hpp.html',1,'']]], + ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html',1,'spark::spmv']]], + ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae0357e972b3380edb382868d3616542d',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a254d3c473b526699bdf5d7994da756b9',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a84c629c0046f93dbd7892d970650c767',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation *_impl)']]], + ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html',1,'spark::spmv']]], + ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a045eb9b1b8b025ae7ebff4a4f6cd3246',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace(spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abd7023a217d39076e9c47a4226580c4f',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace()']]], + ['size_5fbytes',['size_bytes',['../Spmv_8cpp.html#a725a1b7ac05f04b3bc61b2a270346ea6',1,'Spmv.cpp']]], + ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html',1,'spark::spmv']]], + ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ad7f11ef476f1343c237b4bd41f19559b',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ab8dadd53ee054e2152cd86b979b4304e',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['smallestmultiplelargerthan',['smallestMultipleLargerThan',['../classSpmvManager.html#a3297286373eb2b5536b6cc04481cc996',1,'SpmvManager']]], + ['solve',['solve',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#aeab2189d0b72aaeda51f9defb2fd64b4',1,'spark::sparse_linear_solvers::Solver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html#a3c0f45b239cb7127fe8da07673cbfd52',1,'spark::sparse_linear_solvers::EigenSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html#a55a4b35ed35b40ee3f712024d9b45206',1,'spark::sparse_linear_solvers::DfeCgSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html#adaa588ced5dd2ce56da4cc095c88c4c3',1,'spark::sparse_linear_solvers::DfeBiCgSolver::solve()']]], + ['solvebicg',['solveBICG',['../SparseLinearSolvers_8cpp.html#a0917711c5c1de1d6fc6d3f5c2fa08c47',1,'SparseLinearSolvers.cpp']]], + ['solvecg',['solveCG',['../SparseLinearSolvers_8cpp.html#a857d72c794d4097e9a37e2a1a6839567',1,'SparseLinearSolvers.cpp']]], + ['solvelu',['solveLU',['../SparseLinearSolvers_8cpp.html#abdc884f0c76856917e9821d6242ee98a',1,'SparseLinearSolvers.cpp']]], + ['solver',['Solver',['../classspark_1_1sparse__linear__solvers_1_1Solver.html',1,'spark::sparse_linear_solvers']]], + ['spark',['spark',['../namespacespark.html',1,'']]], + ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html',1,'spark::sparse']]], + ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ad81f39eca4950c1e4623cdb120f094b0',1,'spark::sparse::SparkCooMatrix']]], + ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html#acf3f66892ae92b0d4c4d0e250da9ebde',1,'spark::dse::SparkDse']]], + ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html',1,'spark::dse']]], + ['sparse',['sparse',['../namespacespark_1_1sparse.html',1,'spark']]], + ['sparse',['sparse',['../classspark_1_1io_1_1MmReader.html#abaeb856fe8052dada1094aeeba575482',1,'spark::io::MmReader']]], + ['sparse_5flinear_5fsolvers',['sparse_linear_solvers',['../namespacespark_1_1sparse__linear__solvers.html',1,'spark']]], + ['sparselinearsolvers_2ecpp',['SparseLinearSolvers.cpp',['../SparseLinearSolvers_8cpp.html',1,'']]], + ['sparselinearsolvers_2ehpp',['SparseLinearSolvers.hpp',['../SparseLinearSolvers_8hpp.html',1,'']]], + ['sparsematrix',['SparseMatrix',['../classspark_1_1io_1_1MmReader.html#a4b6628e5d0886325e152e8ffdae1964c',1,'spark::io::MmReader']]], + ['sparsematrix_2ehpp',['SparseMatrix.hpp',['../SparseMatrix_8hpp.html',1,'']]], + ['spmv',['spmv',['../namespacespark_1_1spmv.html',1,'spark']]], + ['spmv',['Spmv',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a7b466d50691186b19e72887aa7cd4227',1,'spark::runtime::GeneratedSpmvImplementation::Spmv()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a51277607133bd9efc7d05df0c398923a',1,'spark::runtime::GeneratedSpmvImplementationMock::Spmv()'],['../SpmvDeviceInterface_8h.html#a2f0caf835f75923c7b64abf5b530f56a',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a2f0caf835f75923c7b64abf5b530f56a',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterfaceMock.cpp']]], + ['spmv_2ecpp',['Spmv.cpp',['../Spmv_8cpp.html',1,'']]], + ['spmv_2ehpp',['Spmv.hpp',['../Spmv_8hpp.html',1,'']]], + ['spmv_5fdramread',['Spmv_dramRead',['../SpmvDeviceInterface_8h.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp']]], + ['spmv_5fdramwrite',['Spmv_dramWrite',['../SpmvDeviceInterface_8h.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp']]], + ['spmvarchitecture',['SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html',1,'spark::spmv']]], + ['spmvarchitecturespace',['SpmvArchitectureSpace',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html',1,'spark::spmv']]], + ['spmvcachekernel',['SpmvCacheKernel',['../classSpmvCacheKernel.html',1,'SpmvCacheKernel'],['../classSpmvCacheKernel.html#acd4688b7b45eb067763e70a072acc496',1,'SpmvCacheKernel.SpmvCacheKernel()']]], + ['spmvdeviceinterface_2ecpp',['SpmvDeviceInterface.cpp',['../SpmvDeviceInterface_8cpp.html',1,'']]], + ['spmvdeviceinterface_2eh',['SpmvDeviceInterface.h',['../SpmvDeviceInterface_8h.html',1,'']]], + ['spmvdeviceinterfacemock_2ecpp',['SpmvDeviceInterfaceMock.cpp',['../SpmvDeviceInterfaceMock_8cpp.html',1,'']]], + ['spmvdramreadfunctionptr',['SpmvDramReadFunctionPtr',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a6e776af1e59842d77e5c52b630c7285e',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['spmvdramwritefunctionptr',['SpmvDramWriteFunctionPtr',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a71dba3c10ed1d9a8ba37d5b757f702c8',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['spmvequal',['SpmvEqual',['../structSpmvEqual.html',1,'']]], + ['spmvfunctionptr',['SpmvFunctionPtr',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a0d16762eb3714e898a6d30e71b34c377',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['spmvhash',['SpmvHash',['../structSpmvHash.html',1,'']]], + ['spmvimplementationloader',['SpmvImplementationLoader',['../classspark_1_1runtime_1_1SpmvImplementationLoader.html#a074828b53d9f547867fe20e1fe55f5b9',1,'spark::runtime::SpmvImplementationLoader']]], + ['spmvimplementationloader',['SpmvImplementationLoader',['../classspark_1_1runtime_1_1SpmvImplementationLoader.html',1,'spark::runtime']]], + ['spmvkernel',['SpmvKernel',['../classSpmvKernel.html',1,'SpmvKernel'],['../classSpmvKernel.html#ad09b317bceedc13d1f50865cbdb4cd91',1,'SpmvKernel.SpmvKernel()']]], + ['spmvkernel_2ejava',['SpmvKernel.java',['../SpmvKernel_8java.html',1,'']]], + ['spmvmanager',['SpmvManager',['../classSpmvManager.html',1,'SpmvManager'],['../classSpmvManager.html#aaeaf51093060e192ab53048bf0c2fa9d',1,'SpmvManager.SpmvManager()']]], + ['spmvmanager_2ejava',['SpmvManager.java',['../SpmvManager_8java.html',1,'']]], + ['spmvreductionkernel',['SpmvReductionKernel',['../classSpmvReductionKernel.html',1,'SpmvReductionKernel'],['../classSpmvReductionKernel.html#a6cf50bef530943f0e812c5a684b2b26a',1,'SpmvReductionKernel.SpmvReductionKernel()']]], + ['ssarch',['ssarch',['../Spmv_8cpp.html#a73ed93bfd16d2b54084241251efe53ca',1,'Spmv.cpp']]], + ['start',['start',['../structspark_1_1utils_1_1Range.html#aa944c6fbb45db229c82ab2af62836237',1,'spark::utils::Range']]], + ['stdvectortoeigen',['stdvectorToEigen',['../namespacespark_1_1converters.html#aa6e224b8b4ce34ca7a1683910b0dd9c2',1,'spark::converters']]], + ['step',['step',['../structspark_1_1utils_1_1Range.html#adafa797e5802e578a9fffc6fc25b6a24',1,'spark::utils::Range']]], + ['structure_2emd',['structure.md',['../structure_8md.html',1,'']]], + ['symmetric',['symmetric',['../classspark_1_1io_1_1MmReader.html#a339fd452b0db39fdabb6fc9b9994624d',1,'spark::io::MmReader']]], + ['userio',['userio',['../namespacespark_1_1userio.html',1,'spark']]], + ['utils',['utils',['../namespacespark_1_1utils.html',1,'spark']]] +]; diff --git a/docs/search/all_11.html b/docs/search/all_11.html new file mode 100644 index 0000000..6f3943a --- /dev/null +++ b/docs/search/all_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_11.js b/docs/search/all_11.js new file mode 100644 index 0000000..ec177a7 --- /dev/null +++ b/docs/search/all_11.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['to_5fstring',['to_string',['../classspark_1_1model_1_1LogicResourceUsage.html#a0f6ff26d2cab74fc11bca87f60bdce35',1,'spark::model::LogicResourceUsage::to_string()'],['../classspark_1_1model_1_1ImplementationParameters.html#a0e71a3875d830daed887869a9f86c374',1,'spark::model::ImplementationParameters::to_string()'],['../structspark_1_1spmv_1_1Partition.html#a11004c0342811a57bba97bf31c823d64',1,'spark::spmv::Partition::to_string()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af12e62e4f0c6a5d0f6e37bf3a326956b',1,'spark::spmv::SimpleSpmvArchitecture::to_string()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa6bc86fc3b1f6d37836c7219d00c49a0',1,'spark::spmv::SpmvArchitecture::to_string()'],['../structspark_1_1utils_1_1Range.html#ae03ddb2296e4c08b7756adc10847b4b9',1,'spark::utils::Range::to_string()']]], + ['toread',['toread',['../classParallelCsrReadControl.html#af87a65fc4f7423554e3a36f0a059cbf1',1,'ParallelCsrReadControl']]], + ['totalcycles',['totalCycles',['../structspark_1_1spmv_1_1Partition.html#a2256e3b766ab51acd2be27a1975f0ed9',1,'spark::spmv::Partition']]], + ['totaloutputs',['totalOutputs',['../classParallelCsrReadControl.html#a869e17d0a43818cd085f01898143f2cc',1,'ParallelCsrReadControl']]], + ['triplettoeigen',['tripletToEigen',['../namespacespark_1_1converters.html#ad8ff5498781446bc5c51cd52922f5d72',1,'spark::converters']]], + ['tru',['tru',['../classParallelCsrReadControl.html#ab6214aafff1d0650206637e7a9f15729',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/all_12.html b/docs/search/all_12.html new file mode 100644 index 0000000..3c7c89e --- /dev/null +++ b/docs/search/all_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_12.js b/docs/search/all_12.js new file mode 100644 index 0000000..5839c24 --- /dev/null +++ b/docs/search/all_12.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['user_5fguide',['user_guide',['../md_docs_user_guide.html',1,'']]], + ['unload_5flibrary',['unload_library',['../classspark_1_1execution_1_1SharedLibLoader.html#aaa01ed393ccd28d202950dca243389a8',1,'spark::execution::SharedLibLoader']]], + ['unpaddingkernel',['UnpaddingKernel',['../classUnpaddingKernel.html',1,'UnpaddingKernel'],['../classUnpaddingKernel.html#a52a201168b15d7ab1e1378178a5abd5e',1,'UnpaddingKernel.UnpaddingKernel()']]], + ['user_5fguide_2emd',['user_guide.md',['../user__guide_8md.html',1,'']]], + ['userinput_2ehpp',['UserInput.hpp',['../UserInput_8hpp.html',1,'']]], + ['userinputparams',['UserInputParams',['../namespacespark_1_1userio.html#a61705a89ecd4794e1aaf8e56bc89a5ae',1,'spark::userio']]], + ['utils_2ehpp',['Utils.hpp',['../Utils_8hpp.html',1,'']]] +]; diff --git a/docs/search/all_13.html b/docs/search/all_13.html new file mode 100644 index 0000000..0bd629b --- /dev/null +++ b/docs/search/all_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_13.js b/docs/search/all_13.js new file mode 100644 index 0000000..8ae8702 --- /dev/null +++ b/docs/search/all_13.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['value',['value',['../structspark_1_1spmv_1_1indptr__value.html#ae0073c7eec3c96ddf6ce38dedc3312b1',1,'spark::spmv::indptr_value::value()'],['../SimpleSpmv_8hpp.html#aee90379adb0307effb138f4871edbc5c',1,'value(): SimpleSpmv.hpp']]], + ['vd',['Vd',['../BiConjugateGradient_8cpp.html#a61f485fb4164897d20404192b8a20927',1,'BiConjugateGradient.cpp']]], + ['vector_5fload_5fcycles',['vector_load_cycles',['../structspark_1_1spmv_1_1Partition.html#a087b0019edb1ad8ef824ed7e26e19849',1,'spark::spmv::Partition']]], + ['vectorload',['VectorLoad',['../enumParallelCsrReadControl_1_1Mode.html#aa2414caa80d02424c7a80c3946160a2d',1,'ParallelCsrReadControl::Mode']]], + ['vectorloadcommands',['vectorLoadCommands',['../classParallelCsrReadControl.html#a4627fcdaeb69d3836053e91cc70a80f2',1,'ParallelCsrReadControl']]], + ['vectorloadcycles',['vectorLoadCycles',['../classParallelCsrReadControl.html#aa609515db6c67afd973f1d15431e1684',1,'ParallelCsrReadControl']]], + ['vectorvalues',['vectorValues',['../classSpmvCacheKernel.html#a866881c55c08adf35042aeeb18c9cffd',1,'SpmvCacheKernel']]], + ['vroms',['vroms',['../classSpmvCacheKernel.html#ad7249c675981ec57613b0f3d69a39342',1,'SpmvCacheKernel']]], + ['vstartaddress',['vStartAddress',['../structPartitionWriteResult.html#a2a1d5b0084ae204040066b7fe3a33b07',1,'PartitionWriteResult']]], + ['vtype',['vtype',['../classSpmvCacheKernel.html#a4a13093fa8aa4a3a053cf3d7122c6866',1,'SpmvCacheKernel']]] +]; diff --git a/docs/search/all_14.html b/docs/search/all_14.html new file mode 100644 index 0000000..2ad638b --- /dev/null +++ b/docs/search/all_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_14.js b/docs/search/all_14.js new file mode 100644 index 0000000..26ffa84 --- /dev/null +++ b/docs/search/all_14.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['write',['write',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#added3b47d76e9b08f06096ad7b27c133',1,'spark::runtime::GeneratedSpmvImplementation::write()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a4b551b84b89443f0d096740ca64c63c3',1,'spark::runtime::GeneratedSpmvImplementationMock::write()']]], + ['write_5fdse_5fresults',['write_dse_results',['../main_8cpp.html#a8d444a99dbaa5e94893a71e578e1d902',1,'main.cpp']]], + ['write_5fparams',['write_params',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9acabcfa6d09c76000290982c33a36f0',1,'spark::spmv::SimpleSpmvArchitecture::write_params()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#acb14edc8b1c5a5e961304e3bf92c97c7',1,'spark::spmv::SpmvArchitecture::write_params()']]], + ['writedataforpartition',['writeDataForPartition',['../Spmv_8cpp.html#a77e3cd072d94e0fe9e5376bb05ac1c6e',1,'Spmv.cpp']]] +]; diff --git a/docs/search/all_15.html b/docs/search/all_15.html new file mode 100644 index 0000000..d3b5274 --- /dev/null +++ b/docs/search/all_15.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_15.js b/docs/search/all_15.js new file mode 100644 index 0000000..dd8a2c4 --- /dev/null +++ b/docs/search/all_15.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zero',['zero',['../classParallelCsrReadControl.html#ae2dc7d8decaf5a2458d11eee8f0e5f33',1,'ParallelCsrReadControl.zero()'],['../classParallelCsrReadControl.html#a6a81725c82d1c2631d13b35ea2bce758',1,'ParallelCsrReadControl.zero(int bitWidth)']]] +]; diff --git a/docs/search/all_16.html b/docs/search/all_16.html new file mode 100644 index 0000000..b4e3666 --- /dev/null +++ b/docs/search/all_16.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_16.js b/docs/search/all_16.js new file mode 100644 index 0000000..b98a6a4 --- /dev/null +++ b/docs/search/all_16.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['_7egeneratedimplementation',['~GeneratedImplementation',['../structspark_1_1runtime_1_1GeneratedImplementation.html#a285ba0d76acd1a1da62204158aec3625',1,'spark::runtime::GeneratedImplementation']]], + ['_7egeneratedspmvimplementation',['~GeneratedSpmvImplementation',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a0882ce5039b4ac50a3f2e2471645abe5',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['_7egeneratedspmvimplementationmock',['~GeneratedSpmvImplementationMock',['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a105adcf3d8937093d294b93efc880064',1,'spark::runtime::GeneratedSpmvImplementationMock']]], + ['_7eimplementationloader',['~ImplementationLoader',['../classspark_1_1runtime_1_1ImplementationLoader.html#ac74997119774d1820894780fa2841ef4',1,'spark::runtime::ImplementationLoader']]], + ['_7emmreader',['~MmReader',['../classspark_1_1io_1_1MmReader.html#afff251fc01bc6a47007e5b562f002ed3',1,'spark::io::MmReader']]], + ['_7espmvarchitecture',['~SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html#abec906effc222dd9f12781c75e3b40c1',1,'spark::spmv::SpmvArchitecture']]] +]; diff --git a/docs/search/all_2.html b/docs/search/all_2.html new file mode 100644 index 0000000..95ded12 --- /dev/null +++ b/docs/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_2.js b/docs/search/all_2.js new file mode 100644 index 0000000..c9c3f5e --- /dev/null +++ b/docs/search/all_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['benchmark',['Benchmark',['../classspark_1_1dse_1_1Benchmark.html',1,'spark::dse']]], + ['bestarchitecture',['bestArchitecture',['../classspark_1_1dse_1_1DseResult.html#a2a23395d873d124a4da624ed94ab4d76',1,'spark::dse::DseResult']]], + ['better',['better',['../Dse_8cpp.html#ac63ef9b091049d2a25c5941b73512252',1,'Dse.cpp']]], + ['biconjugategradient_2ecpp',['BiConjugateGradient.cpp',['../BiConjugateGradient_8cpp.html',1,'']]], + ['brams',['brams',['../classspark_1_1model_1_1LogicResourceUsage.html#a9e1bfd322976881da5fc6d0501ecbf32',1,'spark::model::LogicResourceUsage']]], + ['bramspmvreductionkernel',['BramSpmvReductionKernel',['../classBramSpmvReductionKernel.html',1,'BramSpmvReductionKernel'],['../classBramSpmvReductionKernel.html#a68264df2094dfb810030e2147b3cacaa',1,'BramSpmvReductionKernel.BramSpmvReductionKernel()']]], + ['buildreadmask',['buildReadMask',['../classParallelCsrReadControl.html#ac16da093fd2a7f25322d24d8be66593f',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/all_3.html b/docs/search/all_3.html new file mode 100644 index 0000000..4d312d0 --- /dev/null +++ b/docs/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_3.js b/docs/search/all_3.js new file mode 100644 index 0000000..b4d9039 --- /dev/null +++ b/docs/search/all_3.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['cache_5fsize',['cache_size',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a9cb503ef9f3172c73bd3d2fc9d4564d2',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['cachesize',['cacheSize',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a0fd07f4d1e241d9bb5e525fc1f9c4ab2',1,'spark::spmv::SimpleSpmvArchitecture::cacheSize()'],['../classSpmvManager.html#a9a9f9ca14bf99119d5ed0d7106acdcd9',1,'SpmvManager.cacheSize()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#abdaf540e5d182a8956fcb1ce78d0d777',1,'spark::runtime::GeneratedSpmvImplementation::cacheSize()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a9d417edc09f273a58dea1cd9aa866679',1,'spark::runtime::GeneratedSpmvImplementationMock::cacheSize()']]], + ['cachesizer',['cacheSizeR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a5eb1ea4c3054ef0b99c199732c004195',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['cachesizerange',['cacheSizeRange',['../classspark_1_1dse_1_1DseParameters.html#a407b33c26d55c84c1436a3535576f380',1,'spark::dse::DseParameters']]], + ['canread',['canRead',['../classParallelCsrReadControl.html#a2aa999eee54eca7e025dcb2be11dc900',1,'ParallelCsrReadControl']]], + ['cat',['cat',['../classParallelCsrReadControl.html#aff22ed75d30f759a6fa33b1d8a20b602',1,'ParallelCsrReadControl.cat(DFEsmValue...args)'],['../classParallelCsrReadControl.html#ac1026ad92d6b9e38d84c81aaced9c3b7',1,'ParallelCsrReadControl.cat(DFEsmValue left, DFEsmValue right)']]], + ['child_5ffiles',['child_files',['../namespacespark_1_1file__utils.html#a4725425d3954eff72c12d25a8b52d131',1,'spark::file_utils']]], + ['colptrsize',['colptrSize',['../structPartitionWriteResult.html#a1b1d42061ca85c85c68b12e3405743e5',1,'PartitionWriteResult']]], + ['colptrstartaddress',['colptrStartAddress',['../structPartitionWriteResult.html#a744ceeec06294048f07cd552a340118f',1,'PartitionWriteResult']]], + ['conjugategradient_2ecpp',['ConjugateGradient.cpp',['../ConjugateGradient_8cpp.html',1,'']]], + ['converters_2ehpp',['Converters.hpp',['../Converters_8hpp.html',1,'']]], + ['coordtype',['CoordType',['../classspark_1_1io_1_1MmReader.html#a43348db7743f21cff1854197cf7f9819',1,'spark::io::MmReader::CoordType()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a9de150aa2a040306403bc97687b40f',1,'spark::sparse::SparkCooMatrix::CoordType()']]], + ['countcomputecycles',['countComputeCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ab2b61b0a02aa4dfa40a38ad98a84bbb4',1,'spark::spmv::SimpleSpmvArchitecture::countComputeCycles()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a328db4b67f8f9c6763117c8a82f81577',1,'spark::spmv::FstSpmvArchitecture::countComputeCycles()']]], + ['cpureferenceprecon',['cpuReferencePrecon',['../BiConjugateGradient_8cpp.html#ab1ada1c516bfa9599e8e43b4b9666a10',1,'BiConjugateGradient.cpp']]], + ['cpureferenceunprecon',['cpuReferenceUnprecon',['../BiConjugateGradient_8cpp.html#aa6ded0f7e5d8161252912d0eb17f27c0',1,'BiConjugateGradient.cpp']]], + ['crt',['crt',['../structspark_1_1utils_1_1Range.html#a07fd2cc26cde356c3f1db74bedd31eb5',1,'spark::utils::Range']]], + ['crtpos',['crtPos',['../classParallelCsrReadControl.html#ab0f5b6539f65df26eccc3c40b234752c',1,'ParallelCsrReadControl']]], + ['csrmatrix',['CsrMatrix',['../namespacespark_1_1sparse.html#a0f0d804dd8f37cb44a636bca7d03f016',1,'spark::sparse']]], + ['cyclecounter',['cycleCounter',['../classParallelCsrReadControl.html#a51cfb6d5b02eb3e5b204e4ea8f16fce4',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/all_4.html b/docs/search/all_4.html new file mode 100644 index 0000000..d72a910 --- /dev/null +++ b/docs/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_4.js b/docs/search/all_4.js new file mode 100644 index 0000000..9117c05 --- /dev/null +++ b/docs/search/all_4.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['data',['data',['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a0b72ae9e7b1deed9b6228cf40e9f32',1,'spark::sparse::SparkCooMatrix']]], + ['dbg',['dbg',['../classParallelCsrReadControl.html#a522323c9bbe60e7a02f48e1ff6f7db06',1,'ParallelCsrReadControl']]], + ['dbg_5fpar_5fcsr_5fctl',['DBG_PAR_CSR_CTL',['../classSpmvManager.html#a234ea438d3c8363b41db2581e3d8a51a',1,'SpmvManager']]], + ['dbg_5freduction_5fkernel',['DBG_REDUCTION_KERNEL',['../classSpmvManager.html#a5c29c11c95c8f9980aa3201d8f25ff3d',1,'SpmvManager']]], + ['dbg_5fspmv_5fkernel',['DBG_SPMV_KERNEL',['../classSpmvManager.html#aece403b7ff81eeebfaf75b35aacb2b1f',1,'SpmvManager']]], + ['dfebicgsolver',['DfeBiCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html',1,'spark::sparse_linear_solvers']]], + ['dfecgsolver',['DfeCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html',1,'spark::sparse_linear_solvers']]], + ['dfeimplunprecon',['dfeImplUnprecon',['../BiConjugateGradient_8cpp.html#ac3a55e37d1559a049fcef0af776feb3b',1,'BiConjugateGradient.cpp']]], + ['dfespmv',['dfespmv',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a8c7ca2d2ac7284e46506f23728dde499',1,'spark::spmv::SimpleSpmvArchitecture::dfespmv()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1d557e23529a5040a858beafb9971acc',1,'spark::spmv::SpmvArchitecture::dfespmv()']]], + ['do_5fblocking',['do_blocking',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aedb22fc8e413dd6bc2c54d74bf03ed2d',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['do_5fpartition',['do_partition',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac3cd16da984d35b091f0833edd919a56',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['done',['Done',['../enumParallelCsrReadControl_1_1Mode.html#a4af99d8c25b54128c920d384091485d0',1,'ParallelCsrReadControl::Mode']]], + ['donext',['doNext',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abde19171c284739290c7a7c145d7deb7',1,'spark::spmv::SimpleSpmvArchitectureSpace::doNext()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a414ec6872fdf32550af1a6efbb4394d5',1,'spark::spmv::SpmvArchitectureSpace::doNext()']]], + ['dram_5freduction_5fenabled',['dram_reduction_enabled',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a1923e1b519a07ca526ada5cee811f955',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['dramread',['dramRead',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a1ce48c5da7060505ad44f95c2655c06a',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['dramreductionenabled',['dramReductionEnabled',['../classSpmvManager.html#adfc3a8c884874f553215941bf86692fa',1,'SpmvManager']]], + ['dramspmvreductionkernel',['DramSpmvReductionKernel',['../classDramSpmvReductionKernel.html',1,'DramSpmvReductionKernel'],['../classDramSpmvReductionKernel.html#a85cd96e69eec800ebfdea2c7bb6f7376',1,'DramSpmvReductionKernel.DramSpmvReductionKernel()']]], + ['dramwrite',['dramWrite',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a903b93b96dad8d74bffb0ba1e3ec7937',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['dse_2ecpp',['Dse.cpp',['../Dse_8cpp.html',1,'']]], + ['dse_2ehpp',['Dse.hpp',['../Dse_8hpp.html',1,'']]], + ['dse_5frun',['dse_run',['../Dse_8cpp.html#a50c99f119df5ba972bbebeef76239c2e',1,'Dse.cpp']]], + ['dseparameters',['DseParameters',['../classspark_1_1dse_1_1DseParameters.html',1,'spark::dse']]], + ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html',1,'spark::dse']]], + ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html#a1d1342fbcf4346f77de3cb29c23622ba',1,'spark::dse::DseResult::DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)'],['../classspark_1_1dse_1_1DseResult.html#ac8b6f838e0112d684058ee911b9e2ab5',1,'spark::dse::DseResult::DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)']]], + ['dsps',['dsps',['../classspark_1_1model_1_1LogicResourceUsage.html#adb488affc0a051d6c8458d9e2a35d201',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/docs/search/all_5.html b/docs/search/all_5.html new file mode 100644 index 0000000..99ef726 --- /dev/null +++ b/docs/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_5.js b/docs/search/all_5.js new file mode 100644 index 0000000..a45b948 --- /dev/null +++ b/docs/search/all_5.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['eigensolver',['EigenSolver',['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html',1,'spark::sparse_linear_solvers']]], + ['eigensparsematrix',['EigenSparseMatrix',['../namespacespark_1_1converters.html#a724347922bbc7e56429febfd000be78b',1,'spark::converters::EigenSparseMatrix()'],['../namespacespark_1_1spmv.html#a3235bbbc3c8db242db2f00947ec4ca9b',1,'spark::spmv::EigenSparseMatrix()']]], + ['eigenvectortostdvector',['eigenVectorToStdVector',['../namespacespark_1_1converters.html#a78a095076b8d4daa406d3dc9bca7504c',1,'spark::converters']]], + ['emptycycles',['emptyCycles',['../structspark_1_1spmv_1_1Partition.html#a59dfdff4762b092034d952fe2e81f95c',1,'spark::spmv::Partition']]], + ['encodeemptyrows',['encodeEmptyRows',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#a0336d2d0c76a4ad1586b904bafaefb3d',1,'spark::spmv::SkipEmptyRowsArchitecture']]], + ['end',['end',['../structspark_1_1utils_1_1Range.html#a014c4c4aa8e0f0c9f9aaf954d3e8fba7',1,'spark::utils::Range']]], + ['equals',['equals',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac9cd3ac1f8a7ff7c2634d707a2d33356',1,'spark::spmv::SimpleSpmvArchitecture::equals()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa3aebf2b76c95d7b96e37865637a1104',1,'spark::spmv::SpmvArchitecture::equals()']]], + ['execution_2ehpp',['Execution.hpp',['../Execution_8hpp.html',1,'']]] +]; diff --git a/docs/search/all_6.html b/docs/search/all_6.html new file mode 100644 index 0000000..6133ab3 --- /dev/null +++ b/docs/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_6.js b/docs/search/all_6.js new file mode 100644 index 0000000..bad14d0 --- /dev/null +++ b/docs/search/all_6.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['f',['f',['../classspark_1_1io_1_1MmReader.html#a65848ca959d0961ab594205b40335072',1,'spark::io::MmReader']]], + ['ffs',['ffs',['../classspark_1_1model_1_1LogicResourceUsage.html#ad67dec36e8bd5ba1937687b538d97a8e',1,'spark::model::LogicResourceUsage']]], + ['fileutils_2ehpp',['FileUtils.hpp',['../FileUtils_8hpp.html',1,'']]], + ['firstreadposition',['firstReadPosition',['../classParallelCsrReadControl.html#af30ed96f729b948fec5bd989acc13a56',1,'ParallelCsrReadControl']]], + ['floating_5fpoint_5flatency',['FLOATING_POINT_LATENCY',['../classSpmvManager.html#a3a947b39653f09305c7712af18ddd113',1,'SpmvManager']]], + ['fls',['fls',['../classParallelCsrReadControl.html#aa9acfae4966606e3e5645eb1592f5736',1,'ParallelCsrReadControl']]], + ['fpl',['fpL',['../classSpmvKernel.html#a0bf2a803445d2454781d5e09937de571',1,'SpmvKernel']]], + ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html',1,'spark::spmv']]], + ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#ab1db27169d0bc9921d4c5048592e3d24',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#add2548a017451c5caae61cd3e9021467',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]] +]; diff --git a/docs/search/all_7.html b/docs/search/all_7.html new file mode 100644 index 0000000..5748125 --- /dev/null +++ b/docs/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_7.js b/docs/search/all_7.js new file mode 100644 index 0000000..b1dd2fb --- /dev/null +++ b/docs/search/all_7.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['generatedimplementation',['GeneratedImplementation',['../structspark_1_1runtime_1_1GeneratedImplementation.html',1,'spark::runtime']]], + ['generatedimplsupport_2ehpp',['GeneratedImplSupport.hpp',['../GeneratedImplSupport_8hpp.html',1,'']]], + ['generatedspmvimplementation',['GeneratedSpmvImplementation',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html',1,'spark::runtime']]], + ['generatedspmvimplementation',['GeneratedSpmvImplementation',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a96cbb988649950498d305ac895ea2f6f',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['generatedspmvimplementationmock',['GeneratedSpmvImplementationMock',['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html',1,'spark::runtime']]], + ['generatedspmvimplementationmock',['GeneratedSpmvImplementationMock',['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#af33e3e01c1d5fc32e69cb23c422e44d5',1,'spark::runtime::GeneratedSpmvImplementationMock']]], + ['get_5fbenchmark_5fsize',['get_benchmark_size',['../classspark_1_1dse_1_1Benchmark.html#a1692f6d32fb3d2a6de8ad8c85cf7fc39',1,'spark::dse::Benchmark']]], + ['get_5fmatrix_5fpath',['get_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a42578888522f08d21a620fa6ce17cfb3',1,'spark::dse::Benchmark']]], + ['get_5fname',['get_name',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac91efdbe0c3de7a45edde0052f478638',1,'spark::spmv::SimpleSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a90397fa9aa179cb86021fac39afc3f27',1,'spark::spmv::FstSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ae9604bff9ee8258920e8b599e0bb1a1d',1,'spark::spmv::SkipEmptyRowsArchitecture::get_name()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a91515587bbfe2ac62a891f17363d508f',1,'spark::spmv::PrefetchingArchitecture::get_name()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4dfdec260889947cf9844eed98e5dbbe',1,'spark::spmv::SpmvArchitecture::get_name()']]], + ['getcomputekernel',['getComputeKernel',['../classSpmvManager.html#a6776e0fc817b9cce1698ad46bef5c1ad',1,'SpmvManager']]], + ['getdramreductionenabled',['getDramReductionEnabled',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a6a77e31894e5bdd3d76a955484c942fb',1,'spark::runtime::GeneratedSpmvImplementation::getDramReductionEnabled()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a263a1bdfe74153bfd281e526423d1d40',1,'spark::runtime::GeneratedSpmvImplementationMock::getDramReductionEnabled()'],['../SpmvDeviceInterface_8h.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterface.cpp']]], + ['getestimatedclockcycles',['getEstimatedClockCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ad109173c60a0469e99d188010e09fa9c',1,'spark::spmv::SimpleSpmvArchitecture::getEstimatedClockCycles()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#af60acfd57143cbb06c582bd6c1e6a3a9',1,'spark::spmv::SpmvArchitecture::getEstimatedClockCycles()']]], + ['getestimatedgflops',['getEstimatedGFlops',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a745a51a90e0d0e027be6f927e41e267a',1,'spark::spmv::SpmvArchitecture']]], + ['getfanoutname',['getFanoutName',['../classSpmvManager.html#aa4b9b4fd7299e8967130613ce89df06e',1,'SpmvManager']]], + ['getfrequency',['getFrequency',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a3eafac9b3bffd4a17d86a6f99eb97503',1,'spark::spmv::SpmvArchitecture']]], + ['getgflopscount',['getGFlopsCount',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a1b45bc81758c2e9ef21e6620d8fbd4db',1,'spark::spmv::SimpleSpmvArchitecture::getGFlopsCount()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1be404ebea121baa4b28f1548ad6207d',1,'spark::spmv::SpmvArchitecture::getGFlopsCount()']]], + ['getimplementationparameters',['getImplementationParameters',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3c5900f38fdfafa6481508d9c90819ff',1,'spark::spmv::SimpleSpmvArchitecture::getImplementationParameters()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a31274a6b708f9db92d810d2a161d812a',1,'spark::spmv::SpmvArchitecture::getImplementationParameters()']]], + ['getlibraryname',['getLibraryName',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a7dd9917bb3685f9235972026c3d72c49',1,'spark::spmv::SimpleSpmvArchitecture::getLibraryName()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a701b198937568b2f47f4beb05dc349cc',1,'spark::spmv::SpmvArchitecture::getLibraryName()']]], + ['getmatrixvalues',['getMatrixValues',['../classSpmvCacheKernel.html#a1c512fd317ade4f64a5e7f7215dd0c53',1,'SpmvCacheKernel']]], + ['getpaddingcycles',['getPaddingCycles',['../classSpmvManager.html#a64afe0643711d9cd06053a68f187f8da',1,'SpmvManager']]], + ['getpaddingkernel',['getPaddingKernel',['../classSpmvManager.html#a0cc931d1320ec4754066dacceeaff9c0',1,'SpmvManager']]], + ['getreadcontrol',['getReadControl',['../classSpmvManager.html#aca5d9419bca8dbc02b44df878cac0009',1,'SpmvManager']]], + ['getreductionkernel',['getReductionKernel',['../classSpmvManager.html#a0e7f3c94df7eafa7a899a2447f16155d',1,'SpmvManager']]], + ['getspmv_5finputwidth',['getSpmv_InputWidth',['../SpmvDeviceInterface_8h.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fmaxrows',['getSpmv_MaxRows',['../SpmvDeviceInterface_8h.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fnumpipes',['getSpmv_NumPipes',['../SpmvDeviceInterface_8h.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fpartitionsize',['getSpmv_PartitionSize',['../SpmvDeviceInterface_8h.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterface.cpp']]], + ['getunpaddingkernel',['getUnpaddingKernel',['../classSpmvManager.html#aff135aa6706cfaf3cea42f1353dd3ea7',1,'SpmvManager']]], + ['getvectorvalues',['getVectorValues',['../classSpmvCacheKernel.html#a937fcc2032a9fc1e390bef6cb425fd55',1,'SpmvCacheKernel']]], + ['gflopsonly',['gflopsOnly',['../classspark_1_1dse_1_1DseParameters.html#a903571a00336065eb295887170686770',1,'spark::dse::DseParameters']]] +]; diff --git a/docs/search/all_8.html b/docs/search/all_8.html new file mode 100644 index 0000000..0179bdd --- /dev/null +++ b/docs/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_8.js b/docs/search/all_8.js new file mode 100644 index 0000000..bb568d1 --- /dev/null +++ b/docs/search/all_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['handle',['handle',['../classspark_1_1execution_1_1SharedLibLoader.html#a1a9fe4ed515e64c4b5a0cd24233599e7',1,'spark::execution::SharedLibLoader']]] +]; diff --git a/docs/search/all_9.html b/docs/search/all_9.html new file mode 100644 index 0000000..cd46d44 --- /dev/null +++ b/docs/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_9.js b/docs/search/all_9.js new file mode 100644 index 0000000..d2e180d --- /dev/null +++ b/docs/search/all_9.js @@ -0,0 +1,26 @@ +var searchData= +[ + ['ilength',['iLength',['../classParallelCsrReadControl.html#a85aaa3cdd7bbfe023bc74bcd02bc21b4',1,'ParallelCsrReadControl']]], + ['ilengthready',['iLengthReady',['../classParallelCsrReadControl.html#a7ffcf81575bcc0d92af9b198653dcf28',1,'ParallelCsrReadControl']]], + ['impl',['impl',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af57f57adeebaae9edeb9db32b9579b28',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['implementationloader',['ImplementationLoader',['../classspark_1_1runtime_1_1ImplementationLoader.html',1,'spark::runtime']]], + ['implementationloader',['ImplementationLoader',['../classspark_1_1runtime_1_1ImplementationLoader.html#a878f373604956baae5db5198e9689132',1,'spark::runtime::ImplementationLoader']]], + ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html#af2b90d99043967462da25c003c7f7e17',1,'spark::model::ImplementationParameters']]], + ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html',1,'spark::model']]], + ['impls',['impls',['../classspark_1_1runtime_1_1ImplementationLoader.html#a4d12a2b939120bb3f16a5603824c0189',1,'spark::runtime::ImplementationLoader']]], + ['indexwidth',['indexWidth',['../classSpmvManager.html#a01ee1f96ba381149f4233fae1c87c821',1,'SpmvManager']]], + ['indptr',['indptr',['../structspark_1_1spmv_1_1indptr__value.html#ae450af92f13728c597605f909eb7f3b6',1,'spark::spmv::indptr_value::indptr()'],['../SimpleSpmv_8hpp.html#a164fa1a90d7bd63f14e631438885cc69',1,'indptr(): SimpleSpmv.hpp']]], + ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html',1,'spark::spmv']]], + ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html#abf5ac17c5a8b83c68b8e421c9fb2b9f4',1,'spark::spmv::indptr_value::indptr_value(double _value, int _indptr)'],['../structspark_1_1spmv_1_1indptr__value.html#a1bb3b22d80c09f283b847a1fb907a462',1,'spark::spmv::indptr_value::indptr_value()'],['../SimpleSpmv_8hpp.html#ac37db725a01a5625a6a32d51d7fd3e78',1,'indptr_value(double _value, int _indptr): SimpleSpmv.hpp'],['../SimpleSpmv_8hpp.html#a84d257f77f20931d14a7e5abb9d099c8',1,'indptr_value(): SimpleSpmv.hpp']]], + ['indptrvaluessize',['indptrValuesSize',['../structPartitionWriteResult.html#a389a493dd0f322031a4b176ad7251cc1',1,'PartitionWriteResult']]], + ['indptrvaluesstartaddress',['indptrValuesStartAddress',['../structPartitionWriteResult.html#a2ca20725ee8dcb4aad19eac57bc5c957',1,'PartitionWriteResult']]], + ['indptrvector',['indptrVector',['../classSpmvCacheKernel.html#a334b1e969200dfe46d013bef0e5b1934',1,'SpmvCacheKernel']]], + ['input_5fwidth',['input_width',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a42d52b9e6c121e9284bfc5bbae863e75',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['inputwidth',['inputWidth',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a4083f351467c940c767fa9122d3a727c',1,'spark::spmv::SimpleSpmvArchitecture::inputWidth()'],['../classParallelCsrReadControl.html#a3458a62c53ce83128cedb6c7765ca6fc',1,'ParallelCsrReadControl.inputWidth()'],['../classSpmvManager.html#a778e13e71f500522f13c6207e6f4e8a4',1,'SpmvManager.inputWidth()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#abe0a820e9d0d36ee8586d0abdca0eed5',1,'spark::runtime::GeneratedSpmvImplementation::inputWidth()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a1c25321fdf7068a9db469fb8cf62a0f5',1,'spark::runtime::GeneratedSpmvImplementationMock::inputWidth()']]], + ['inputwidthr',['inputWidthR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#ab7dd6b46e80d1fe85694b964ce761e85',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['inputwidthrange',['inputWidthRange',['../classspark_1_1dse_1_1DseParameters.html#af54d3b84a9781ce472374fb4d4dbecb1',1,'spark::dse::DseParameters']]], + ['interfacedefault',['interfaceDefault',['../classSpmvManager.html#ad0360a20a24483e22664a4bda8428ec6',1,'SpmvManager']]], + ['io_2ehpp',['Io.hpp',['../Io_8hpp.html',1,'']]], + ['iterationsprocessed',['iterationsProcessed',['../classParallelCsrReadControl.html#aca9dea6888fb835dc40d3df86fa60156',1,'ParallelCsrReadControl']]], + ['ivtype',['ivtype',['../classSpmvCacheKernel.html#a7fc692be3af6b331cdf30edbb6db98e6',1,'SpmvCacheKernel']]] +]; diff --git a/docs/search/all_a.html b/docs/search/all_a.html new file mode 100644 index 0000000..eab6553 --- /dev/null +++ b/docs/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_a.js b/docs/search/all_a.js new file mode 100644 index 0000000..2b41766 --- /dev/null +++ b/docs/search/all_a.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['last',['last',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a618c39ec4cde84cb595f089fb881ce7c',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['libpath',['libPath',['../classspark_1_1execution_1_1SharedLibLoader.html#af01a44b23ea21a6f653194aa8f312ee2',1,'spark::execution::SharedLibLoader']]], + ['load_5flibrary',['load_library',['../classspark_1_1execution_1_1SharedLibLoader.html#aa04c935e0dd9c179246655474c951ad1',1,'spark::execution::SharedLibLoader']]], + ['loadbenchmark',['loadBenchmark',['../main_8cpp.html#a75bc35b120d6b6f0834ae4d32856036c',1,'main.cpp']]], + ['loadparams',['loadParams',['../main_8cpp.html#a84bdcf570024843f14fc9624770bf035',1,'main.cpp']]], + ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html',1,'spark::model']]], + ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html#a5b88cae38db7b5ab535f4a17fa643a15',1,'spark::model::LogicResourceUsage::LogicResourceUsage()'],['../classspark_1_1model_1_1LogicResourceUsage.html#a64aef671cc1360f9c760eddecc95dfe5',1,'spark::model::LogicResourceUsage::LogicResourceUsage(int _l, int _f, int _b, int _d)'],['../classspark_1_1model_1_1LogicResourceUsage.html#a303a7df506637540e2b7eb4d871f9029',1,'spark::model::LogicResourceUsage::LogicResourceUsage(const LogicResourceUsage &ru)']]], + ['logresult',['logResult',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac30acafe28fa8aefac50da03b867f928',1,'spark::spmv::SimpleSpmvArchitecture::logResult(std::string s, std::vector< U > vals)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a2443f3bebc9b04350fe736fd17b199d2',1,'spark::spmv::SimpleSpmvArchitecture::logResult(std::string s, Arg a, Args...as)']]], + ['logresultr',['logResultR',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#abb11d2ac348c1bdc14ebb7f367b4db5d',1,'spark::spmv::SimpleSpmvArchitecture::logResultR(std::string s, Arg a, Args...as)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aeda39c3024d1efa75e0714e25a8d919c',1,'spark::spmv::SimpleSpmvArchitecture::logResultR(std::string s)']]], + ['luts',['luts',['../classspark_1_1model_1_1LogicResourceUsage.html#a620a5a18ce206d8dbc7cd5adbcb48d7b',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/docs/search/all_b.html b/docs/search/all_b.html new file mode 100644 index 0000000..a2c161e --- /dev/null +++ b/docs/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_b.js b/docs/search/all_b.js new file mode 100644 index 0000000..b49f56b --- /dev/null +++ b/docs/search/all_b.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['m',['m',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ae3892beabaaf78e2e9a67269c22c8f8e',1,'spark::sparse::SparkCooMatrix']]], + ['m_5fcolptr',['m_colptr',['../structspark_1_1spmv_1_1Partition.html#a8aa3fa9f9be247ab7e092f968122e3a7',1,'spark::spmv::Partition']]], + ['m_5fcolptr_5funpaddedlength',['m_colptr_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ac28e1c351c409032a1166678f800141b',1,'spark::spmv::Partition']]], + ['m_5findptr_5fvalues',['m_indptr_values',['../structspark_1_1spmv_1_1Partition.html#ae134d0793283258fb0f95433d5448bb2',1,'spark::spmv::Partition']]], + ['m_5findptr_5fvalues_5funpaddedlength',['m_indptr_values_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ae9b189f7ec6c8fbd47202945dc3fef23',1,'spark::spmv::Partition']]], + ['main',['main',['../classSpmvManager.html#abf7df885f5ea650b0128628cad8bf33b',1,'SpmvManager.main()'],['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(): main.cpp']]], + ['main_2ecpp',['main.cpp',['../main_8cpp.html',1,'']]], + ['makecommand',['makeCommand',['../classParallelCsrReadControl.html#a75734eee54f3dfaaabf8794ba378ccfa',1,'ParallelCsrReadControl']]], + ['makeoutput',['makeOutput',['../classParallelCsrReadControl.html#a999c16ceab5da519c9e90a6b5765359c',1,'ParallelCsrReadControl']]], + ['mantissawidth',['mantissaWidth',['../classSpmvManager.html#a6c6ea06d3d9cb5f752e3cbc3ca7cbafa',1,'SpmvManager']]], + ['mat',['mat',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae295666cf3885149b0e37766c4feffc7',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['matrices',['matrices',['../classspark_1_1dse_1_1DseResult.html#a797ff2ef1c189cb2cff7fa18cfede2a9',1,'spark::dse::DseResult']]], + ['matrix',['matrix',['../classspark_1_1io_1_1MmReader.html#a8bf3a76c76dad47d667f28052adbfaa5',1,'spark::io::MmReader']]], + ['matrixvalues',['matrixValues',['../classSpmvCacheKernel.html#a2c0074e62c391424c276981965dc4bf4',1,'SpmvCacheKernel']]], + ['max_5frows',['max_rows',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a5519058ca752a5dd30d53fc1d8280530',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['maxrows',['maxRows',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a577fd6e73f088b437a5632ba3ca89c61',1,'spark::spmv::SimpleSpmvArchitecture::maxRows()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#acaac03fcff370b3f0945823b1f13a90f',1,'spark::spmv::SimpleSpmvArchitectureSpace::maxRows()'],['../classSpmvManager.html#a5746b324d3b38fc407d1577739b969ef',1,'SpmvManager.maxRows()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ac32c1ffb1ce8a2ae4d4592a463c7d7aa',1,'spark::runtime::GeneratedSpmvImplementation::maxRows()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a209c982b13e58fedc9c9acbfd8a84440',1,'spark::runtime::GeneratedSpmvImplementationMock::maxRows()']]], + ['memorybandwidth',['memoryBandwidth',['../classspark_1_1model_1_1ImplementationParameters.html#a7935fb3d5d9d782c66530a541d6f705c',1,'spark::model::ImplementationParameters']]], + ['min',['min',['../classParallelCsrReadControl.html#af39c2cd937063656ee7d2bdb4a21e8db',1,'ParallelCsrReadControl']]], + ['mmparse',['mmparse',['../classspark_1_1io_1_1MmReader.html#a73bef88acba33d35b9f714365456ab39',1,'spark::io::MmReader']]], + ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html',1,'spark::io']]], + ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html#a18da82e5b71af2ce6f5946f7b66f8cd5',1,'spark::io::MmReader']]], + ['mmreadmatrix',['mmreadMatrix',['../classspark_1_1io_1_1MmReader.html#ae0ed6d286d9c5c08ad3bd3e910f3554a',1,'spark::io::MmReader']]], + ['mode',['Mode',['../enumParallelCsrReadControl_1_1Mode.html',1,'ParallelCsrReadControl']]], + ['mode',['mode',['../classParallelCsrReadControl.html#aa98eb2e85dadf134870803067fa13ad8',1,'ParallelCsrReadControl']]], + ['model_2ehpp',['Model.hpp',['../Model_8hpp.html',1,'']]] +]; diff --git a/docs/search/all_c.html b/docs/search/all_c.html new file mode 100644 index 0000000..bdd3ee2 --- /dev/null +++ b/docs/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_c.js b/docs/search/all_c.js new file mode 100644 index 0000000..400d905 --- /dev/null +++ b/docs/search/all_c.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['n',['n',['../structspark_1_1spmv_1_1Partition.html#a858144bacceb65f6b0c6caab04b0308b',1,'spark::spmv::Partition::n()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a582426cd2434334fe15c5f3c23aa0c54',1,'spark::sparse::SparkCooMatrix::n()']]], + ['nblocks',['nBlocks',['../structspark_1_1spmv_1_1Partition.html#a3084298925d168aafc1affa127bb4ef2',1,'spark::spmv::Partition']]], + ['ncols',['ncols',['../classspark_1_1io_1_1MmReader.html#a7b783ac977c5badcd28069cea5368adc',1,'spark::io::MmReader']]], + ['needtoread',['needToRead',['../classParallelCsrReadControl.html#af55c1da545422cde5c57c61a861017d8',1,'ParallelCsrReadControl']]], + ['next',['next',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#aa9e55d9a1af4b951561705869dd2e2fe',1,'spark::spmv::SpmvArchitectureSpace']]], + ['nextstate',['nextState',['../classParallelCsrReadControl.html#acac4d268696bea31cb88a0293e7484ec',1,'ParallelCsrReadControl']]], + ['niterations',['nIterations',['../classParallelCsrReadControl.html#ad8041b856c97ae1d5ac6ea96a5cb0b04',1,'ParallelCsrReadControl']]], + ['nnzs',['nnzs',['../classspark_1_1io_1_1MmReader.html#a55b7ae127a34af4d09bca7079c443866',1,'spark::io::MmReader']]], + ['npartitions',['nPartitions',['../classParallelCsrReadControl.html#a82a4d8d9d682f6c65537975de9483540',1,'ParallelCsrReadControl']]], + ['nrows',['nRows',['../classParallelCsrReadControl.html#afda30a96f0ffe1c758ce548cfd8d5907',1,'ParallelCsrReadControl.nRows()'],['../classspark_1_1io_1_1MmReader.html#a3698c442e4b847c2f1479dd11fef9a15',1,'spark::io::MmReader::nrows()']]], + ['num_5fpipes',['num_pipes',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ad67d01b403f7203c61c55866e0409257',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['numpipes',['numPipes',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac51f502488f2b7d2dbffb5a9939b4271',1,'spark::spmv::SimpleSpmvArchitecture::numPipes()'],['../classSpmvManager.html#a2b1f61839183d1301ddc3975f4ad3ae9',1,'SpmvManager.numPipes()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a69fd21c14863cb756e3e1f1014068a97',1,'spark::runtime::GeneratedSpmvImplementation::numPipes()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#ae26d5df16fcf6c40749e666ffe3257b3',1,'spark::runtime::GeneratedSpmvImplementationMock::numPipes()']]], + ['numpipesr',['numPipesR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a2250dba56bfc36df530fcba2ae8e5573',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['numpipesrange',['numPipesRange',['../classspark_1_1dse_1_1DseParameters.html#a312071f767470577bf393c3d190d72bd',1,'spark::dse::DseParameters']]] +]; diff --git a/docs/search/all_d.html b/docs/search/all_d.html new file mode 100644 index 0000000..d510933 --- /dev/null +++ b/docs/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_d.js b/docs/search/all_d.js new file mode 100644 index 0000000..30ed723 --- /dev/null +++ b/docs/search/all_d.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['ocontrol',['oControl',['../classParallelCsrReadControl.html#acadabffbfd3d06c672dabfe98ee0ca23',1,'ParallelCsrReadControl']]], + ['ocontroldata',['oControlData',['../classParallelCsrReadControl.html#acfc1f32a0362606d06eeb514a7738af8',1,'ParallelCsrReadControl']]], + ['one',['one',['../classParallelCsrReadControl.html#af04777655393a3fb3dc8265c4047d0a6',1,'ParallelCsrReadControl']]], + ['operator_28_29',['operator()',['../structSpmvHash.html#a4655e26aca9f73c92dcbc679f7222e83',1,'SpmvHash::operator()()'],['../structSpmvEqual.html#aad8f140c593abd6997a30cf6833dcfc2',1,'SpmvEqual::operator()()']]], + ['operator_2a',['operator*',['../classspark_1_1model_1_1LogicResourceUsage.html#accca14ba38323db0242d77a654b22520',1,'spark::model::LogicResourceUsage::operator*(int x) const '],['../classspark_1_1model_1_1LogicResourceUsage.html#ae939cb8a86e0fe1209d312317627d3a1',1,'spark::model::LogicResourceUsage::operator*(double x) const ']]], + ['operator_2b',['operator+',['../classspark_1_1model_1_1LogicResourceUsage.html#a48bf8cd8225540f1fa0da63719657e6a',1,'spark::model::LogicResourceUsage']]], + ['operator_2b_2b',['operator++',['../structspark_1_1utils_1_1Range.html#a8623004edfe9d73657f831d1392fe579',1,'spark::utils::Range']]], + ['operator_3c',['operator<',['../classspark_1_1model_1_1LogicResourceUsage.html#aea20a053d751c2de91d491e38688f776',1,'spark::model::LogicResourceUsage::operator<()'],['../classspark_1_1model_1_1ImplementationParameters.html#acf5199cb8cb126ddb4977b02f1cebddd',1,'spark::model::ImplementationParameters::operator<()']]], + ['operator_3c_3c',['operator<<',['../namespacespark_1_1dse.html#a2cba03adcd7e6708f31a01eb270ffeb9',1,'spark::dse::operator<<(std::ostream &s, Benchmark &b)'],['../namespacespark_1_1dse.html#ae3baaf24604e126136d1d8b583fc389d',1,'spark::dse::operator<<(std::ostream &s, DseParameters &d)'],['../namespacespark_1_1spmv.html#ad1e89fa7b9bf647e70186d2dc8385961',1,'spark::spmv::operator<<()'],['../namespacespark_1_1utils.html#a58716b1e1a4e2b2a3115f339aba795ef',1,'spark::utils::operator<<()']]], + ['operator_3d_3d',['operator==',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9ff8f85bf609bf02b087b39674dc1b25',1,'spark::spmv::SimpleSpmvArchitecture::operator==()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a113cc5b7d55d561f862e007e0252cc82',1,'spark::spmv::SpmvArchitecture::operator==()']]], + ['outputfunction',['outputFunction',['../classParallelCsrReadControl.html#a9f87d1cc0071a87de47a8ede3cd8508c',1,'ParallelCsrReadControl']]], + ['outputnotstall',['outputNotStall',['../classParallelCsrReadControl.html#a5ba3304bde2ca9c746fc58f4f632092e',1,'ParallelCsrReadControl']]], + ['outputtingcommands',['OutputtingCommands',['../enumParallelCsrReadControl_1_1Mode.html#a1fe6df0a1446f33e43e80b9ad3e0cd49',1,'ParallelCsrReadControl::Mode']]], + ['outsize',['outSize',['../structspark_1_1spmv_1_1Partition.html#a4653f40c7d63f4c663190b209b6373d7',1,'spark::spmv::Partition::outSize()'],['../structPartitionWriteResult.html#a7cc1bba9c690f9a66fa15add6d1763e6',1,'PartitionWriteResult::outSize()']]], + ['outstartaddr',['outStartAddr',['../structPartitionWriteResult.html#a93f6f5c23c1f0f7e18f319f3e33aee61',1,'PartitionWriteResult']]], + ['outvalid',['outValid',['../classParallelCsrReadControl.html#a998688c17de6d3dee32bb3005124d484',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/all_e.html b/docs/search/all_e.html new file mode 100644 index 0000000..3cda017 --- /dev/null +++ b/docs/search/all_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_e.js b/docs/search/all_e.js new file mode 100644 index 0000000..5bc327b --- /dev/null +++ b/docs/search/all_e.js @@ -0,0 +1,22 @@ +var searchData= +[ + ['paddingcycles',['paddingCycles',['../structspark_1_1spmv_1_1Partition.html#a611bc144e0b0f3e4075e4fa27137669f',1,'spark::spmv::Partition']]], + ['paddingkernel',['PaddingKernel',['../classPaddingKernel.html',1,'PaddingKernel'],['../classPaddingKernel.html#a6087bd04eca705d5c45d7978892ba7b0',1,'PaddingKernel.PaddingKernel()']]], + ['parallelcsrreadcontrol',['ParallelCsrReadControl',['../classParallelCsrReadControl.html',1,'ParallelCsrReadControl'],['../classParallelCsrReadControl.html#abcbdd7c1a9d3193fa28f097ffb47e110',1,'ParallelCsrReadControl.ParallelCsrReadControl()']]], + ['parallelcsrreadcontrol_2ejava',['ParallelCsrReadControl.java',['../ParallelCsrReadControl_8java.html',1,'']]], + ['parsebuildparams',['parseBuildParams',['../namespacespark_1_1userio.html#a3dd99cbd0dfbe620ddebf4f95351b15b',1,'spark::userio']]], + ['parseheader',['parseHeader',['../classspark_1_1io_1_1MmReader.html#a5f474abc81a8d634a45b80750d816df9',1,'spark::io::MmReader::parseHeader(std::string line)'],['../classspark_1_1io_1_1MmReader.html#a3575f75893a9ece651ef17b111d959fd',1,'spark::io::MmReader::parseHeader(bool pprint=false)']]], + ['partition',['Partition',['../structspark_1_1spmv_1_1Partition.html',1,'spark::spmv']]], + ['partitionedcsrmatrix',['PartitionedCsrMatrix',['../namespacespark_1_1sparse.html#a15a8e3974007d1c440410bf83232f5dd',1,'spark::sparse']]], + ['partitions',['partitions',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a90e1699cd2d8ee0abd21e4461d8c7d32',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['partitionsprocessed',['partitionsProcessed',['../classParallelCsrReadControl.html#abaf944d93404a6d08eaa4f17e8ee4d0c',1,'ParallelCsrReadControl']]], + ['partitionwriteresult',['PartitionWriteResult',['../structPartitionWriteResult.html',1,'']]], + ['path',['path',['../classspark_1_1io_1_1MmReader.html#a853387b508034ba82ede19c2500c5030',1,'spark::io::MmReader']]], + ['paths',['paths',['../classspark_1_1dse_1_1Benchmark.html#aa21c70d1c142db7c1ee3fb81fc5e81c5',1,'spark::dse::Benchmark']]], + ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html',1,'spark::spmv']]], + ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#ae614b247e6e43b41b6ee2ec4565a55c6',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a12e8b6b4d9135f559d1800dacf5f25f1',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['preprocess',['preprocess',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3aed67e40e87a0ea0dd79fd30f76a7cf',1,'spark::spmv::SimpleSpmvArchitecture::preprocess()'],['../classspark_1_1sparse__linear__solvers_1_1Solver.html#ae5a1a27b9213613cf6d67dc6e635f42d',1,'spark::sparse_linear_solvers::Solver::preprocess()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4f14b957c8585ed81ff2af46ab26340f',1,'spark::spmv::SpmvArchitecture::preprocess()']]], + ['preprocessblock',['preprocessBlock',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#adefa266d246a395b8a67a83912272e2d',1,'spark::spmv::SkipEmptyRowsArchitecture::preprocessBlock()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a7cd5036aa7c21a4439b8ddfb8a969bf0',1,'spark::spmv::SpmvArchitecture::preprocessBlock()']]], + ['prevdata',['prevData',['../classParallelCsrReadControl.html#aae3d7861bddbf53bea616be8e308afa8',1,'ParallelCsrReadControl']]], + ['processrows',['processRows',['../classParallelCsrReadControl.html#a0860f8fe7c3841a51d7b9faa16b1f26a',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/all_f.html b/docs/search/all_f.html new file mode 100644 index 0000000..7419b02 --- /dev/null +++ b/docs/search/all_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/all_f.js b/docs/search/all_f.js new file mode 100644 index 0000000..821f6d8 --- /dev/null +++ b/docs/search/all_f.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['range',['Range',['../structspark_1_1utils_1_1Range.html',1,'spark::utils']]], + ['range',['Range',['../structspark_1_1utils_1_1Range.html#af0ce17db5625ad22c87532891f4b890a',1,'spark::utils::Range::Range(int _s, int _e, int _stp)'],['../structspark_1_1utils_1_1Range.html#a6a3850b17634041447d86797929e9f2c',1,'spark::utils::Range::Range(std::string range)']]], + ['read',['read',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ab8bae0bfea8769c07ec9e24b1813b204',1,'spark::runtime::GeneratedSpmvImplementation::read()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#acd57170f2d13598d15f54973d4a579b9',1,'spark::runtime::GeneratedSpmvImplementationMock::read()']]], + ['readinglength',['ReadingLength',['../enumParallelCsrReadControl_1_1Mode.html#a0bf9792309f43608f812f047b288bcd9',1,'ParallelCsrReadControl::Mode']]], + ['readlength',['readLength',['../classParallelCsrReadControl.html#afe43fc900641b277ae1069dde875a88b',1,'ParallelCsrReadControl']]], + ['readmaskdata',['readMaskData',['../classParallelCsrReadControl.html#a0f2333314c34fb9b3a1cd57c7d2d6d37',1,'ParallelCsrReadControl']]], + ['readme_2emd',['README.md',['../README_8md.html',1,'']]], + ['readvector',['readVector',['../classspark_1_1io_1_1MmReader.html#a3aa3d0ea6867f58d326674b632f7b045',1,'spark::io::MmReader']]], + ['reductioncycles',['reductionCycles',['../structspark_1_1spmv_1_1Partition.html#abf0e3c933b315809c50c6e68506bb174',1,'spark::spmv::Partition']]], + ['resolvevectorreads',['resolveVectorReads',['../classSpmvCacheKernel.html#a8c2591875950cd9bb288c779aacccd54',1,'SpmvCacheKernel']]], + ['restart',['restart',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a50a6bb214092c694e0c3e8b9978f607c',1,'spark::spmv::SimpleSpmvArchitectureSpace::restart()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a76b80d8f6d287bf6b90f38a0ac215354',1,'spark::spmv::SpmvArchitectureSpace::restart()'],['../structspark_1_1utils_1_1Range.html#a05c07c975dd7bf3ba8a097044258aa5a',1,'spark::utils::Range::restart()']]], + ['rowlengthdata',['rowLengthData',['../classParallelCsrReadControl.html#a309e5d2abd0d3bdaca25a19f280cd029',1,'ParallelCsrReadControl']]], + ['rowsprocessed',['rowsProcessed',['../classParallelCsrReadControl.html#ad0b253e90543c25af346b9afff908d87',1,'ParallelCsrReadControl']]], + ['ru',['ru',['../classspark_1_1model_1_1ImplementationParameters.html#ac82ef6a8d3fd73cd40fff27d1ec9b943',1,'spark::model::ImplementationParameters']]], + ['run',['run',['../classspark_1_1dse_1_1SparkDse.html#abefe26e252597bb164ef8236e5460210',1,'spark::dse::SparkDse']]], + ['runspmv',['runSpmv',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a531009b6858338ca6fcc646d1e7d0d85',1,'spark::runtime::GeneratedSpmvImplementation']]] +]; diff --git a/docs/search/classes_0.html b/docs/search/classes_0.html new file mode 100644 index 0000000..fabdc03 --- /dev/null +++ b/docs/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js new file mode 100644 index 0000000..d447c84 --- /dev/null +++ b/docs/search/classes_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['benchmark',['Benchmark',['../classspark_1_1dse_1_1Benchmark.html',1,'spark::dse']]], + ['bramspmvreductionkernel',['BramSpmvReductionKernel',['../classBramSpmvReductionKernel.html',1,'']]] +]; diff --git a/docs/search/classes_1.html b/docs/search/classes_1.html new file mode 100644 index 0000000..800b6ae --- /dev/null +++ b/docs/search/classes_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js new file mode 100644 index 0000000..a5362c2 --- /dev/null +++ b/docs/search/classes_1.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['dfebicgsolver',['DfeBiCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html',1,'spark::sparse_linear_solvers']]], + ['dfecgsolver',['DfeCgSolver',['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html',1,'spark::sparse_linear_solvers']]], + ['dramspmvreductionkernel',['DramSpmvReductionKernel',['../classDramSpmvReductionKernel.html',1,'']]], + ['dseparameters',['DseParameters',['../classspark_1_1dse_1_1DseParameters.html',1,'spark::dse']]], + ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html',1,'spark::dse']]] +]; diff --git a/docs/search/classes_2.html b/docs/search/classes_2.html new file mode 100644 index 0000000..f65d263 --- /dev/null +++ b/docs/search/classes_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_2.js b/docs/search/classes_2.js new file mode 100644 index 0000000..c400400 --- /dev/null +++ b/docs/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eigensolver',['EigenSolver',['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html',1,'spark::sparse_linear_solvers']]] +]; diff --git a/docs/search/classes_3.html b/docs/search/classes_3.html new file mode 100644 index 0000000..927e837 --- /dev/null +++ b/docs/search/classes_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_3.js b/docs/search/classes_3.js new file mode 100644 index 0000000..c071a37 --- /dev/null +++ b/docs/search/classes_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html',1,'spark::spmv']]] +]; diff --git a/docs/search/classes_4.html b/docs/search/classes_4.html new file mode 100644 index 0000000..a447290 --- /dev/null +++ b/docs/search/classes_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_4.js b/docs/search/classes_4.js new file mode 100644 index 0000000..9e8797a --- /dev/null +++ b/docs/search/classes_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['generatedimplementation',['GeneratedImplementation',['../structspark_1_1runtime_1_1GeneratedImplementation.html',1,'spark::runtime']]], + ['generatedspmvimplementation',['GeneratedSpmvImplementation',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html',1,'spark::runtime']]], + ['generatedspmvimplementationmock',['GeneratedSpmvImplementationMock',['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html',1,'spark::runtime']]] +]; diff --git a/docs/search/classes_5.html b/docs/search/classes_5.html new file mode 100644 index 0000000..63484c4 --- /dev/null +++ b/docs/search/classes_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_5.js b/docs/search/classes_5.js new file mode 100644 index 0000000..9d0eb5f --- /dev/null +++ b/docs/search/classes_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['implementationloader',['ImplementationLoader',['../classspark_1_1runtime_1_1ImplementationLoader.html',1,'spark::runtime']]], + ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html',1,'spark::model']]], + ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html',1,'spark::spmv']]] +]; diff --git a/docs/search/classes_6.html b/docs/search/classes_6.html new file mode 100644 index 0000000..f3d7035 --- /dev/null +++ b/docs/search/classes_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_6.js b/docs/search/classes_6.js new file mode 100644 index 0000000..764cb62 --- /dev/null +++ b/docs/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html',1,'spark::model']]] +]; diff --git a/docs/search/classes_7.html b/docs/search/classes_7.html new file mode 100644 index 0000000..9e5f5c9 --- /dev/null +++ b/docs/search/classes_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_7.js b/docs/search/classes_7.js new file mode 100644 index 0000000..56dcdcf --- /dev/null +++ b/docs/search/classes_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html',1,'spark::io']]], + ['mode',['Mode',['../enumParallelCsrReadControl_1_1Mode.html',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/classes_8.html b/docs/search/classes_8.html new file mode 100644 index 0000000..82c35b3 --- /dev/null +++ b/docs/search/classes_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_8.js b/docs/search/classes_8.js new file mode 100644 index 0000000..30babaa --- /dev/null +++ b/docs/search/classes_8.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['paddingkernel',['PaddingKernel',['../classPaddingKernel.html',1,'']]], + ['parallelcsrreadcontrol',['ParallelCsrReadControl',['../classParallelCsrReadControl.html',1,'']]], + ['partition',['Partition',['../structspark_1_1spmv_1_1Partition.html',1,'spark::spmv']]], + ['partitionwriteresult',['PartitionWriteResult',['../structPartitionWriteResult.html',1,'']]], + ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html',1,'spark::spmv']]] +]; diff --git a/docs/search/classes_9.html b/docs/search/classes_9.html new file mode 100644 index 0000000..4e83ac8 --- /dev/null +++ b/docs/search/classes_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_9.js b/docs/search/classes_9.js new file mode 100644 index 0000000..535570e --- /dev/null +++ b/docs/search/classes_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['range',['Range',['../structspark_1_1utils_1_1Range.html',1,'spark::utils']]] +]; diff --git a/docs/search/classes_a.html b/docs/search/classes_a.html new file mode 100644 index 0000000..616feb6 --- /dev/null +++ b/docs/search/classes_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_a.js b/docs/search/classes_a.js new file mode 100644 index 0000000..114ca38 --- /dev/null +++ b/docs/search/classes_a.js @@ -0,0 +1,19 @@ +var searchData= +[ + ['sharedlibloader',['SharedLibLoader',['../classspark_1_1execution_1_1SharedLibLoader.html',1,'spark::execution']]], + ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html',1,'spark::spmv']]], + ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html',1,'spark::spmv']]], + ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html',1,'spark::spmv']]], + ['solver',['Solver',['../classspark_1_1sparse__linear__solvers_1_1Solver.html',1,'spark::sparse_linear_solvers']]], + ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html',1,'spark::sparse']]], + ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html',1,'spark::dse']]], + ['spmvarchitecture',['SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html',1,'spark::spmv']]], + ['spmvarchitecturespace',['SpmvArchitectureSpace',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html',1,'spark::spmv']]], + ['spmvcachekernel',['SpmvCacheKernel',['../classSpmvCacheKernel.html',1,'']]], + ['spmvequal',['SpmvEqual',['../structSpmvEqual.html',1,'']]], + ['spmvhash',['SpmvHash',['../structSpmvHash.html',1,'']]], + ['spmvimplementationloader',['SpmvImplementationLoader',['../classspark_1_1runtime_1_1SpmvImplementationLoader.html',1,'spark::runtime']]], + ['spmvkernel',['SpmvKernel',['../classSpmvKernel.html',1,'']]], + ['spmvmanager',['SpmvManager',['../classSpmvManager.html',1,'']]], + ['spmvreductionkernel',['SpmvReductionKernel',['../classSpmvReductionKernel.html',1,'']]] +]; diff --git a/docs/search/classes_b.html b/docs/search/classes_b.html new file mode 100644 index 0000000..4461152 --- /dev/null +++ b/docs/search/classes_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/classes_b.js b/docs/search/classes_b.js new file mode 100644 index 0000000..0f32206 --- /dev/null +++ b/docs/search/classes_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['unpaddingkernel',['UnpaddingKernel',['../classUnpaddingKernel.html',1,'']]] +]; diff --git a/docs/search/close.png b/docs/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN literal 0 HcmV?d00001 diff --git a/docs/search/files_0.html b/docs/search/files_0.html new file mode 100644 index 0000000..c7aa36c --- /dev/null +++ b/docs/search/files_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_0.js b/docs/search/files_0.js new file mode 100644 index 0000000..5f2a9ea --- /dev/null +++ b/docs/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['biconjugategradient_2ecpp',['BiConjugateGradient.cpp',['../BiConjugateGradient_8cpp.html',1,'']]] +]; diff --git a/docs/search/files_1.html b/docs/search/files_1.html new file mode 100644 index 0000000..eca1c80 --- /dev/null +++ b/docs/search/files_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_1.js b/docs/search/files_1.js new file mode 100644 index 0000000..17d7cfb --- /dev/null +++ b/docs/search/files_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['conjugategradient_2ecpp',['ConjugateGradient.cpp',['../ConjugateGradient_8cpp.html',1,'']]], + ['converters_2ehpp',['Converters.hpp',['../Converters_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_2.html b/docs/search/files_2.html new file mode 100644 index 0000000..04a8a46 --- /dev/null +++ b/docs/search/files_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_2.js b/docs/search/files_2.js new file mode 100644 index 0000000..0cb5209 --- /dev/null +++ b/docs/search/files_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dse_2ecpp',['Dse.cpp',['../Dse_8cpp.html',1,'']]], + ['dse_2ehpp',['Dse.hpp',['../Dse_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_3.html b/docs/search/files_3.html new file mode 100644 index 0000000..0dc9a56 --- /dev/null +++ b/docs/search/files_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_3.js b/docs/search/files_3.js new file mode 100644 index 0000000..8fbd4a2 --- /dev/null +++ b/docs/search/files_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['execution_2ehpp',['Execution.hpp',['../Execution_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_4.html b/docs/search/files_4.html new file mode 100644 index 0000000..891b5da --- /dev/null +++ b/docs/search/files_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_4.js b/docs/search/files_4.js new file mode 100644 index 0000000..09ed31d --- /dev/null +++ b/docs/search/files_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fileutils_2ehpp',['FileUtils.hpp',['../FileUtils_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_5.html b/docs/search/files_5.html new file mode 100644 index 0000000..1741195 --- /dev/null +++ b/docs/search/files_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_5.js b/docs/search/files_5.js new file mode 100644 index 0000000..4377f9e --- /dev/null +++ b/docs/search/files_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['generatedimplsupport_2ehpp',['GeneratedImplSupport.hpp',['../GeneratedImplSupport_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_6.html b/docs/search/files_6.html new file mode 100644 index 0000000..262d3da --- /dev/null +++ b/docs/search/files_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_6.js b/docs/search/files_6.js new file mode 100644 index 0000000..8a078d6 --- /dev/null +++ b/docs/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['io_2ehpp',['Io.hpp',['../Io_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_7.html b/docs/search/files_7.html new file mode 100644 index 0000000..c535572 --- /dev/null +++ b/docs/search/files_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_7.js b/docs/search/files_7.js new file mode 100644 index 0000000..bb2be4e --- /dev/null +++ b/docs/search/files_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['main_2ecpp',['main.cpp',['../main_8cpp.html',1,'']]], + ['model_2ehpp',['Model.hpp',['../Model_8hpp.html',1,'']]] +]; diff --git a/docs/search/files_8.html b/docs/search/files_8.html new file mode 100644 index 0000000..21c328a --- /dev/null +++ b/docs/search/files_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_8.js b/docs/search/files_8.js new file mode 100644 index 0000000..9f19756 --- /dev/null +++ b/docs/search/files_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['parallelcsrreadcontrol_2ejava',['ParallelCsrReadControl.java',['../ParallelCsrReadControl_8java.html',1,'']]] +]; diff --git a/docs/search/files_9.html b/docs/search/files_9.html new file mode 100644 index 0000000..00a5201 --- /dev/null +++ b/docs/search/files_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_9.js b/docs/search/files_9.js new file mode 100644 index 0000000..f1a1f84 --- /dev/null +++ b/docs/search/files_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['readme_2emd',['README.md',['../README_8md.html',1,'']]] +]; diff --git a/docs/search/files_a.html b/docs/search/files_a.html new file mode 100644 index 0000000..ab04755 --- /dev/null +++ b/docs/search/files_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_a.js b/docs/search/files_a.js new file mode 100644 index 0000000..3234878 --- /dev/null +++ b/docs/search/files_a.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['sharedlibloader_2ecpp',['SharedLibLoader.cpp',['../SharedLibLoader_8cpp.html',1,'']]], + ['simplespmv_2ehpp',['SimpleSpmv.hpp',['../SimpleSpmv_8hpp.html',1,'']]], + ['sparselinearsolvers_2ecpp',['SparseLinearSolvers.cpp',['../SparseLinearSolvers_8cpp.html',1,'']]], + ['sparselinearsolvers_2ehpp',['SparseLinearSolvers.hpp',['../SparseLinearSolvers_8hpp.html',1,'']]], + ['sparsematrix_2ehpp',['SparseMatrix.hpp',['../SparseMatrix_8hpp.html',1,'']]], + ['spmv_2ecpp',['Spmv.cpp',['../Spmv_8cpp.html',1,'']]], + ['spmv_2ehpp',['Spmv.hpp',['../Spmv_8hpp.html',1,'']]], + ['spmvdeviceinterface_2ecpp',['SpmvDeviceInterface.cpp',['../SpmvDeviceInterface_8cpp.html',1,'']]], + ['spmvdeviceinterface_2eh',['SpmvDeviceInterface.h',['../SpmvDeviceInterface_8h.html',1,'']]], + ['spmvdeviceinterfacemock_2ecpp',['SpmvDeviceInterfaceMock.cpp',['../SpmvDeviceInterfaceMock_8cpp.html',1,'']]], + ['spmvkernel_2ejava',['SpmvKernel.java',['../SpmvKernel_8java.html',1,'']]], + ['spmvmanager_2ejava',['SpmvManager.java',['../SpmvManager_8java.html',1,'']]], + ['structure_2emd',['structure.md',['../structure_8md.html',1,'']]] +]; diff --git a/docs/search/files_b.html b/docs/search/files_b.html new file mode 100644 index 0000000..11010e1 --- /dev/null +++ b/docs/search/files_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/files_b.js b/docs/search/files_b.js new file mode 100644 index 0000000..9873f51 --- /dev/null +++ b/docs/search/files_b.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['user_5fguide_2emd',['user_guide.md',['../user__guide_8md.html',1,'']]], + ['userinput_2ehpp',['UserInput.hpp',['../UserInput_8hpp.html',1,'']]], + ['utils_2ehpp',['Utils.hpp',['../Utils_8hpp.html',1,'']]] +]; diff --git a/docs/search/functions_0.html b/docs/search/functions_0.html new file mode 100644 index 0000000..16a5a52 --- /dev/null +++ b/docs/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js new file mode 100644 index 0000000..a6f0d18 --- /dev/null +++ b/docs/search/functions_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5fattribute_5f_5f',['__attribute__',['../namespacespark_1_1spmv.html#a8ed4b5e7d25d6d210e3f1b7f09a84c7a',1,'spark::spmv']]] +]; diff --git a/docs/search/functions_1.html b/docs/search/functions_1.html new file mode 100644 index 0000000..3b4eacf --- /dev/null +++ b/docs/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js new file mode 100644 index 0000000..6547aac --- /dev/null +++ b/docs/search/functions_1.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['add_5fmatrix_5fpath',['add_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a18854065058a9f70a0fbb4127212d81f',1,'spark::dse::Benchmark']]], + ['addcomputepipe',['addComputePipe',['../classSpmvManager.html#ac993f1b6041594ae5bd7211d4f498702',1,'SpmvManager']]], + ['addpaddingkernel',['addPaddingKernel',['../classSpmvManager.html#ab025ef7147d5d645028cc92b7d1a513f',1,'SpmvManager']]], + ['addunpaddingkernel',['addUnpaddingKernel',['../classSpmvManager.html#ae2858b4c2bd5a17d5710d0d34429e2b3',1,'SpmvManager']]], + ['align',['align',['../namespacespark_1_1spmv.html#abaf9d6fbe5cd5df67ea6314fccd769e0',1,'spark::spmv::align()'],['../Spmv_8cpp.html#af110ee89567b09ff002ff971364c551d',1,'align(): Spmv.cpp']]], + ['analyze',['analyze',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#a5922d0592d66ae9966bfbf4bb78a1c55',1,'spark::sparse_linear_solvers::Solver']]], + ['architecturewithid',['architectureWithId',['../classspark_1_1runtime_1_1SpmvImplementationLoader.html#a8ff8e4c8507363cc1c252ccb3b01e6f5',1,'spark::runtime::SpmvImplementationLoader']]], + ['architecturewithparams',['architectureWithParams',['../classspark_1_1runtime_1_1SpmvImplementationLoader.html#a72c4e570271b170119909c81a6729c7d',1,'spark::runtime::SpmvImplementationLoader']]], + ['at_5fstart',['at_start',['../structspark_1_1utils_1_1Range.html#a2e5c2a068b494d96fa3bb9bc81f3b98b',1,'spark::utils::Range']]], + ['available_5flibraries',['available_libraries',['../classspark_1_1execution_1_1SharedLibLoader.html#a024d798f951a004334aeaddc7b086f61',1,'spark::execution::SharedLibLoader']]] +]; diff --git a/docs/search/functions_10.html b/docs/search/functions_10.html new file mode 100644 index 0000000..52cb0d3 --- /dev/null +++ b/docs/search/functions_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_10.js b/docs/search/functions_10.js new file mode 100644 index 0000000..cb20244 --- /dev/null +++ b/docs/search/functions_10.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['to_5fstring',['to_string',['../classspark_1_1model_1_1LogicResourceUsage.html#a0f6ff26d2cab74fc11bca87f60bdce35',1,'spark::model::LogicResourceUsage::to_string()'],['../classspark_1_1model_1_1ImplementationParameters.html#a0e71a3875d830daed887869a9f86c374',1,'spark::model::ImplementationParameters::to_string()'],['../structspark_1_1spmv_1_1Partition.html#a11004c0342811a57bba97bf31c823d64',1,'spark::spmv::Partition::to_string()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af12e62e4f0c6a5d0f6e37bf3a326956b',1,'spark::spmv::SimpleSpmvArchitecture::to_string()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa6bc86fc3b1f6d37836c7219d00c49a0',1,'spark::spmv::SpmvArchitecture::to_string()'],['../structspark_1_1utils_1_1Range.html#ae03ddb2296e4c08b7756adc10847b4b9',1,'spark::utils::Range::to_string()']]], + ['triplettoeigen',['tripletToEigen',['../namespacespark_1_1converters.html#ad8ff5498781446bc5c51cd52922f5d72',1,'spark::converters']]], + ['tru',['tru',['../classParallelCsrReadControl.html#ab6214aafff1d0650206637e7a9f15729',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/functions_11.html b/docs/search/functions_11.html new file mode 100644 index 0000000..5e91b09 --- /dev/null +++ b/docs/search/functions_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_11.js b/docs/search/functions_11.js new file mode 100644 index 0000000..c69dbda --- /dev/null +++ b/docs/search/functions_11.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['unload_5flibrary',['unload_library',['../classspark_1_1execution_1_1SharedLibLoader.html#aaa01ed393ccd28d202950dca243389a8',1,'spark::execution::SharedLibLoader']]], + ['unpaddingkernel',['UnpaddingKernel',['../classUnpaddingKernel.html#a52a201168b15d7ab1e1378178a5abd5e',1,'UnpaddingKernel']]] +]; diff --git a/docs/search/functions_12.html b/docs/search/functions_12.html new file mode 100644 index 0000000..1ab0742 --- /dev/null +++ b/docs/search/functions_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_12.js b/docs/search/functions_12.js new file mode 100644 index 0000000..26ffa84 --- /dev/null +++ b/docs/search/functions_12.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['write',['write',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#added3b47d76e9b08f06096ad7b27c133',1,'spark::runtime::GeneratedSpmvImplementation::write()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a4b551b84b89443f0d096740ca64c63c3',1,'spark::runtime::GeneratedSpmvImplementationMock::write()']]], + ['write_5fdse_5fresults',['write_dse_results',['../main_8cpp.html#a8d444a99dbaa5e94893a71e578e1d902',1,'main.cpp']]], + ['write_5fparams',['write_params',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9acabcfa6d09c76000290982c33a36f0',1,'spark::spmv::SimpleSpmvArchitecture::write_params()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#acb14edc8b1c5a5e961304e3bf92c97c7',1,'spark::spmv::SpmvArchitecture::write_params()']]], + ['writedataforpartition',['writeDataForPartition',['../Spmv_8cpp.html#a77e3cd072d94e0fe9e5376bb05ac1c6e',1,'Spmv.cpp']]] +]; diff --git a/docs/search/functions_13.html b/docs/search/functions_13.html new file mode 100644 index 0000000..724f5c1 --- /dev/null +++ b/docs/search/functions_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_13.js b/docs/search/functions_13.js new file mode 100644 index 0000000..dd8a2c4 --- /dev/null +++ b/docs/search/functions_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['zero',['zero',['../classParallelCsrReadControl.html#ae2dc7d8decaf5a2458d11eee8f0e5f33',1,'ParallelCsrReadControl.zero()'],['../classParallelCsrReadControl.html#a6a81725c82d1c2631d13b35ea2bce758',1,'ParallelCsrReadControl.zero(int bitWidth)']]] +]; diff --git a/docs/search/functions_14.html b/docs/search/functions_14.html new file mode 100644 index 0000000..396906b --- /dev/null +++ b/docs/search/functions_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_14.js b/docs/search/functions_14.js new file mode 100644 index 0000000..b98a6a4 --- /dev/null +++ b/docs/search/functions_14.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['_7egeneratedimplementation',['~GeneratedImplementation',['../structspark_1_1runtime_1_1GeneratedImplementation.html#a285ba0d76acd1a1da62204158aec3625',1,'spark::runtime::GeneratedImplementation']]], + ['_7egeneratedspmvimplementation',['~GeneratedSpmvImplementation',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a0882ce5039b4ac50a3f2e2471645abe5',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['_7egeneratedspmvimplementationmock',['~GeneratedSpmvImplementationMock',['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a105adcf3d8937093d294b93efc880064',1,'spark::runtime::GeneratedSpmvImplementationMock']]], + ['_7eimplementationloader',['~ImplementationLoader',['../classspark_1_1runtime_1_1ImplementationLoader.html#ac74997119774d1820894780fa2841ef4',1,'spark::runtime::ImplementationLoader']]], + ['_7emmreader',['~MmReader',['../classspark_1_1io_1_1MmReader.html#afff251fc01bc6a47007e5b562f002ed3',1,'spark::io::MmReader']]], + ['_7espmvarchitecture',['~SpmvArchitecture',['../classspark_1_1spmv_1_1SpmvArchitecture.html#abec906effc222dd9f12781c75e3b40c1',1,'spark::spmv::SpmvArchitecture']]] +]; diff --git a/docs/search/functions_2.html b/docs/search/functions_2.html new file mode 100644 index 0000000..78be8b4 --- /dev/null +++ b/docs/search/functions_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js new file mode 100644 index 0000000..2063049 --- /dev/null +++ b/docs/search/functions_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['better',['better',['../Dse_8cpp.html#ac63ef9b091049d2a25c5941b73512252',1,'Dse.cpp']]], + ['bramspmvreductionkernel',['BramSpmvReductionKernel',['../classBramSpmvReductionKernel.html#a68264df2094dfb810030e2147b3cacaa',1,'BramSpmvReductionKernel']]], + ['buildreadmask',['buildReadMask',['../classParallelCsrReadControl.html#ac16da093fd2a7f25322d24d8be66593f',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/functions_3.html b/docs/search/functions_3.html new file mode 100644 index 0000000..ebf2eeb --- /dev/null +++ b/docs/search/functions_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js new file mode 100644 index 0000000..773a132 --- /dev/null +++ b/docs/search/functions_3.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['cachesize',['cacheSize',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#abdaf540e5d182a8956fcb1ce78d0d777',1,'spark::runtime::GeneratedSpmvImplementation::cacheSize()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a9d417edc09f273a58dea1cd9aa866679',1,'spark::runtime::GeneratedSpmvImplementationMock::cacheSize()']]], + ['canread',['canRead',['../classParallelCsrReadControl.html#a2aa999eee54eca7e025dcb2be11dc900',1,'ParallelCsrReadControl']]], + ['cat',['cat',['../classParallelCsrReadControl.html#aff22ed75d30f759a6fa33b1d8a20b602',1,'ParallelCsrReadControl.cat(DFEsmValue...args)'],['../classParallelCsrReadControl.html#ac1026ad92d6b9e38d84c81aaced9c3b7',1,'ParallelCsrReadControl.cat(DFEsmValue left, DFEsmValue right)']]], + ['child_5ffiles',['child_files',['../namespacespark_1_1file__utils.html#a4725425d3954eff72c12d25a8b52d131',1,'spark::file_utils']]], + ['countcomputecycles',['countComputeCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ab2b61b0a02aa4dfa40a38ad98a84bbb4',1,'spark::spmv::SimpleSpmvArchitecture::countComputeCycles()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a328db4b67f8f9c6763117c8a82f81577',1,'spark::spmv::FstSpmvArchitecture::countComputeCycles()']]], + ['cpureferenceprecon',['cpuReferencePrecon',['../BiConjugateGradient_8cpp.html#ab1ada1c516bfa9599e8e43b4b9666a10',1,'BiConjugateGradient.cpp']]], + ['cpureferenceunprecon',['cpuReferenceUnprecon',['../BiConjugateGradient_8cpp.html#aa6ded0f7e5d8161252912d0eb17f27c0',1,'BiConjugateGradient.cpp']]] +]; diff --git a/docs/search/functions_4.html b/docs/search/functions_4.html new file mode 100644 index 0000000..7317ea9 --- /dev/null +++ b/docs/search/functions_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js new file mode 100644 index 0000000..fd23efd --- /dev/null +++ b/docs/search/functions_4.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['dfeimplunprecon',['dfeImplUnprecon',['../BiConjugateGradient_8cpp.html#ac3a55e37d1559a049fcef0af776feb3b',1,'BiConjugateGradient.cpp']]], + ['dfespmv',['dfespmv',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a8c7ca2d2ac7284e46506f23728dde499',1,'spark::spmv::SimpleSpmvArchitecture::dfespmv()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1d557e23529a5040a858beafb9971acc',1,'spark::spmv::SpmvArchitecture::dfespmv()']]], + ['do_5fblocking',['do_blocking',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aedb22fc8e413dd6bc2c54d74bf03ed2d',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['do_5fpartition',['do_partition',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac3cd16da984d35b091f0833edd919a56',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['donext',['doNext',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abde19171c284739290c7a7c145d7deb7',1,'spark::spmv::SimpleSpmvArchitectureSpace::doNext()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a414ec6872fdf32550af1a6efbb4394d5',1,'spark::spmv::SpmvArchitectureSpace::doNext()']]], + ['dramspmvreductionkernel',['DramSpmvReductionKernel',['../classDramSpmvReductionKernel.html#a85cd96e69eec800ebfdea2c7bb6f7376',1,'DramSpmvReductionKernel']]], + ['dse_5frun',['dse_run',['../Dse_8cpp.html#a50c99f119df5ba972bbebeef76239c2e',1,'Dse.cpp']]], + ['dseresult',['DseResult',['../classspark_1_1dse_1_1DseResult.html#a1d1342fbcf4346f77de3cb29c23622ba',1,'spark::dse::DseResult::DseResult(std::string path, std::shared_ptr< spark::spmv::SpmvArchitecture > arch)'],['../classspark_1_1dse_1_1DseResult.html#ac8b6f838e0112d684058ee911b9e2ab5',1,'spark::dse::DseResult::DseResult(std::shared_ptr< spark::spmv::SpmvArchitecture > arch)']]] +]; diff --git a/docs/search/functions_5.html b/docs/search/functions_5.html new file mode 100644 index 0000000..1f1d9ce --- /dev/null +++ b/docs/search/functions_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js new file mode 100644 index 0000000..12a1cc3 --- /dev/null +++ b/docs/search/functions_5.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['eigenvectortostdvector',['eigenVectorToStdVector',['../namespacespark_1_1converters.html#a78a095076b8d4daa406d3dc9bca7504c',1,'spark::converters']]], + ['encodeemptyrows',['encodeEmptyRows',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#a0336d2d0c76a4ad1586b904bafaefb3d',1,'spark::spmv::SkipEmptyRowsArchitecture']]], + ['equals',['equals',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac9cd3ac1f8a7ff7c2634d707a2d33356',1,'spark::spmv::SimpleSpmvArchitecture::equals()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#aa3aebf2b76c95d7b96e37865637a1104',1,'spark::spmv::SpmvArchitecture::equals()']]] +]; diff --git a/docs/search/functions_6.html b/docs/search/functions_6.html new file mode 100644 index 0000000..c9faaa6 --- /dev/null +++ b/docs/search/functions_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js new file mode 100644 index 0000000..9dec5c9 --- /dev/null +++ b/docs/search/functions_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fls',['fls',['../classParallelCsrReadControl.html#aa9acfae4966606e3e5645eb1592f5736',1,'ParallelCsrReadControl']]], + ['fstspmvarchitecture',['FstSpmvArchitecture',['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#ab1db27169d0bc9921d4c5048592e3d24',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#add2548a017451c5caae61cd3e9021467',1,'spark::spmv::FstSpmvArchitecture::FstSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]] +]; diff --git a/docs/search/functions_7.html b/docs/search/functions_7.html new file mode 100644 index 0000000..ec330da --- /dev/null +++ b/docs/search/functions_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_7.js b/docs/search/functions_7.js new file mode 100644 index 0000000..e446bbe --- /dev/null +++ b/docs/search/functions_7.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['generatedspmvimplementation',['GeneratedSpmvImplementation',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a96cbb988649950498d305ac895ea2f6f',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['generatedspmvimplementationmock',['GeneratedSpmvImplementationMock',['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#af33e3e01c1d5fc32e69cb23c422e44d5',1,'spark::runtime::GeneratedSpmvImplementationMock']]], + ['get_5fbenchmark_5fsize',['get_benchmark_size',['../classspark_1_1dse_1_1Benchmark.html#a1692f6d32fb3d2a6de8ad8c85cf7fc39',1,'spark::dse::Benchmark']]], + ['get_5fmatrix_5fpath',['get_matrix_path',['../classspark_1_1dse_1_1Benchmark.html#a42578888522f08d21a620fa6ce17cfb3',1,'spark::dse::Benchmark']]], + ['get_5fname',['get_name',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac91efdbe0c3de7a45edde0052f478638',1,'spark::spmv::SimpleSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1FstSpmvArchitecture.html#a90397fa9aa179cb86021fac39afc3f27',1,'spark::spmv::FstSpmvArchitecture::get_name()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ae9604bff9ee8258920e8b599e0bb1a1d',1,'spark::spmv::SkipEmptyRowsArchitecture::get_name()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a91515587bbfe2ac62a891f17363d508f',1,'spark::spmv::PrefetchingArchitecture::get_name()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4dfdec260889947cf9844eed98e5dbbe',1,'spark::spmv::SpmvArchitecture::get_name()']]], + ['getcomputekernel',['getComputeKernel',['../classSpmvManager.html#a6776e0fc817b9cce1698ad46bef5c1ad',1,'SpmvManager']]], + ['getdramreductionenabled',['getDramReductionEnabled',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a6a77e31894e5bdd3d76a955484c942fb',1,'spark::runtime::GeneratedSpmvImplementation::getDramReductionEnabled()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a263a1bdfe74153bfd281e526423d1d40',1,'spark::runtime::GeneratedSpmvImplementationMock::getDramReductionEnabled()'],['../SpmvDeviceInterface_8h.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7455f3ef0da88ac52c353068d257471c',1,'getDramReductionEnabled(): SpmvDeviceInterface.cpp']]], + ['getestimatedclockcycles',['getEstimatedClockCycles',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ad109173c60a0469e99d188010e09fa9c',1,'spark::spmv::SimpleSpmvArchitecture::getEstimatedClockCycles()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#af60acfd57143cbb06c582bd6c1e6a3a9',1,'spark::spmv::SpmvArchitecture::getEstimatedClockCycles()']]], + ['getestimatedgflops',['getEstimatedGFlops',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a745a51a90e0d0e027be6f927e41e267a',1,'spark::spmv::SpmvArchitecture']]], + ['getfanoutname',['getFanoutName',['../classSpmvManager.html#aa4b9b4fd7299e8967130613ce89df06e',1,'SpmvManager']]], + ['getfrequency',['getFrequency',['../classspark_1_1spmv_1_1SpmvArchitecture.html#a3eafac9b3bffd4a17d86a6f99eb97503',1,'spark::spmv::SpmvArchitecture']]], + ['getgflopscount',['getGFlopsCount',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a1b45bc81758c2e9ef21e6620d8fbd4db',1,'spark::spmv::SimpleSpmvArchitecture::getGFlopsCount()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a1be404ebea121baa4b28f1548ad6207d',1,'spark::spmv::SpmvArchitecture::getGFlopsCount()']]], + ['getimplementationparameters',['getImplementationParameters',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3c5900f38fdfafa6481508d9c90819ff',1,'spark::spmv::SimpleSpmvArchitecture::getImplementationParameters()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a31274a6b708f9db92d810d2a161d812a',1,'spark::spmv::SpmvArchitecture::getImplementationParameters()']]], + ['getlibraryname',['getLibraryName',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a7dd9917bb3685f9235972026c3d72c49',1,'spark::spmv::SimpleSpmvArchitecture::getLibraryName()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a701b198937568b2f47f4beb05dc349cc',1,'spark::spmv::SpmvArchitecture::getLibraryName()']]], + ['getmatrixvalues',['getMatrixValues',['../classSpmvCacheKernel.html#a1c512fd317ade4f64a5e7f7215dd0c53',1,'SpmvCacheKernel']]], + ['getpaddingcycles',['getPaddingCycles',['../classSpmvManager.html#a64afe0643711d9cd06053a68f187f8da',1,'SpmvManager']]], + ['getpaddingkernel',['getPaddingKernel',['../classSpmvManager.html#a0cc931d1320ec4754066dacceeaff9c0',1,'SpmvManager']]], + ['getreadcontrol',['getReadControl',['../classSpmvManager.html#aca5d9419bca8dbc02b44df878cac0009',1,'SpmvManager']]], + ['getreductionkernel',['getReductionKernel',['../classSpmvManager.html#a0e7f3c94df7eafa7a899a2447f16155d',1,'SpmvManager']]], + ['getspmv_5finputwidth',['getSpmv_InputWidth',['../SpmvDeviceInterface_8h.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a7da25ac12467c17172038c1e670c08cf',1,'getSpmv_InputWidth(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fmaxrows',['getSpmv_MaxRows',['../SpmvDeviceInterface_8h.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4b12a86c9a868106e2ad57766f8bed12',1,'getSpmv_MaxRows(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fnumpipes',['getSpmv_NumPipes',['../SpmvDeviceInterface_8h.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#a4565bdddcd8404afd9b6fbd6dcf39ee0',1,'getSpmv_NumPipes(): SpmvDeviceInterface.cpp']]], + ['getspmv_5fpartitionsize',['getSpmv_PartitionSize',['../SpmvDeviceInterface_8h.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterface_8cpp.html#ad67c30a9c3947922102b25b24bef66f4',1,'getSpmv_PartitionSize(): SpmvDeviceInterface.cpp']]], + ['getunpaddingkernel',['getUnpaddingKernel',['../classSpmvManager.html#aff135aa6706cfaf3cea42f1353dd3ea7',1,'SpmvManager']]], + ['getvectorvalues',['getVectorValues',['../classSpmvCacheKernel.html#a937fcc2032a9fc1e390bef6cb425fd55',1,'SpmvCacheKernel']]] +]; diff --git a/docs/search/functions_8.html b/docs/search/functions_8.html new file mode 100644 index 0000000..afd4fac --- /dev/null +++ b/docs/search/functions_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js new file mode 100644 index 0000000..03e1dc5 --- /dev/null +++ b/docs/search/functions_8.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['implementationloader',['ImplementationLoader',['../classspark_1_1runtime_1_1ImplementationLoader.html#a878f373604956baae5db5198e9689132',1,'spark::runtime::ImplementationLoader']]], + ['implementationparameters',['ImplementationParameters',['../classspark_1_1model_1_1ImplementationParameters.html#af2b90d99043967462da25c003c7f7e17',1,'spark::model::ImplementationParameters']]], + ['indptr_5fvalue',['indptr_value',['../structspark_1_1spmv_1_1indptr__value.html#abf5ac17c5a8b83c68b8e421c9fb2b9f4',1,'spark::spmv::indptr_value::indptr_value(double _value, int _indptr)'],['../structspark_1_1spmv_1_1indptr__value.html#a1bb3b22d80c09f283b847a1fb907a462',1,'spark::spmv::indptr_value::indptr_value()'],['../SimpleSpmv_8hpp.html#ac37db725a01a5625a6a32d51d7fd3e78',1,'indptr_value(double _value, int _indptr): SimpleSpmv.hpp'],['../SimpleSpmv_8hpp.html#a84d257f77f20931d14a7e5abb9d099c8',1,'indptr_value(): SimpleSpmv.hpp']]], + ['inputwidth',['inputWidth',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#abe0a820e9d0d36ee8586d0abdca0eed5',1,'spark::runtime::GeneratedSpmvImplementation::inputWidth()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a1c25321fdf7068a9db469fb8cf62a0f5',1,'spark::runtime::GeneratedSpmvImplementationMock::inputWidth()']]], + ['interfacedefault',['interfaceDefault',['../classSpmvManager.html#ad0360a20a24483e22664a4bda8428ec6',1,'SpmvManager']]] +]; diff --git a/docs/search/functions_9.html b/docs/search/functions_9.html new file mode 100644 index 0000000..542b9e0 --- /dev/null +++ b/docs/search/functions_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js new file mode 100644 index 0000000..fee9158 --- /dev/null +++ b/docs/search/functions_9.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['load_5flibrary',['load_library',['../classspark_1_1execution_1_1SharedLibLoader.html#aa04c935e0dd9c179246655474c951ad1',1,'spark::execution::SharedLibLoader']]], + ['loadbenchmark',['loadBenchmark',['../main_8cpp.html#a75bc35b120d6b6f0834ae4d32856036c',1,'main.cpp']]], + ['loadparams',['loadParams',['../main_8cpp.html#a84bdcf570024843f14fc9624770bf035',1,'main.cpp']]], + ['logicresourceusage',['LogicResourceUsage',['../classspark_1_1model_1_1LogicResourceUsage.html#a5b88cae38db7b5ab535f4a17fa643a15',1,'spark::model::LogicResourceUsage::LogicResourceUsage()'],['../classspark_1_1model_1_1LogicResourceUsage.html#a64aef671cc1360f9c760eddecc95dfe5',1,'spark::model::LogicResourceUsage::LogicResourceUsage(int _l, int _f, int _b, int _d)'],['../classspark_1_1model_1_1LogicResourceUsage.html#a303a7df506637540e2b7eb4d871f9029',1,'spark::model::LogicResourceUsage::LogicResourceUsage(const LogicResourceUsage &ru)']]], + ['logresult',['logResult',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac30acafe28fa8aefac50da03b867f928',1,'spark::spmv::SimpleSpmvArchitecture::logResult(std::string s, std::vector< U > vals)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a2443f3bebc9b04350fe736fd17b199d2',1,'spark::spmv::SimpleSpmvArchitecture::logResult(std::string s, Arg a, Args...as)']]], + ['logresultr',['logResultR',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#abb11d2ac348c1bdc14ebb7f367b4db5d',1,'spark::spmv::SimpleSpmvArchitecture::logResultR(std::string s, Arg a, Args...as)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#aeda39c3024d1efa75e0714e25a8d919c',1,'spark::spmv::SimpleSpmvArchitecture::logResultR(std::string s)']]] +]; diff --git a/docs/search/functions_a.html b/docs/search/functions_a.html new file mode 100644 index 0000000..94fd395 --- /dev/null +++ b/docs/search/functions_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_a.js b/docs/search/functions_a.js new file mode 100644 index 0000000..e4239c0 --- /dev/null +++ b/docs/search/functions_a.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['main',['main',['../classSpmvManager.html#abf7df885f5ea650b0128628cad8bf33b',1,'SpmvManager.main()'],['../main_8cpp.html#a3c04138a5bfe5d72780bb7e82a18e627',1,'main(): main.cpp']]], + ['makecommand',['makeCommand',['../classParallelCsrReadControl.html#a75734eee54f3dfaaabf8794ba378ccfa',1,'ParallelCsrReadControl']]], + ['makeoutput',['makeOutput',['../classParallelCsrReadControl.html#a999c16ceab5da519c9e90a6b5765359c',1,'ParallelCsrReadControl']]], + ['maxrows',['maxRows',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ac32c1ffb1ce8a2ae4d4592a463c7d7aa',1,'spark::runtime::GeneratedSpmvImplementation::maxRows()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a209c982b13e58fedc9c9acbfd8a84440',1,'spark::runtime::GeneratedSpmvImplementationMock::maxRows()']]], + ['min',['min',['../classParallelCsrReadControl.html#af39c2cd937063656ee7d2bdb4a21e8db',1,'ParallelCsrReadControl']]], + ['mmparse',['mmparse',['../classspark_1_1io_1_1MmReader.html#a73bef88acba33d35b9f714365456ab39',1,'spark::io::MmReader']]], + ['mmreader',['MmReader',['../classspark_1_1io_1_1MmReader.html#a18da82e5b71af2ce6f5946f7b66f8cd5',1,'spark::io::MmReader']]], + ['mmreadmatrix',['mmreadMatrix',['../classspark_1_1io_1_1MmReader.html#ae0ed6d286d9c5c08ad3bd3e910f3554a',1,'spark::io::MmReader']]] +]; diff --git a/docs/search/functions_b.html b/docs/search/functions_b.html new file mode 100644 index 0000000..1a03617 --- /dev/null +++ b/docs/search/functions_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js new file mode 100644 index 0000000..9b91618 --- /dev/null +++ b/docs/search/functions_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['needtoread',['needToRead',['../classParallelCsrReadControl.html#af55c1da545422cde5c57c61a861017d8',1,'ParallelCsrReadControl']]], + ['next',['next',['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#aa9e55d9a1af4b951561705869dd2e2fe',1,'spark::spmv::SpmvArchitectureSpace']]], + ['nextstate',['nextState',['../classParallelCsrReadControl.html#acac4d268696bea31cb88a0293e7484ec',1,'ParallelCsrReadControl']]], + ['numpipes',['numPipes',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a69fd21c14863cb756e3e1f1014068a97',1,'spark::runtime::GeneratedSpmvImplementation::numPipes()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#ae26d5df16fcf6c40749e666ffe3257b3',1,'spark::runtime::GeneratedSpmvImplementationMock::numPipes()']]] +]; diff --git a/docs/search/functions_c.html b/docs/search/functions_c.html new file mode 100644 index 0000000..a6536e9 --- /dev/null +++ b/docs/search/functions_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_c.js b/docs/search/functions_c.js new file mode 100644 index 0000000..182b742 --- /dev/null +++ b/docs/search/functions_c.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['one',['one',['../classParallelCsrReadControl.html#af04777655393a3fb3dc8265c4047d0a6',1,'ParallelCsrReadControl']]], + ['operator_28_29',['operator()',['../structSpmvHash.html#a4655e26aca9f73c92dcbc679f7222e83',1,'SpmvHash::operator()()'],['../structSpmvEqual.html#aad8f140c593abd6997a30cf6833dcfc2',1,'SpmvEqual::operator()()']]], + ['operator_2a',['operator*',['../classspark_1_1model_1_1LogicResourceUsage.html#accca14ba38323db0242d77a654b22520',1,'spark::model::LogicResourceUsage::operator*(int x) const '],['../classspark_1_1model_1_1LogicResourceUsage.html#ae939cb8a86e0fe1209d312317627d3a1',1,'spark::model::LogicResourceUsage::operator*(double x) const ']]], + ['operator_2b',['operator+',['../classspark_1_1model_1_1LogicResourceUsage.html#a48bf8cd8225540f1fa0da63719657e6a',1,'spark::model::LogicResourceUsage']]], + ['operator_2b_2b',['operator++',['../structspark_1_1utils_1_1Range.html#a8623004edfe9d73657f831d1392fe579',1,'spark::utils::Range']]], + ['operator_3c',['operator<',['../classspark_1_1model_1_1LogicResourceUsage.html#aea20a053d751c2de91d491e38688f776',1,'spark::model::LogicResourceUsage::operator<()'],['../classspark_1_1model_1_1ImplementationParameters.html#acf5199cb8cb126ddb4977b02f1cebddd',1,'spark::model::ImplementationParameters::operator<()']]], + ['operator_3c_3c',['operator<<',['../namespacespark_1_1dse.html#a2cba03adcd7e6708f31a01eb270ffeb9',1,'spark::dse::operator<<(std::ostream &s, Benchmark &b)'],['../namespacespark_1_1dse.html#ae3baaf24604e126136d1d8b583fc389d',1,'spark::dse::operator<<(std::ostream &s, DseParameters &d)'],['../namespacespark_1_1spmv.html#ad1e89fa7b9bf647e70186d2dc8385961',1,'spark::spmv::operator<<()'],['../namespacespark_1_1utils.html#a58716b1e1a4e2b2a3115f339aba795ef',1,'spark::utils::operator<<()']]], + ['operator_3d_3d',['operator==',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a9ff8f85bf609bf02b087b39674dc1b25',1,'spark::spmv::SimpleSpmvArchitecture::operator==()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a113cc5b7d55d561f862e007e0252cc82',1,'spark::spmv::SpmvArchitecture::operator==()']]], + ['outputfunction',['outputFunction',['../classParallelCsrReadControl.html#a9f87d1cc0071a87de47a8ede3cd8508c',1,'ParallelCsrReadControl']]], + ['outputnotstall',['outputNotStall',['../classParallelCsrReadControl.html#a5ba3304bde2ca9c746fc58f4f632092e',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/functions_d.html b/docs/search/functions_d.html new file mode 100644 index 0000000..8cdcc06 --- /dev/null +++ b/docs/search/functions_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_d.js b/docs/search/functions_d.js new file mode 100644 index 0000000..bd142ad --- /dev/null +++ b/docs/search/functions_d.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['paddingkernel',['PaddingKernel',['../classPaddingKernel.html#a6087bd04eca705d5c45d7978892ba7b0',1,'PaddingKernel']]], + ['parallelcsrreadcontrol',['ParallelCsrReadControl',['../classParallelCsrReadControl.html#abcbdd7c1a9d3193fa28f097ffb47e110',1,'ParallelCsrReadControl']]], + ['parsebuildparams',['parseBuildParams',['../namespacespark_1_1userio.html#a3dd99cbd0dfbe620ddebf4f95351b15b',1,'spark::userio']]], + ['parseheader',['parseHeader',['../classspark_1_1io_1_1MmReader.html#a5f474abc81a8d634a45b80750d816df9',1,'spark::io::MmReader::parseHeader(std::string line)'],['../classspark_1_1io_1_1MmReader.html#a3575f75893a9ece651ef17b111d959fd',1,'spark::io::MmReader::parseHeader(bool pprint=false)']]], + ['prefetchingarchitecture',['PrefetchingArchitecture',['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#ae614b247e6e43b41b6ee2ec4565a55c6',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture()'],['../classspark_1_1spmv_1_1PrefetchingArchitecture.html#a12e8b6b4d9135f559d1800dacf5f25f1',1,'spark::spmv::PrefetchingArchitecture::PrefetchingArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['preprocess',['preprocess',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a3aed67e40e87a0ea0dd79fd30f76a7cf',1,'spark::spmv::SimpleSpmvArchitecture::preprocess()'],['../classspark_1_1sparse__linear__solvers_1_1Solver.html#ae5a1a27b9213613cf6d67dc6e635f42d',1,'spark::sparse_linear_solvers::Solver::preprocess()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a4f14b957c8585ed81ff2af46ab26340f',1,'spark::spmv::SpmvArchitecture::preprocess()']]], + ['preprocessblock',['preprocessBlock',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#adefa266d246a395b8a67a83912272e2d',1,'spark::spmv::SkipEmptyRowsArchitecture::preprocessBlock()'],['../classspark_1_1spmv_1_1SpmvArchitecture.html#a7cd5036aa7c21a4439b8ddfb8a969bf0',1,'spark::spmv::SpmvArchitecture::preprocessBlock()']]], + ['processrows',['processRows',['../classParallelCsrReadControl.html#a0860f8fe7c3841a51d7b9faa16b1f26a',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/functions_e.html b/docs/search/functions_e.html new file mode 100644 index 0000000..649b2c9 --- /dev/null +++ b/docs/search/functions_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_e.js b/docs/search/functions_e.js new file mode 100644 index 0000000..f7d1cbc --- /dev/null +++ b/docs/search/functions_e.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['range',['Range',['../structspark_1_1utils_1_1Range.html#af0ce17db5625ad22c87532891f4b890a',1,'spark::utils::Range::Range(int _s, int _e, int _stp)'],['../structspark_1_1utils_1_1Range.html#a6a3850b17634041447d86797929e9f2c',1,'spark::utils::Range::Range(std::string range)']]], + ['read',['read',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ab8bae0bfea8769c07ec9e24b1813b204',1,'spark::runtime::GeneratedSpmvImplementation::read()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#acd57170f2d13598d15f54973d4a579b9',1,'spark::runtime::GeneratedSpmvImplementationMock::read()']]], + ['readvector',['readVector',['../classspark_1_1io_1_1MmReader.html#a3aa3d0ea6867f58d326674b632f7b045',1,'spark::io::MmReader']]], + ['resolvevectorreads',['resolveVectorReads',['../classSpmvCacheKernel.html#a8c2591875950cd9bb288c779aacccd54',1,'SpmvCacheKernel']]], + ['restart',['restart',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a50a6bb214092c694e0c3e8b9978f607c',1,'spark::spmv::SimpleSpmvArchitectureSpace::restart()'],['../classspark_1_1spmv_1_1SpmvArchitectureSpace.html#a76b80d8f6d287bf6b90f38a0ac215354',1,'spark::spmv::SpmvArchitectureSpace::restart()'],['../structspark_1_1utils_1_1Range.html#a05c07c975dd7bf3ba8a097044258aa5a',1,'spark::utils::Range::restart()']]], + ['run',['run',['../classspark_1_1dse_1_1SparkDse.html#abefe26e252597bb164ef8236e5460210',1,'spark::dse::SparkDse']]] +]; diff --git a/docs/search/functions_f.html b/docs/search/functions_f.html new file mode 100644 index 0000000..386c7d4 --- /dev/null +++ b/docs/search/functions_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/functions_f.js b/docs/search/functions_f.js new file mode 100644 index 0000000..26e0aef --- /dev/null +++ b/docs/search/functions_f.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['selectvalues',['selectValues',['../classSpmvCacheKernel.html#a3864c0d130426bcad05724a9a864c7db',1,'SpmvCacheKernel']]], + ['setupcomputepipe',['setUpComputePipe',['../classSpmvManager.html#a8f777c0e6b5572b85bf90427b1419039',1,'SpmvManager']]], + ['setupunpaddingkernel',['setupUnpaddingKernel',['../classSpmvManager.html#a42510179831b9c539721ffbf0506c0f2',1,'SpmvManager']]], + ['sharedlibloader',['SharedLibLoader',['../classspark_1_1execution_1_1SharedLibLoader.html#ab53348ee739c8cae93b1be38e0ddb342',1,'spark::execution::SharedLibLoader']]], + ['simplespmvarchitecture',['SimpleSpmvArchitecture',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae0357e972b3380edb382868d3616542d',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a254d3c473b526699bdf5d7994da756b9',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a84c629c0046f93dbd7892d970650c767',1,'spark::spmv::SimpleSpmvArchitecture::SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation *_impl)']]], + ['simplespmvarchitecturespace',['SimpleSpmvArchitectureSpace',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a045eb9b1b8b025ae7ebff4a4f6cd3246',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace(spark::utils::Range numPipesRange, spark::utils::Range inputWidthRange, spark::utils::Range cacheSizeRange, int _maxRows)'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#abd7023a217d39076e9c47a4226580c4f',1,'spark::spmv::SimpleSpmvArchitectureSpace::SimpleSpmvArchitectureSpace()']]], + ['size_5fbytes',['size_bytes',['../Spmv_8cpp.html#a725a1b7ac05f04b3bc61b2a270346ea6',1,'Spmv.cpp']]], + ['skipemptyrowsarchitecture',['SkipEmptyRowsArchitecture',['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ad7f11ef476f1343c237b4bd41f19559b',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture()'],['../classspark_1_1spmv_1_1SkipEmptyRowsArchitecture.html#ab8dadd53ee054e2152cd86b979b4304e',1,'spark::spmv::SkipEmptyRowsArchitecture::SkipEmptyRowsArchitecture(int _cacheSize, int _inputWidth, int _numPipes, int _maxRows)']]], + ['smallestmultiplelargerthan',['smallestMultipleLargerThan',['../classSpmvManager.html#a3297286373eb2b5536b6cc04481cc996',1,'SpmvManager']]], + ['solve',['solve',['../classspark_1_1sparse__linear__solvers_1_1Solver.html#aeab2189d0b72aaeda51f9defb2fd64b4',1,'spark::sparse_linear_solvers::Solver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1EigenSolver.html#a3c0f45b239cb7127fe8da07673cbfd52',1,'spark::sparse_linear_solvers::EigenSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeCgSolver.html#a55a4b35ed35b40ee3f712024d9b45206',1,'spark::sparse_linear_solvers::DfeCgSolver::solve()'],['../classspark_1_1sparse__linear__solvers_1_1DfeBiCgSolver.html#adaa588ced5dd2ce56da4cc095c88c4c3',1,'spark::sparse_linear_solvers::DfeBiCgSolver::solve()']]], + ['solvebicg',['solveBICG',['../SparseLinearSolvers_8cpp.html#a0917711c5c1de1d6fc6d3f5c2fa08c47',1,'SparseLinearSolvers.cpp']]], + ['solvecg',['solveCG',['../SparseLinearSolvers_8cpp.html#a857d72c794d4097e9a37e2a1a6839567',1,'SparseLinearSolvers.cpp']]], + ['solvelu',['solveLU',['../SparseLinearSolvers_8cpp.html#abdc884f0c76856917e9821d6242ee98a',1,'SparseLinearSolvers.cpp']]], + ['sparkcoomatrix',['SparkCooMatrix',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ad81f39eca4950c1e4623cdb120f094b0',1,'spark::sparse::SparkCooMatrix']]], + ['sparkdse',['SparkDse',['../classspark_1_1dse_1_1SparkDse.html#acf3f66892ae92b0d4c4d0e250da9ebde',1,'spark::dse::SparkDse']]], + ['spmv',['Spmv',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a7b466d50691186b19e72887aa7cd4227',1,'spark::runtime::GeneratedSpmvImplementation::Spmv()'],['../classspark_1_1runtime_1_1GeneratedSpmvImplementationMock.html#a51277607133bd9efc7d05df0c398923a',1,'spark::runtime::GeneratedSpmvImplementationMock::Spmv()'],['../SpmvDeviceInterface_8h.html#a2f0caf835f75923c7b64abf5b530f56a',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a2f0caf835f75923c7b64abf5b530f56a',1,'Spmv(int64_t param_nIterations, int64_t param_nPartitions, int64_t param_vectorLoadCycles, const int64_t *param_colPtrStartAddresses, const int32_t *param_colptrSizes, const int64_t *param_indptrValuesAddresses, const int32_t *param_indptrValuesSizes, const int32_t *param_nrows, const int64_t *param_outStartAddresses, const int32_t *param_reductionCycles, const int32_t *param_totalCycles, const int64_t *param_vStartAddresses): SpmvDeviceInterfaceMock.cpp']]], + ['spmv_5fdramread',['Spmv_dramRead',['../SpmvDeviceInterface_8h.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#adebd1881a3ee58569e68ed629237f86e',1,'Spmv_dramRead(int64_t param_size_bytes, int64_t param_start_bytes, uint8_t *outstream_tocpu): SpmvDeviceInterfaceMock.cpp']]], + ['spmv_5fdramwrite',['Spmv_dramWrite',['../SpmvDeviceInterface_8h.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp'],['../SpmvDeviceInterfaceMock_8cpp.html#a3638c97531a2affd1e27a0c2418b8314',1,'Spmv_dramWrite(int64_t param_size_bytes, int64_t param_start_bytes, const uint8_t *instream_fromcpu): SpmvDeviceInterfaceMock.cpp']]], + ['spmvcachekernel',['SpmvCacheKernel',['../classSpmvCacheKernel.html#acd4688b7b45eb067763e70a072acc496',1,'SpmvCacheKernel']]], + ['spmvimplementationloader',['SpmvImplementationLoader',['../classspark_1_1runtime_1_1SpmvImplementationLoader.html#a074828b53d9f547867fe20e1fe55f5b9',1,'spark::runtime::SpmvImplementationLoader']]], + ['spmvkernel',['SpmvKernel',['../classSpmvKernel.html#ad09b317bceedc13d1f50865cbdb4cd91',1,'SpmvKernel']]], + ['spmvmanager',['SpmvManager',['../classSpmvManager.html#aaeaf51093060e192ab53048bf0c2fa9d',1,'SpmvManager']]], + ['spmvreductionkernel',['SpmvReductionKernel',['../classSpmvReductionKernel.html#a6cf50bef530943f0e812c5a684b2b26a',1,'SpmvReductionKernel']]], + ['stdvectortoeigen',['stdvectorToEigen',['../namespacespark_1_1converters.html#aa6e224b8b4ce34ca7a1683910b0dd9c2',1,'spark::converters']]] +]; diff --git a/docs/search/mag_sel.png b/docs/search/mag_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..81f6040a2092402b4d98f9ffa8855d12a0d4ca17 GIT binary patch literal 563 zcmV-30?hr1P)zxx&tqG15pu7)IiiXFflOc2k;dXd>%13GZAy? zRz!q0=|E6a6vV)&ZBS~G9oe0kbqyw1*gvY`{Pop2oKq#FlzgXt@Xh-7fxh>}`Fxg> z$%N%{$!4=5nM{(;=c!aG1Ofr^Do{u%Ih{^&Fc@H2)+a-?TBXrw5DW&z%Nb6mQ!L9O zl}b@6mB?f=tX3;#vl)}ggh(Vpyh(IK z(Mb0D{l{U$FsRjP;!{($+bsaaVi8T#1c0V#qEIOCYa9@UVLV`f__E81L;?WEaRA;Y zUH;rZ;vb;mk7JX|$=i3O~&If0O@oZfLg8gfIjW=dcBsz;gI=!{-r4# z4%6v$&~;q^j7Fo67yJ(NJWuX+I~I!tj^nW3?}^9bq|<3^+vapS5sgM^x7!cs(+mMT z&y%j};&~po+YO)3hoUH4E*E;e9>?R6SS&`X)p`njycAVcg{rEb41T{~Hk(bl-7eSb zmFxA2uIqo#@R?lKm50ND`~6Nfn|-b1|L6O98vt3Tx@gKz#isxO002ovPDHLkV1kyW B_l^Jn literal 0 HcmV?d00001 diff --git a/docs/search/namespaces_0.html b/docs/search/namespaces_0.html new file mode 100644 index 0000000..dc60686 --- /dev/null +++ b/docs/search/namespaces_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/namespaces_0.js b/docs/search/namespaces_0.js new file mode 100644 index 0000000..0d506d1 --- /dev/null +++ b/docs/search/namespaces_0.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['converters',['converters',['../namespacespark_1_1converters.html',1,'spark']]], + ['dse',['dse',['../namespacespark_1_1dse.html',1,'spark']]], + ['execution',['execution',['../namespacespark_1_1execution.html',1,'spark']]], + ['file_5futils',['file_utils',['../namespacespark_1_1file__utils.html',1,'spark']]], + ['io',['io',['../namespacespark_1_1io.html',1,'spark']]], + ['model',['model',['../namespacespark_1_1model.html',1,'spark']]], + ['runtime',['runtime',['../namespacespark_1_1runtime.html',1,'spark']]], + ['spark',['spark',['../namespacespark.html',1,'']]], + ['sparse',['sparse',['../namespacespark_1_1sparse.html',1,'spark']]], + ['sparse_5flinear_5fsolvers',['sparse_linear_solvers',['../namespacespark_1_1sparse__linear__solvers.html',1,'spark']]], + ['spmv',['spmv',['../namespacespark_1_1spmv.html',1,'spark']]], + ['userio',['userio',['../namespacespark_1_1userio.html',1,'spark']]], + ['utils',['utils',['../namespacespark_1_1utils.html',1,'spark']]] +]; diff --git a/docs/search/nomatches.html b/docs/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/docs/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/docs/search/pages_0.html b/docs/search/pages_0.html new file mode 100644 index 0000000..c51c834 --- /dev/null +++ b/docs/search/pages_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js new file mode 100644 index 0000000..23a40bb --- /dev/null +++ b/docs/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['spark',['spark',['../md_README.html',1,'']]] +]; diff --git a/docs/search/pages_1.html b/docs/search/pages_1.html new file mode 100644 index 0000000..2a98fce --- /dev/null +++ b/docs/search/pages_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/pages_1.js b/docs/search/pages_1.js new file mode 100644 index 0000000..5872fa2 --- /dev/null +++ b/docs/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['user_5fguide',['user_guide',['../md_docs_user_guide.html',1,'']]] +]; diff --git a/docs/search/search.css b/docs/search/search.css new file mode 100644 index 0000000..4d7612f --- /dev/null +++ b/docs/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/docs/search/search.js b/docs/search/search.js new file mode 100644 index 0000000..fece696 --- /dev/null +++ b/docs/search/search.js @@ -0,0 +1,807 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ + 0: "_abcdefghilmnoprstuvwz~", + 1: "bdefgilmprsu", + 2: "s", + 3: "bcdefgimprsu", + 4: "_abcdefgilmnoprstuwz~", + 5: "_abcdefghilmnoprstv", + 6: "cepsuv", + 7: "su" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "namespaces", + 3: "files", + 4: "functions", + 5: "variables", + 6: "typedefs", + 7: "pages" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; ek7RCwB~R6VQOP#AvB$vH7i{6H{96zot$7cZT<7246EF5Np6N}+$IbiG6W zg#87A+NFaX+=_^xM1#gCtshC=E{%9^uQX_%?YwXvo{#q&MnpJ8uh(O?ZRc&~_1%^SsPxG@rfElJg-?U zm!Cz-IOn(qJP3kDp-^~qt+FGbl=5jNli^Wj_xIBG{Rc0en{!oFvyoNC7{V~T8}b>| z=jL2WIReZzX(YN(_9fV;BBD$VXQIxNasAL8ATvEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/docs/search/search_r.png b/docs/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..97ee8b439687084201b79c6f776a41f495c6392a GIT binary patch literal 612 zcmV-q0-ODbP)PbXFRCwB?)W514K@j&X?z2*SxFI6-@HT2E2K=9X9%Pb zEK*!TBw&g(DMC;|A)uGlRkOS9vd-?zNs%bR4d$w+ox_iFnE8fvIvv7^5<(>Te12Li z7C)9srCzmK{ZcNM{YIl9j{DePFgOWiS%xG@5CnnnJa4nvY<^glbz7^|-ZY!dUkAwd z{gaTC@_>b5h~;ug#R0wRL0>o5!hxm*s0VW?8dr}O#zXTRTnrQm_Z7z1Mrnx>&p zD4qifUjzLvbVVWi?l?rUzwt^sdb~d!f_LEhsRVIXZtQ=qSxuxqm zEX#tf>$?M_Y1-LSDT)HqG?`%-%ZpY!#{N!rcNIiL;G7F0`l?)mNGTD9;f9F5Up3Kg zw}a<-JylhG&;=!>B+fZaCX+?C+kHYrP%c?X2!Zu_olK|GcS4A70HEy;vn)I0>0kLH z`jc(WIaaHc7!HS@f*^R^Znx8W=_jIl2oWJoQ*h1^$FX!>*PqR1J8k|fw}w_y}TpE>7m8DqDO<3z`OzXt$ccSejbEZCg@0000 + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/typedefs_0.js b/docs/search/typedefs_0.js new file mode 100644 index 0000000..fde4000 --- /dev/null +++ b/docs/search/typedefs_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['coordtype',['CoordType',['../classspark_1_1io_1_1MmReader.html#a43348db7743f21cff1854197cf7f9819',1,'spark::io::MmReader::CoordType()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a9de150aa2a040306403bc97687b40f',1,'spark::sparse::SparkCooMatrix::CoordType()']]], + ['csrmatrix',['CsrMatrix',['../namespacespark_1_1sparse.html#a0f0d804dd8f37cb44a636bca7d03f016',1,'spark::sparse']]] +]; diff --git a/docs/search/typedefs_1.html b/docs/search/typedefs_1.html new file mode 100644 index 0000000..455fe2b --- /dev/null +++ b/docs/search/typedefs_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/typedefs_1.js b/docs/search/typedefs_1.js new file mode 100644 index 0000000..9629bd2 --- /dev/null +++ b/docs/search/typedefs_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['eigensparsematrix',['EigenSparseMatrix',['../namespacespark_1_1converters.html#a724347922bbc7e56429febfd000be78b',1,'spark::converters::EigenSparseMatrix()'],['../namespacespark_1_1spmv.html#a3235bbbc3c8db242db2f00947ec4ca9b',1,'spark::spmv::EigenSparseMatrix()']]] +]; diff --git a/docs/search/typedefs_2.html b/docs/search/typedefs_2.html new file mode 100644 index 0000000..fac5dba --- /dev/null +++ b/docs/search/typedefs_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/typedefs_2.js b/docs/search/typedefs_2.js new file mode 100644 index 0000000..34fccf0 --- /dev/null +++ b/docs/search/typedefs_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['partitionedcsrmatrix',['PartitionedCsrMatrix',['../namespacespark_1_1sparse.html#a15a8e3974007d1c440410bf83232f5dd',1,'spark::sparse']]] +]; diff --git a/docs/search/typedefs_3.html b/docs/search/typedefs_3.html new file mode 100644 index 0000000..9cb52e4 --- /dev/null +++ b/docs/search/typedefs_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/typedefs_3.js b/docs/search/typedefs_3.js new file mode 100644 index 0000000..5c68cd7 --- /dev/null +++ b/docs/search/typedefs_3.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['sparsematrix',['SparseMatrix',['../classspark_1_1io_1_1MmReader.html#a4b6628e5d0886325e152e8ffdae1964c',1,'spark::io::MmReader']]], + ['spmvdramreadfunctionptr',['SpmvDramReadFunctionPtr',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a6e776af1e59842d77e5c52b630c7285e',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['spmvdramwritefunctionptr',['SpmvDramWriteFunctionPtr',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a71dba3c10ed1d9a8ba37d5b757f702c8',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['spmvfunctionptr',['SpmvFunctionPtr',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a0d16762eb3714e898a6d30e71b34c377',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['ssarch',['ssarch',['../Spmv_8cpp.html#a73ed93bfd16d2b54084241251efe53ca',1,'Spmv.cpp']]] +]; diff --git a/docs/search/typedefs_4.html b/docs/search/typedefs_4.html new file mode 100644 index 0000000..64c6cce --- /dev/null +++ b/docs/search/typedefs_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/typedefs_4.js b/docs/search/typedefs_4.js new file mode 100644 index 0000000..97034de --- /dev/null +++ b/docs/search/typedefs_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['userinputparams',['UserInputParams',['../namespacespark_1_1userio.html#a61705a89ecd4794e1aaf8e56bc89a5ae',1,'spark::userio']]] +]; diff --git a/docs/search/typedefs_5.html b/docs/search/typedefs_5.html new file mode 100644 index 0000000..e014348 --- /dev/null +++ b/docs/search/typedefs_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/typedefs_5.js b/docs/search/typedefs_5.js new file mode 100644 index 0000000..85f7b36 --- /dev/null +++ b/docs/search/typedefs_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['vd',['Vd',['../BiConjugateGradient_8cpp.html#a61f485fb4164897d20404192b8a20927',1,'BiConjugateGradient.cpp']]] +]; diff --git a/docs/search/variables_0.html b/docs/search/variables_0.html new file mode 100644 index 0000000..1b8adc9 --- /dev/null +++ b/docs/search/variables_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_0.js b/docs/search/variables_0.js new file mode 100644 index 0000000..52e83e8 --- /dev/null +++ b/docs/search/variables_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['_5f_5fattribute_5f_5f',['__attribute__',['../namespacespark_1_1spmv.html#a8ad7d0fb384bbf6ef88a68b8cad95182',1,'spark::spmv']]] +]; diff --git a/docs/search/variables_1.html b/docs/search/variables_1.html new file mode 100644 index 0000000..78f63cd --- /dev/null +++ b/docs/search/variables_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_1.js b/docs/search/variables_1.js new file mode 100644 index 0000000..2be23ee --- /dev/null +++ b/docs/search/variables_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['addresst',['addressT',['../classSpmvCacheKernel.html#a33ae456838bd9708e94df43436703305',1,'SpmvCacheKernel']]] +]; diff --git a/docs/search/variables_10.html b/docs/search/variables_10.html new file mode 100644 index 0000000..c43ead3 --- /dev/null +++ b/docs/search/variables_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_10.js b/docs/search/variables_10.js new file mode 100644 index 0000000..b7f4366 --- /dev/null +++ b/docs/search/variables_10.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['sparse',['sparse',['../classspark_1_1io_1_1MmReader.html#abaeb856fe8052dada1094aeeba575482',1,'spark::io::MmReader']]], + ['start',['start',['../structspark_1_1utils_1_1Range.html#aa944c6fbb45db229c82ab2af62836237',1,'spark::utils::Range']]], + ['step',['step',['../structspark_1_1utils_1_1Range.html#adafa797e5802e578a9fffc6fc25b6a24',1,'spark::utils::Range']]], + ['symmetric',['symmetric',['../classspark_1_1io_1_1MmReader.html#a339fd452b0db39fdabb6fc9b9994624d',1,'spark::io::MmReader']]] +]; diff --git a/docs/search/variables_11.html b/docs/search/variables_11.html new file mode 100644 index 0000000..d9dbba9 --- /dev/null +++ b/docs/search/variables_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_11.js b/docs/search/variables_11.js new file mode 100644 index 0000000..44634f6 --- /dev/null +++ b/docs/search/variables_11.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['toread',['toread',['../classParallelCsrReadControl.html#af87a65fc4f7423554e3a36f0a059cbf1',1,'ParallelCsrReadControl']]], + ['totalcycles',['totalCycles',['../structspark_1_1spmv_1_1Partition.html#a2256e3b766ab51acd2be27a1975f0ed9',1,'spark::spmv::Partition']]], + ['totaloutputs',['totalOutputs',['../classParallelCsrReadControl.html#a869e17d0a43818cd085f01898143f2cc',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/variables_12.html b/docs/search/variables_12.html new file mode 100644 index 0000000..faca26f --- /dev/null +++ b/docs/search/variables_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_12.js b/docs/search/variables_12.js new file mode 100644 index 0000000..dc12861 --- /dev/null +++ b/docs/search/variables_12.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['value',['value',['../structspark_1_1spmv_1_1indptr__value.html#ae0073c7eec3c96ddf6ce38dedc3312b1',1,'spark::spmv::indptr_value::value()'],['../SimpleSpmv_8hpp.html#aee90379adb0307effb138f4871edbc5c',1,'value(): SimpleSpmv.hpp']]], + ['vector_5fload_5fcycles',['vector_load_cycles',['../structspark_1_1spmv_1_1Partition.html#a087b0019edb1ad8ef824ed7e26e19849',1,'spark::spmv::Partition']]], + ['vectorload',['VectorLoad',['../enumParallelCsrReadControl_1_1Mode.html#aa2414caa80d02424c7a80c3946160a2d',1,'ParallelCsrReadControl::Mode']]], + ['vectorloadcommands',['vectorLoadCommands',['../classParallelCsrReadControl.html#a4627fcdaeb69d3836053e91cc70a80f2',1,'ParallelCsrReadControl']]], + ['vectorloadcycles',['vectorLoadCycles',['../classParallelCsrReadControl.html#aa609515db6c67afd973f1d15431e1684',1,'ParallelCsrReadControl']]], + ['vectorvalues',['vectorValues',['../classSpmvCacheKernel.html#a866881c55c08adf35042aeeb18c9cffd',1,'SpmvCacheKernel']]], + ['vroms',['vroms',['../classSpmvCacheKernel.html#ad7249c675981ec57613b0f3d69a39342',1,'SpmvCacheKernel']]], + ['vstartaddress',['vStartAddress',['../structPartitionWriteResult.html#a2a1d5b0084ae204040066b7fe3a33b07',1,'PartitionWriteResult']]], + ['vtype',['vtype',['../classSpmvCacheKernel.html#a4a13093fa8aa4a3a053cf3d7122c6866',1,'SpmvCacheKernel']]] +]; diff --git a/docs/search/variables_2.html b/docs/search/variables_2.html new file mode 100644 index 0000000..ea80d20 --- /dev/null +++ b/docs/search/variables_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_2.js b/docs/search/variables_2.js new file mode 100644 index 0000000..2ad610f --- /dev/null +++ b/docs/search/variables_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['bestarchitecture',['bestArchitecture',['../classspark_1_1dse_1_1DseResult.html#a2a23395d873d124a4da624ed94ab4d76',1,'spark::dse::DseResult']]], + ['brams',['brams',['../classspark_1_1model_1_1LogicResourceUsage.html#a9e1bfd322976881da5fc6d0501ecbf32',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/docs/search/variables_3.html b/docs/search/variables_3.html new file mode 100644 index 0000000..0dca26f --- /dev/null +++ b/docs/search/variables_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_3.js b/docs/search/variables_3.js new file mode 100644 index 0000000..865bb21 --- /dev/null +++ b/docs/search/variables_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['cache_5fsize',['cache_size',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a9cb503ef9f3172c73bd3d2fc9d4564d2',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['cachesize',['cacheSize',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a0fd07f4d1e241d9bb5e525fc1f9c4ab2',1,'spark::spmv::SimpleSpmvArchitecture::cacheSize()'],['../classSpmvManager.html#a9a9f9ca14bf99119d5ed0d7106acdcd9',1,'SpmvManager.cacheSize()']]], + ['cachesizer',['cacheSizeR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a5eb1ea4c3054ef0b99c199732c004195',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['cachesizerange',['cacheSizeRange',['../classspark_1_1dse_1_1DseParameters.html#a407b33c26d55c84c1436a3535576f380',1,'spark::dse::DseParameters']]], + ['colptrsize',['colptrSize',['../structPartitionWriteResult.html#a1b1d42061ca85c85c68b12e3405743e5',1,'PartitionWriteResult']]], + ['colptrstartaddress',['colptrStartAddress',['../structPartitionWriteResult.html#a744ceeec06294048f07cd552a340118f',1,'PartitionWriteResult']]], + ['crt',['crt',['../structspark_1_1utils_1_1Range.html#a07fd2cc26cde356c3f1db74bedd31eb5',1,'spark::utils::Range']]], + ['crtpos',['crtPos',['../classParallelCsrReadControl.html#ab0f5b6539f65df26eccc3c40b234752c',1,'ParallelCsrReadControl']]], + ['cyclecounter',['cycleCounter',['../classParallelCsrReadControl.html#a51cfb6d5b02eb3e5b204e4ea8f16fce4',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/variables_4.html b/docs/search/variables_4.html new file mode 100644 index 0000000..400e8e9 --- /dev/null +++ b/docs/search/variables_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_4.js b/docs/search/variables_4.js new file mode 100644 index 0000000..bb3c88b --- /dev/null +++ b/docs/search/variables_4.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['data',['data',['../classspark_1_1sparse_1_1SparkCooMatrix.html#a4a0b72ae9e7b1deed9b6228cf40e9f32',1,'spark::sparse::SparkCooMatrix']]], + ['dbg',['dbg',['../classParallelCsrReadControl.html#a522323c9bbe60e7a02f48e1ff6f7db06',1,'ParallelCsrReadControl']]], + ['dbg_5fpar_5fcsr_5fctl',['DBG_PAR_CSR_CTL',['../classSpmvManager.html#a234ea438d3c8363b41db2581e3d8a51a',1,'SpmvManager']]], + ['dbg_5freduction_5fkernel',['DBG_REDUCTION_KERNEL',['../classSpmvManager.html#a5c29c11c95c8f9980aa3201d8f25ff3d',1,'SpmvManager']]], + ['dbg_5fspmv_5fkernel',['DBG_SPMV_KERNEL',['../classSpmvManager.html#aece403b7ff81eeebfaf75b35aacb2b1f',1,'SpmvManager']]], + ['done',['Done',['../enumParallelCsrReadControl_1_1Mode.html#a4af99d8c25b54128c920d384091485d0',1,'ParallelCsrReadControl::Mode']]], + ['dram_5freduction_5fenabled',['dram_reduction_enabled',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a1923e1b519a07ca526ada5cee811f955',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['dramread',['dramRead',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a1ce48c5da7060505ad44f95c2655c06a',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['dramreductionenabled',['dramReductionEnabled',['../classSpmvManager.html#adfc3a8c884874f553215941bf86692fa',1,'SpmvManager']]], + ['dramwrite',['dramWrite',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a903b93b96dad8d74bffb0ba1e3ec7937',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['dsps',['dsps',['../classspark_1_1model_1_1LogicResourceUsage.html#adb488affc0a051d6c8458d9e2a35d201',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/docs/search/variables_5.html b/docs/search/variables_5.html new file mode 100644 index 0000000..7f1241f --- /dev/null +++ b/docs/search/variables_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_5.js b/docs/search/variables_5.js new file mode 100644 index 0000000..7e93f66 --- /dev/null +++ b/docs/search/variables_5.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['emptycycles',['emptyCycles',['../structspark_1_1spmv_1_1Partition.html#a59dfdff4762b092034d952fe2e81f95c',1,'spark::spmv::Partition']]], + ['end',['end',['../structspark_1_1utils_1_1Range.html#a014c4c4aa8e0f0c9f9aaf954d3e8fba7',1,'spark::utils::Range']]] +]; diff --git a/docs/search/variables_6.html b/docs/search/variables_6.html new file mode 100644 index 0000000..7536df8 --- /dev/null +++ b/docs/search/variables_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_6.js b/docs/search/variables_6.js new file mode 100644 index 0000000..f60eeac --- /dev/null +++ b/docs/search/variables_6.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['f',['f',['../classspark_1_1io_1_1MmReader.html#a65848ca959d0961ab594205b40335072',1,'spark::io::MmReader']]], + ['ffs',['ffs',['../classspark_1_1model_1_1LogicResourceUsage.html#ad67dec36e8bd5ba1937687b538d97a8e',1,'spark::model::LogicResourceUsage']]], + ['firstreadposition',['firstReadPosition',['../classParallelCsrReadControl.html#af30ed96f729b948fec5bd989acc13a56',1,'ParallelCsrReadControl']]], + ['floating_5fpoint_5flatency',['FLOATING_POINT_LATENCY',['../classSpmvManager.html#a3a947b39653f09305c7712af18ddd113',1,'SpmvManager']]], + ['fpl',['fpL',['../classSpmvKernel.html#a0bf2a803445d2454781d5e09937de571',1,'SpmvKernel']]] +]; diff --git a/docs/search/variables_7.html b/docs/search/variables_7.html new file mode 100644 index 0000000..66186a6 --- /dev/null +++ b/docs/search/variables_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_7.js b/docs/search/variables_7.js new file mode 100644 index 0000000..d84bdee --- /dev/null +++ b/docs/search/variables_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gflopsonly',['gflopsOnly',['../classspark_1_1dse_1_1DseParameters.html#a903571a00336065eb295887170686770',1,'spark::dse::DseParameters']]] +]; diff --git a/docs/search/variables_8.html b/docs/search/variables_8.html new file mode 100644 index 0000000..aa13bf2 --- /dev/null +++ b/docs/search/variables_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_8.js b/docs/search/variables_8.js new file mode 100644 index 0000000..bb568d1 --- /dev/null +++ b/docs/search/variables_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['handle',['handle',['../classspark_1_1execution_1_1SharedLibLoader.html#a1a9fe4ed515e64c4b5a0cd24233599e7',1,'spark::execution::SharedLibLoader']]] +]; diff --git a/docs/search/variables_9.html b/docs/search/variables_9.html new file mode 100644 index 0000000..78cc249 --- /dev/null +++ b/docs/search/variables_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_9.js b/docs/search/variables_9.js new file mode 100644 index 0000000..54d083e --- /dev/null +++ b/docs/search/variables_9.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['ilength',['iLength',['../classParallelCsrReadControl.html#a85aaa3cdd7bbfe023bc74bcd02bc21b4',1,'ParallelCsrReadControl']]], + ['ilengthready',['iLengthReady',['../classParallelCsrReadControl.html#a7ffcf81575bcc0d92af9b198653dcf28',1,'ParallelCsrReadControl']]], + ['impl',['impl',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#af57f57adeebaae9edeb9db32b9579b28',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['impls',['impls',['../classspark_1_1runtime_1_1ImplementationLoader.html#a4d12a2b939120bb3f16a5603824c0189',1,'spark::runtime::ImplementationLoader']]], + ['indexwidth',['indexWidth',['../classSpmvManager.html#a01ee1f96ba381149f4233fae1c87c821',1,'SpmvManager']]], + ['indptr',['indptr',['../structspark_1_1spmv_1_1indptr__value.html#ae450af92f13728c597605f909eb7f3b6',1,'spark::spmv::indptr_value::indptr()'],['../SimpleSpmv_8hpp.html#a164fa1a90d7bd63f14e631438885cc69',1,'indptr(): SimpleSpmv.hpp']]], + ['indptrvaluessize',['indptrValuesSize',['../structPartitionWriteResult.html#a389a493dd0f322031a4b176ad7251cc1',1,'PartitionWriteResult']]], + ['indptrvaluesstartaddress',['indptrValuesStartAddress',['../structPartitionWriteResult.html#a2ca20725ee8dcb4aad19eac57bc5c957',1,'PartitionWriteResult']]], + ['indptrvector',['indptrVector',['../classSpmvCacheKernel.html#a334b1e969200dfe46d013bef0e5b1934',1,'SpmvCacheKernel']]], + ['input_5fwidth',['input_width',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a42d52b9e6c121e9284bfc5bbae863e75',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['inputwidth',['inputWidth',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a4083f351467c940c767fa9122d3a727c',1,'spark::spmv::SimpleSpmvArchitecture::inputWidth()'],['../classParallelCsrReadControl.html#a3458a62c53ce83128cedb6c7765ca6fc',1,'ParallelCsrReadControl.inputWidth()'],['../classSpmvManager.html#a778e13e71f500522f13c6207e6f4e8a4',1,'SpmvManager.inputWidth()']]], + ['inputwidthr',['inputWidthR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#ab7dd6b46e80d1fe85694b964ce761e85',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['inputwidthrange',['inputWidthRange',['../classspark_1_1dse_1_1DseParameters.html#af54d3b84a9781ce472374fb4d4dbecb1',1,'spark::dse::DseParameters']]], + ['iterationsprocessed',['iterationsProcessed',['../classParallelCsrReadControl.html#aca9dea6888fb835dc40d3df86fa60156',1,'ParallelCsrReadControl']]], + ['ivtype',['ivtype',['../classSpmvCacheKernel.html#a7fc692be3af6b331cdf30edbb6db98e6',1,'SpmvCacheKernel']]] +]; diff --git a/docs/search/variables_a.html b/docs/search/variables_a.html new file mode 100644 index 0000000..592abaa --- /dev/null +++ b/docs/search/variables_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_a.js b/docs/search/variables_a.js new file mode 100644 index 0000000..2cab6a9 --- /dev/null +++ b/docs/search/variables_a.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['last',['last',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a618c39ec4cde84cb595f089fb881ce7c',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['libpath',['libPath',['../classspark_1_1execution_1_1SharedLibLoader.html#af01a44b23ea21a6f653194aa8f312ee2',1,'spark::execution::SharedLibLoader']]], + ['luts',['luts',['../classspark_1_1model_1_1LogicResourceUsage.html#a620a5a18ce206d8dbc7cd5adbcb48d7b',1,'spark::model::LogicResourceUsage']]] +]; diff --git a/docs/search/variables_b.html b/docs/search/variables_b.html new file mode 100644 index 0000000..78052a1 --- /dev/null +++ b/docs/search/variables_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_b.js b/docs/search/variables_b.js new file mode 100644 index 0000000..aa0c3f1 --- /dev/null +++ b/docs/search/variables_b.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['m',['m',['../classspark_1_1sparse_1_1SparkCooMatrix.html#ae3892beabaaf78e2e9a67269c22c8f8e',1,'spark::sparse::SparkCooMatrix']]], + ['m_5fcolptr',['m_colptr',['../structspark_1_1spmv_1_1Partition.html#a8aa3fa9f9be247ab7e092f968122e3a7',1,'spark::spmv::Partition']]], + ['m_5fcolptr_5funpaddedlength',['m_colptr_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ac28e1c351c409032a1166678f800141b',1,'spark::spmv::Partition']]], + ['m_5findptr_5fvalues',['m_indptr_values',['../structspark_1_1spmv_1_1Partition.html#ae134d0793283258fb0f95433d5448bb2',1,'spark::spmv::Partition']]], + ['m_5findptr_5fvalues_5funpaddedlength',['m_indptr_values_unpaddedLength',['../structspark_1_1spmv_1_1Partition.html#ae9b189f7ec6c8fbd47202945dc3fef23',1,'spark::spmv::Partition']]], + ['mantissawidth',['mantissaWidth',['../classSpmvManager.html#a6c6ea06d3d9cb5f752e3cbc3ca7cbafa',1,'SpmvManager']]], + ['mat',['mat',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ae295666cf3885149b0e37766c4feffc7',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['matrices',['matrices',['../classspark_1_1dse_1_1DseResult.html#a797ff2ef1c189cb2cff7fa18cfede2a9',1,'spark::dse::DseResult']]], + ['matrix',['matrix',['../classspark_1_1io_1_1MmReader.html#a8bf3a76c76dad47d667f28052adbfaa5',1,'spark::io::MmReader']]], + ['matrixvalues',['matrixValues',['../classSpmvCacheKernel.html#a2c0074e62c391424c276981965dc4bf4',1,'SpmvCacheKernel']]], + ['max_5frows',['max_rows',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a5519058ca752a5dd30d53fc1d8280530',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['maxrows',['maxRows',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a577fd6e73f088b437a5632ba3ca89c61',1,'spark::spmv::SimpleSpmvArchitecture::maxRows()'],['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#acaac03fcff370b3f0945823b1f13a90f',1,'spark::spmv::SimpleSpmvArchitectureSpace::maxRows()'],['../classSpmvManager.html#a5746b324d3b38fc407d1577739b969ef',1,'SpmvManager.maxRows()']]], + ['memorybandwidth',['memoryBandwidth',['../classspark_1_1model_1_1ImplementationParameters.html#a7935fb3d5d9d782c66530a541d6f705c',1,'spark::model::ImplementationParameters']]], + ['mode',['mode',['../classParallelCsrReadControl.html#aa98eb2e85dadf134870803067fa13ad8',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/variables_c.html b/docs/search/variables_c.html new file mode 100644 index 0000000..b2260e4 --- /dev/null +++ b/docs/search/variables_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_c.js b/docs/search/variables_c.js new file mode 100644 index 0000000..8b9a5eb --- /dev/null +++ b/docs/search/variables_c.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['n',['n',['../structspark_1_1spmv_1_1Partition.html#a858144bacceb65f6b0c6caab04b0308b',1,'spark::spmv::Partition::n()'],['../classspark_1_1sparse_1_1SparkCooMatrix.html#a582426cd2434334fe15c5f3c23aa0c54',1,'spark::sparse::SparkCooMatrix::n()']]], + ['nblocks',['nBlocks',['../structspark_1_1spmv_1_1Partition.html#a3084298925d168aafc1affa127bb4ef2',1,'spark::spmv::Partition']]], + ['ncols',['ncols',['../classspark_1_1io_1_1MmReader.html#a7b783ac977c5badcd28069cea5368adc',1,'spark::io::MmReader']]], + ['niterations',['nIterations',['../classParallelCsrReadControl.html#ad8041b856c97ae1d5ac6ea96a5cb0b04',1,'ParallelCsrReadControl']]], + ['nnzs',['nnzs',['../classspark_1_1io_1_1MmReader.html#a55b7ae127a34af4d09bca7079c443866',1,'spark::io::MmReader']]], + ['npartitions',['nPartitions',['../classParallelCsrReadControl.html#a82a4d8d9d682f6c65537975de9483540',1,'ParallelCsrReadControl']]], + ['nrows',['nRows',['../classParallelCsrReadControl.html#afda30a96f0ffe1c758ce548cfd8d5907',1,'ParallelCsrReadControl.nRows()'],['../classspark_1_1io_1_1MmReader.html#a3698c442e4b847c2f1479dd11fef9a15',1,'spark::io::MmReader::nrows()']]], + ['num_5fpipes',['num_pipes',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#ad67d01b403f7203c61c55866e0409257',1,'spark::runtime::GeneratedSpmvImplementation']]], + ['numpipes',['numPipes',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#ac51f502488f2b7d2dbffb5a9939b4271',1,'spark::spmv::SimpleSpmvArchitecture::numPipes()'],['../classSpmvManager.html#a2b1f61839183d1301ddc3975f4ad3ae9',1,'SpmvManager.numPipes()']]], + ['numpipesr',['numPipesR',['../classspark_1_1spmv_1_1SimpleSpmvArchitectureSpace.html#a2250dba56bfc36df530fcba2ae8e5573',1,'spark::spmv::SimpleSpmvArchitectureSpace']]], + ['numpipesrange',['numPipesRange',['../classspark_1_1dse_1_1DseParameters.html#a312071f767470577bf393c3d190d72bd',1,'spark::dse::DseParameters']]] +]; diff --git a/docs/search/variables_d.html b/docs/search/variables_d.html new file mode 100644 index 0000000..f477999 --- /dev/null +++ b/docs/search/variables_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_d.js b/docs/search/variables_d.js new file mode 100644 index 0000000..d893fb3 --- /dev/null +++ b/docs/search/variables_d.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['ocontrol',['oControl',['../classParallelCsrReadControl.html#acadabffbfd3d06c672dabfe98ee0ca23',1,'ParallelCsrReadControl']]], + ['ocontroldata',['oControlData',['../classParallelCsrReadControl.html#acfc1f32a0362606d06eeb514a7738af8',1,'ParallelCsrReadControl']]], + ['outputtingcommands',['OutputtingCommands',['../enumParallelCsrReadControl_1_1Mode.html#a1fe6df0a1446f33e43e80b9ad3e0cd49',1,'ParallelCsrReadControl::Mode']]], + ['outsize',['outSize',['../structspark_1_1spmv_1_1Partition.html#a4653f40c7d63f4c663190b209b6373d7',1,'spark::spmv::Partition::outSize()'],['../structPartitionWriteResult.html#a7cc1bba9c690f9a66fa15add6d1763e6',1,'PartitionWriteResult::outSize()']]], + ['outstartaddr',['outStartAddr',['../structPartitionWriteResult.html#a93f6f5c23c1f0f7e18f319f3e33aee61',1,'PartitionWriteResult']]], + ['outvalid',['outValid',['../classParallelCsrReadControl.html#a998688c17de6d3dee32bb3005124d484',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/variables_e.html b/docs/search/variables_e.html new file mode 100644 index 0000000..1165006 --- /dev/null +++ b/docs/search/variables_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_e.js b/docs/search/variables_e.js new file mode 100644 index 0000000..ea40354 --- /dev/null +++ b/docs/search/variables_e.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['paddingcycles',['paddingCycles',['../structspark_1_1spmv_1_1Partition.html#a611bc144e0b0f3e4075e4fa27137669f',1,'spark::spmv::Partition']]], + ['partitions',['partitions',['../classspark_1_1spmv_1_1SimpleSpmvArchitecture.html#a90e1699cd2d8ee0abd21e4461d8c7d32',1,'spark::spmv::SimpleSpmvArchitecture']]], + ['partitionsprocessed',['partitionsProcessed',['../classParallelCsrReadControl.html#abaf944d93404a6d08eaa4f17e8ee4d0c',1,'ParallelCsrReadControl']]], + ['path',['path',['../classspark_1_1io_1_1MmReader.html#a853387b508034ba82ede19c2500c5030',1,'spark::io::MmReader']]], + ['paths',['paths',['../classspark_1_1dse_1_1Benchmark.html#aa21c70d1c142db7c1ee3fb81fc5e81c5',1,'spark::dse::Benchmark']]], + ['prevdata',['prevData',['../classParallelCsrReadControl.html#aae3d7861bddbf53bea616be8e308afa8',1,'ParallelCsrReadControl']]] +]; diff --git a/docs/search/variables_f.html b/docs/search/variables_f.html new file mode 100644 index 0000000..537dd7c --- /dev/null +++ b/docs/search/variables_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/docs/search/variables_f.js b/docs/search/variables_f.js new file mode 100644 index 0000000..4439285 --- /dev/null +++ b/docs/search/variables_f.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['readinglength',['ReadingLength',['../enumParallelCsrReadControl_1_1Mode.html#a0bf9792309f43608f812f047b288bcd9',1,'ParallelCsrReadControl::Mode']]], + ['readlength',['readLength',['../classParallelCsrReadControl.html#afe43fc900641b277ae1069dde875a88b',1,'ParallelCsrReadControl']]], + ['readmaskdata',['readMaskData',['../classParallelCsrReadControl.html#a0f2333314c34fb9b3a1cd57c7d2d6d37',1,'ParallelCsrReadControl']]], + ['reductioncycles',['reductionCycles',['../structspark_1_1spmv_1_1Partition.html#abf0e3c933b315809c50c6e68506bb174',1,'spark::spmv::Partition']]], + ['rowlengthdata',['rowLengthData',['../classParallelCsrReadControl.html#a309e5d2abd0d3bdaca25a19f280cd029',1,'ParallelCsrReadControl']]], + ['rowsprocessed',['rowsProcessed',['../classParallelCsrReadControl.html#ad0b253e90543c25af346b9afff908d87',1,'ParallelCsrReadControl']]], + ['ru',['ru',['../classspark_1_1model_1_1ImplementationParameters.html#ac82ef6a8d3fd73cd40fff27d1ec9b943',1,'spark::model::ImplementationParameters']]], + ['runspmv',['runSpmv',['../classspark_1_1runtime_1_1GeneratedSpmvImplementation.html#a531009b6858338ca6fcc646d1e7d0d85',1,'spark::runtime::GeneratedSpmvImplementation']]] +]; diff --git a/docs/structPartitionWriteResult-members.html b/docs/structPartitionWriteResult-members.html new file mode 100644 index 0000000..4c34276 --- /dev/null +++ b/docs/structPartitionWriteResult-members.html @@ -0,0 +1,132 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/structPartitionWriteResult.html b/docs/structPartitionWriteResult.html new file mode 100644 index 0000000..59c0815 --- /dev/null +++ b/docs/structPartitionWriteResult.html @@ -0,0 +1,232 @@ + + + + + + +Spark: PartitionWriteResult Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
PartitionWriteResult Struct Reference
+
+
+ + + + + + + + + + + + + + + + +

+Public Attributes

int outStartAddr
 
int outSize
 
int colptrStartAddress
 
int colptrSize
 
int vStartAddress
 
int indptrValuesStartAddress
 
int indptrValuesSize
 
+

Member Data Documentation

+ +
+
+ + + + +
int PartitionWriteResult::colptrSize
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::colptrStartAddress
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::indptrValuesSize
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::indptrValuesStartAddress
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::outSize
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::outStartAddr
+
+ +
+
+ +
+
+ + + + +
int PartitionWriteResult::vStartAddress
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+
+ + + + diff --git a/docs/structPartitionWriteResult.js b/docs/structPartitionWriteResult.js new file mode 100644 index 0000000..b43ef6b --- /dev/null +++ b/docs/structPartitionWriteResult.js @@ -0,0 +1,10 @@ +var structPartitionWriteResult = +[ + [ "colptrSize", "structPartitionWriteResult.html#a1b1d42061ca85c85c68b12e3405743e5", null ], + [ "colptrStartAddress", "structPartitionWriteResult.html#a744ceeec06294048f07cd552a340118f", null ], + [ "indptrValuesSize", "structPartitionWriteResult.html#a389a493dd0f322031a4b176ad7251cc1", null ], + [ "indptrValuesStartAddress", "structPartitionWriteResult.html#a2ca20725ee8dcb4aad19eac57bc5c957", null ], + [ "outSize", "structPartitionWriteResult.html#a7cc1bba9c690f9a66fa15add6d1763e6", null ], + [ "outStartAddr", "structPartitionWriteResult.html#a93f6f5c23c1f0f7e18f319f3e33aee61", null ], + [ "vStartAddress", "structPartitionWriteResult.html#a2a1d5b0084ae204040066b7fe3a33b07", null ] +]; \ No newline at end of file diff --git a/docs/structSpmvEqual-members.html b/docs/structSpmvEqual-members.html new file mode 100644 index 0000000..b515d5c --- /dev/null +++ b/docs/structSpmvEqual-members.html @@ -0,0 +1,126 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SpmvEqual Member List
+
+
+ +

This is the complete list of members for SpmvEqual, including all inherited members.

+ + +
operator()(const std::shared_ptr< SpmvArchitecture > &a, const std::shared_ptr< SpmvArchitecture > &b) const SpmvEqualinline
+
+ + + + diff --git a/docs/structSpmvEqual.html b/docs/structSpmvEqual.html new file mode 100644 index 0000000..07703f7 --- /dev/null +++ b/docs/structSpmvEqual.html @@ -0,0 +1,170 @@ + + + + + + +Spark: SpmvEqual Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SpmvEqual Struct Reference
+
+
+ + + + +

+Public Member Functions

bool operator() (const std::shared_ptr< SpmvArchitecture > &a, const std::shared_ptr< SpmvArchitecture > &b) const
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool SpmvEqual::operator() (const std::shared_ptr< SpmvArchitecture > & a,
const std::shared_ptr< SpmvArchitecture > & b 
) const
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+
+ + + + diff --git a/docs/structSpmvEqual.js b/docs/structSpmvEqual.js new file mode 100644 index 0000000..9c44876 --- /dev/null +++ b/docs/structSpmvEqual.js @@ -0,0 +1,4 @@ +var structSpmvEqual = +[ + [ "operator()", "structSpmvEqual.html#aad8f140c593abd6997a30cf6833dcfc2", null ] +]; \ No newline at end of file diff --git a/docs/structSpmvHash-members.html b/docs/structSpmvHash-members.html new file mode 100644 index 0000000..643b7a3 --- /dev/null +++ b/docs/structSpmvHash-members.html @@ -0,0 +1,126 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
SpmvHash Member List
+
+
+ +

This is the complete list of members for SpmvHash, including all inherited members.

+ + +
operator()(const std::shared_ptr< SpmvArchitecture > &a) const SpmvHashinline
+
+ + + + diff --git a/docs/structSpmvHash.html b/docs/structSpmvHash.html new file mode 100644 index 0000000..2ee5199 --- /dev/null +++ b/docs/structSpmvHash.html @@ -0,0 +1,160 @@ + + + + + + +Spark: SpmvHash Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
SpmvHash Struct Reference
+
+
+ + + + +

+Public Member Functions

std::size_t operator() (const std::shared_ptr< SpmvArchitecture > &a) const
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
std::size_t SpmvHash::operator() (const std::shared_ptr< SpmvArchitecture > & a) const
+
+inline
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+
+ + + + diff --git a/docs/structSpmvHash.js b/docs/structSpmvHash.js new file mode 100644 index 0000000..e659011 --- /dev/null +++ b/docs/structSpmvHash.js @@ -0,0 +1,4 @@ +var structSpmvHash = +[ + [ "operator()", "structSpmvHash.html#a4655e26aca9f73c92dcbc679f7222e83", null ] +]; \ No newline at end of file diff --git a/docs/structspark_1_1runtime_1_1GeneratedImplementation-members.html b/docs/structspark_1_1runtime_1_1GeneratedImplementation-members.html new file mode 100644 index 0000000..1be51b3 --- /dev/null +++ b/docs/structspark_1_1runtime_1_1GeneratedImplementation-members.html @@ -0,0 +1,126 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::runtime::GeneratedImplementation Member List
+
+
+ +

This is the complete list of members for spark::runtime::GeneratedImplementation, including all inherited members.

+ + +
~GeneratedImplementation()spark::runtime::GeneratedImplementationinlinevirtual
+
+ + + + diff --git a/docs/structspark_1_1runtime_1_1GeneratedImplementation.html b/docs/structspark_1_1runtime_1_1GeneratedImplementation.html new file mode 100644 index 0000000..d4f343c --- /dev/null +++ b/docs/structspark_1_1runtime_1_1GeneratedImplementation.html @@ -0,0 +1,171 @@ + + + + + + +Spark: spark::runtime::GeneratedImplementation Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::runtime::GeneratedImplementation Struct Reference
+
+
+ +

#include <GeneratedImplSupport.hpp>

+
+Inheritance diagram for spark::runtime::GeneratedImplementation:
+
+
+ + +spark::runtime::GeneratedSpmvImplementation +spark::runtime::GeneratedSpmvImplementationMock + +
+ + + + +

+Public Member Functions

virtual ~GeneratedImplementation ()
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual spark::runtime::GeneratedImplementation::~GeneratedImplementation ()
+
+inlinevirtual
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+
+ + + + diff --git a/docs/structspark_1_1runtime_1_1GeneratedImplementation.js b/docs/structspark_1_1runtime_1_1GeneratedImplementation.js new file mode 100644 index 0000000..7fd4448 --- /dev/null +++ b/docs/structspark_1_1runtime_1_1GeneratedImplementation.js @@ -0,0 +1,4 @@ +var structspark_1_1runtime_1_1GeneratedImplementation = +[ + [ "~GeneratedImplementation", "structspark_1_1runtime_1_1GeneratedImplementation.html#a285ba0d76acd1a1da62204158aec3625", null ] +]; \ No newline at end of file diff --git a/docs/structspark_1_1runtime_1_1GeneratedImplementation.png b/docs/structspark_1_1runtime_1_1GeneratedImplementation.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c48d070cdddeb55aaf1bc2cd657fbe9ee9963a GIT binary patch literal 1633 zcmbuAc{r3?9LL`wC8h1Aa4pwz6_OU*38PCi-XRskTUiHTMlzSNgtTbkieVzms2;NP zSVq}qVldo7g%O6jvXp%p+c1obxud#E_utO*oO8av=bYy}=lOm==Q%N_Y>?7Y@=^c* zNQ0K35%xLof=i|4!m7`=9Vb6~GV9<0j(X3ZCe zfWUGa*3!{wseb48)N+ZLJG~F5mr8^T9d{N@zuMj9+NWl0&RNT5nmtbtE_gfsHZVE8 zfo0HQ>{WUWB{=ZLMZyL`UiMD&#(G~bc^cf=D#$TbiwU#G=1=-P(a9Xt+vxpB8s=Qu zeXZO6@?&0pT2dSQ-g!iakMDDOaXTS7IK#ckC~&AZX?m)5?uILY{b2Zo@Xa}m3a_Kb zC{6sCMFBq6}0PUb2xH$TZ%$`&=Yy&TiP;>cS2aE;wU zq;J|wvOpFajb#;1jqRUjdzN6Defk2*$owjLNGF@_z_Im16Jj%CFLkp$hcfK$r9HkW%Xdt}R*q%~)6wVnP;o-O)ox{{P+1{vy zoj!9qPI1$<8L1!V75w(0NQV1){mV$wd|&_G(M8-Ak+o`TUi(6%oj0_>uy0Kt(;7*S zN)N0S@8^aB>j0XFgxy4Bqu9*0HA?Jn?gKW6qPI%@_i2773IBcNUyqv2pa!(?2SNwa zxeccGvVJ99T;t*MrT+$m9+Iq%Z7%tws)`VTZHfk?K_P66j@8-aL_hfQO?h7A{ z@=iS~bKO++m-wb8xancY5p8wv{}6NJn2>Y*lWe9e)EMRJAw@>kVYij*A{n-dyN zq8#NIeuidbjP=2?wq;D_BBkEU(MuxO&M)=rt>e6wn!H+^8ox^8Kl+~mUa-OjfJvXb#7YqvI{FW7tHPo?j!xQrJ)ch&N zAv+u^Gx9XypnoN~ARTju=6qtYf6#o)^+_;M8ym3jAtf9iirMXCW<VkhO75is+f!F0vN6wssOaGNK?#Oi>8ns)F + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ + + + + + diff --git a/docs/structspark_1_1spmv_1_1Partition.html b/docs/structspark_1_1spmv_1_1Partition.html new file mode 100644 index 0000000..f7b46a6 --- /dev/null +++ b/docs/structspark_1_1spmv_1_1Partition.html @@ -0,0 +1,334 @@ + + + + + + +Spark: spark::spmv::Partition Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv::Partition Struct Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+ + + + +

+Public Member Functions

std::string to_string ()
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

int nBlocks
 
int n
 
int paddingCycles
 
int totalCycles
 
int vector_load_cycles
 
int outSize
 
int reductionCycles
 
int emptyCycles
 
int m_colptr_unpaddedLength
 
int m_indptr_values_unpaddedLength
 
std::vector< int > m_colptr
 
std::vector< indptr_value > m_indptr_values
 
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
std::string spark::spmv::Partition::to_string ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
int spark::spmv::Partition::emptyCycles
+
+ +
+
+ +
+
+ + + + +
std::vector<int> spark::spmv::Partition::m_colptr
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::m_colptr_unpaddedLength
+
+ +
+
+ +
+
+ + + + +
std::vector<indptr_value> spark::spmv::Partition::m_indptr_values
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::m_indptr_values_unpaddedLength
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::n
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::nBlocks
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::outSize
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::paddingCycles
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::reductionCycles
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::totalCycles
+
+ +
+
+ +
+
+ + + + +
int spark::spmv::Partition::vector_load_cycles
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+
+ + + + diff --git a/docs/structspark_1_1spmv_1_1Partition.js b/docs/structspark_1_1spmv_1_1Partition.js new file mode 100644 index 0000000..f38a437 --- /dev/null +++ b/docs/structspark_1_1spmv_1_1Partition.js @@ -0,0 +1,16 @@ +var structspark_1_1spmv_1_1Partition = +[ + [ "to_string", "structspark_1_1spmv_1_1Partition.html#a11004c0342811a57bba97bf31c823d64", null ], + [ "emptyCycles", "structspark_1_1spmv_1_1Partition.html#a59dfdff4762b092034d952fe2e81f95c", null ], + [ "m_colptr", "structspark_1_1spmv_1_1Partition.html#a8aa3fa9f9be247ab7e092f968122e3a7", null ], + [ "m_colptr_unpaddedLength", "structspark_1_1spmv_1_1Partition.html#ac28e1c351c409032a1166678f800141b", null ], + [ "m_indptr_values", "structspark_1_1spmv_1_1Partition.html#ae134d0793283258fb0f95433d5448bb2", null ], + [ "m_indptr_values_unpaddedLength", "structspark_1_1spmv_1_1Partition.html#ae9b189f7ec6c8fbd47202945dc3fef23", null ], + [ "n", "structspark_1_1spmv_1_1Partition.html#a858144bacceb65f6b0c6caab04b0308b", null ], + [ "nBlocks", "structspark_1_1spmv_1_1Partition.html#a3084298925d168aafc1affa127bb4ef2", null ], + [ "outSize", "structspark_1_1spmv_1_1Partition.html#a4653f40c7d63f4c663190b209b6373d7", null ], + [ "paddingCycles", "structspark_1_1spmv_1_1Partition.html#a611bc144e0b0f3e4075e4fa27137669f", null ], + [ "reductionCycles", "structspark_1_1spmv_1_1Partition.html#abf0e3c933b315809c50c6e68506bb174", null ], + [ "totalCycles", "structspark_1_1spmv_1_1Partition.html#a2256e3b766ab51acd2be27a1975f0ed9", null ], + [ "vector_load_cycles", "structspark_1_1spmv_1_1Partition.html#a087b0019edb1ad8ef824ed7e26e19849", null ] +]; \ No newline at end of file diff --git a/docs/structspark_1_1spmv_1_1indptr__value-members.html b/docs/structspark_1_1spmv_1_1indptr__value-members.html new file mode 100644 index 0000000..5c4e977 --- /dev/null +++ b/docs/structspark_1_1spmv_1_1indptr__value-members.html @@ -0,0 +1,129 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::spmv::indptr_value Member List
+
+
+ +

This is the complete list of members for spark::spmv::indptr_value, including all inherited members.

+ + + + + +
indptrspark::spmv::indptr_value
indptr_value(double _value, int _indptr)spark::spmv::indptr_valueinline
indptr_value()spark::spmv::indptr_valueinline
valuespark::spmv::indptr_value
+
+ + + + diff --git a/docs/structspark_1_1spmv_1_1indptr__value.html b/docs/structspark_1_1spmv_1_1indptr__value.html new file mode 100644 index 0000000..44d4857 --- /dev/null +++ b/docs/structspark_1_1spmv_1_1indptr__value.html @@ -0,0 +1,230 @@ + + + + + + +Spark: spark::spmv::indptr_value Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::spmv::indptr_value Struct Reference
+
+
+ +

#include <SimpleSpmv.hpp>

+ + + + + + +

+Public Member Functions

 indptr_value (double _value, int _indptr)
 
 indptr_value ()
 
+ + + + + +

+Public Attributes

double value
 
int indptr
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
spark::spmv::indptr_value::indptr_value (double _value,
int _indptr 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
spark::spmv::indptr_value::indptr_value ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
int spark::spmv::indptr_value::indptr
+
+ +
+
+ +
+
+ + + + +
double spark::spmv::indptr_value::value
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+
+ + + + diff --git a/docs/structspark_1_1spmv_1_1indptr__value.js b/docs/structspark_1_1spmv_1_1indptr__value.js new file mode 100644 index 0000000..757decc --- /dev/null +++ b/docs/structspark_1_1spmv_1_1indptr__value.js @@ -0,0 +1,7 @@ +var structspark_1_1spmv_1_1indptr__value = +[ + [ "indptr_value", "structspark_1_1spmv_1_1indptr__value.html#abf5ac17c5a8b83c68b8e421c9fb2b9f4", null ], + [ "indptr_value", "structspark_1_1spmv_1_1indptr__value.html#a1bb3b22d80c09f283b847a1fb907a462", null ], + [ "indptr", "structspark_1_1spmv_1_1indptr__value.html#ae450af92f13728c597605f909eb7f3b6", null ], + [ "value", "structspark_1_1spmv_1_1indptr__value.html#ae0073c7eec3c96ddf6ce38dedc3312b1", null ] +]; \ No newline at end of file diff --git a/docs/structspark_1_1utils_1_1Range-members.html b/docs/structspark_1_1utils_1_1Range-members.html new file mode 100644 index 0000000..898530b --- /dev/null +++ b/docs/structspark_1_1utils_1_1Range-members.html @@ -0,0 +1,135 @@ + + + + + + +Spark: Member List + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
spark::utils::Range Member List
+
+
+ +

This is the complete list of members for spark::utils::Range, including all inherited members.

+ + + + + + + + + + + +
at_start()spark::utils::Rangeinline
crtspark::utils::Range
endspark::utils::Range
operator++()spark::utils::Rangeinline
Range(int _s, int _e, int _stp)spark::utils::Rangeinline
Range(std::string range)spark::utils::Rangeinline
restart()spark::utils::Rangeinline
startspark::utils::Range
stepspark::utils::Range
to_string()spark::utils::Rangeinline
+
+ + + + diff --git a/docs/structspark_1_1utils_1_1Range.html b/docs/structspark_1_1utils_1_1Range.html new file mode 100644 index 0000000..439a8be --- /dev/null +++ b/docs/structspark_1_1utils_1_1Range.html @@ -0,0 +1,366 @@ + + + + + + +Spark: spark::utils::Range Struct Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+ +
+
spark::utils::Range Struct Reference
+
+
+ +

#include <Utils.hpp>

+ + + + + + + + + + + + + + +

+Public Member Functions

 Range (int _s, int _e, int _stp)
 
 Range (std::string range)
 
std::string to_string ()
 
void restart ()
 
bool at_start ()
 
int operator++ ()
 
+ + + + + + + + + +

+Public Attributes

int start
 
int end
 
int step
 
int crt
 
+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
spark::utils::Range::Range (int _s,
int _e,
int _stp 
)
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
spark::utils::Range::Range (std::string range)
+
+inline
+
+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool spark::utils::Range::at_start ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int spark::utils::Range::operator++ ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void spark::utils::Range::restart ()
+
+inline
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string spark::utils::Range::to_string ()
+
+inline
+
+ +
+
+

Member Data Documentation

+ +
+
+ + + + +
int spark::utils::Range::crt
+
+ +
+
+ +
+
+ + + + +
int spark::utils::Range::end
+
+ +
+
+ +
+
+ + + + +
int spark::utils::Range::start
+
+ +
+
+ +
+
+ + + + +
int spark::utils::Range::step
+
+ +
+
+
The documentation for this struct was generated from the following file: +
+
+ + + + diff --git a/docs/structspark_1_1utils_1_1Range.js b/docs/structspark_1_1utils_1_1Range.js new file mode 100644 index 0000000..aedb545 --- /dev/null +++ b/docs/structspark_1_1utils_1_1Range.js @@ -0,0 +1,13 @@ +var structspark_1_1utils_1_1Range = +[ + [ "Range", "structspark_1_1utils_1_1Range.html#af0ce17db5625ad22c87532891f4b890a", null ], + [ "Range", "structspark_1_1utils_1_1Range.html#a6a3850b17634041447d86797929e9f2c", null ], + [ "at_start", "structspark_1_1utils_1_1Range.html#a2e5c2a068b494d96fa3bb9bc81f3b98b", null ], + [ "operator++", "structspark_1_1utils_1_1Range.html#a8623004edfe9d73657f831d1392fe579", null ], + [ "restart", "structspark_1_1utils_1_1Range.html#a05c07c975dd7bf3ba8a097044258aa5a", null ], + [ "to_string", "structspark_1_1utils_1_1Range.html#ae03ddb2296e4c08b7756adc10847b4b9", null ], + [ "crt", "structspark_1_1utils_1_1Range.html#a07fd2cc26cde356c3f1db74bedd31eb5", null ], + [ "end", "structspark_1_1utils_1_1Range.html#a014c4c4aa8e0f0c9f9aaf954d3e8fba7", null ], + [ "start", "structspark_1_1utils_1_1Range.html#aa944c6fbb45db229c82ab2af62836237", null ], + [ "step", "structspark_1_1utils_1_1Range.html#adafa797e5802e578a9fffc6fc25b6a24", null ] +]; \ No newline at end of file diff --git a/docs/structure_8md.html b/docs/structure_8md.html new file mode 100644 index 0000000..32b9f07 --- /dev/null +++ b/docs/structure_8md.html @@ -0,0 +1,121 @@ + + + + + + +Spark: docs/structure.md File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
docs/structure.md File Reference
+
+
+
+
+ + + + diff --git a/docs/sync_off.png b/docs/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..3b443fc62892114406e3d399421b2a881b897acc GIT binary patch literal 853 zcmV-b1FHOqP)oT|#XixUYy%lpuf3i8{fX!o zUyDD0jOrAiT^tq>fLSOOABs-#u{dV^F$b{L9&!2=9&RmV;;8s^x&UqB$PCj4FdKbh zoB1WTskPUPu05XzFbA}=KZ-GP1fPpAfSs>6AHb12UlR%-i&uOlTpFNS7{jm@mkU1V zh`nrXr~+^lsV-s1dkZOaI|kYyVj3WBpPCY{n~yd%u%e+d=f%`N0FItMPtdgBb@py; zq@v6NVArhyTC7)ULw-Jy8y42S1~4n(3LkrW8mW(F-4oXUP3E`e#g**YyqI7h-J2zK zK{m9##m4ri!7N>CqQqCcnI3hqo1I;Yh&QLNY4T`*ptiQGozK>FF$!$+84Z`xwmeMh zJ0WT+OH$WYFALEaGj2_l+#DC3t7_S`vHpSivNeFbP6+r50cO8iu)`7i%Z4BTPh@_m3Tk!nAm^)5Bqnr%Ov|Baunj#&RPtRuK& z4RGz|D5HNrW83-#ydk}tVKJrNmyYt-sTxLGlJY5nc&Re zU4SgHNPx8~Yxwr$bsju?4q&%T1874xxzq+_%?h8_ofw~(bld=o3iC)LUNR*BY%c0y zWd_jX{Y8`l%z+ol1$@Qa?Cy!(0CVIEeYpKZ`(9{z>3$CIe;pJDQk$m3p}$>xBm4lb zKo{4S)`wdU9Ba9jJbVJ0C=SOefZe%d$8=2r={nu<_^a3~>c#t_U6dye5)JrR(_a^E f@}b6j1K9lwFJq@>o)+Ry00000NkvXXu0mjfWa5j* literal 0 HcmV?d00001 diff --git a/docs/sync_on.png b/docs/sync_on.png new file mode 100644 index 0000000000000000000000000000000000000000..e08320fb64e6fa33b573005ed6d8fe294e19db76 GIT binary patch literal 845 zcmV-T1G4;yP)Y;xxyHF2B5Wzm| zOOGupOTn@c(JmBOl)e;XMNnZuiTJP>rM8<|Q`7I_))aP?*T)ow&n59{}X4$3Goat zgjs?*aasfbrokzG5cT4K=uG`E14xZl@z)F={P0Y^?$4t z>v!teRnNZym<6h{7sLyF1V0HsfEl+l6TrZpsfr1}luH~F7L}ktXu|*uVX^RG$L0`K zWs3j|0tIvVe(N%_?2{(iCPFGf#B6Hjy6o&}D$A%W%jfO8_W%ZO#-mh}EM$LMn7joJ z05dHr!5Y92g+31l<%i1(=L1a1pXX+OYnalY>31V4K}BjyRe3)9n#;-cCVRD_IG1fT zOKGeNY8q;TL@K{dj@D^scf&VCs*-Jb>8b>|`b*osv52-!A?BpbYtTQBns5EAU**$m zSnVSm(teh>tQi*S*A>#ySc=n;`BHz`DuG4&g4Kf8lLhca+zvZ7t7RflD6-i-mcK=M z!=^P$*u2)bkY5asG4gsss!Hn%u~>}kIW`vMs%lJLH+u*9<4PaV_c6U`KqWXQH%+Nu zTv41O(^ZVi@qhjQdG!fbZw&y+2o!iYymO^?ud3{P*HdoX83YV*Uu_HB=?U&W9%AU# z80}k1SS-CXTU7dcQlsm<^oYLxVSseqY6NO}dc`Nj?8vrhNuCdm@^{a3AQ_>6myOj+ z`1RsLUXF|dm|3k7s2jD(B{rzE>WI2scH8i1;=O5Cc9xB3^aJk%fQjqsu+kH#0=_5a z0nCE8@dbQa-|YIuUVvG0L_IwHMEhOj$Mj4Uq05 X8=0q~qBNan00000NkvXXu0mjfptF>5 literal 0 HcmV?d00001 diff --git a/docs/tab_a.png b/docs/tab_a.png new file mode 100644 index 0000000000000000000000000000000000000000..3b725c41c5a527a3a3e40097077d0e206a681247 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QlXwMjv*C{Z|8b*H5dputLHD# z=<0|*y7z(Vor?d;H&?EG&cXR}?!j-Lm&u1OOI7AIF5&c)RFE;&p0MYK>*Kl@eiymD r@|NpwKX@^z+;{u_Z~trSBfrMKa%3`zocFjEXaR$#tDnm{r-UW|TZ1%4 literal 0 HcmV?d00001 diff --git a/docs/tab_b.png b/docs/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e2b4a8638cb3496a016eaed9e16ffc12846dea18 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QU#tajv*C{Z}0l@H7kg?K0Lnr z!j&C6_(~HV9oQ0Pa6x{-v0AGV_E?vLn=ZI-;YrdjIl`U`uzuDWSP?o#Dmo{%SgM#oan kX~E1%D-|#H#QbHoIja2U-MgvsK&LQxy85}Sb4q9e0Efg%P5=M^ literal 0 HcmV?d00001 diff --git a/docs/tabs.css b/docs/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/docs/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/docs/user__guide_8md.html b/docs/user__guide_8md.html new file mode 100644 index 0000000..37f33c3 --- /dev/null +++ b/docs/user__guide_8md.html @@ -0,0 +1,121 @@ + + + + + + +Spark: docs/user_guide.md File Reference + + + + + + + + + + + + + +
+
+ + + + + + +
+
Spark +
+
+
+ + + + + +
+
+ +
+
+
+ +
+ + + + +
+ +
+ +
+
+
docs/user_guide.md File Reference
+
+
+
+
+ + + + From 0e5ad3a4d33e643787c19dc452fbdfe1eeed5355 Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Mon, 30 Nov 2015 21:26:12 +0000 Subject: [PATCH 05/23] Add top level index --- index.html | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 0000000..552e1ff --- /dev/null +++ b/index.html @@ -0,0 +1,3 @@ +Welcome! This is a page in progress... + +Check out the docs in the meantime! From a96332de83ee016063c8f70ef04ade6b01cfb195 Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Mon, 30 Nov 2015 21:35:14 +0000 Subject: [PATCH 06/23] Update coverage --- coverage/amber.png | Bin 0 -> 141 bytes .../NumericUtils.hpp.func-sort-c.html | 88 +++ .../dfesnippets/NumericUtils.hpp.func.html | 88 +++ .../dfesnippets/NumericUtils.hpp.gcov.html | 106 ++++ .../dfesnippets/Timing.hpp.func-sort-c.html | 80 +++ .../include/dfesnippets/Timing.hpp.func.html | 80 +++ .../include/dfesnippets/Timing.hpp.gcov.html | 127 +++++ .../include/dfesnippets/index-sort-f.html | 103 ++++ .../include/dfesnippets/index-sort-l.html | 103 ++++ .../include/dfesnippets/index.html | 103 ++++ coverage/emerald.png | Bin 0 -> 141 bytes coverage/gcov.css | 519 ++++++++++++++++++ coverage/glass.png | Bin 0 -> 167 bytes .../Spark/Converters.hpp.func-sort-c.html | 84 +++ .../include/Spark/Converters.hpp.func.html | 84 +++ .../include/Spark/Converters.hpp.gcov.html | 125 +++++ .../include/Spark/Dse.hpp.func-sort-c.html | 124 +++++ coverage/include/Spark/Dse.hpp.func.html | 124 +++++ coverage/include/Spark/Dse.hpp.gcov.html | 164 ++++++ .../Spark/FileUtils.hpp.func-sort-c.html | 76 +++ .../include/Spark/FileUtils.hpp.func.html | 76 +++ .../include/Spark/FileUtils.hpp.gcov.html | 107 ++++ .../GeneratedImplSupport.hpp.func-sort-c.html | 116 ++++ .../Spark/GeneratedImplSupport.hpp.func.html | 116 ++++ .../Spark/GeneratedImplSupport.hpp.gcov.html | 338 ++++++++++++ .../include/Spark/Io.hpp.func-sort-c.html | 112 ++++ coverage/include/Spark/Io.hpp.func.html | 112 ++++ coverage/include/Spark/Io.hpp.gcov.html | 253 +++++++++ .../include/Spark/Model.hpp.func-sort-c.html | 112 ++++ coverage/include/Spark/Model.hpp.func.html | 112 ++++ coverage/include/Spark/Model.hpp.gcov.html | 163 ++++++ .../Spark/SimpleSpmv.hpp.func-sort-c.html | 188 +++++++ .../include/Spark/SimpleSpmv.hpp.func.html | 188 +++++++ .../include/Spark/SimpleSpmv.hpp.gcov.html | 462 ++++++++++++++++ .../SparseLinearSolvers.hpp.func-sort-c.html | 80 +++ .../Spark/SparseLinearSolvers.hpp.func.html | 80 +++ .../Spark/SparseLinearSolvers.hpp.gcov.html | 124 +++++ .../Spark/SparseMatrix.hpp.func-sort-c.html | 80 +++ .../include/Spark/SparseMatrix.hpp.func.html | 80 +++ .../include/Spark/SparseMatrix.hpp.gcov.html | 103 ++++ .../include/Spark/Spmv.hpp.func-sort-c.html | 120 ++++ coverage/include/Spark/Spmv.hpp.func.html | 120 ++++ coverage/include/Spark/Spmv.hpp.gcov.html | 160 ++++++ .../include/Spark/Utils.hpp.func-sort-c.html | 96 ++++ coverage/include/Spark/Utils.hpp.func.html | 96 ++++ coverage/include/Spark/Utils.hpp.gcov.html | 141 +++++ coverage/include/Spark/index-sort-f.html | 193 +++++++ coverage/include/Spark/index-sort-l.html | 193 +++++++ coverage/include/Spark/index.html | 193 +++++++ coverage/index-sort-f.html | 163 ++++++ coverage/index-sort-l.html | 163 ++++++ coverage/index.html | 163 ++++++ coverage/ruby.png | Bin 0 -> 141 bytes coverage/snow.png | Bin 0 -> 141 bytes .../SparseLinearSolvers.cpp.func-sort-c.html | 96 ++++ .../src/SparseLinearSolvers.cpp.func.html | 96 ++++ .../src/SparseLinearSolvers.cpp.gcov.html | 142 +++++ coverage/src/dse/Dse.cpp.func-sort-c.html | 100 ++++ coverage/src/dse/Dse.cpp.func.html | 100 ++++ coverage/src/dse/Dse.cpp.gcov.html | 243 ++++++++ coverage/src/dse/index-sort-f.html | 93 ++++ coverage/src/dse/index-sort-l.html | 93 ++++ coverage/src/dse/index.html | 93 ++++ .../SharedLibLoader.cpp.func-sort-c.html | 96 ++++ .../execution/SharedLibLoader.cpp.func.html | 96 ++++ .../execution/SharedLibLoader.cpp.gcov.html | 128 +++++ coverage/src/execution/index-sort-f.html | 93 ++++ coverage/src/execution/index-sort-l.html | 93 ++++ coverage/src/execution/index.html | 93 ++++ coverage/src/index-sort-f.html | 103 ++++ coverage/src/index-sort-l.html | 103 ++++ coverage/src/index.html | 103 ++++ coverage/src/main.cpp.func-sort-c.html | 96 ++++ coverage/src/main.cpp.func.html | 96 ++++ coverage/src/main.cpp.gcov.html | 235 ++++++++ .../src/spmv/src/Spmv.cpp.func-sort-c.html | 120 ++++ coverage/src/spmv/src/Spmv.cpp.func.html | 120 ++++ coverage/src/spmv/src/Spmv.cpp.gcov.html | 398 ++++++++++++++ coverage/src/spmv/src/index-sort-f.html | 93 ++++ coverage/src/spmv/src/index-sort-l.html | 93 ++++ coverage/src/spmv/src/index.html | 93 ++++ coverage/tests/index-sort-f.html | 113 ++++ coverage/tests/index-sort-l.html | 113 ++++ coverage/tests/index.html | 113 ++++ .../test_architecture.cpp.func-sort-c.html | 84 +++ .../tests/test_architecture.cpp.func.html | 84 +++ .../tests/test_architecture.cpp.gcov.html | 154 ++++++ coverage/tests/test_spmv.cpp.func-sort-c.html | 88 +++ coverage/tests/test_spmv.cpp.func.html | 88 +++ coverage/tests/test_spmv.cpp.gcov.html | 160 ++++++ .../tests/test_utils.hpp.func-sort-c.html | 132 +++++ coverage/tests/test_utils.hpp.func.html | 132 +++++ coverage/tests/test_utils.hpp.gcov.html | 245 +++++++++ coverage/unit-tests/index-sort-f.html | 93 ++++ coverage/unit-tests/index-sort-l.html | 93 ++++ coverage/unit-tests/index.html | 93 ++++ .../unit-tests/spmv_test.cpp.func-sort-c.html | 88 +++ coverage/unit-tests/spmv_test.cpp.func.html | 88 +++ coverage/unit-tests/spmv_test.cpp.gcov.html | 87 +++ coverage/updown.png | Bin 0 -> 117 bytes 100 files changed, 12337 insertions(+) create mode 100644 coverage/amber.png create mode 100644 coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func-sort-c.html create mode 100644 coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func.html create mode 100644 coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.gcov.html create mode 100644 coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func-sort-c.html create mode 100644 coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func.html create mode 100644 coverage/dfe-snippets/include/dfesnippets/Timing.hpp.gcov.html create mode 100644 coverage/dfe-snippets/include/dfesnippets/index-sort-f.html create mode 100644 coverage/dfe-snippets/include/dfesnippets/index-sort-l.html create mode 100644 coverage/dfe-snippets/include/dfesnippets/index.html create mode 100644 coverage/emerald.png create mode 100644 coverage/gcov.css create mode 100644 coverage/glass.png create mode 100644 coverage/include/Spark/Converters.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/Converters.hpp.func.html create mode 100644 coverage/include/Spark/Converters.hpp.gcov.html create mode 100644 coverage/include/Spark/Dse.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/Dse.hpp.func.html create mode 100644 coverage/include/Spark/Dse.hpp.gcov.html create mode 100644 coverage/include/Spark/FileUtils.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/FileUtils.hpp.func.html create mode 100644 coverage/include/Spark/FileUtils.hpp.gcov.html create mode 100644 coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/GeneratedImplSupport.hpp.func.html create mode 100644 coverage/include/Spark/GeneratedImplSupport.hpp.gcov.html create mode 100644 coverage/include/Spark/Io.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/Io.hpp.func.html create mode 100644 coverage/include/Spark/Io.hpp.gcov.html create mode 100644 coverage/include/Spark/Model.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/Model.hpp.func.html create mode 100644 coverage/include/Spark/Model.hpp.gcov.html create mode 100644 coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/SimpleSpmv.hpp.func.html create mode 100644 coverage/include/Spark/SimpleSpmv.hpp.gcov.html create mode 100644 coverage/include/Spark/SparseLinearSolvers.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/SparseLinearSolvers.hpp.func.html create mode 100644 coverage/include/Spark/SparseLinearSolvers.hpp.gcov.html create mode 100644 coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/SparseMatrix.hpp.func.html create mode 100644 coverage/include/Spark/SparseMatrix.hpp.gcov.html create mode 100644 coverage/include/Spark/Spmv.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/Spmv.hpp.func.html create mode 100644 coverage/include/Spark/Spmv.hpp.gcov.html create mode 100644 coverage/include/Spark/Utils.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/Utils.hpp.func.html create mode 100644 coverage/include/Spark/Utils.hpp.gcov.html create mode 100644 coverage/include/Spark/index-sort-f.html create mode 100644 coverage/include/Spark/index-sort-l.html create mode 100644 coverage/include/Spark/index.html create mode 100644 coverage/index-sort-f.html create mode 100644 coverage/index-sort-l.html create mode 100644 coverage/index.html create mode 100644 coverage/ruby.png create mode 100644 coverage/snow.png create mode 100644 coverage/src/SparseLinearSolvers.cpp.func-sort-c.html create mode 100644 coverage/src/SparseLinearSolvers.cpp.func.html create mode 100644 coverage/src/SparseLinearSolvers.cpp.gcov.html create mode 100644 coverage/src/dse/Dse.cpp.func-sort-c.html create mode 100644 coverage/src/dse/Dse.cpp.func.html create mode 100644 coverage/src/dse/Dse.cpp.gcov.html create mode 100644 coverage/src/dse/index-sort-f.html create mode 100644 coverage/src/dse/index-sort-l.html create mode 100644 coverage/src/dse/index.html create mode 100644 coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html create mode 100644 coverage/src/execution/SharedLibLoader.cpp.func.html create mode 100644 coverage/src/execution/SharedLibLoader.cpp.gcov.html create mode 100644 coverage/src/execution/index-sort-f.html create mode 100644 coverage/src/execution/index-sort-l.html create mode 100644 coverage/src/execution/index.html create mode 100644 coverage/src/index-sort-f.html create mode 100644 coverage/src/index-sort-l.html create mode 100644 coverage/src/index.html create mode 100644 coverage/src/main.cpp.func-sort-c.html create mode 100644 coverage/src/main.cpp.func.html create mode 100644 coverage/src/main.cpp.gcov.html create mode 100644 coverage/src/spmv/src/Spmv.cpp.func-sort-c.html create mode 100644 coverage/src/spmv/src/Spmv.cpp.func.html create mode 100644 coverage/src/spmv/src/Spmv.cpp.gcov.html create mode 100644 coverage/src/spmv/src/index-sort-f.html create mode 100644 coverage/src/spmv/src/index-sort-l.html create mode 100644 coverage/src/spmv/src/index.html create mode 100644 coverage/tests/index-sort-f.html create mode 100644 coverage/tests/index-sort-l.html create mode 100644 coverage/tests/index.html create mode 100644 coverage/tests/test_architecture.cpp.func-sort-c.html create mode 100644 coverage/tests/test_architecture.cpp.func.html create mode 100644 coverage/tests/test_architecture.cpp.gcov.html create mode 100644 coverage/tests/test_spmv.cpp.func-sort-c.html create mode 100644 coverage/tests/test_spmv.cpp.func.html create mode 100644 coverage/tests/test_spmv.cpp.gcov.html create mode 100644 coverage/tests/test_utils.hpp.func-sort-c.html create mode 100644 coverage/tests/test_utils.hpp.func.html create mode 100644 coverage/tests/test_utils.hpp.gcov.html create mode 100644 coverage/unit-tests/index-sort-f.html create mode 100644 coverage/unit-tests/index-sort-l.html create mode 100644 coverage/unit-tests/index.html create mode 100644 coverage/unit-tests/spmv_test.cpp.func-sort-c.html create mode 100644 coverage/unit-tests/spmv_test.cpp.func.html create mode 100644 coverage/unit-tests/spmv_test.cpp.gcov.html create mode 100644 coverage/updown.png diff --git a/coverage/amber.png b/coverage/amber.png new file mode 100644 index 0000000000000000000000000000000000000000..2cab170d8359081983a4e343848dfe06bc490f12 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^G2tW}LqE04T&+ z;1OBOz`!j8!i<;h*8KqrvZOouIx;Y9?C1WI$O`1M1^9%x{(levWG + + + + + + LCOV - final.info - dfe-snippets/include/dfesnippets/NumericUtils.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - dfe-snippets/include/dfesnippets - NumericUtils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0110.0 %
Date:2015-11-30Functions:040.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN11dfesnippets13numeric_utils12almost_equalEdd0
_ZN11dfesnippets13numeric_utils12almost_equalEddd0
_ZN11dfesnippets13numeric_utils12almost_equalEdddd0
_ZN11dfesnippets13numeric_utils5alignEii0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func.html b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func.html new file mode 100644 index 0000000..c5f7d57 --- /dev/null +++ b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func.html @@ -0,0 +1,88 @@ + + + + + + + LCOV - final.info - dfe-snippets/include/dfesnippets/NumericUtils.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - dfe-snippets/include/dfesnippets - NumericUtils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0110.0 %
Date:2015-11-30Functions:040.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN11dfesnippets13numeric_utils12almost_equalEdd0
_ZN11dfesnippets13numeric_utils12almost_equalEddd0
_ZN11dfesnippets13numeric_utils12almost_equalEdddd0
_ZN11dfesnippets13numeric_utils5alignEii0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.gcov.html b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.gcov.html new file mode 100644 index 0000000..eb783e9 --- /dev/null +++ b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.gcov.html @@ -0,0 +1,106 @@ + + + + + + + LCOV - final.info - dfe-snippets/include/dfesnippets/NumericUtils.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - dfe-snippets/include/dfesnippets - NumericUtils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0110.0 %
Date:2015-11-30Functions:040.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef NUMERICUTILS_HPP_GRRJP3JZ
+       2             : #define NUMERICUTILS_HPP_GRRJP3JZ
+       3             : 
+       4             : namespace dfesnippets {
+       5             :   namespace numeric_utils {
+       6             : 
+       7           0 :     bool almost_equal(double a, double b) {
+       8           0 :       return std::abs(a - b) <= 1E-10 * std::abs(a);
+       9             :     }
+      10             : 
+      11           0 :     bool almost_equal(double a, double b, double tol) {
+      12           0 :       return std::abs(a - b) <= tol * std::abs(a);
+      13             :     }
+      14             : 
+      15           0 :     bool almost_equal(double a, double b, double rtol, double atol) {
+      16           0 :       double diff = std::abs(a - b);
+      17           0 :       if (diff < atol)
+      18           0 :         return true;
+      19           0 :       return (diff  / std::abs(a) <= rtol) && (diff / std::abs(b) <= rtol);
+      20             :     }
+      21             : 
+      22             :     /** Returns the smallest number greater than bytes that is multiple of k. */
+      23           0 :     int align(int bytes, int k) {
+      24           0 :       return  k * (bytes / k + (bytes % k == 0 ? 0 : 1));
+      25             :     }
+      26             :   }
+      27             : }
+      28             : 
+      29             : 
+      30             : #endif /* end of include guard: NUMERICUTILS_HPP_GRRJP3JZ */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func-sort-c.html b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func-sort-c.html new file mode 100644 index 0000000..3cf8dba --- /dev/null +++ b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func-sort-c.html @@ -0,0 +1,80 @@ + + + + + + + LCOV - final.info - dfe-snippets/include/dfesnippets/Timing.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - dfe-snippets/include/dfesnippets - Timing.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:090.0 %
Date:2015-11-30Functions:020.0 %
+
+ +
+ + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN11dfesnippets6timing10clock_diffENSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE0
_ZN11dfesnippets6timing16print_clock_diffESsNSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func.html b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func.html new file mode 100644 index 0000000..a987e40 --- /dev/null +++ b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func.html @@ -0,0 +1,80 @@ + + + + + + + LCOV - final.info - dfe-snippets/include/dfesnippets/Timing.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - dfe-snippets/include/dfesnippets - Timing.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:090.0 %
Date:2015-11-30Functions:020.0 %
+
+ +
+ + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN11dfesnippets6timing10clock_diffENSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE0
_ZN11dfesnippets6timing16print_clock_diffESsNSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.gcov.html b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.gcov.html new file mode 100644 index 0000000..4996d30 --- /dev/null +++ b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.gcov.html @@ -0,0 +1,127 @@ + + + + + + + LCOV - final.info - dfe-snippets/include/dfesnippets/Timing.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - dfe-snippets/include/dfesnippets - Timing.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:090.0 %
Date:2015-11-30Functions:020.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef TIMING_HPP_W9D7COFX
+       2             : #define TIMING_HPP_W9D7COFX
+       3             : 
+       4             : #include <chrono>
+       5             : #include <string>
+       6             : #include <iostream>
+       7             : 
+       8             : namespace dfesnippets {
+       9             :   namespace timing {
+      10             : 
+      11           0 :     inline double clock_diff(
+      12             :         std::chrono::high_resolution_clock::time_point start) {
+      13             :       using namespace std::chrono;
+      14           0 :       auto end = std::chrono::high_resolution_clock::now();
+      15           0 :       return duration_cast<duration<double> >(end - start).count();
+      16             :     }
+      17             : 
+      18             :     /** Print the difference between now and start */
+      19           0 :     inline void print_clock_diff(
+      20             :         std::string item,
+      21             :         std::chrono::high_resolution_clock::time_point start) {
+      22             :       using namespace std::chrono;
+      23           0 :       auto end = std::chrono::high_resolution_clock::now();
+      24           0 :       std::cout << item << " took ";
+      25           0 :       std::cout << duration_cast<duration<double> >(end - start).count();
+      26           0 :       std::cout << " seconds." << std::endl;
+      27           0 :     }
+      28             : 
+      29             :     /** Print the difference between end and start */
+      30             :     inline void print_clock_diff(std::string item,
+      31             :         std::chrono::high_resolution_clock::time_point end,
+      32             :         std::chrono::high_resolution_clock::time_point start) {
+      33             :       using namespace std::chrono;
+      34             :       std::cout << item << " took ";
+      35             :       std::cout << duration_cast<duration<double> >(end - start).count();
+      36             :       std::cout << " seconds." << std::endl;
+      37             :     }
+      38             : 
+      39             :     inline void print_spmv_gflops(std::string item,
+      40             :         int nnzs,
+      41             :         std::chrono::high_resolution_clock::time_point end,
+      42             :         std::chrono::high_resolution_clock::time_point start) {
+      43             :       using namespace std::chrono;
+      44             :       std::cout << item << " est. GLOPS ";
+      45             :       std::cout << 2.0 * nnzs / duration_cast<duration<double> >(end - start).count() / 1E9;
+      46             :       std::cout << std::endl;
+      47             :     }
+      48             :   }
+      49             : }
+      50             : 
+      51             : #endif /* end of include guard: TIMING_HPP_W9D7COFX */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/dfe-snippets/include/dfesnippets/index-sort-f.html b/coverage/dfe-snippets/include/dfesnippets/index-sort-f.html new file mode 100644 index 0000000..b88e472 --- /dev/null +++ b/coverage/dfe-snippets/include/dfesnippets/index-sort-f.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - final.info - dfe-snippets/include/dfesnippets + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - dfe-snippets/include/dfesnippetsHitTotalCoverage
Test:final.infoLines:0200.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Timing.hpp +
0.0%
+
0.0 %0 / 90.0 %0 / 2
NumericUtils.hpp +
0.0%
+
0.0 %0 / 110.0 %0 / 4
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/dfe-snippets/include/dfesnippets/index-sort-l.html b/coverage/dfe-snippets/include/dfesnippets/index-sort-l.html new file mode 100644 index 0000000..e57d5d5 --- /dev/null +++ b/coverage/dfe-snippets/include/dfesnippets/index-sort-l.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - final.info - dfe-snippets/include/dfesnippets + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - dfe-snippets/include/dfesnippetsHitTotalCoverage
Test:final.infoLines:0200.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Timing.hpp +
0.0%
+
0.0 %0 / 90.0 %0 / 2
NumericUtils.hpp +
0.0%
+
0.0 %0 / 110.0 %0 / 4
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/dfe-snippets/include/dfesnippets/index.html b/coverage/dfe-snippets/include/dfesnippets/index.html new file mode 100644 index 0000000..0f8c57c --- /dev/null +++ b/coverage/dfe-snippets/include/dfesnippets/index.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - final.info - dfe-snippets/include/dfesnippets + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - dfe-snippets/include/dfesnippetsHitTotalCoverage
Test:final.infoLines:0200.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
NumericUtils.hpp +
0.0%
+
0.0 %0 / 110.0 %0 / 4
Timing.hpp +
0.0%
+
0.0 %0 / 90.0 %0 / 2
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/emerald.png b/coverage/emerald.png new file mode 100644 index 0000000000000000000000000000000000000000..38ad4f4068b935643d2486f323005fb294a9bd7e GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^Jb!lvI6;R0X`wF(yt=9xVZRt1vCRixIA4P dLn>}1Cji+@42)0J?}79&c)I$ztaD0e0sy@GAL0N2 literal 0 HcmV?d00001 diff --git a/coverage/gcov.css b/coverage/gcov.css new file mode 100644 index 0000000..bfd0a83 --- /dev/null +++ b/coverage/gcov.css @@ -0,0 +1,519 @@ +/* All views: initial background and text color */ +body +{ + color: #000000; + background-color: #FFFFFF; +} + +/* All views: standard link format*/ +a:link +{ + color: #284FA8; + text-decoration: underline; +} + +/* All views: standard link - visited format */ +a:visited +{ + color: #00CB40; + text-decoration: underline; +} + +/* All views: standard link - activated format */ +a:active +{ + color: #FF0040; + text-decoration: underline; +} + +/* All views: main title format */ +td.title +{ + text-align: center; + padding-bottom: 10px; + font-family: sans-serif; + font-size: 20pt; + font-style: italic; + font-weight: bold; +} + +/* All views: header item format */ +td.headerItem +{ + text-align: right; + padding-right: 6px; + font-family: sans-serif; + font-weight: bold; + vertical-align: top; + white-space: nowrap; +} + +/* All views: header item value format */ +td.headerValue +{ + text-align: left; + color: #284FA8; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; +} + +/* All views: header item coverage table heading */ +td.headerCovTableHead +{ + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + font-size: 80%; + white-space: nowrap; +} + +/* All views: header item coverage table entry */ +td.headerCovTableEntry +{ + text-align: right; + color: #284FA8; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #DAE7FE; +} + +/* All views: header item coverage table entry for high coverage rate */ +td.headerCovTableEntryHi +{ + text-align: right; + color: #000000; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #A7FC9D; +} + +/* All views: header item coverage table entry for medium coverage rate */ +td.headerCovTableEntryMed +{ + text-align: right; + color: #000000; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #FFEA20; +} + +/* All views: header item coverage table entry for ow coverage rate */ +td.headerCovTableEntryLo +{ + text-align: right; + color: #000000; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #FF0000; +} + +/* All views: header legend value for legend entry */ +td.headerValueLeg +{ + text-align: left; + color: #000000; + font-family: sans-serif; + font-size: 80%; + white-space: nowrap; + padding-top: 4px; +} + +/* All views: color of horizontal ruler */ +td.ruler +{ + background-color: #6688D4; +} + +/* All views: version string format */ +td.versionInfo +{ + text-align: center; + padding-top: 2px; + font-family: sans-serif; + font-style: italic; +} + +/* Directory view/File view (all)/Test case descriptions: + table headline format */ +td.tableHead +{ + text-align: center; + color: #FFFFFF; + background-color: #6688D4; + font-family: sans-serif; + font-size: 120%; + font-weight: bold; + white-space: nowrap; + padding-left: 4px; + padding-right: 4px; +} + +span.tableHeadSort +{ + padding-right: 4px; +} + +/* Directory view/File view (all): filename entry format */ +td.coverFile +{ + text-align: left; + padding-left: 10px; + padding-right: 20px; + color: #284FA8; + background-color: #DAE7FE; + font-family: monospace; +} + +/* Directory view/File view (all): bar-graph entry format*/ +td.coverBar +{ + padding-left: 10px; + padding-right: 10px; + background-color: #DAE7FE; +} + +/* Directory view/File view (all): bar-graph outline color */ +td.coverBarOutline +{ + background-color: #000000; +} + +/* Directory view/File view (all): percentage entry for files with + high coverage rate */ +td.coverPerHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #A7FC9D; + font-weight: bold; + font-family: sans-serif; +} + +/* Directory view/File view (all): line count entry for files with + high coverage rate */ +td.coverNumHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #A7FC9D; + white-space: nowrap; + font-family: sans-serif; +} + +/* Directory view/File view (all): percentage entry for files with + medium coverage rate */ +td.coverPerMed +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FFEA20; + font-weight: bold; + font-family: sans-serif; +} + +/* Directory view/File view (all): line count entry for files with + medium coverage rate */ +td.coverNumMed +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FFEA20; + white-space: nowrap; + font-family: sans-serif; +} + +/* Directory view/File view (all): percentage entry for files with + low coverage rate */ +td.coverPerLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FF0000; + font-weight: bold; + font-family: sans-serif; +} + +/* Directory view/File view (all): line count entry for files with + low coverage rate */ +td.coverNumLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FF0000; + white-space: nowrap; + font-family: sans-serif; +} + +/* File view (all): "show/hide details" link format */ +a.detail:link +{ + color: #B8D0FF; + font-size:80%; +} + +/* File view (all): "show/hide details" link - visited format */ +a.detail:visited +{ + color: #B8D0FF; + font-size:80%; +} + +/* File view (all): "show/hide details" link - activated format */ +a.detail:active +{ + color: #FFFFFF; + font-size:80%; +} + +/* File view (detail): test name entry */ +td.testName +{ + text-align: right; + padding-right: 10px; + background-color: #DAE7FE; + font-family: sans-serif; +} + +/* File view (detail): test percentage entry */ +td.testPer +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #DAE7FE; + font-family: sans-serif; +} + +/* File view (detail): test lines count entry */ +td.testNum +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #DAE7FE; + font-family: sans-serif; +} + +/* Test case descriptions: test name format*/ +dt +{ + font-family: sans-serif; + font-weight: bold; +} + +/* Test case descriptions: description table body */ +td.testDescription +{ + padding-top: 10px; + padding-left: 30px; + padding-bottom: 10px; + padding-right: 30px; + background-color: #DAE7FE; +} + +/* Source code view: function entry */ +td.coverFn +{ + text-align: left; + padding-left: 10px; + padding-right: 20px; + color: #284FA8; + background-color: #DAE7FE; + font-family: monospace; +} + +/* Source code view: function entry zero count*/ +td.coverFnLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FF0000; + font-weight: bold; + font-family: sans-serif; +} + +/* Source code view: function entry nonzero count*/ +td.coverFnHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #DAE7FE; + font-weight: bold; + font-family: sans-serif; +} + +/* Source code view: source code format */ +pre.source +{ + font-family: monospace; + white-space: pre; + margin-top: 2px; +} + +/* Source code view: line number format */ +span.lineNum +{ + background-color: #EFE383; +} + +/* Source code view: format for lines which were executed */ +td.lineCov, +span.lineCov +{ + background-color: #CAD7FE; +} + +/* Source code view: format for Cov legend */ +span.coverLegendCov +{ + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + background-color: #CAD7FE; +} + +/* Source code view: format for lines which were not executed */ +td.lineNoCov, +span.lineNoCov +{ + background-color: #FF6230; +} + +/* Source code view: format for NoCov legend */ +span.coverLegendNoCov +{ + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + background-color: #FF6230; +} + +/* Source code view (function table): standard link - visited format */ +td.lineNoCov > a:visited, +td.lineCov > a:visited +{ + color: black; + text-decoration: underline; +} + +/* Source code view: format for lines which were executed only in a + previous version */ +span.lineDiffCov +{ + background-color: #B5F7AF; +} + +/* Source code view: format for branches which were executed + * and taken */ +span.branchCov +{ + background-color: #CAD7FE; +} + +/* Source code view: format for branches which were executed + * but not taken */ +span.branchNoCov +{ + background-color: #FF6230; +} + +/* Source code view: format for branches which were not executed */ +span.branchNoExec +{ + background-color: #FF6230; +} + +/* Source code view: format for the source code heading line */ +pre.sourceHeading +{ + white-space: pre; + font-family: monospace; + font-weight: bold; + margin: 0px; +} + +/* All views: header legend value for low rate */ +td.headerValueLegL +{ + font-family: sans-serif; + text-align: center; + white-space: nowrap; + padding-left: 4px; + padding-right: 2px; + background-color: #FF0000; + font-size: 80%; +} + +/* All views: header legend value for med rate */ +td.headerValueLegM +{ + font-family: sans-serif; + text-align: center; + white-space: nowrap; + padding-left: 2px; + padding-right: 2px; + background-color: #FFEA20; + font-size: 80%; +} + +/* All views: header legend value for hi rate */ +td.headerValueLegH +{ + font-family: sans-serif; + text-align: center; + white-space: nowrap; + padding-left: 2px; + padding-right: 4px; + background-color: #A7FC9D; + font-size: 80%; +} + +/* All views except source code view: legend format for low coverage */ +span.coverLegendCovLo +{ + padding-left: 10px; + padding-right: 10px; + padding-top: 2px; + background-color: #FF0000; +} + +/* All views except source code view: legend format for med coverage */ +span.coverLegendCovMed +{ + padding-left: 10px; + padding-right: 10px; + padding-top: 2px; + background-color: #FFEA20; +} + +/* All views except source code view: legend format for hi coverage */ +span.coverLegendCovHi +{ + padding-left: 10px; + padding-right: 10px; + padding-top: 2px; + background-color: #A7FC9D; +} diff --git a/coverage/glass.png b/coverage/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..e1abc00680a3093c49fdb775ae6bdb6764c95af2 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gaEa{HEjtmSN`?>!lvI6;R0X`wF z|Ns97GD8ntt^-nxB|(0{3=Yq3q=7g|-tI089jvk*Kn`btM`SSr1Gf+eGhVt|_XjA* zUgGKN%6^Gmn4d%Ph(nkFP>9RZ#WAE}PI3Z}&BVayv3^M*kj3EX>gTe~DWM4f=_Dpv literal 0 HcmV?d00001 diff --git a/coverage/include/Spark/Converters.hpp.func-sort-c.html b/coverage/include/Spark/Converters.hpp.func-sort-c.html new file mode 100644 index 0000000..f9012a8 --- /dev/null +++ b/coverage/include/Spark/Converters.hpp.func-sort-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - final.info - include/Spark/Converters.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Converters.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0200.0 %
Date:2015-11-30Functions:030.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark10converters22eigenVectorToStdVectorERKN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_ZN5spark10converters16stdvectorToEigenESt6vectorIdSaIdEE0
_ZN5spark10converters14tripletToEigenENS_6sparse14SparkCooMatrixIdEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Converters.hpp.func.html b/coverage/include/Spark/Converters.hpp.func.html new file mode 100644 index 0000000..2227d24 --- /dev/null +++ b/coverage/include/Spark/Converters.hpp.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - final.info - include/Spark/Converters.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Converters.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0200.0 %
Date:2015-11-30Functions:030.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark10converters14tripletToEigenENS_6sparse14SparkCooMatrixIdEE0
_ZN5spark10converters16stdvectorToEigenESt6vectorIdSaIdEE0
_ZN5spark10converters22eigenVectorToStdVectorERKN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Converters.hpp.gcov.html b/coverage/include/Spark/Converters.hpp.gcov.html new file mode 100644 index 0000000..7e13754 --- /dev/null +++ b/coverage/include/Spark/Converters.hpp.gcov.html @@ -0,0 +1,125 @@ + + + + + + + LCOV - final.info - include/Spark/Converters.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Converters.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0200.0 %
Date:2015-11-30Functions:030.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef CONVERTERS_HPP_QNX3RWUJ
+       2             : #define CONVERTERS_HPP_QNX3RWUJ
+       3             : 
+       4             : #include <stdexcept>
+       5             : #include <memory>
+       6             : 
+       7             : #include <Spark/SparseMatrix.hpp>
+       8             : #include <Eigen/Sparse>
+       9             : #include <Spark/SparseMatrix.hpp>
+      10             : 
+      11             : namespace spark {
+      12             :   namespace converters {
+      13             : 
+      14             :     using EigenSparseMatrix = std::unique_ptr<Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>>;
+      15             : 
+      16             :     // convert a Spark COO matrix to an Eigen Sparse Matrix
+      17           0 :     inline EigenSparseMatrix tripletToEigen(spark::sparse::SparkCooMatrix<double> mat) {
+      18           0 :       auto coo = mat.data;
+      19           0 :       EigenSparseMatrix m(new Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>(mat.n, mat.m));
+      20           0 :       std::vector<Eigen::Triplet<double>> trips;
+      21           0 :       for (size_t i = 0; i < coo.size(); i++)
+      22             :         trips.push_back(
+      23             :             Eigen::Triplet<double>(
+      24           0 :               std::get<0>(coo[i]),
+      25           0 :               std::get<1>(coo[i]),
+      26           0 :               std::get<2>(coo[i])));
+      27           0 :       m->setFromTriplets(trips.begin(), trips.end());
+      28           0 :       return m;
+      29             :     }
+      30             : 
+      31           0 :     inline Eigen::VectorXd stdvectorToEigen(std::vector<double> v) {
+      32           0 :       Eigen::VectorXd m(v.size());
+      33           0 :       for (size_t i = 0; i < v.size(); i++)
+      34           0 :         m[i] = v[i];
+      35           0 :       return m;
+      36             :     }
+      37             : 
+      38           0 :     inline std::vector<double> eigenVectorToStdVector(const Eigen::VectorXd& v) {
+      39           0 :       std::vector<double> m(v.size());
+      40           0 :       for (int i = 0; i < v.size(); i++)
+      41           0 :         m[i] = v[i];
+      42           0 :       return m;
+      43             :     }
+      44             : 
+      45             :   }
+      46             : }
+      47             : 
+      48             : 
+      49             : #endif /* end of include guard: CONVERTERS_HPP_QNX3RWUJ */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Dse.hpp.func-sort-c.html b/coverage/include/Spark/Dse.hpp.func-sort-c.html new file mode 100644 index 0000000..5fb1a99 --- /dev/null +++ b/coverage/include/Spark/Dse.hpp.func-sort-c.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - final.info - include/Spark/Dse.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Dse.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0310.0 %
Date:2015-11-30Functions:0130.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark3dse13DseParametersC2Ev0
_ZN5spark3dse9DseResultC2EOS1_0
_ZN5spark3dse9DseResultC2ERKS1_0
_ZN5spark3dse9BenchmarkD2Ev0
_ZNK5spark3dse9Benchmark18get_benchmark_sizeEv0
_ZN5spark3dse9DseResultC2ESt10shared_ptrINS_4spmv16SpmvArchitectureEE0
_ZN5spark3dse9DseResultD2Ev0
_ZN5spark3dselsERSoRNS0_13DseParametersE0
_ZNK5spark3dse9Benchmark15get_matrix_pathEi0
_ZN5spark3dselsERSoRNS0_9BenchmarkE0
_ZN5spark3dse9Benchmark15add_matrix_pathESs0
_ZN5spark3dse8SparkDseC2Ev0
_ZN5spark3dse9BenchmarkC2Ev0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Dse.hpp.func.html b/coverage/include/Spark/Dse.hpp.func.html new file mode 100644 index 0000000..34f9d49 --- /dev/null +++ b/coverage/include/Spark/Dse.hpp.func.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - final.info - include/Spark/Dse.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Dse.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0310.0 %
Date:2015-11-30Functions:0130.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark3dse13DseParametersC2Ev0
_ZN5spark3dse8SparkDseC2Ev0
_ZN5spark3dse9Benchmark15add_matrix_pathESs0
_ZN5spark3dse9BenchmarkC2Ev0
_ZN5spark3dse9BenchmarkD2Ev0
_ZN5spark3dse9DseResultC2EOS1_0
_ZN5spark3dse9DseResultC2ERKS1_0
_ZN5spark3dse9DseResultC2ESt10shared_ptrINS_4spmv16SpmvArchitectureEE0
_ZN5spark3dse9DseResultD2Ev0
_ZN5spark3dselsERSoRNS0_13DseParametersE0
_ZN5spark3dselsERSoRNS0_9BenchmarkE0
_ZNK5spark3dse9Benchmark15get_matrix_pathEi0
_ZNK5spark3dse9Benchmark18get_benchmark_sizeEv0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Dse.hpp.gcov.html b/coverage/include/Spark/Dse.hpp.gcov.html new file mode 100644 index 0000000..7b4ce38 --- /dev/null +++ b/coverage/include/Spark/Dse.hpp.gcov.html @@ -0,0 +1,164 @@ + + + + + + + LCOV - final.info - include/Spark/Dse.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Dse.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0310.0 %
Date:2015-11-30Functions:0130.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef DSE_H
+       2             : #define DSE_H
+       3             : 
+       4             : #include <memory>
+       5             : #include <Spark/Spmv.hpp>
+       6             : #include <Spark/SimpleSpmv.hpp>
+       7             : #include <Spark/Utils.hpp>
+       8             : #include <Spark/Io.hpp>
+       9             : #include <chrono>
+      10             : #include <stdexcept>
+      11             : #include <sstream>
+      12             : 
+      13             : namespace spark {
+      14             :   namespace dse {
+      15             : 
+      16             :     // a benchmark to use for the DSE
+      17           0 :     class Benchmark {
+      18             :       std::vector<std::string> paths;
+      19             :       public:
+      20           0 :         std::string get_matrix_path(int id) const {
+      21           0 :           if (id < paths.size())
+      22           0 :             return paths[id];
+      23           0 :           std::stringstream ss;
+      24           0 :           ss << "Benchmark::Index out of range " << id;
+      25           0 :           throw std::invalid_argument(ss.str());
+      26             :         }
+      27             : 
+      28           0 :         void add_matrix_path(std::string path) {
+      29           0 :           paths.push_back(path);
+      30           0 :         }
+      31             : 
+      32           0 :         int get_benchmark_size() const {
+      33           0 :           return paths.size();
+      34             :         }
+      35             :     };
+      36             : 
+      37           0 :     inline std::ostream& operator<<(std::ostream& s, Benchmark& b) {
+      38           0 :       s << "Benchmark(" << std::endl;
+      39           0 :       for (int i = 0; i < b.get_benchmark_size(); i++)
+      40           0 :         s << "  " << b.get_matrix_path(i) << std::endl;
+      41           0 :       s << ")" << std::endl;
+      42           0 :       return s;
+      43             :     }
+      44             : 
+      45             :     // the parameters and ranges to use for DSE
+      46           0 :     class DseParameters {
+      47             :       public:
+      48             :         bool gflopsOnly;
+      49             :         spark::utils::Range numPipesRange{1, 4, 1};
+      50             :         spark::utils::Range inputWidthRange{1, 3, 1};
+      51             :         spark::utils::Range cacheSizeRange{1024, 2048, 1024};
+      52             :     };
+      53             : 
+      54           0 :     inline std::ostream& operator<<(std::ostream& s, DseParameters& d) {
+      55           0 :       s << "DseParams(" << std::endl;
+      56           0 :       s << "  numPipes   = " << d.numPipesRange << std::endl;
+      57           0 :       s << "  inputWidth = " << d.inputWidthRange << std::endl;
+      58           0 :       s << "  cacheSize  = " << d.cacheSizeRange << std::endl;
+      59           0 :       s << ")" << std::endl;
+      60           0 :       return s;
+      61             :     }
+      62             : 
+      63           0 :     class DseResult {
+      64             :       public:
+      65             :         std::shared_ptr<spark::spmv::SpmvArchitecture> bestArchitecture;
+      66             :         std::vector<std::string> matrices;
+      67             : 
+      68             :         DseResult(std::string path, std::shared_ptr<spark::spmv::SpmvArchitecture> arch) {
+      69             :           matrices.push_back(path);
+      70             :           bestArchitecture = arch;
+      71             :         }
+      72           0 :         DseResult(std::shared_ptr<spark::spmv::SpmvArchitecture> arch) {
+      73           0 :           bestArchitecture = arch;
+      74           0 :         }
+      75             :     };
+      76             : 
+      77             :     class SparkDse {
+      78             :       public:
+      79           0 :         SparkDse() {}
+      80             :         // returns the best architecture
+      81             :         std::vector<DseResult> run (
+      82             :             const Benchmark& benchmark,
+      83             :             const DseParameters& dseParams);
+      84             :     };
+      85             :   }
+      86             : }
+      87             : 
+      88             : #endif /* end of include guard: DSE_H */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/FileUtils.hpp.func-sort-c.html b/coverage/include/Spark/FileUtils.hpp.func-sort-c.html new file mode 100644 index 0000000..2847e9a --- /dev/null +++ b/coverage/include/Spark/FileUtils.hpp.func-sort-c.html @@ -0,0 +1,76 @@ + + + + + + + LCOV - final.info - include/Spark/FileUtils.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - FileUtils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0110.0 %
Date:2015-11-30Functions:010.0 %
+
+ +
+ + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark10file_utils11child_filesESs0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/FileUtils.hpp.func.html b/coverage/include/Spark/FileUtils.hpp.func.html new file mode 100644 index 0000000..980d364 --- /dev/null +++ b/coverage/include/Spark/FileUtils.hpp.func.html @@ -0,0 +1,76 @@ + + + + + + + LCOV - final.info - include/Spark/FileUtils.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - FileUtils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0110.0 %
Date:2015-11-30Functions:010.0 %
+
+ +
+ + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark10file_utils11child_filesESs0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/FileUtils.hpp.gcov.html b/coverage/include/Spark/FileUtils.hpp.gcov.html new file mode 100644 index 0000000..c5546fb --- /dev/null +++ b/coverage/include/Spark/FileUtils.hpp.gcov.html @@ -0,0 +1,107 @@ + + + + + + + LCOV - final.info - include/Spark/FileUtils.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - FileUtils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0110.0 %
Date:2015-11-30Functions:010.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef FILEUTILS_H
+       2             : 
+       3             : #define FILEUTILS_H
+       4             : 
+       5             : #include <vector>
+       6             : #include <string>
+       7             : #include <boost/filesystem.hpp>
+       8             : #include <sstream>
+       9             : 
+      10             : namespace spark {
+      11             :   namespace file_utils {
+      12           0 :     std::vector<std::string> child_files(std::string  dirPath) {
+      13             :       namespace bfs = boost::filesystem;
+      14           0 :       bfs::path dirp{dirPath};
+      15           0 :       if (!bfs::is_directory(dirp)) {
+      16           0 :         std::stringstream ss;
+      17           0 :         ss << "Error: '" << dirPath << "' not a directory" << std::endl;
+      18           0 :         throw std::invalid_argument(ss.str());
+      19             :       }
+      20             : 
+      21           0 :       std::vector<std::string> paths;
+      22           0 :       for (bfs::directory_iterator end, it = bfs::directory_iterator(dirp); it != end; it++) {
+      23           0 :         paths.push_back(it->path().string());
+      24           0 :       }
+      25           0 :       return paths;
+      26             :     }
+      27             :   }
+      28             : }
+      29             : 
+      30             : 
+      31             : #endif /* end of include guard: FILEUTILS_H */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html b/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html new file mode 100644 index 0000000..e4b429f --- /dev/null +++ b/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html @@ -0,0 +1,116 @@ + + + + + + + LCOV - final.info - include/Spark/GeneratedImplSupport.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - GeneratedImplSupport.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0250.0 %
Date:2015-11-30Functions:0110.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark7runtime27GeneratedSpmvImplementation8numPipesEv0
_ZN5spark7runtime27GeneratedSpmvImplementation7maxRowsEv0
_ZN5spark7runtime24SpmvImplementationLoader18architectureWithIdEi0
_ZN5spark7runtime27GeneratedSpmvImplementation23getDramReductionEnabledEv0
_ZN5spark7runtime24SpmvImplementationLoader22architectureWithParamsEi0
_ZN5spark7runtime27GeneratedSpmvImplementation9cacheSizeEv0
_ZN5spark7runtime27GeneratedSpmvImplementation10inputWidthEv0
_ZN5spark7runtime20ImplementationLoaderD2Ev0
_ZN5spark7runtime24SpmvImplementationLoaderD2Ev0
_ZN5spark7runtime24SpmvImplementationLoaderD0Ev0
_ZN5spark7runtime20ImplementationLoaderD0Ev0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/GeneratedImplSupport.hpp.func.html b/coverage/include/Spark/GeneratedImplSupport.hpp.func.html new file mode 100644 index 0000000..f77ceb4 --- /dev/null +++ b/coverage/include/Spark/GeneratedImplSupport.hpp.func.html @@ -0,0 +1,116 @@ + + + + + + + LCOV - final.info - include/Spark/GeneratedImplSupport.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - GeneratedImplSupport.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0250.0 %
Date:2015-11-30Functions:0110.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark7runtime20ImplementationLoaderD0Ev0
_ZN5spark7runtime20ImplementationLoaderD2Ev0
_ZN5spark7runtime24SpmvImplementationLoader18architectureWithIdEi0
_ZN5spark7runtime24SpmvImplementationLoader22architectureWithParamsEi0
_ZN5spark7runtime24SpmvImplementationLoaderD0Ev0
_ZN5spark7runtime24SpmvImplementationLoaderD2Ev0
_ZN5spark7runtime27GeneratedSpmvImplementation10inputWidthEv0
_ZN5spark7runtime27GeneratedSpmvImplementation23getDramReductionEnabledEv0
_ZN5spark7runtime27GeneratedSpmvImplementation7maxRowsEv0
_ZN5spark7runtime27GeneratedSpmvImplementation8numPipesEv0
_ZN5spark7runtime27GeneratedSpmvImplementation9cacheSizeEv0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/GeneratedImplSupport.hpp.gcov.html b/coverage/include/Spark/GeneratedImplSupport.hpp.gcov.html new file mode 100644 index 0000000..f9964c7 --- /dev/null +++ b/coverage/include/Spark/GeneratedImplSupport.hpp.gcov.html @@ -0,0 +1,338 @@ + + + + + + + LCOV - final.info - include/Spark/GeneratedImplSupport.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - GeneratedImplSupport.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0250.0 %
Date:2015-11-30Functions:0110.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef GENERATEDIMPLSUPPORT_H
+       2             : 
+       3             : #define GENERATEDIMPLSUPPORT_H
+       4             : 
+       5             : #include <vector>
+       6             : #include <cstdint>
+       7             : #include <iostream>
+       8             : #include <climits>
+       9             : 
+      10             : namespace spark {
+      11             :   namespace runtime {
+      12             : 
+      13             :     // XXX Hell no...
+      14             : 
+      15             :     // base class for all generated implementations
+      16             :     struct GeneratedImplementation {
+      17             :       virtual ~GeneratedImplementation() {
+      18             :       }
+      19             :     };
+      20             : 
+      21             :     class GeneratedSpmvImplementation : public GeneratedImplementation {
+      22             : 
+      23             :       /* type of function pointers for Spmv_run/dramWrite/dramRead function */
+      24             :       using SpmvFunctionPtr = void (*)(
+      25             :           int64_t, int64_t, int64_t,
+      26             :           const int64_t*, const int32_t*, const int64_t*,
+      27             :           const int32_t*, const int32_t*, const int64_t*,
+      28             :           const int32_t*, const int32_t*, const int64_t*);
+      29             : 
+      30             :       using SpmvDramWriteFunctionPtr = void (*)(
+      31             :           int64_t param_size_bytes,
+      32             :           int64_t param_start_bytes,
+      33             :           const uint8_t *instream_fromcpu);
+      34             : 
+      35             :       using SpmvDramReadFunctionPtr = void (*)(
+      36             :           int64_t param_size_bytes,
+      37             :           int64_t param_start_bytes,
+      38             :           uint8_t *instream_fromcpu);
+      39             : 
+      40             :       protected:
+      41             :       const SpmvFunctionPtr runSpmv;
+      42             :       const SpmvDramWriteFunctionPtr dramWrite;
+      43             :       const SpmvDramReadFunctionPtr dramRead;
+      44             : 
+      45             :       const int max_rows, num_pipes, cache_size, input_width, dram_reduction_enabled;
+      46             : 
+      47             :       public:
+      48             : 
+      49             :       GeneratedSpmvImplementation(
+      50             :           SpmvFunctionPtr _fptr,
+      51             :           SpmvDramWriteFunctionPtr _dramWrite,
+      52             :           SpmvDramReadFunctionPtr _dramRead,
+      53             :           int _max_rows,
+      54             :           int _num_pipes,
+      55             :           int _cache_size,
+      56             :           int _input_width,
+      57             :           int _dram_reduction_enabled
+      58             :           ) :
+      59             :         runSpmv(_fptr),
+      60             :         dramWrite(_dramWrite),
+      61             :         dramRead(_dramRead),
+      62             :         max_rows(_max_rows),
+      63             :         num_pipes(_num_pipes),
+      64             :         cache_size(_cache_size),
+      65             :         input_width(_input_width),
+      66             :         dram_reduction_enabled(_dram_reduction_enabled)
+      67             :       {}
+      68             : 
+      69             :       virtual ~GeneratedSpmvImplementation() {
+      70             :       }
+      71             : 
+      72           0 :       int maxRows() {
+      73           0 :         return max_rows;
+      74             :       }
+      75             : 
+      76           0 :       int numPipes() {
+      77           0 :         return num_pipes;
+      78             :       }
+      79             : 
+      80           0 :       int cacheSize() {
+      81           0 :         return cache_size;
+      82             :       }
+      83             : 
+      84           0 :       int inputWidth() {
+      85           0 :         return input_width;
+      86             :       }
+      87             : 
+      88           0 :       bool getDramReductionEnabled() {
+      89           0 :         return dram_reduction_enabled == 1;
+      90             :       }
+      91             : 
+      92             :       virtual void Spmv(
+      93             :           int64_t param_nIterations,
+      94             :           int64_t param_nPartitions,
+      95             :           int64_t param_vectorLoadCycles,
+      96             :           const int64_t *param_colPtrStartAddresses,
+      97             :           const int32_t *param_colptrSizes,
+      98             :           const int64_t *param_indptrValuesAddresses,
+      99             :           const int32_t *param_indptrValuesSizes,
+     100             :           const int32_t *param_nrows,
+     101             :           const int64_t *param_outStartAddresses,
+     102             :           const int32_t *param_reductionCycles,
+     103             :           const int32_t *param_totalCycles,
+     104             :           const int64_t *param_vStartAddresses) {
+     105             : 
+     106             :         std::cout << "Running on architecture with " << std::endl;
+     107             :         std::cout << "   maxRows = " << max_rows << std::endl;
+     108             : 
+     109             :         (*runSpmv)(
+     110             :           param_nIterations,
+     111             :           param_nPartitions,
+     112             :           param_vectorLoadCycles,
+     113             :           param_colPtrStartAddresses,
+     114             :           param_colptrSizes,
+     115             :           param_indptrValuesAddresses,
+     116             :           param_indptrValuesSizes,
+     117             :           param_nrows,
+     118             :           param_outStartAddresses,
+     119             :           param_reductionCycles,
+     120             :           param_totalCycles,
+     121             :           param_vStartAddresses);
+     122             :       }
+     123             : 
+     124             :       virtual void write(
+     125             :           int64_t param_size_bytes,
+     126             :           int64_t param_start_bytes,
+     127             :           const uint8_t *instream_fromcpu) {
+     128             :         (*dramWrite)(
+     129             :           param_size_bytes,
+     130             :           param_start_bytes,
+     131             :           instream_fromcpu);
+     132             :       }
+     133             : 
+     134             : 
+     135             :       virtual void read(
+     136             :           int64_t param_size_bytes,
+     137             :           int64_t param_start_bytes,
+     138             :           uint8_t *outstream_tocpu) {
+     139             :         (*dramRead)(
+     140             :           param_size_bytes,
+     141             :           param_start_bytes,
+     142             :           outstream_tocpu);
+     143             :       }
+     144             : 
+     145             :     };
+     146             : 
+     147             :     class GeneratedSpmvImplementationMock : public GeneratedSpmvImplementation {
+     148             : 
+     149             :       public:
+     150             : 
+     151             :       GeneratedSpmvImplementationMock (
+     152             :           int _max_rows,
+     153             :           int _num_pipes,
+     154             :           int _cache_size,
+     155             :           int _input_width,
+     156             :           int _dram_reduction_enabled
+     157             :           ) :
+     158             :         GeneratedSpmvImplementation(
+     159             :             nullptr, nullptr, nullptr,
+     160             :             _max_rows, _num_pipes, _cache_size,
+     161             :             _input_width, _dram_reduction_enabled) {}
+     162             : 
+     163             :       virtual ~GeneratedSpmvImplementationMock() {
+     164             :       }
+     165             : 
+     166             :       int maxRows() {
+     167             :         return max_rows;
+     168             :       }
+     169             : 
+     170             :       int numPipes() {
+     171             :         return num_pipes;
+     172             :       }
+     173             : 
+     174             :       int cacheSize() {
+     175             :         return cache_size;
+     176             :       }
+     177             : 
+     178             :       int inputWidth() {
+     179             :         return input_width;
+     180             :       }
+     181             : 
+     182             :       bool getDramReductionEnabled() {
+     183             :         return dram_reduction_enabled == 1;
+     184             :       }
+     185             : 
+     186             :       void Spmv(
+     187             :           int64_t param_nIterations,
+     188             :           int64_t param_nPartitions,
+     189             :           int64_t param_vectorLoadCycles,
+     190             :           const int64_t *param_colPtrStartAddresses,
+     191             :           const int32_t *param_colptrSizes,
+     192             :           const int64_t *param_indptrValuesAddresses,
+     193             :           const int32_t *param_indptrValuesSizes,
+     194             :           const int32_t *param_nrows,
+     195             :           const int64_t *param_outStartAddresses,
+     196             :           const int32_t *param_reductionCycles,
+     197             :           const int32_t *param_totalCycles,
+     198             :           const int64_t *param_vStartAddresses) {
+     199             :         std::cout << "Running mock SPMV implemetation" << std::endl;
+     200             :       }
+     201             : 
+     202             :       void write(
+     203             :           int64_t param_size_bytes,
+     204             :           int64_t param_start_bytes,
+     205             :           const uint8_t *instream_fromcpu) {}
+     206             : 
+     207             :       void read(
+     208             :           int64_t param_size_bytes,
+     209             :           int64_t param_start_bytes,
+     210             :           uint8_t *outstream_tocpu) {}
+     211             : 
+     212             :     };
+     213             : 
+     214             :     /**
+     215             :      * Loads generated implementations.
+     216             :      *
+     217             :      * Meant more as a base for classes generated from spark.py.
+     218             :      */
+     219             :     class ImplementationLoader {
+     220             :       protected:
+     221             :         std::vector<GeneratedImplementation*> impls;
+     222             :       public:
+     223             :       ImplementationLoader() {}
+     224             : 
+     225           0 :       virtual ~ImplementationLoader() {
+     226           0 :         for (const auto& s : impls) {
+     227           0 :           delete s;
+     228             :         }
+     229           0 :       }
+     230             :     };
+     231             : 
+     232             :     // provide interface for SpmvImplementation loader
+     233           0 :     class SpmvImplementationLoader : public ImplementationLoader {
+     234             :       public:
+     235             :       SpmvImplementationLoader();
+     236             : 
+     237             :       /**
+     238             :        * Load the generated spmv implementation which supports the given number
+     239             :        * of rows. If more exists, picks the one with smallest maxRows.
+     240             :        */
+     241           0 :       GeneratedSpmvImplementation* architectureWithParams(int maxRows) {
+     242           0 :         GeneratedSpmvImplementation* bestArch = nullptr;
+     243           0 :         for (const auto& a : this->impls) {
+     244           0 :           GeneratedSpmvImplementation* simpl = static_cast<GeneratedSpmvImplementation*>(a);
+     245           0 :           if (simpl->maxRows() > maxRows &&
+     246           0 :               (!bestArch || simpl->maxRows() < bestArch->maxRows())) {
+     247           0 :             bestArch = simpl;
+     248             :           }
+     249             :         }
+     250           0 :         return  bestArch;
+     251             :       }
+     252             : 
+     253           0 :       GeneratedSpmvImplementation* architectureWithId(int id) {
+     254           0 :         return static_cast<GeneratedSpmvImplementation*>(this->impls.at(id));
+     255             :       }
+     256             : 
+     257             :     };
+     258             : 
+     259             :   }
+     260             : }
+     261             : 
+     262             : #endif /* end of include guard: GENERATEDIMPLSUPPORT_H */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Io.hpp.func-sort-c.html b/coverage/include/Spark/Io.hpp.func-sort-c.html new file mode 100644 index 0000000..89b4fff --- /dev/null +++ b/coverage/include/Spark/Io.hpp.func-sort-c.html @@ -0,0 +1,112 @@ + + + + + + + LCOV - final.info - include/Spark/Io.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Io.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0860.0 %
Date:2015-11-30Functions:0100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark2io8MmReaderIdED2Ev0
_ZN5spark2io8MmReaderIdE11parseHeaderEb0
_ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENKUlSt5tupleIIiidEES4_E_clES4_S4_0
_ZN5spark2io8MmReaderIdE10readVectorEv0
_ZN5spark2io8MmReaderIdED0Ev0
_ZN5spark2io8MmReaderIdE11parseHeaderESs0
_ZN5spark2io8MmReaderIdEC2ESs0
_ZN5spark2io8MmReaderIdE12mmreadMatrixESs0
_ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENUlSt5tupleIIiidEES4_E_4_FUNES4_S4_0
_ZN5spark2io8MmReaderIdE7mmparseESs0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Io.hpp.func.html b/coverage/include/Spark/Io.hpp.func.html new file mode 100644 index 0000000..0e78dea --- /dev/null +++ b/coverage/include/Spark/Io.hpp.func.html @@ -0,0 +1,112 @@ + + + + + + + LCOV - final.info - include/Spark/Io.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Io.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0860.0 %
Date:2015-11-30Functions:0100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark2io8MmReaderIdE10readVectorEv0
_ZN5spark2io8MmReaderIdE11parseHeaderESs0
_ZN5spark2io8MmReaderIdE11parseHeaderEb0
_ZN5spark2io8MmReaderIdE12mmreadMatrixESs0
_ZN5spark2io8MmReaderIdE7mmparseESs0
_ZN5spark2io8MmReaderIdEC2ESs0
_ZN5spark2io8MmReaderIdED0Ev0
_ZN5spark2io8MmReaderIdED2Ev0
_ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENKUlSt5tupleIIiidEES4_E_clES4_S4_0
_ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENUlSt5tupleIIiidEES4_E_4_FUNES4_S4_0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Io.hpp.gcov.html b/coverage/include/Spark/Io.hpp.gcov.html new file mode 100644 index 0000000..667abcd --- /dev/null +++ b/coverage/include/Spark/Io.hpp.gcov.html @@ -0,0 +1,253 @@ + + + + + + + LCOV - final.info - include/Spark/Io.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Io.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0860.0 %
Date:2015-11-30Functions:0100.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef IO_HPP_QPBO8W0X
+       2             : #define IO_HPP_QPBO8W0X
+       3             : 
+       4             : #include <vector>
+       5             : #include <utility>
+       6             : #include <string>
+       7             : #include <sstream>
+       8             : #include <stdexcept>
+       9             : #include <fstream>
+      10             : #include <chrono>
+      11             : 
+      12             : #include <Spark/SparseMatrix.hpp>
+      13             : 
+      14             : #include <dfesnippets/Timing.hpp>
+      15             : 
+      16             : namespace spark {
+      17             :   namespace io {
+      18             : 
+      19             :     template<typename value_type>
+      20             :       class MmReader {
+      21             : 
+      22             :         bool sparse = false, symmetric = false, matrix = false;
+      23             :         int ncols, nrows, nnzs = -1;
+      24             : 
+      25             :         using SparseMatrix = spark::sparse::SparkCooMatrix<value_type>;
+      26             :         using CoordType = typename SparseMatrix::CoordType;
+      27             : 
+      28           0 :         typename SparseMatrix::CoordType mmparse(const std::string line) {
+      29           0 :           std::stringstream ss{line};
+      30             :           int x, y;
+      31             :           value_type val;
+      32           0 :           ss >> x >> y >> val;
+      33           0 :           return std::make_tuple(x - 1, y - 1, val);
+      34             :         }
+      35             : 
+      36           0 :         void parseHeader(std::string line) {
+      37             :             // is this dense / sparse ?
+      38           0 :             sparse = true;
+      39           0 :             if (line.find("coordinate") != std::string::npos) {
+      40           0 :               sparse = true;
+      41           0 :             } else if (line.find("array") != std::string::npos) {
+      42           0 :               sparse = false;
+      43             :             } else {
+      44           0 :               throw std::invalid_argument("Cannot parse header, requires either 'coordinate' or 'matrix' type");
+      45             :             }
+      46             : 
+      47           0 :             if (line[0] =='%' && line[1] == '%') {
+      48           0 :               if (line.find("matrix") != std::string::npos) {
+      49           0 :                 symmetric = line.find("symmetric") != std::string::npos;
+      50             :               } else
+      51           0 :                 throw std::invalid_argument("Unsupported file type: " + line);
+      52             :             }
+      53           0 :         }
+      54             : 
+      55           0 :         bool parseHeader(bool pprint=false) {
+      56           0 :           std::string line;
+      57           0 :           if (!getline(*f, line))
+      58           0 :             throw std::invalid_argument("File " + path + " is empty");
+      59             : 
+      60           0 :           parseHeader(line);
+      61             : 
+      62             :           // skip comments
+      63           0 :           while (getline(*f, line) && line[0] == '%')
+      64           0 :             continue;
+      65             : 
+      66             :           // read the dimensions
+      67           0 :           std::stringstream ss;
+      68           0 :           ss << line;
+      69           0 :           ss >> nrows >> ncols;
+      70           0 :           if (sparse)
+      71           0 :             ss >> nnzs;
+      72           0 :           matrix = ncols > 1;
+      73             : 
+      74           0 :           if (pprint) {
+      75           0 :             std::cout << "sparse: " << sparse << std::endl;
+      76           0 :             std::cout << "symmetric: " << symmetric << std::endl;
+      77           0 :             std::cout << "matrix: " << matrix << std::endl;
+      78           0 :             std::cout << "ncols: " << ncols << std::endl;
+      79           0 :             std::cout << "nrows: " << nrows << std::endl;
+      80           0 :             std::cout << "nnzs: " << nnzs << std::endl;
+      81           0 :           }
+      82           0 :         }
+      83             : 
+      84             :         std::ifstream* f;
+      85             :         std::string path;
+      86             : 
+      87             :         public:
+      88             : 
+      89           0 :         MmReader(std::string _path) : path(_path) {
+      90           0 :           f = new std::ifstream{_path};
+      91           0 :           if (!f->is_open())
+      92           0 :             throw std::invalid_argument("Could not open file path " + path);
+      93           0 :         }
+      94             : 
+      95           0 :         virtual ~MmReader() {
+      96           0 :           delete f;
+      97           0 :         }
+      98             : 
+      99           0 :         std::vector<double> readVector() {
+     100           0 :           parseHeader();
+     101           0 :           if (matrix)
+     102           0 :             throw std::invalid_argument("Object has > 1 columns ==> Use readMatrix");
+     103           0 :           if (sparse)
+     104           0 :             throw std::invalid_argument("Sparse vectors not supported");
+     105             : 
+     106           0 :           std::cout << "Reading vector" << std::endl;
+     107             : 
+     108           0 :           std::vector<std::tuple<int, double>> tpls;
+     109             :           double val;
+     110             : 
+     111           0 :           std::vector<double> res;
+     112           0 :           while (*f >> val )
+     113           0 :             res.push_back(val);
+     114             : 
+     115             :             //tpls.push_back(std::make_tuple(i, val));
+     116             :           //std::sort(tpls.begin(), tpls.end(),
+     117             :               //[](std::tuple<int, double> x, std::tuple<int, double> y) {
+     118             :                 //return std::get<0>(x) < std::get<0>(y);
+     119             :               //}
+     120             :           //);
+     121             : 
+     122             :           //for (int i = 0; i < res.size(); i++)
+     123             :             //res[i] = std::get<1>(tpls[i]);
+     124             : 
+     125           0 :           return res;
+     126             :         }
+     127             : 
+     128             :         // Read the given file as a MM format description of a sparse matrix.
+     129             :         // Returns a COO representation of the matrix.
+     130             :         // NOTE:
+     131             :         // - the values will be adjusted to 0 based indexing
+     132             :         // - for symmetric matrices, the symmetric entries are also included
+     133             :         // - Triplets will be sorted in lexicographical order of their coordinates (row, column)
+     134           0 :         spark::sparse::SparkCooMatrix<value_type> mmreadMatrix(std::string path) {
+     135           0 :           parseHeader();
+     136             : 
+     137           0 :           if (!matrix)
+     138           0 :             throw std::invalid_argument("Matrix has only one column ==> Use readVector");
+     139             : 
+     140             :           // skip comments
+     141           0 :           std::vector<CoordType> values;
+     142           0 :           std::string line;
+     143           0 :           for (int i = 0; i < nnzs; i++) {
+     144           0 :             if (!getline(*f, line))
+     145           0 :               throw std::invalid_argument("File has less than given nonzeros!");
+     146           0 :             auto tpl = mmparse(line);
+     147           0 :             values.push_back(tpl);
+     148           0 :             auto row = std::get<0>(tpl);
+     149           0 :             auto col = std::get<1>(tpl);
+     150           0 :             if (symmetric && row != col)
+     151           0 :               values.push_back(
+     152             :                   std::make_tuple(
+     153           0 :                     std::get<1>(tpl),
+     154           0 :                     std::get<0>(tpl),
+     155           0 :                     std::get<2>(tpl)));
+     156             :           }
+     157             : 
+     158           0 :           auto start = std::chrono::high_resolution_clock::now();
+     159           0 :           std::sort(values.begin(), values.end(),
+     160           0 :               [](CoordType x, CoordType y) {
+     161             :               return
+     162           0 :               std::get<0>(x) < std::get<0>(y) ||
+     163           0 :               (std::get<0>(x) == std::get<0>(y) && std::get<1>(x) < std::get<1>(y));
+     164           0 :               });
+     165           0 :           dfesnippets::timing::print_clock_diff("Sorting took: ", start);
+     166             : 
+     167           0 :           spark::sparse::SparkCooMatrix<value_type> m(nrows, ncols);
+     168           0 :           m.data = values;
+     169           0 :           return m;
+     170             :         }
+     171             :       };
+     172             :   }
+     173             : }
+     174             : 
+     175             : 
+     176             : 
+     177             : #endif /* end of include guard: IO_HPP_QPBO8W0X */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Model.hpp.func-sort-c.html b/coverage/include/Spark/Model.hpp.func-sort-c.html new file mode 100644 index 0000000..4817235 --- /dev/null +++ b/coverage/include/Spark/Model.hpp.func-sort-c.html @@ -0,0 +1,112 @@ + + + + + + + LCOV - final.info - include/Spark/Model.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Model.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:2316.5 %
Date:2015-11-30Functions:11010.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark5model18LogicResourceUsageC2Eiiii1
_ZNK5spark5model18LogicResourceUsageltERKS1_0
_ZN5spark5model18LogicResourceUsageC2ERKS1_0
_ZNK5spark5model18LogicResourceUsagemlEd0
_ZNK5spark5model18LogicResourceUsagemlEi0
_ZNK5spark5model18LogicResourceUsageplERKS1_0
_ZN5spark5model24ImplementationParameters9to_stringEv0
_ZN5spark5model24ImplementationParametersC2ERKNS0_18LogicResourceUsageEd0
_ZNK5spark5model24ImplementationParametersltERKS1_0
_ZN5spark5model18LogicResourceUsage9to_stringEv0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Model.hpp.func.html b/coverage/include/Spark/Model.hpp.func.html new file mode 100644 index 0000000..567f0fc --- /dev/null +++ b/coverage/include/Spark/Model.hpp.func.html @@ -0,0 +1,112 @@ + + + + + + + LCOV - final.info - include/Spark/Model.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Model.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:2316.5 %
Date:2015-11-30Functions:11010.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark5model18LogicResourceUsage9to_stringEv0
_ZN5spark5model18LogicResourceUsageC2ERKS1_0
_ZN5spark5model18LogicResourceUsageC2Eiiii1
_ZN5spark5model24ImplementationParameters9to_stringEv0
_ZN5spark5model24ImplementationParametersC2ERKNS0_18LogicResourceUsageEd0
_ZNK5spark5model18LogicResourceUsageltERKS1_0
_ZNK5spark5model18LogicResourceUsagemlEd0
_ZNK5spark5model18LogicResourceUsagemlEi0
_ZNK5spark5model18LogicResourceUsageplERKS1_0
_ZNK5spark5model24ImplementationParametersltERKS1_0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Model.hpp.gcov.html b/coverage/include/Spark/Model.hpp.gcov.html new file mode 100644 index 0000000..ad68a0a --- /dev/null +++ b/coverage/include/Spark/Model.hpp.gcov.html @@ -0,0 +1,163 @@ + + + + + + + LCOV - final.info - include/Spark/Model.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Model.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:2316.5 %
Date:2015-11-30Functions:11010.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef MODEL_H
+       2             : #define MODEL_H
+       3             : 
+       4             : #include <sstream>
+       5             : 
+       6             : namespace spark {
+       7             :   namespace model {
+       8             : 
+       9             :     class LogicResourceUsage {
+      10             :       public:
+      11             :         int luts, ffs, brams, dsps;
+      12             : 
+      13             :         LogicResourceUsage() : luts(0), ffs(0), dsps(0), brams(0) {}
+      14             : 
+      15           1 :         LogicResourceUsage(int _l, int _f, int _b, int _d) :
+      16           1 :           luts(_l), ffs(_f), brams(_b), dsps(_d) {}
+      17             : 
+      18           0 :         LogicResourceUsage(const LogicResourceUsage& ru) {
+      19           0 :           luts = ru.luts;
+      20           0 :           ffs = ru.ffs;
+      21           0 :           dsps = ru.dsps;
+      22           0 :           brams = ru.brams;
+      23           0 :         }
+      24             : 
+      25           0 :         std::string to_string() {
+      26           0 :           std::stringstream s;
+      27           0 :           s << luts << " " << ffs << " " << " " << dsps << " " << brams;
+      28           0 :           return s.str();
+      29             :         }
+      30             : 
+      31           0 :         const LogicResourceUsage operator+(const LogicResourceUsage& ru) const {
+      32           0 :           return LogicResourceUsage(luts + ru.luts, ffs + ru.ffs, brams + ru.brams, dsps + ru.dsps);
+      33             :         }
+      34             : 
+      35           0 :         const LogicResourceUsage operator*(int x) const {
+      36           0 :           return LogicResourceUsage(x * luts,  x * ffs, x * brams, x * dsps);
+      37             :         }
+      38             : 
+      39           0 :         const LogicResourceUsage operator*(double x) const {
+      40           0 :           return LogicResourceUsage(x * (double)luts,  x * (double)ffs, x * (double)brams, x * (double)dsps);
+      41             :         }
+      42             : 
+      43           0 :         const bool operator<(const LogicResourceUsage& ru) const {
+      44             :           return
+      45           0 :             luts < ru.luts &&
+      46           0 :             ffs < ru.ffs &&
+      47           0 :             dsps < ru.dsps &&
+      48           0 :             brams < ru.brams;
+      49             :         }
+      50             :     };
+      51             : 
+      52             :     // models the implementation parameters which are constrained (e.g. by
+      53             :     // physical properties, such as lut usage, or by the compiler, such as the
+      54             :     // number of streams)
+      55             :     class ImplementationParameters {
+      56             :       public:
+      57             : 
+      58             :         LogicResourceUsage ru;
+      59             : 
+      60             :         //  params belows not being used currently
+      61             :         double memoryBandwidth; // <-- would be nice to have this
+      62             :         //int streams;
+      63             :         //int clockFrequency;
+      64             :         //int memoryClockFrequency;
+      65             : 
+      66           0 :         ImplementationParameters(const LogicResourceUsage& _ru, double _memoryBandwidth) : ru(_ru), memoryBandwidth(_memoryBandwidth) {}
+      67             : 
+      68           0 :         std::string to_string() {
+      69           0 :           std::stringstream s;
+      70           0 :           s << ru.to_string() << " " << memoryBandwidth;
+      71           0 :           return s.str();
+      72             :         }
+      73             : 
+      74           0 :         bool operator<(const ImplementationParameters& other) const {
+      75             :           return
+      76           0 :             ru < other.ru &&
+      77           0 :             memoryBandwidth < other.memoryBandwidth;
+      78             :           //stream < other.streams &&
+      79             :           //clockFrequency < other.clockFrequency &&
+      80             :           //memoryClockFrequency < other.memoryClockFrequency;
+      81             :         }
+      82             :     };
+      83             : 
+      84             : 
+      85             :   }
+      86             : }
+      87             : #endif /* end of include guard: MODEL_H */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html b/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html new file mode 100644 index 0000000..ec5a032 --- /dev/null +++ b/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html @@ -0,0 +1,188 @@ + + + + + + + LCOV - final.info - include/Spark/SimpleSpmv.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - SimpleSpmv.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:01340.0 %
Date:2015-11-30Functions:0290.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark4spmv12indptr_valueC2Ev0
_ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENUlRKNS0_9PartitionES4_E_4_FUNES4_S4_0
_ZN5spark4spmv22SimpleSpmvArchitecture8get_nameEv0
_ZNK5spark4spmv22SimpleSpmvArchitecture6equalsERKNS0_16SpmvArchitectureE0
_ZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEv0
_ZN5spark4spmv25SkipEmptyRowsArchitecture15encodeEmptyRowsESt6vectorIjSaIjEEb0
_ZN5spark4spmv22SimpleSpmvArchitectureC2EPNS_7runtime27GeneratedSpmvImplementationE0
_ZN5spark4spmv22SimpleSpmvArchitecture14getLibraryNameEv0
_ZN5spark4spmv22SimpleSpmvArchitecture14getGFlopsCountEv0
_ZN5spark4spmv22SimpleSpmvArchitecture9logResultIdIEEEvSsT_DpT0_0
_ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEEC2ENS_5utils5RangeES5_S5_i0
_ZN5spark4spmv22SimpleSpmvArchitecture9to_stringEv0
_ZN5spark4spmv22SimpleSpmvArchitectureD2Ev0
_ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE6doNextEv0
_ZN5spark4spmv9PartitionD2Ev0
_ZN5spark4spmv22SimpleSpmvArchitectureD0Ev0
_ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENKUlRKNS0_9PartitionES4_E_clES4_S4_0
_ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiEEvSsSt6vectorIT_SaIS4_EE0
_ZN5spark4spmv22SimpleSpmvArchitecture27getImplementationParametersEv0
_ZN5spark4spmv25SkipEmptyRowsArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii0
_ZN5spark4spmv22SimpleSpmvArchitecture10logResultRESs0
_ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiIEEEvSsT_DpT0_0
_ZN5spark4spmv9PartitionC2Ev0
_ZN5spark4spmv9PartitionC2EOS1_0
_ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE7restartEv0
_ZN5spark4spmv12indptr_valueC2Edi0
_ZNK5spark4spmv22SimpleSpmvArchitectureeqERKS1_0
_ZN5spark4spmv22SimpleSpmvArchitectureC2Eiiii0
_ZN5spark4spmv22SimpleSpmvArchitecture12write_paramsEv0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/SimpleSpmv.hpp.func.html b/coverage/include/Spark/SimpleSpmv.hpp.func.html new file mode 100644 index 0000000..53f4fcd --- /dev/null +++ b/coverage/include/Spark/SimpleSpmv.hpp.func.html @@ -0,0 +1,188 @@ + + + + + + + LCOV - final.info - include/Spark/SimpleSpmv.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - SimpleSpmv.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:01340.0 %
Date:2015-11-30Functions:0290.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark4spmv12indptr_valueC2Edi0
_ZN5spark4spmv12indptr_valueC2Ev0
_ZN5spark4spmv22SimpleSpmvArchitecture10logResultRESs0
_ZN5spark4spmv22SimpleSpmvArchitecture12write_paramsEv0
_ZN5spark4spmv22SimpleSpmvArchitecture14getGFlopsCountEv0
_ZN5spark4spmv22SimpleSpmvArchitecture14getLibraryNameEv0
_ZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEv0
_ZN5spark4spmv22SimpleSpmvArchitecture27getImplementationParametersEv0
_ZN5spark4spmv22SimpleSpmvArchitecture8get_nameEv0
_ZN5spark4spmv22SimpleSpmvArchitecture9logResultIdIEEEvSsT_DpT0_0
_ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiEEvSsSt6vectorIT_SaIS4_EE0
_ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiIEEEvSsT_DpT0_0
_ZN5spark4spmv22SimpleSpmvArchitecture9to_stringEv0
_ZN5spark4spmv22SimpleSpmvArchitectureC2EPNS_7runtime27GeneratedSpmvImplementationE0
_ZN5spark4spmv22SimpleSpmvArchitectureC2Eiiii0
_ZN5spark4spmv22SimpleSpmvArchitectureD0Ev0
_ZN5spark4spmv22SimpleSpmvArchitectureD2Ev0
_ZN5spark4spmv25SkipEmptyRowsArchitecture15encodeEmptyRowsESt6vectorIjSaIjEEb0
_ZN5spark4spmv25SkipEmptyRowsArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii0
_ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE6doNextEv0
_ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE7restartEv0
_ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEEC2ENS_5utils5RangeES5_S5_i0
_ZN5spark4spmv9PartitionC2EOS1_0
_ZN5spark4spmv9PartitionC2Ev0
_ZN5spark4spmv9PartitionD2Ev0
_ZNK5spark4spmv22SimpleSpmvArchitecture6equalsERKNS0_16SpmvArchitectureE0
_ZNK5spark4spmv22SimpleSpmvArchitectureeqERKS1_0
_ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENKUlRKNS0_9PartitionES4_E_clES4_S4_0
_ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENUlRKNS0_9PartitionES4_E_4_FUNES4_S4_0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/SimpleSpmv.hpp.gcov.html b/coverage/include/Spark/SimpleSpmv.hpp.gcov.html new file mode 100644 index 0000000..7497f2c --- /dev/null +++ b/coverage/include/Spark/SimpleSpmv.hpp.gcov.html @@ -0,0 +1,462 @@ + + + + + + + LCOV - final.info - include/Spark/SimpleSpmv.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - SimpleSpmv.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:01340.0 %
Date:2015-11-30Functions:0290.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef SIMPLESPMV_H
+       2             : #define SIMPLESPMV_H
+       3             : 
+       4             : #include <sstream>
+       5             : 
+       6             : #include <Spark/Spmv.hpp>
+       7             : #include <Spark/Utils.hpp>
+       8             : #include <Spark/Model.hpp>
+       9             : #include <Spark/device/SpmvDeviceInterface.h>
+      10             : #include <Spark/GeneratedImplSupport.hpp>
+      11             : 
+      12             : 
+      13             : namespace spark {
+      14             :   namespace spmv {
+      15             : 
+      16             :     using EigenSparseMatrix = Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>;
+      17             : 
+      18             :     // pack values and colptr to reduce number of streams
+      19             : #pragma pack(1)
+      20             :     struct indptr_value {
+      21             :       double value;
+      22             :       int indptr;
+      23           0 :       indptr_value(double _value, int _indptr) : value(_value), indptr(_indptr) {}
+      24           0 :       indptr_value() : value(0), indptr(0) {}
+      25             :     } __attribute__((packed));
+      26             : #pragma pack()
+      27             : 
+      28           0 :     struct Partition {
+      29             :       int nBlocks, n, paddingCycles, totalCycles, vector_load_cycles, outSize;
+      30             :       int reductionCycles, emptyCycles;
+      31             :       int m_colptr_unpaddedLength;
+      32             :       int m_indptr_values_unpaddedLength;
+      33             :       std::vector<int> m_colptr;
+      34             :       std::vector<indptr_value> m_indptr_values;
+      35             : 
+      36             :       std::string to_string() {
+      37             :         std::stringstream s;
+      38             :         s << "Vector load cycles " << vector_load_cycles << std::endl;
+      39             :         s << "Padding cycles = " << paddingCycles << std::endl;
+      40             :         s << "Total cycles = " << totalCycles << std::endl;
+      41             :         s << "Nrows = " << n << std::endl;
+      42             :         s << "Partitions = " << nBlocks << std::endl;
+      43             :         s << "Reduction cycles = " << reductionCycles << std::endl;
+      44             :         std::cout << "Empty cycles = " << emptyCycles << std::endl;
+      45             :         return s.str();
+      46             :       }
+      47             :     };
+      48             : 
+      49             :     // A parameterised, generic architecture for SpMV. Supported parameters are:
+      50             :     // - input width
+      51             :     // - number of pipes
+      52             :     // - cache size per pipe
+      53             :     // - TODO data type
+      54           0 :     class SimpleSpmvArchitecture : public SpmvArchitecture {
+      55             :       // architecture specific properties
+      56             :       protected:
+      57             : 
+      58             :       // design parameters
+      59             :       const int cacheSize, inputWidth, numPipes, maxRows;
+      60             : 
+      61             :       EigenSparseMatrix mat;
+      62             :       std::vector<Partition> partitions;
+      63             :       spark::runtime::GeneratedSpmvImplementation* impl;
+      64             : 
+      65             :       virtual int countComputeCycles(uint32_t* v, int size, int inputWidth);
+      66             : 
+      67           0 :       virtual bool equals(const SpmvArchitecture& a) const override {
+      68           0 :         const SimpleSpmvArchitecture* other = dynamic_cast<const SimpleSpmvArchitecture*>(&a);
+      69           0 :         return other != nullptr && *other == *this;
+      70             :       }
+      71             : 
+      72             :       public:
+      73             : 
+      74           0 :         bool operator==(const SimpleSpmvArchitecture& other) const {
+      75             :           return
+      76           0 :             cacheSize == other.cacheSize &&
+      77           0 :             inputWidth == other.inputWidth &&
+      78           0 :             numPipes == other.numPipes &&
+      79           0 :             maxRows == other.maxRows;
+      80             :         }
+      81             : 
+      82           0 :         virtual boost::property_tree::ptree write_params() override {
+      83           0 :           boost::property_tree::ptree tree;
+      84           0 :           tree.put("num_pipes", numPipes);
+      85           0 :           tree.put("cache_size", cacheSize);
+      86           0 :           tree.put("input_width", inputWidth);
+      87           0 :           tree.put("max_rows", maxRows);
+      88           0 :           return tree;
+      89             :         }
+      90             : 
+      91             :         SimpleSpmvArchitecture() :
+      92             :           cacheSize(getSpmv_PartitionSize()),
+      93             :           inputWidth(getSpmv_InputWidth()),
+      94             :           numPipes(getSpmv_NumPipes()),
+      95             :           maxRows(getSpmv_MaxRows()) {}
+      96             : 
+      97           0 :         SimpleSpmvArchitecture(int _cacheSize, int  _inputWidth, int _numPipes, int _maxRows) :
+      98             :           cacheSize(_cacheSize),
+      99             :           inputWidth(_inputWidth),
+     100             :           numPipes(_numPipes),
+     101           0 :           maxRows(_maxRows) {}
+     102             : 
+     103             :         /**
+     104             :          * For execution we build the architecture and give it a pointer to the
+     105             :          * device implementation.
+     106             :          */
+     107           0 :         SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation* _impl):
+     108           0 :           cacheSize(_impl->cacheSize()),
+     109           0 :           inputWidth(_impl->inputWidth()),
+     110           0 :           numPipes(_impl->numPipes()),
+     111           0 :           maxRows(_impl->maxRows()),
+     112           0 :           impl(_impl) { }
+     113             : 
+     114           0 :         virtual std::string getLibraryName() {
+     115           0 :           std::stringstream ss;
+     116           0 :           ss << "libSpmv_";
+     117             :           // XXX detect target from environment configuration?
+     118           0 :           const std::string target = "sim";
+     119           0 :           ss << target << "_";
+     120           0 :           ss << "cachesize" << cacheSize << "_";
+     121           0 :           ss << "inputwidth" << inputWidth << "_";
+     122           0 :           ss << "numpipes" << numPipes << "_";
+     123           0 :           ss << "maxrows" << maxRows;
+     124           0 :           ss << ".so";
+     125           0 :           return ss.str();
+     126             :         }
+     127             : 
+     128           0 :         virtual double getEstimatedClockCycles() {
+     129             :           auto res = std::max_element(partitions.begin(), partitions.end(),
+     130           0 :               [](const Partition& a, const Partition& b) {
+     131           0 :                 return a.totalCycles < b.totalCycles;
+     132           0 :               });
+     133           0 :           return res->totalCycles;
+     134             :         }
+     135             : 
+     136           0 :         virtual double getGFlopsCount() {
+     137           0 :           return 2 * this->mat.nonZeros() / 1E9;
+     138             :         }
+     139             : 
+     140             :         // NOTE: only call this after a call to preprocessMatrix
+     141           0 :         virtual spark::model::ImplementationParameters getImplementationParameters() {
+     142             :           // XXX bram usage for altera in double precision only (512 deep, 40 bits wide, so need 2 BRAMs)
+     143             :           //int brams = (double)cacheSize * (double)inputWidth / 512.0 * 2.0;
+     144             :           using namespace spark::model;
+     145             : 
+     146             :           // XXX these should be architecture params
+     147           0 :           int maxRows = (this->mat.rows() / 512) * 512;
+     148           0 :           const int virtex6EntriesPerBram = 512;
+     149             : 
+     150           0 :           LogicResourceUsage interPartitionReductionKernel(2768,1505, maxRows / virtex6EntriesPerBram, 0);
+     151           0 :           LogicResourceUsage paddingKernel{400, 500, 0, 0};
+     152           0 :           LogicResourceUsage spmvKernelPerInput{1466, 2060, cacheSize / virtex6EntriesPerBram, 10}; // includes cache
+     153           0 :           LogicResourceUsage sm{800, 500, 0, 0};
+     154             : 
+     155             :           LogicResourceUsage spmvPerPipe =
+     156           0 :             interPartitionReductionKernel +
+     157           0 :             paddingKernel +
+     158           0 :             spmvKernelPerInput * inputWidth +
+     159           0 :             sm;
+     160             : 
+     161           0 :           LogicResourceUsage memoryPerPipe{3922, 8393, 160, 0};
+     162           0 :           LogicResourceUsage memory{24000, 32000, 0, 0};
+     163             : 
+     164             :           //LogicResourceUsage designOther{};
+     165           0 :           LogicResourceUsage designUsage = (spmvPerPipe + memoryPerPipe) * numPipes + memory;
+     166             : 
+     167           0 :           double memoryBandwidth =(double)inputWidth * numPipes * getFrequency() * 12.0 / 1E9;
+     168           0 :           ImplementationParameters ip{designUsage, memoryBandwidth};
+     169             :           //ip.clockFrequency = getFrequency() / 1E6; // MHz
+     170           0 :           return ip;
+     171             :         }
+     172             : 
+     173           0 :         virtual std::string to_string() {
+     174           0 :           std::stringstream s;
+     175           0 :           s << get_name();
+     176           0 :           s << " " << cacheSize;
+     177           0 :           s << " " << inputWidth;
+     178           0 :           s << " " << numPipes;
+     179           0 :           s << " " << getEstimatedClockCycles();
+     180           0 :           s << " " << getEstimatedGFlops();
+     181           0 :           return s.str();
+     182             :         }
+     183             : 
+     184             :         virtual void preprocess(const EigenSparseMatrix& mat) override;
+     185             : 
+     186             :         virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) override;
+     187             : 
+     188           0 :         virtual std::string get_name() override {
+     189           0 :           return std::string("Simple");
+     190             :         }
+     191             : 
+     192             :       private:
+     193             :         std::vector<EigenSparseMatrix> do_partition(
+     194             :             const EigenSparseMatrix& mat,
+     195             :             int numPipes);
+     196             : 
+     197             :         Partition do_blocking(
+     198             :             const Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>& mat,
+     199             :             int blockSize,
+     200             :             int inputWidth);
+     201             : 
+     202             :         template<typename U>
+     203           0 :         void logResult(std::string s, std::vector<U> vals) {
+     204           0 :           logResultR(s);
+     205           0 :           for (const auto& v : vals)
+     206           0 :             std::cout << v << ",";
+     207           0 :           std::cout << std::endl;
+     208           0 :         }
+     209             : 
+     210             :         template<typename Arg, typename... Args>
+     211           0 :         void logResult(std::string s, Arg a, Args... as) {
+     212           0 :           logResultR(s, as...);
+     213           0 :           std::cout << a << ",";
+     214           0 :           std::cout << std::endl;
+     215           0 :         }
+     216             : 
+     217             :         template<typename Arg, typename... Args>
+     218             :         void logResultR(std::string s, Arg a, Args... as) {
+     219             :           logResultR(s, as...);
+     220             :           std::cout << a << ",";
+     221             :         }
+     222             : 
+     223           0 :         void logResultR(std::string s) {
+     224           0 :           std::cout << "Result " << get_name() << " ";
+     225           0 :           std::cout << s << "=";
+     226           0 :         }
+     227             : 
+     228             : 
+     229             :     };
+     230             : 
+     231             :     template<typename T>
+     232             :     class SimpleSpmvArchitectureSpace : public SpmvArchitectureSpace {
+     233             :       // NOTE any raw pointers returned through the API of this class
+     234             :       // are assumed to be wrapped in smart pointers by the base class
+     235             :       spark::utils::Range cacheSizeR{1024, 4096, 512};
+     236             :       spark::utils::Range inputWidthR{8, 100, 8};
+     237             :       spark::utils::Range numPipesR{1, 6, 1};
+     238             :       int maxRows;
+     239             : 
+     240             :       bool last = false;
+     241             : 
+     242             :       public:
+     243             : 
+     244           0 :       SimpleSpmvArchitectureSpace(
+     245             :           spark::utils::Range numPipesRange,
+     246             :           spark::utils::Range inputWidthRange,
+     247             :           spark::utils::Range cacheSizeRange,
+     248           0 :           int _maxRows) {
+     249           0 :         cacheSizeR = cacheSizeRange;
+     250           0 :         inputWidthR = inputWidthRange;
+     251           0 :         numPipesR = numPipesRange;
+     252           0 :         maxRows = _maxRows;
+     253           0 :       }
+     254             : 
+     255             :       SimpleSpmvArchitectureSpace() {
+     256             :       }
+     257             : 
+     258             :       protected:
+     259           0 :       void restart() override {
+     260           0 :         cacheSizeR.restart();
+     261           0 :         inputWidthR.restart();
+     262           0 :         numPipesR.restart();
+     263           0 :         last = false;
+     264           0 :       }
+     265             : 
+     266           0 :       T* doNext(){
+     267           0 :         if (last)
+     268           0 :           return nullptr;
+     269             : 
+     270           0 :         T* result = new T(cacheSizeR.crt, inputWidthR.crt, numPipesR.crt, maxRows);
+     271             : 
+     272           0 :         ++cacheSizeR;
+     273           0 :         if (cacheSizeR.at_start()) {
+     274           0 :           ++inputWidthR;
+     275           0 :           if (inputWidthR.at_start()) {
+     276           0 :             ++numPipesR;
+     277           0 :             if (numPipesR.at_start())
+     278           0 :               last = true;
+     279             :           }
+     280             :         }
+     281             : 
+     282           0 :         return result;
+     283             :       }
+     284             :     };
+     285             : 
+     286             : 
+     287             :     // FST based architecture, for now we assume it's the same though it probably isn't
+     288             :     class FstSpmvArchitecture : public SimpleSpmvArchitecture {
+     289             :       protected:
+     290             : 
+     291             :       virtual int countComputeCycles(uint32_t* v, int size, int inputWidth) override {
+     292             :         int cycles = 0;
+     293             :         for (int i = 0; i < size; i++) {
+     294             :           int toread = v[i] - (i > 0 ? v[i - 1] : 0);
+     295             :           do {
+     296             :             toread -= std::min(toread, inputWidth);
+     297             :             cycles++;
+     298             :           } while (toread > 0);
+     299             :         }
+     300             :         return cycles;
+     301             :       }
+     302             : 
+     303             :       public:
+     304             :       FstSpmvArchitecture() : SimpleSpmvArchitecture() {}
+     305             : 
+     306             :       FstSpmvArchitecture(int _cacheSize, int  _inputWidth, int _numPipes, int _maxRows) :
+     307             :         SimpleSpmvArchitecture(_cacheSize, _inputWidth, _numPipes, _maxRows) {}
+     308             : 
+     309             :       virtual std::string get_name() override {
+     310             :         return std::string("Fst");
+     311             :       }
+     312             : 
+     313             :     };
+     314             : 
+     315             :     // Model for an architecture which can skip sequences of empty rows
+     316             :     class SkipEmptyRowsArchitecture : public SimpleSpmvArchitecture {
+     317             :       protected:
+     318             : 
+     319           0 :         std::vector<uint32_t> encodeEmptyRows(std::vector<uint32_t> pin, bool encode) {
+     320           0 :           std::vector<uint32_t> encoded;
+     321           0 :           if (!encode) {
+     322           0 :             return pin;
+     323             :           }
+     324             : 
+     325           0 :           int emptyRunLength = 0;
+     326           0 :           for (size_t i = 0; i < pin.size(); i++) {
+     327           0 :             uint32_t rowLength = pin[i] - (i == 0 ? 0 : pin[i - 1]);
+     328           0 :             if (rowLength == 0) {
+     329           0 :               emptyRunLength++;
+     330             :             } else {
+     331           0 :               if (emptyRunLength != 0) {
+     332           0 :                 encoded.push_back(emptyRunLength | (1 << 31));
+     333             :               }
+     334           0 :               emptyRunLength = 0;
+     335           0 :               encoded.push_back(pin[i]);
+     336             :             }
+     337             :           }
+     338             : 
+     339           0 :           if (emptyRunLength != 0) {
+     340           0 :             encoded.push_back(emptyRunLength | (1 << 31));
+     341             :           }
+     342             : 
+     343           0 :           return encoded;
+     344             :         }
+     345             : 
+     346           0 :         virtual spark::sparse::CsrMatrix preprocessBlock(
+     347             :             const spark::sparse::CsrMatrix& in,
+     348             :             int blockNumber,
+     349             :             int nBlocks) override {
+     350           0 :           bool encode = blockNumber != 0 && blockNumber != nBlocks - 1;
+     351             :           return std::make_tuple(
+     352           0 :               encodeEmptyRows(std::get<0>(in), encode),
+     353           0 :               std::get<1>(in),
+     354           0 :               std::get<2>(in));
+     355             :         }
+     356             : 
+     357             :       public:
+     358             :       SkipEmptyRowsArchitecture() : SimpleSpmvArchitecture(){}
+     359             : 
+     360             :       SkipEmptyRowsArchitecture(int _cacheSize, int  _inputWidth, int _numPipes, int _maxRows) :
+     361             :         SimpleSpmvArchitecture(_cacheSize, _inputWidth, _numPipes, maxRows) {}
+     362             : 
+     363             :       virtual std::string get_name() override {
+     364             :         return std::string("SkipEmpty");
+     365             :       }
+     366             :     };
+     367             : 
+     368             :     class PrefetchingArchitecture : public SkipEmptyRowsArchitecture {
+     369             :       protected:
+     370             : 
+     371             :       public:
+     372             :       PrefetchingArchitecture() : SkipEmptyRowsArchitecture(){}
+     373             : 
+     374             :       PrefetchingArchitecture(int _cacheSize, int  _inputWidth, int _numPipes, int _maxRows) :
+     375             :         SkipEmptyRowsArchitecture(_cacheSize, _inputWidth, _numPipes, _maxRows) {}
+     376             : 
+     377             :       virtual std::string get_name() override {
+     378             :         return std::string("PrefetchingArchitecture");
+     379             :       }
+     380             :     };
+     381             : 
+     382             :   }
+     383             : }
+     384             : 
+     385             : 
+     386             : #endif /* end of include guard: SIMPLESPMV_H */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/SparseLinearSolvers.hpp.func-sort-c.html b/coverage/include/Spark/SparseLinearSolvers.hpp.func-sort-c.html new file mode 100644 index 0000000..421f0b3 --- /dev/null +++ b/coverage/include/Spark/SparseLinearSolvers.hpp.func-sort-c.html @@ -0,0 +1,80 @@ + + + + + + + LCOV - final.info - include/Spark/SparseLinearSolvers.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - SparseLinearSolvers.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:040.0 %
Date:2015-11-30Functions:020.0 %
+
+ +
+ + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark21sparse_linear_solvers6Solver7analyzeERKN5Eigen12SparseMatrixIdLi0EiEE0
_ZN5spark21sparse_linear_solvers6Solver10preprocessERKN5Eigen12SparseMatrixIdLi0EiEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/SparseLinearSolvers.hpp.func.html b/coverage/include/Spark/SparseLinearSolvers.hpp.func.html new file mode 100644 index 0000000..7ccc111 --- /dev/null +++ b/coverage/include/Spark/SparseLinearSolvers.hpp.func.html @@ -0,0 +1,80 @@ + + + + + + + LCOV - final.info - include/Spark/SparseLinearSolvers.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - SparseLinearSolvers.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:040.0 %
Date:2015-11-30Functions:020.0 %
+
+ +
+ + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark21sparse_linear_solvers6Solver10preprocessERKN5Eigen12SparseMatrixIdLi0EiEE0
_ZN5spark21sparse_linear_solvers6Solver7analyzeERKN5Eigen12SparseMatrixIdLi0EiEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/SparseLinearSolvers.hpp.gcov.html b/coverage/include/Spark/SparseLinearSolvers.hpp.gcov.html new file mode 100644 index 0000000..76e8184 --- /dev/null +++ b/coverage/include/Spark/SparseLinearSolvers.hpp.gcov.html @@ -0,0 +1,124 @@ + + + + + + + LCOV - final.info - include/Spark/SparseLinearSolvers.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - SparseLinearSolvers.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:040.0 %
Date:2015-11-30Functions:020.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef SPARSE_LINEAR_SOLVERS_HPP
+       2             : #define SPARSE_LINEAR_SOLVERS_HPP
+       3             : 
+       4             : #include <Eigen/Sparse>
+       5             : 
+       6             : namespace spark {
+       7             :   namespace sparse_linear_solvers {
+       8             : 
+       9             :     class Solver {
+      10             :       public:
+      11           0 :         virtual void analyze(
+      12             :             const Eigen::SparseMatrix<double> &A) {
+      13           0 :         }
+      14             : 
+      15           0 :         virtual void preprocess(
+      16             :             const Eigen::SparseMatrix<double> &A) {
+      17           0 :         }
+      18             : 
+      19             :         virtual Eigen::VectorXd solve(
+      20             :             const Eigen::SparseMatrix<double>& A,
+      21             :             const Eigen::VectorXd& b) = 0;
+      22             :     };
+      23             : 
+      24             :     class EigenSolver: public Solver {
+      25             :       public:
+      26             :         virtual Eigen::VectorXd solve(
+      27             :             const Eigen::SparseMatrix<double>& A,
+      28             :             const Eigen::VectorXd& b);
+      29             :     };
+      30             : 
+      31             :     class DfeCgSolver: public Solver {
+      32             :       public:
+      33             :         virtual Eigen::VectorXd solve(
+      34             :             const Eigen::SparseMatrix<double>& A,
+      35             :             const Eigen::VectorXd& b);
+      36             :     };
+      37             : 
+      38             :     class DfeBiCgSolver: public Solver {
+      39             :       public:
+      40             :         virtual Eigen::VectorXd solve(
+      41             :             const Eigen::SparseMatrix<double>& A,
+      42             :             const Eigen::VectorXd& b);
+      43             :     };
+      44             :   }
+      45             : }
+      46             : 
+      47             : #endif /* end of include guard: SPARSE_LINEAR_SOLVERS_HPP */
+      48             : 
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html b/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html new file mode 100644 index 0000000..d17de12 --- /dev/null +++ b/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html @@ -0,0 +1,80 @@ + + + + + + + LCOV - final.info - include/Spark/SparseMatrix.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - SparseMatrix.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:020.0 %
Date:2015-11-30Functions:020.0 %
+
+ +
+ + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark6sparse14SparkCooMatrixIdED2Ev0
_ZN5spark6sparse14SparkCooMatrixIdEC2Eii0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/SparseMatrix.hpp.func.html b/coverage/include/Spark/SparseMatrix.hpp.func.html new file mode 100644 index 0000000..5acd0d0 --- /dev/null +++ b/coverage/include/Spark/SparseMatrix.hpp.func.html @@ -0,0 +1,80 @@ + + + + + + + LCOV - final.info - include/Spark/SparseMatrix.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - SparseMatrix.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:020.0 %
Date:2015-11-30Functions:020.0 %
+
+ +
+ + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark6sparse14SparkCooMatrixIdEC2Eii0
_ZN5spark6sparse14SparkCooMatrixIdED2Ev0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/SparseMatrix.hpp.gcov.html b/coverage/include/Spark/SparseMatrix.hpp.gcov.html new file mode 100644 index 0000000..cf52ae0 --- /dev/null +++ b/coverage/include/Spark/SparseMatrix.hpp.gcov.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - final.info - include/Spark/SparseMatrix.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - SparseMatrix.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:020.0 %
Date:2015-11-30Functions:020.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef SPARSEMATRIX_HPP_1BWMMLC8
+       2             : #define SPARSEMATRIX_HPP_1BWMMLC8
+       3             : 
+       4             : #include <Eigen/Sparse>
+       5             : 
+       6             : namespace spark {
+       7             :   namespace sparse {
+       8             : 
+       9             :     using CsrMatrix = std::tuple<std::vector<uint32_t>, std::vector<int>, std::vector<double>>;
+      10             : 
+      11             :     using PartitionedCsrMatrix = std::vector<CsrMatrix>;
+      12             : 
+      13             :     template<typename value_type>
+      14           0 :       class SparkCooMatrix {
+      15             : 
+      16             :         public:
+      17             :         using CoordType = std::tuple<int, int, value_type>;
+      18             : 
+      19             :         int n, m;
+      20             :         std::vector<CoordType> data;
+      21             : 
+      22           0 :         SparkCooMatrix(int _n, int _m) : n(_n), m(_m) {}
+      23             :       };
+      24             :   }
+      25             : }
+      26             : 
+      27             : #endif /* end of include guard: SPARSEMATRIX_HPP_1BWMMLC8 */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Spmv.hpp.func-sort-c.html b/coverage/include/Spark/Spmv.hpp.func-sort-c.html new file mode 100644 index 0000000..a090915 --- /dev/null +++ b/coverage/include/Spark/Spmv.hpp.func-sort-c.html @@ -0,0 +1,120 @@ + + + + + + + LCOV - final.info - include/Spark/Spmv.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Spmv.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0190.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark4spmv16SpmvArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii0
_ZN5spark4spmv21SpmvArchitectureSpaceC2Ev0
_ZN5spark4spmv16SpmvArchitectureD0Ev0
_ZN5spark4spmv16SpmvArchitectureeqERKS1_0
_ZN5spark4spmv5alignIdEEvRSt6vectorIT_SaIS3_EEi0
_ZN5spark4spmv16SpmvArchitecture12getFrequencyEv0
_ZN5spark4spmv21SpmvArchitectureSpace4nextEv0
_ZN5spark4spmv16SpmvArchitectureC2Ev0
_ZN5spark4spmv5alignINS0_12indptr_valueEEEvRSt6vectorIT_SaIS4_EEi0
_ZN5spark4spmv16SpmvArchitecture18getEstimatedGFlopsEv0
_ZN5spark4spmv16SpmvArchitectureD2Ev0
_ZN5spark4spmv5alignIiEEvRSt6vectorIT_SaIS3_EEi0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Spmv.hpp.func.html b/coverage/include/Spark/Spmv.hpp.func.html new file mode 100644 index 0000000..d613e4f --- /dev/null +++ b/coverage/include/Spark/Spmv.hpp.func.html @@ -0,0 +1,120 @@ + + + + + + + LCOV - final.info - include/Spark/Spmv.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Spmv.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0190.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark4spmv16SpmvArchitecture12getFrequencyEv0
_ZN5spark4spmv16SpmvArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii0
_ZN5spark4spmv16SpmvArchitecture18getEstimatedGFlopsEv0
_ZN5spark4spmv16SpmvArchitectureC2Ev0
_ZN5spark4spmv16SpmvArchitectureD0Ev0
_ZN5spark4spmv16SpmvArchitectureD2Ev0
_ZN5spark4spmv16SpmvArchitectureeqERKS1_0
_ZN5spark4spmv21SpmvArchitectureSpace4nextEv0
_ZN5spark4spmv21SpmvArchitectureSpaceC2Ev0
_ZN5spark4spmv5alignINS0_12indptr_valueEEEvRSt6vectorIT_SaIS4_EEi0
_ZN5spark4spmv5alignIdEEvRSt6vectorIT_SaIS3_EEi0
_ZN5spark4spmv5alignIiEEvRSt6vectorIT_SaIS3_EEi0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Spmv.hpp.gcov.html b/coverage/include/Spark/Spmv.hpp.gcov.html new file mode 100644 index 0000000..f6b3b3c --- /dev/null +++ b/coverage/include/Spark/Spmv.hpp.gcov.html @@ -0,0 +1,160 @@ + + + + + + + LCOV - final.info - include/Spark/Spmv.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Spmv.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0190.0 %
Date:2015-11-30Functions:0120.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef SPMV_H
+       2             : #define SPMV_H
+       3             : 
+       4             : #include <Spark/SparseMatrix.hpp>
+       5             : #include <Spark/Model.hpp>
+       6             : #include <boost/property_tree/ptree.hpp>
+       7             : #include <Eigen/Sparse>
+       8             : 
+       9             : namespace spark {
+      10             :   namespace spmv {
+      11             : 
+      12             :     // A generic architecture for SpMV
+      13           0 :     class SpmvArchitecture {
+      14             : 
+      15             :       public:
+      16           0 :         double getEstimatedGFlops() {
+      17           0 :           return  getGFlopsCount() /(getEstimatedClockCycles() / getFrequency());
+      18             :         }
+      19             : 
+      20           0 :         double getFrequency() {
+      21           0 :           return 100 * 1E6;
+      22             :         }
+      23             : 
+      24             :         virtual double getEstimatedClockCycles() = 0;
+      25             :         virtual double getGFlopsCount() = 0;
+      26             :         virtual std::string to_string() = 0;
+      27             :         virtual spark::model::ImplementationParameters getImplementationParameters() = 0;
+      28             :         virtual void preprocess(const Eigen::SparseMatrix<double, Eigen::RowMajor>& mat) = 0;
+      29             :         virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) = 0;
+      30             :         virtual std::string get_name() = 0;
+      31             :         virtual boost::property_tree::ptree write_params() = 0;
+      32             :         virtual std::string getLibraryName() = 0;
+      33           0 :         bool operator==(const SpmvArchitecture& other) {
+      34           0 :           return equals(other);
+      35             :         }
+      36             : 
+      37           0 :         virtual ~SpmvArchitecture() {}
+      38             : 
+      39             :       protected:
+      40           0 :         virtual spark::sparse::CsrMatrix preprocessBlock(
+      41             :             const spark::sparse::CsrMatrix& in,
+      42             :             int blockNumber,
+      43             :             int nBlocks) {
+      44           0 :           return in;
+      45             :         }
+      46             :         virtual bool equals(const SpmvArchitecture& a) const = 0;
+      47             :     };
+      48             : 
+      49             :     inline std::ostream& operator<<(std::ostream& s, SpmvArchitecture& a) {
+      50             :       s << " Estimated clock cycles = " << a.getEstimatedClockCycles();
+      51             :       return s;
+      52             :     }
+      53             : 
+      54             :     // An ArchitectureSpace provides a simple way to iterate over the design space
+      55             :     // of an architecture, abstracting the details of the architecture's parameters
+      56             :     // XXX actually implemnt the STL iterator (if it makes sense?)
+      57           0 :     class SpmvArchitectureSpace {
+      58             :       public:
+      59           0 :         std::shared_ptr<SpmvArchitecture> next() {
+      60           0 :           return std::shared_ptr<SpmvArchitecture>(doNext());
+      61             :         }
+      62             : 
+      63             :         // restart the exploration process
+      64             :         virtual void restart() = 0;
+      65             : 
+      66             :       protected:
+      67             :         // returns nullptr if at end
+      68             :         virtual SpmvArchitecture* doNext() = 0;
+      69             :     };
+      70             : 
+      71             :     template<typename T>
+      72           0 :       void align(std::vector<T>& v, int widthInBytes) {
+      73           0 :         int limit = widthInBytes / sizeof(T);
+      74           0 :         while ((v.size() * sizeof(T)) % widthInBytes != 0 && limit != 0) {
+      75           0 :           v.push_back(T{});
+      76           0 :           limit--;
+      77             :         }
+      78           0 :       }
+      79             : 
+      80             : }
+      81             : }
+      82             : 
+      83             : 
+      84             : #endif /* end of include guard: SPMV_H */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Utils.hpp.func-sort-c.html b/coverage/include/Spark/Utils.hpp.func-sort-c.html new file mode 100644 index 0000000..474ccf0 --- /dev/null +++ b/coverage/include/Spark/Utils.hpp.func-sort-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - final.info - include/Spark/Utils.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Utils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0270.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark5utils5RangeC2Eiii0
_ZN5spark5utils5RangeC2ESs0
_ZN5spark5utilslsERSoRKNS0_5RangeE0
_ZN5spark5utils5RangeppEv0
_ZN5spark5utils5Range7restartEv0
_ZN5spark5utils5Range8at_startEv0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Utils.hpp.func.html b/coverage/include/Spark/Utils.hpp.func.html new file mode 100644 index 0000000..5b67e7b --- /dev/null +++ b/coverage/include/Spark/Utils.hpp.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - final.info - include/Spark/Utils.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Utils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0270.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark5utils5Range7restartEv0
_ZN5spark5utils5Range8at_startEv0
_ZN5spark5utils5RangeC2ESs0
_ZN5spark5utils5RangeC2Eiii0
_ZN5spark5utils5RangeppEv0
_ZN5spark5utilslsERSoRKNS0_5RangeE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Utils.hpp.gcov.html b/coverage/include/Spark/Utils.hpp.gcov.html new file mode 100644 index 0000000..e9b06c6 --- /dev/null +++ b/coverage/include/Spark/Utils.hpp.gcov.html @@ -0,0 +1,141 @@ + + + + + + + LCOV - final.info - include/Spark/Utils.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Utils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0270.0 %
Date:2015-11-30Functions:060.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef UTILS_HPP_DASDASD
+       2             : #define UTILS_HPP_DASDASD
+       3             : 
+       4             : #include <string>
+       5             : #include <vector>
+       6             : #include <sstream>
+       7             : #include <iostream>
+       8             : 
+       9             : #include <boost/algorithm/string.hpp>
+      10             : 
+      11             : namespace spark {
+      12             :   namespace utils {
+      13             :     struct Range {
+      14             :       int start, end, step, crt;
+      15           0 :       Range(int _s, int _e, int _stp) : start(_s), end(_e), step(_stp), crt(_s) {}
+      16           0 :       Range(std::string range) {
+      17           0 :         std::vector<std::string> strs;
+      18           0 :         if (range.find(",") != std::string::npos) {
+      19             :           // assume a (start, end, step) range format
+      20           0 :           boost::split(strs, range, boost::is_any_of(","));
+      21           0 :           start = std::stoi(strs[0]);
+      22           0 :           end = std::stoi(strs[1]);
+      23           0 :           step = std::stoi(strs[2]);
+      24             :         } else {
+      25             :           // assume a single element range (start, start + 1, 1)
+      26           0 :           start = std::stoi(range);
+      27           0 :           end = start + 1;
+      28           0 :           step = 1;
+      29             :         }
+      30             : 
+      31           0 :         crt = start;
+      32           0 :       }
+      33             : 
+      34             :       std::string to_string() {
+      35             :         std::stringstream ss;
+      36             :         ss << start << ", " << end << ", " << step;
+      37             :         return ss.str();
+      38             :       }
+      39             : 
+      40           0 :       void restart() {
+      41           0 :         crt = start;
+      42           0 :       }
+      43             : 
+      44           0 :       bool at_start() {
+      45           0 :         return crt == start;
+      46             :       }
+      47             : 
+      48           0 :       int operator++() {
+      49           0 :         crt = crt + step;
+      50           0 :         if (crt == end) {
+      51           0 :           crt = start;
+      52             :         }
+      53           0 :         return crt;
+      54             :       }
+      55             :     };
+      56             : 
+      57           0 :     inline std::ostream& operator<<(std::ostream& s, const Range& r) {
+      58           0 :       std::cout << "Range{";
+      59           0 :       std::cout << r.start << "," << r.end << "," << r.step << "}";
+      60           0 :       return s;
+      61             :     }
+      62             :   }
+      63             : }
+      64             : 
+      65             : #endif /* end of include guard: UTILS_H */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/index-sort-f.html b/coverage/include/Spark/index-sort-f.html new file mode 100644 index 0000000..83fac7d --- /dev/null +++ b/coverage/include/Spark/index-sort-f.html @@ -0,0 +1,193 @@ + + + + + + + LCOV - final.info - include/Spark + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/SparkHitTotalCoverage
Test:final.infoLines:23900.5 %
Date:2015-11-30Functions:1991.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
FileUtils.hpp +
0.0%
+
0.0 %0 / 110.0 %0 / 1
SparseMatrix.hpp +
0.0%
+
0.0 %0 / 20.0 %0 / 2
SparseLinearSolvers.hpp +
0.0%
+
0.0 %0 / 40.0 %0 / 2
Converters.hpp +
0.0%
+
0.0 %0 / 200.0 %0 / 3
Utils.hpp +
0.0%
+
0.0 %0 / 270.0 %0 / 6
Io.hpp +
0.0%
+
0.0 %0 / 860.0 %0 / 10
GeneratedImplSupport.hpp +
0.0%
+
0.0 %0 / 250.0 %0 / 11
Spmv.hpp +
0.0%
+
0.0 %0 / 190.0 %0 / 12
Dse.hpp +
0.0%
+
0.0 %0 / 310.0 %0 / 13
SimpleSpmv.hpp +
0.0%
+
0.0 %0 / 1340.0 %0 / 29
Model.hpp +
6.5%6.5%
+
6.5 %2 / 3110.0 %1 / 10
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/index-sort-l.html b/coverage/include/Spark/index-sort-l.html new file mode 100644 index 0000000..eccedac --- /dev/null +++ b/coverage/include/Spark/index-sort-l.html @@ -0,0 +1,193 @@ + + + + + + + LCOV - final.info - include/Spark + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/SparkHitTotalCoverage
Test:final.infoLines:23900.5 %
Date:2015-11-30Functions:1991.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
SparseMatrix.hpp +
0.0%
+
0.0 %0 / 20.0 %0 / 2
SparseLinearSolvers.hpp +
0.0%
+
0.0 %0 / 40.0 %0 / 2
FileUtils.hpp +
0.0%
+
0.0 %0 / 110.0 %0 / 1
Spmv.hpp +
0.0%
+
0.0 %0 / 190.0 %0 / 12
Converters.hpp +
0.0%
+
0.0 %0 / 200.0 %0 / 3
GeneratedImplSupport.hpp +
0.0%
+
0.0 %0 / 250.0 %0 / 11
Utils.hpp +
0.0%
+
0.0 %0 / 270.0 %0 / 6
Dse.hpp +
0.0%
+
0.0 %0 / 310.0 %0 / 13
Io.hpp +
0.0%
+
0.0 %0 / 860.0 %0 / 10
SimpleSpmv.hpp +
0.0%
+
0.0 %0 / 1340.0 %0 / 29
Model.hpp +
6.5%6.5%
+
6.5 %2 / 3110.0 %1 / 10
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/index.html b/coverage/include/Spark/index.html new file mode 100644 index 0000000..fa5b4a4 --- /dev/null +++ b/coverage/include/Spark/index.html @@ -0,0 +1,193 @@ + + + + + + + LCOV - final.info - include/Spark + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/SparkHitTotalCoverage
Test:final.infoLines:23900.5 %
Date:2015-11-30Functions:1991.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Converters.hpp +
0.0%
+
0.0 %0 / 200.0 %0 / 3
Dse.hpp +
0.0%
+
0.0 %0 / 310.0 %0 / 13
FileUtils.hpp +
0.0%
+
0.0 %0 / 110.0 %0 / 1
GeneratedImplSupport.hpp +
0.0%
+
0.0 %0 / 250.0 %0 / 11
Io.hpp +
0.0%
+
0.0 %0 / 860.0 %0 / 10
Model.hpp +
6.5%6.5%
+
6.5 %2 / 3110.0 %1 / 10
SimpleSpmv.hpp +
0.0%
+
0.0 %0 / 1340.0 %0 / 29
SparseLinearSolvers.hpp +
0.0%
+
0.0 %0 / 40.0 %0 / 2
SparseMatrix.hpp +
0.0%
+
0.0 %0 / 20.0 %0 / 2
Spmv.hpp +
0.0%
+
0.0 %0 / 190.0 %0 / 12
Utils.hpp +
0.0%
+
0.0 %0 / 270.0 %0 / 6
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/index-sort-f.html b/coverage/index-sort-f.html new file mode 100644 index 0000000..0089a6b --- /dev/null +++ b/coverage/index-sort-f.html @@ -0,0 +1,163 @@ + + + + + + + LCOV - final.info + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top levelHitTotalCoverage
Test:final.infoLines:69730.6 %
Date:2015-11-30Functions:51683.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
dfe-snippets/include/dfesnippets +
0.0%
+
0.0 %0 / 200.0 %0 / 6
src/execution +
0.0%
+
0.0 %0 / 290.0 %0 / 6
src/dse +
0.0%
+
0.0 %0 / 790.0 %0 / 7
src/spmv/src +
0.0%
+
0.0 %0 / 1900.0 %0 / 12
src +
0.0%
+
0.0 %0 / 1010.0 %0 / 12
tests +
0.0%
+
0.0 %0 / 1600.0 %0 / 22
include/Spark +
0.5%0.5%
+
0.5 %2 / 3901.0 %1 / 99
unit-tests +
100.0%
+
100.0 %4 / 4100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/index-sort-l.html b/coverage/index-sort-l.html new file mode 100644 index 0000000..358f93a --- /dev/null +++ b/coverage/index-sort-l.html @@ -0,0 +1,163 @@ + + + + + + + LCOV - final.info + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top levelHitTotalCoverage
Test:final.infoLines:69730.6 %
Date:2015-11-30Functions:51683.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
dfe-snippets/include/dfesnippets +
0.0%
+
0.0 %0 / 200.0 %0 / 6
src/execution +
0.0%
+
0.0 %0 / 290.0 %0 / 6
src/dse +
0.0%
+
0.0 %0 / 790.0 %0 / 7
src +
0.0%
+
0.0 %0 / 1010.0 %0 / 12
tests +
0.0%
+
0.0 %0 / 1600.0 %0 / 22
src/spmv/src +
0.0%
+
0.0 %0 / 1900.0 %0 / 12
include/Spark +
0.5%0.5%
+
0.5 %2 / 3901.0 %1 / 99
unit-tests +
100.0%
+
100.0 %4 / 4100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/index.html b/coverage/index.html new file mode 100644 index 0000000..1c33653 --- /dev/null +++ b/coverage/index.html @@ -0,0 +1,163 @@ + + + + + + + LCOV - final.info + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top levelHitTotalCoverage
Test:final.infoLines:69730.6 %
Date:2015-11-30Functions:51683.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Directory Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
dfe-snippets/include/dfesnippets +
0.0%
+
0.0 %0 / 200.0 %0 / 6
include/Spark +
0.5%0.5%
+
0.5 %2 / 3901.0 %1 / 99
src +
0.0%
+
0.0 %0 / 1010.0 %0 / 12
src/dse +
0.0%
+
0.0 %0 / 790.0 %0 / 7
src/execution +
0.0%
+
0.0 %0 / 290.0 %0 / 6
src/spmv/src +
0.0%
+
0.0 %0 / 1900.0 %0 / 12
tests +
0.0%
+
0.0 %0 / 1600.0 %0 / 22
unit-tests +
100.0%
+
100.0 %4 / 4100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/ruby.png b/coverage/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..991b6d4ec9e78be165e3ef757eed1aada287364d GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^FceV#7`HfI^%F z9+AZi4BSE>%y{W;-5;PJOS+@4BLl<6e(pbstUx|nfKQ0)e^Y%R^MdiLxj>4`)5S5Q b;#P73kj=!v_*DHKNFRfztDnm{r-UW|iOwIS literal 0 HcmV?d00001 diff --git a/coverage/snow.png b/coverage/snow.png new file mode 100644 index 0000000000000000000000000000000000000000..2cdae107fceec6e7f02ac7acb4a34a82a540caa5 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^MM!lvI6;R0X`wF|Ns97GD8ntt^-nBo-U3d c6}OTTfNUlP#;5A{K>8RwUHx3vIVCg!071?oo&W#< literal 0 HcmV?d00001 diff --git a/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html b/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html new file mode 100644 index 0000000..dade33c --- /dev/null +++ b/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - final.info - src/SparseLinearSolvers.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - SparseLinearSolvers.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0150.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark21sparse_linear_solvers11EigenSolver5solveERKN5Eigen12SparseMatrixIdLi0EiEERKNS2_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_Z7solveLURKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_GLOBAL__sub_I__Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_Z41__static_initialization_and_destruction_0ii0
_Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_Z7solveCGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/SparseLinearSolvers.cpp.func.html b/coverage/src/SparseLinearSolvers.cpp.func.html new file mode 100644 index 0000000..766721a --- /dev/null +++ b/coverage/src/SparseLinearSolvers.cpp.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - final.info - src/SparseLinearSolvers.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - SparseLinearSolvers.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0150.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I__Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_Z41__static_initialization_and_destruction_0ii0
_Z7solveCGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_Z7solveLURKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_ZN5spark21sparse_linear_solvers11EigenSolver5solveERKN5Eigen12SparseMatrixIdLi0EiEERKNS2_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/SparseLinearSolvers.cpp.gcov.html b/coverage/src/SparseLinearSolvers.cpp.gcov.html new file mode 100644 index 0000000..3f9fd47 --- /dev/null +++ b/coverage/src/SparseLinearSolvers.cpp.gcov.html @@ -0,0 +1,142 @@ + + + + + + + LCOV - final.info - src/SparseLinearSolvers.cpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - SparseLinearSolvers.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0150.0 %
Date:2015-11-30Functions:060.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #include <Spark/SparseLinearSolvers.hpp>
+       2             : 
+       3             : //extern "C" {
+       4             : //#include <SuiteSparse_config.h>
+       5             : //#include <umfpack.h>
+       6             : //#include "cblas.h"
+       7             : //#include "amd.h"
+       8             : //#include "colamd.h"
+       9             : //#include "ldl.h"
+      10             : //#include "umfpack_get_determinant.h"
+      11             : //}
+      12             : 
+      13             : #include <iostream>
+      14             : #include <Eigen/Sparse>
+      15             : //#include <Eigen/UmfPackSupport>
+      16             : 
+      17           0 : Eigen::VectorXd solveBICG(
+      18             :     const Eigen::SparseMatrix<double>& A,
+      19             :     const Eigen::VectorXd& b
+      20             :    )
+      21             : {
+      22             :   using namespace Eigen;
+      23           0 :   BiCGSTAB<SparseMatrix<double>> solver(A);
+      24           0 :   return solver.solve(b);
+      25             : }
+      26             : 
+      27           0 : Eigen::VectorXd solveLU(
+      28             :     const Eigen::SparseMatrix<double>& A,
+      29             :     const Eigen::VectorXd& b
+      30             :    )
+      31             : {
+      32             :   using namespace Eigen;
+      33           0 :   SparseLU<SparseMatrix<double>> solver;
+      34           0 :   solver.analyzePattern(A);
+      35           0 :   solver.factorize(A);
+      36           0 :   return solver.solve(b);
+      37             : }
+      38             : 
+      39             : //Eigen::VectorXd solveUMFLU(
+      40             :     //const Eigen::SparseMatrix<double>& A,
+      41             :     //const Eigen::VectorXd& b
+      42             : 
+      43             :    //)
+      44             : //{
+      45             :   //using namespace Eigen;
+      46             :   //UmfPackLU<SparseMatrix<double>> solver;
+      47             :   //solver.analyzePattern(A);
+      48             :   //solver.factorize(A);
+      49             :   //return solver.solve(b);
+      50             : //}
+      51             : 
+      52           0 : Eigen::VectorXd solveCG(
+      53             :     const Eigen::SparseMatrix<double>& A,
+      54             :     const Eigen::VectorXd& b)
+      55             : {
+      56           0 :   Eigen::ConjugateGradient<Eigen::SparseMatrix<double>> cg;
+      57           0 :   cg.compute(A);
+      58           0 :   return cg.solve(b);
+      59             : }
+      60             : 
+      61           0 : Eigen::VectorXd spark::sparse_linear_solvers::EigenSolver::solve(
+      62             :     const Eigen::SparseMatrix<double>& A,
+      63             :     const Eigen::VectorXd& b)
+      64             : {
+      65           0 :   return solveBICG(A, b);
+      66           0 : }
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/dse/Dse.cpp.func-sort-c.html b/coverage/src/dse/Dse.cpp.func-sort-c.html new file mode 100644 index 0000000..8aa2fcf --- /dev/null +++ b/coverage/src/dse/Dse.cpp.func-sort-c.html @@ -0,0 +1,100 @@ + + + + + + + LCOV - final.info - src/dse/Dse.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/dse - Dse.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0790.0 %
Date:2015-11-30Functions:070.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_Z41__static_initialization_and_destruction_0ii0
_ZNK9SpmvEqualclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES6_0
_Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_0
_ZN5spark3dse8SparkDse3runERKNS0_9BenchmarkERKNS0_13DseParametersE0
_GLOBAL__sub_I__Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_0
_ZNK8SpmvHashclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEE0
_Z7dse_runSsPN5spark4spmv21SpmvArchitectureSpaceERKN5Eigen12SparseMatrixIdLi1EiEERKNS_3dse13DseParametersE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/dse/Dse.cpp.func.html b/coverage/src/dse/Dse.cpp.func.html new file mode 100644 index 0000000..d7f5ef5 --- /dev/null +++ b/coverage/src/dse/Dse.cpp.func.html @@ -0,0 +1,100 @@ + + + + + + + LCOV - final.info - src/dse/Dse.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/dse - Dse.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0790.0 %
Date:2015-11-30Functions:070.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I__Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_0
_Z41__static_initialization_and_destruction_0ii0
_Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_0
_Z7dse_runSsPN5spark4spmv21SpmvArchitectureSpaceERKN5Eigen12SparseMatrixIdLi1EiEERKNS_3dse13DseParametersE0
_ZN5spark3dse8SparkDse3runERKNS0_9BenchmarkERKNS0_13DseParametersE0
_ZNK8SpmvHashclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEE0
_ZNK9SpmvEqualclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES6_0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/dse/Dse.cpp.gcov.html b/coverage/src/dse/Dse.cpp.gcov.html new file mode 100644 index 0000000..75629f9 --- /dev/null +++ b/coverage/src/dse/Dse.cpp.gcov.html @@ -0,0 +1,243 @@ + + + + + + + LCOV - final.info - src/dse/Dse.cpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/dse - Dse.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0790.0 %
Date:2015-11-30Functions:070.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #include <iostream>
+       2             : #include <Spark/Dse.hpp>
+       3             : #include <unordered_map>
+       4             : #include <Spark/Converters.hpp>
+       5             : 
+       6             : using namespace spark::spmv;
+       7             : using namespace spark::utils;
+       8             : using namespace spark::model;
+       9             : using namespace spark::dse;
+      10             : 
+      11             : 
+      12             : std::shared_ptr<SpmvArchitecture>
+      13           0 : better(
+      14             :     std::shared_ptr<SpmvArchitecture> a1,
+      15             :     std::shared_ptr<SpmvArchitecture> a2) {
+      16             : 
+      17           0 :   if (a1 == nullptr)
+      18           0 :     return a2;
+      19             : 
+      20             :   bool a1Better =
+      21           0 :     a1->getEstimatedGFlops() > a2->getEstimatedGFlops() ||
+      22           0 :     (a1->getEstimatedGFlops() == a2->getEstimatedGFlops() &&
+      23           0 :      a1->getImplementationParameters().ru < a2->getImplementationParameters().ru);
+      24             : 
+      25           0 :   if (a1Better)
+      26           0 :     return a1;
+      27           0 :   return a2;
+      28             : }
+      29             : 
+      30           0 : std::shared_ptr<SpmvArchitecture> dse_run(
+      31             :     std::string basename,
+      32             :     SpmvArchitectureSpace* af,
+      33             :     const Eigen::SparseMatrix<double, Eigen::RowMajor>& mat,
+      34             :     const DseParameters& params)
+      35             : {
+      36           0 :   int it = 0;
+      37             : 
+      38             :   // for virtex 6
+      39           0 :   double alpha = 0.9; // aim to fit about 90% of the chip
+      40           0 :   const LogicResourceUsage maxResources(LogicResourceUsage{297600, 297600, 1064, 2016} * alpha);
+      41             : 
+      42           0 :   const ImplementationParameters maxParams{maxResources, 39};
+      43             : 
+      44           0 :   std::shared_ptr<SpmvArchitecture> bestArchitecture, a;
+      45             : 
+      46           0 :   while (a = af->next()) {
+      47           0 :     auto start = std::chrono::high_resolution_clock::now();
+      48           0 :     a->preprocess(mat); // do spmv?
+      49             :     //dfesnippets::timing::print_clock_diff("Took: ", start);
+      50           0 :     if (!(a->getImplementationParameters() < maxParams))
+      51           0 :       continue;
+      52             : 
+      53           0 :     std::cout << basename << " " << a->to_string() << " " << a->getImplementationParameters().to_string() << std::endl;
+      54           0 :     bestArchitecture = better(bestArchitecture, a);
+      55             :   }
+      56             : 
+      57           0 :   if (!bestArchitecture)
+      58           0 :     return nullptr;
+      59             : 
+      60           0 :   std::cout << basename << " ";
+      61           0 :   if (params.gflopsOnly) {
+      62           0 :     std::cout << bestArchitecture->getEstimatedGFlops();
+      63           0 :     std::cout << bestArchitecture->getEstimatedClockCycles();
+      64             :   } else {
+      65           0 :     std::cout << bestArchitecture->to_string();
+      66           0 :     std::cout << " " << bestArchitecture->getImplementationParameters().to_string();
+      67             :   }
+      68           0 :   std::cout << " Best " << std::endl;
+      69           0 :   return bestArchitecture;
+      70             : }
+      71             : 
+      72             : struct SpmvHash {
+      73           0 :   std::size_t operator()(const std::shared_ptr<SpmvArchitecture>& a) const {
+      74           0 :     return 1;
+      75             :   }
+      76             : };
+      77             : 
+      78             : struct SpmvEqual {
+      79           0 :   bool operator()(
+      80             :       const std::shared_ptr<SpmvArchitecture>& a,
+      81             :       const std::shared_ptr<SpmvArchitecture>& b) const
+      82             :   {
+      83           0 :     return *a == *b;
+      84             :   }
+      85             : };
+      86             : 
+      87           0 : std::vector<DseResult> spark::dse::SparkDse::run (
+      88             :     const Benchmark& benchmark,
+      89             :     const spark::dse::DseParameters& params)
+      90             : {
+      91             : 
+      92           0 :   std::vector<DseResult> bestArchitectures;
+      93             : 
+      94             :   std::unordered_map<
+      95             :     std::shared_ptr<SpmvArchitecture>,
+      96             :     std::vector<std::string>,
+      97             :     SpmvHash,
+      98             :     SpmvEqual
+      99           0 :     > all_architectures;
+     100             : 
+     101           0 :   for (int i = 0; i < benchmark.get_benchmark_size(); i++) {
+     102             : 
+     103           0 :     std::string path = benchmark.get_matrix_path(i);
+     104             : 
+     105           0 :     std::size_t pos = path.find_last_of("/");
+     106           0 :     std::string basename(path.substr(pos, path.size() - pos));
+     107           0 :     std::cout << basename << std::endl;
+     108             : 
+     109           0 :     spark::io::MmReader<double> m(path);
+     110           0 :     auto start = std::chrono::high_resolution_clock::now();
+     111           0 :     auto eigenMatrix = spark::converters::tripletToEigen(m.mmreadMatrix(path));
+     112           0 :     dfesnippets::timing::print_clock_diff("Reading took: ", start);
+     113             : 
+     114             :     // XXX this assumes a virtex device with 512 entries per BRAM
+     115           0 :     int maxRows = eigenMatrix->rows();
+     116           0 :     if (maxRows % 512 != 0)
+     117           0 :       maxRows = (maxRows / 512 + 1) * 512;
+     118             : 
+     119             :     std::vector<SpmvArchitectureSpace*> factories{
+     120             :       new SimpleSpmvArchitectureSpace<SimpleSpmvArchitecture>(
+     121           0 :           params.numPipesRange, params.inputWidthRange, params.cacheSizeRange, maxRows),
+     122             :           //new SimpleSpmvArchitectureSpace<FstSpmvArchitecture>(
+     123             :               //params.numPipesRange, params.inputWidthRange, params.cacheSizeRange),
+     124             :           //new SimpleSpmvArchitectureSpace<SkipEmptyRowsArchitecture>(
+     125             :               //params.numPipesRange, params.inputWidthRange, params.cacheSizeRange),
+     126             :           //new SimpleSpmvArchitectureSpace<PrefetchingArchitecture>(numPipesRange, inputWidthRange, cacheSizeRange)
+     127           0 :     };
+     128             : 
+     129           0 :     std::cout << "File Architecture CacheSize InputWidth NumPipes EstClockCycles EstGflops LUTS FFs DSPs BRAMs MemBandwidth Observation" << std::endl;
+     130           0 :     std::shared_ptr<SpmvArchitecture> bestOverall;
+     131           0 :     for (auto sas : factories) {
+     132           0 :       bestOverall = better(
+     133             :           bestOverall,
+     134           0 :           dse_run(basename, sas, *eigenMatrix, params));
+     135             :     }
+     136             : 
+     137           0 :     for (int i = 0; i < factories.size(); i++)
+     138           0 :       delete(factories[i]);
+     139             : 
+     140           0 :     std::cout  << basename << " ";
+     141           0 :     if (params.gflopsOnly) {
+     142           0 :       std::cout << bestOverall->getEstimatedGFlops();
+     143           0 :       std::cout << bestOverall->getEstimatedClockCycles();
+     144             :     } else {
+     145           0 :       std::cout << bestOverall->to_string();
+     146           0 :       std::cout << " "  << bestOverall->getImplementationParameters().to_string();
+     147             :     }
+     148           0 :     std::cout << " BestOverall " << std::endl;
+     149             : 
+     150             : 
+     151           0 :     auto a = all_architectures.find(bestOverall);
+     152           0 :     if ( a != all_architectures.end()) {
+     153           0 :       a->second.push_back(path);
+     154             :     } else {
+     155             :       all_architectures.insert(
+     156           0 :           std::make_pair(bestOverall, std::vector<std::string>{path}));
+     157             :     }
+     158           0 :   }
+     159             : 
+     160           0 :   for (const auto& a : all_architectures) {
+     161           0 :     DseResult result{a.first};
+     162           0 :     result.matrices = a.second;
+     163           0 :     bestArchitectures.push_back(result);
+     164           0 :   }
+     165             : 
+     166           0 :   return bestArchitectures;
+     167           0 : }
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/dse/index-sort-f.html b/coverage/src/dse/index-sort-f.html new file mode 100644 index 0000000..ba385f0 --- /dev/null +++ b/coverage/src/dse/index-sort-f.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - src/dse + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/dseHitTotalCoverage
Test:final.infoLines:0790.0 %
Date:2015-11-30Functions:070.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Dse.cpp +
0.0%
+
0.0 %0 / 790.0 %0 / 7
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/dse/index-sort-l.html b/coverage/src/dse/index-sort-l.html new file mode 100644 index 0000000..f76fec5 --- /dev/null +++ b/coverage/src/dse/index-sort-l.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - src/dse + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/dseHitTotalCoverage
Test:final.infoLines:0790.0 %
Date:2015-11-30Functions:070.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Dse.cpp +
0.0%
+
0.0 %0 / 790.0 %0 / 7
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/dse/index.html b/coverage/src/dse/index.html new file mode 100644 index 0000000..aafdbee --- /dev/null +++ b/coverage/src/dse/index.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - src/dse + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/dseHitTotalCoverage
Test:final.infoLines:0790.0 %
Date:2015-11-30Functions:070.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Dse.cpp +
0.0%
+
0.0 %0 / 790.0 %0 / 7
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html b/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html new file mode 100644 index 0000000..73061e3 --- /dev/null +++ b/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - final.info - src/execution/SharedLibLoader.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/execution - SharedLibLoader.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0290.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I__ZN5spark10file_utils11child_filesESs0
_ZN5spark9execution15SharedLibLoader14unload_libraryEv0
_ZN5spark9execution15SharedLibLoaderC2ESs0
_ZN5spark9execution15SharedLibLoader19available_librariesEv0
_ZN5spark9execution15SharedLibLoader12load_libraryESs0
_Z41__static_initialization_and_destruction_0ii0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/execution/SharedLibLoader.cpp.func.html b/coverage/src/execution/SharedLibLoader.cpp.func.html new file mode 100644 index 0000000..cde273c --- /dev/null +++ b/coverage/src/execution/SharedLibLoader.cpp.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - final.info - src/execution/SharedLibLoader.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/execution - SharedLibLoader.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0290.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I__ZN5spark10file_utils11child_filesESs0
_Z41__static_initialization_and_destruction_0ii0
_ZN5spark9execution15SharedLibLoader12load_libraryESs0
_ZN5spark9execution15SharedLibLoader14unload_libraryEv0
_ZN5spark9execution15SharedLibLoader19available_librariesEv0
_ZN5spark9execution15SharedLibLoaderC2ESs0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/execution/SharedLibLoader.cpp.gcov.html b/coverage/src/execution/SharedLibLoader.cpp.gcov.html new file mode 100644 index 0000000..058fe91 --- /dev/null +++ b/coverage/src/execution/SharedLibLoader.cpp.gcov.html @@ -0,0 +1,128 @@ + + + + + + + LCOV - final.info - src/execution/SharedLibLoader.cpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/execution - SharedLibLoader.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0290.0 %
Date:2015-11-30Functions:060.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #include <Spark/Execution.hpp>
+       2             : #include <Spark/FileUtils.hpp>
+       3             : #include <dlfcn.h>
+       4             : #include <iostream>
+       5             : 
+       6             : namespace sll = spark::execution;
+       7             : 
+       8             : using namespace std;
+       9             : 
+      10           0 : sll::SharedLibLoader::SharedLibLoader(std::string _libPath) : libPath(_libPath), handle(NULL) {
+      11           0 : }
+      12             : 
+      13           0 : vector<string> sll::SharedLibLoader::available_libraries() {
+      14           0 :   return spark::file_utils::child_files(libPath);
+      15             : }
+      16             : 
+      17           0 : bool sll::SharedLibLoader::load_library(string libPath) {
+      18           0 :   std::cout << "Loading " << libPath << std::endl;
+      19           0 :   if (handle) {
+      20           0 :     std::cerr << "Already loaded a library" << std::endl;
+      21           0 :     return false;
+      22             :   }
+      23           0 :   handle = dlopen(libPath.c_str(), RTLD_LAZY);
+      24           0 :   if (handle == NULL) {
+      25           0 :     std::cerr << dlerror() << std::endl;
+      26           0 :     return false;
+      27             :   }
+      28           0 :   this->libPath = libPath;
+      29             :   // XXX consider what to do with the handles, might want to
+      30             :   // provide an unload library method, though it's likely this library
+      31             :   // will be used for the runtime of the application
+      32           0 :   dlerror();
+      33           0 :   return true;
+      34             : }
+      35             : 
+      36           0 : bool sll::SharedLibLoader::unload_library() {
+      37           0 :   if (!handle) {
+      38           0 :     std::cerr << "Error closing library: no handle set!"
+      39           0 :       << "call load_library() first" << std::endl;
+      40           0 :     return false;
+      41             :   }
+      42             : 
+      43           0 :   if (dlclose(handle) != 0) {
+      44           0 :     std::cerr << "Error closing library" << std::endl;
+      45           0 :     std::cerr << dlerror() << std::endl;
+      46           0 :     return false;
+      47             :   }
+      48             : 
+      49           0 :   handle = NULL;
+      50           0 :   this->libPath = "";
+      51           0 :   return true;
+      52           0 : }
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/execution/index-sort-f.html b/coverage/src/execution/index-sort-f.html new file mode 100644 index 0000000..bd21f59 --- /dev/null +++ b/coverage/src/execution/index-sort-f.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - src/execution + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/executionHitTotalCoverage
Test:final.infoLines:0290.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
SharedLibLoader.cpp +
0.0%
+
0.0 %0 / 290.0 %0 / 6
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/execution/index-sort-l.html b/coverage/src/execution/index-sort-l.html new file mode 100644 index 0000000..1465442 --- /dev/null +++ b/coverage/src/execution/index-sort-l.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - src/execution + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/executionHitTotalCoverage
Test:final.infoLines:0290.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
SharedLibLoader.cpp +
0.0%
+
0.0 %0 / 290.0 %0 / 6
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/execution/index.html b/coverage/src/execution/index.html new file mode 100644 index 0000000..b9698fa --- /dev/null +++ b/coverage/src/execution/index.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - src/execution + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/executionHitTotalCoverage
Test:final.infoLines:0290.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
SharedLibLoader.cpp +
0.0%
+
0.0 %0 / 290.0 %0 / 6
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/index-sort-f.html b/coverage/src/index-sort-f.html new file mode 100644 index 0000000..97f76a9 --- /dev/null +++ b/coverage/src/index-sort-f.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - final.info - src + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - srcHitTotalCoverage
Test:final.infoLines:01010.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
SparseLinearSolvers.cpp +
0.0%
+
0.0 %0 / 150.0 %0 / 6
main.cpp +
0.0%
+
0.0 %0 / 860.0 %0 / 6
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/index-sort-l.html b/coverage/src/index-sort-l.html new file mode 100644 index 0000000..608888e --- /dev/null +++ b/coverage/src/index-sort-l.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - final.info - src + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - srcHitTotalCoverage
Test:final.infoLines:01010.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
SparseLinearSolvers.cpp +
0.0%
+
0.0 %0 / 150.0 %0 / 6
main.cpp +
0.0%
+
0.0 %0 / 860.0 %0 / 6
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/index.html b/coverage/src/index.html new file mode 100644 index 0000000..8a9fe1e --- /dev/null +++ b/coverage/src/index.html @@ -0,0 +1,103 @@ + + + + + + + LCOV - final.info - src + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - srcHitTotalCoverage
Test:final.infoLines:01010.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
SparseLinearSolvers.cpp +
0.0%
+
0.0 %0 / 150.0 %0 / 6
main.cpp +
0.0%
+
0.0 %0 / 860.0 %0 / 6
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/main.cpp.func-sort-c.html b/coverage/src/main.cpp.func-sort-c.html new file mode 100644 index 0000000..2f207bb --- /dev/null +++ b/coverage/src/main.cpp.func-sort-c.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - final.info - src/main.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - main.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0860.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_Z17write_dse_resultsRKSt6vectorIN5spark3dse9DseResultESaIS2_EEd0
_Z13loadBenchmarkRKN5boost10filesystem4pathE0
_Z10loadParamsRKN5boost10filesystem4pathE0
_Z41__static_initialization_and_destruction_0ii0
_GLOBAL__sub_I__Z10loadParamsRKN5boost10filesystem4pathE0
main0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/main.cpp.func.html b/coverage/src/main.cpp.func.html new file mode 100644 index 0000000..efcc793 --- /dev/null +++ b/coverage/src/main.cpp.func.html @@ -0,0 +1,96 @@ + + + + + + + LCOV - final.info - src/main.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - main.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0860.0 %
Date:2015-11-30Functions:060.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I__Z10loadParamsRKN5boost10filesystem4pathE0
_Z10loadParamsRKN5boost10filesystem4pathE0
_Z13loadBenchmarkRKN5boost10filesystem4pathE0
_Z17write_dse_resultsRKSt6vectorIN5spark3dse9DseResultESaIS2_EEd0
_Z41__static_initialization_and_destruction_0ii0
main0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/main.cpp.gcov.html b/coverage/src/main.cpp.gcov.html new file mode 100644 index 0000000..ee9c281 --- /dev/null +++ b/coverage/src/main.cpp.gcov.html @@ -0,0 +1,235 @@ + + + + + + + LCOV - final.info - src/main.cpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src - main.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0860.0 %
Date:2015-11-30Functions:060.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #include <Spark/Dse.hpp>
+       2             : #include <boost/filesystem.hpp>
+       3             : #include <boost/program_options.hpp>
+       4             : #include <boost/property_tree/json_parser.hpp>
+       5             : #include <boost/property_tree/ptree.hpp>
+       6             : #include <iostream>
+       7             : #include <string>
+       8             : #include <chrono>
+       9             : #include <sstream>
+      10             : 
+      11             : using namespace std;
+      12             : namespace pt = boost::property_tree;
+      13             : 
+      14           0 : spark::dse::DseParameters loadParams(const boost::filesystem::path& parf) {
+      15           0 :   std::cout << "Using " << parf << " as param file" << std::endl;
+      16           0 :   pt::ptree tree;
+      17           0 :   pt::read_json(parf.string(), tree);
+      18           0 :   spark::dse::DseParameters dsep;
+      19             :   dsep.numPipesRange =
+      20             :     spark::utils::Range{
+      21             :       tree.get<int>("dse_params.num_pipes.start"),
+      22             :       tree.get<int>("dse_params.num_pipes.stop"),
+      23             :       tree.get<int>("dse_params.num_pipes.step"),
+      24           0 :     };
+      25             :   dsep.cacheSizeRange =
+      26             :     spark::utils::Range {
+      27             :       tree.get<int>("dse_params.cache_size.start"),
+      28             :       tree.get<int>("dse_params.cache_size.stop"),
+      29             :       tree.get<int>("dse_params.cache_size.step"),
+      30           0 :     };
+      31             :   dsep.inputWidthRange =
+      32             :     spark::utils::Range {
+      33             :       tree.get<int>("dse_params.input_width.start"),
+      34             :       tree.get<int>("dse_params.input_width.stop"),
+      35             :       tree.get<int>("dse_params.input_width.step"),
+      36           0 :     };
+      37           0 :   return dsep;
+      38             : }
+      39             : 
+      40           0 : spark::dse::Benchmark loadBenchmark(const boost::filesystem::path& p) {
+      41             :   using namespace boost::filesystem;
+      42           0 :   std::cout << "Using " << p << " as benchmark directory" << std::endl;
+      43           0 :   spark::dse::Benchmark benchmark{};
+      44           0 :   for (directory_iterator end, it = directory_iterator(p); it != end; it++) {
+      45           0 :     benchmark.add_matrix_path(it->path().string());
+      46           0 :   }
+      47           0 :   return benchmark;
+      48             : }
+      49             : 
+      50           0 : void write_dse_results(
+      51             :     const std::vector<spark::dse::DseResult>& results,
+      52             :     double took
+      53             :     ) {
+      54           0 :   pt::ptree tree, children;
+      55           0 :   stringstream ss;
+      56           0 :   auto end = std::chrono::system_clock::now();
+      57           0 :   auto end_time = std::chrono::system_clock::to_time_t(end);
+      58           0 :   ss << std::ctime(&end_time);
+      59           0 :   tree.put("date", ss.str());
+      60           0 :   tree.put("took", took);
+      61           0 :   for (const auto& dseResult : results) {
+      62           0 :     auto arch = dseResult.bestArchitecture;
+      63           0 :     std::string arch_name = arch->get_name();
+      64           0 :     pt::ptree archJson;
+      65           0 :     archJson.put("name", arch_name);
+      66           0 :     archJson.put("estimated_gflops", arch->getEstimatedGFlops());
+      67           0 :     archJson.add_child("architecture_params", arch->write_params());
+      68             : 
+      69           0 :     pt::ptree matrices;
+      70           0 :     for (int i = 0; i < dseResult.matrices.size(); i++) {
+      71           0 :       pt::ptree matrix;
+      72           0 :       matrix.put("", dseResult.matrices[i]);
+      73           0 :       matrices.push_back(std::make_pair("", matrix));
+      74           0 :     }
+      75           0 :     archJson.add_child("matrices", matrices);
+      76             : 
+      77           0 :     children.push_back(std::make_pair("", archJson));
+      78           0 :   }
+      79           0 :   tree.add_child("best_architectures", children);
+      80           0 :   pt::write_json("dse_out.json", tree);
+      81           0 : }
+      82             : 
+      83           0 : int main(int argc, char** argv) {
+      84             : 
+      85             :   namespace po = boost::program_options;
+      86             : 
+      87           0 :   std::string opt_dse_params = "dse-params-file";
+      88           0 :   std::string opt_bench_path = "bench-path";
+      89             : 
+      90             :   // options to display in the help message
+      91           0 :   po::options_description desc("Allowed options");
+      92             :   desc.add_options()
+      93           0 :     ("help", "Print this help message");
+      94             : 
+      95             :   // required options, not displayed in help message
+      96           0 :   string benchPath, dseparams;
+      97           0 :   po::options_description required_options("Required arguments");
+      98             :   required_options.add_options()
+      99             :     (opt_bench_path.c_str(),
+     100           0 :      po::value<string>(&benchPath),
+     101             :      "Path to the directory containing benchmarks"
+     102           0 :     )
+     103             :     (opt_dse_params.c_str(),
+     104           0 :      po::value<string>(&dseparams),
+     105           0 :      "Path to the file containing dse parameters");
+     106           0 :   po::positional_options_description p;
+     107           0 :   p.add(opt_bench_path.c_str(), 1);
+     108           0 :   p.add(opt_dse_params.c_str(), 1);
+     109             : 
+     110             :   // all options
+     111           0 :   po::options_description cmdline_options;
+     112           0 :   cmdline_options.add(desc).add(required_options);
+     113             : 
+     114           0 :   po::variables_map vm;
+     115             :   po::store(
+     116             :       po::command_line_parser(argc, argv).
+     117           0 :       options(cmdline_options).positional(p).run(), vm);
+     118           0 :   po::notify(vm);
+     119             : 
+     120           0 :   if (vm.count("help")) {
+     121           0 :     cout << "Usage: ./main bench-path dse-params-file [options]" << endl << endl;
+     122           0 :     std::cout << required_options << std::endl;
+     123           0 :     cout << desc << endl;
+     124           0 :     return 0;
+     125             :   }
+     126             : 
+     127             :   // validate command line args
+     128             :   namespace bfs = boost::filesystem;
+     129           0 :   bfs::path dirp{benchPath};
+     130           0 :   if (!bfs::is_directory(dirp)) {
+     131           0 :     std::cout << "Error: '" << benchPath << "' not a directory" << std::endl;
+     132           0 :     return 1;
+     133             :   }
+     134             : 
+     135           0 :   bfs::path parf{dseparams};
+     136           0 :   if (!bfs::is_regular_file(parf)) {
+     137           0 :     std::cout << "Error: '" << dseparams << "' is not a file" << std::endl;
+     138           0 :     return 1;
+     139             :   }
+     140             : 
+     141           0 :   spark::dse::DseParameters params = loadParams(parf);
+     142           0 :   params.gflopsOnly = true;
+     143           0 :   std::cout << params << std::endl;
+     144           0 :   spark::dse::Benchmark benchmark = loadBenchmark(dirp);
+     145           0 :   std::cout << benchmark << std::endl;
+     146           0 :   spark::dse::SparkDse dseTool;
+     147             : 
+     148           0 :   auto start = std::chrono::high_resolution_clock::now();
+     149             :   auto results = dseTool.run(
+     150             :       benchmark,
+     151           0 :       params);
+     152           0 :   auto diff = dfesnippets::timing::clock_diff(start);
+     153           0 :   write_dse_results(results, diff);
+     154             : 
+     155             :   // Executables exes = buildTool.buildExecutables(Hardware Designs)
+     156             :   // PerfResults results = perfTool.runDesigns(exes)
+     157             :   // results.print()
+     158             : 
+     159           0 : }
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html b/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html new file mode 100644 index 0000000..1484217 --- /dev/null +++ b/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html @@ -0,0 +1,120 @@ + + + + + + + LCOV - final.info - src/spmv/src/Spmv.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/spmv/src - Spmv.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:01900.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_Z10size_bytesIiElRKSt6vectorIT_SaIS1_EE0
_Z10size_bytesIN5spark4spmv12indptr_valueEElRKSt6vectorIT_SaIS4_EE0
_ZN5spark4spmv22SimpleSpmvArchitecture10preprocessERKN5Eigen12SparseMatrixIdLi1EiEE0
_GLOBAL__sub_I__ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii0
_ZN5spark4spmv22SimpleSpmvArchitecture12do_partitionERKN5Eigen12SparseMatrixIdLi1EiEEi0
_ZN5spark4spmv22SimpleSpmvArchitecture11do_blockingERKN5Eigen12SparseMatrixIdLi1EiEEii0
_Z41__static_initialization_and_destruction_0ii0
_ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii0
_Z10size_bytesIdElRKSt6vectorIT_SaIS1_EE0
_ZN5spark4spmv22SimpleSpmvArchitecture7dfespmvEN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_Z5alignii0
_Z21writeDataForPartitionPN5spark7runtime27GeneratedSpmvImplementationEiRKNS_4spmv9PartitionERKSt6vectorIdSaIdEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/spmv/src/Spmv.cpp.func.html b/coverage/src/spmv/src/Spmv.cpp.func.html new file mode 100644 index 0000000..62ced79 --- /dev/null +++ b/coverage/src/spmv/src/Spmv.cpp.func.html @@ -0,0 +1,120 @@ + + + + + + + LCOV - final.info - src/spmv/src/Spmv.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/spmv/src - Spmv.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:01900.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I__ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii0
_Z10size_bytesIN5spark4spmv12indptr_valueEElRKSt6vectorIT_SaIS4_EE0
_Z10size_bytesIdElRKSt6vectorIT_SaIS1_EE0
_Z10size_bytesIiElRKSt6vectorIT_SaIS1_EE0
_Z21writeDataForPartitionPN5spark7runtime27GeneratedSpmvImplementationEiRKNS_4spmv9PartitionERKSt6vectorIdSaIdEE0
_Z41__static_initialization_and_destruction_0ii0
_Z5alignii0
_ZN5spark4spmv22SimpleSpmvArchitecture10preprocessERKN5Eigen12SparseMatrixIdLi1EiEE0
_ZN5spark4spmv22SimpleSpmvArchitecture11do_blockingERKN5Eigen12SparseMatrixIdLi1EiEEii0
_ZN5spark4spmv22SimpleSpmvArchitecture12do_partitionERKN5Eigen12SparseMatrixIdLi1EiEEi0
_ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii0
_ZN5spark4spmv22SimpleSpmvArchitecture7dfespmvEN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/spmv/src/Spmv.cpp.gcov.html b/coverage/src/spmv/src/Spmv.cpp.gcov.html new file mode 100644 index 0000000..503d5ba --- /dev/null +++ b/coverage/src/spmv/src/Spmv.cpp.gcov.html @@ -0,0 +1,398 @@ + + + + + + + LCOV - final.info - src/spmv/src/Spmv.cpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/spmv/src - Spmv.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:01900.0 %
Date:2015-11-30Functions:0120.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #include <Spark/Spmv.hpp>
+       2             : #include <Spark/SimpleSpmv.hpp>
+       3             : 
+       4             : #include <Spark/Converters.hpp>
+       5             : #include <iostream>
+       6             : #include <tuple>
+       7             : 
+       8             : #include <dfesnippets/VectorUtils.hpp>
+       9             : #include <dfesnippets/Timing.hpp>
+      10             : 
+      11             : #include <Spark/GeneratedImplSupport.hpp>
+      12             : 
+      13             : using namespace spark::spmv;
+      14             : using ssarch = spark::spmv::SimpleSpmvArchitecture;
+      15             : 
+      16             : // how many cycles does it take to resolve the accesses
+      17           0 : int ssarch::countComputeCycles(uint32_t* v, int size, int inputWidth)
+      18             : {
+      19           0 :   int cycles = 0;
+      20           0 :   int crtPos = 0;
+      21           0 :   for (int i = 0; i < size; i++) {
+      22           0 :     int toread = v[i] - (i > 0 ? v[i - 1] : 0);
+      23           0 :     do {
+      24           0 :       int canread = std::min(inputWidth - crtPos, toread);
+      25           0 :       crtPos += canread;
+      26           0 :       crtPos %= inputWidth;
+      27           0 :       cycles++;
+      28           0 :       toread -= canread;
+      29           0 :     } while (toread > 0);
+      30             :   }
+      31           0 :   return cycles;
+      32             : }
+      33             : 
+      34             : // transform a given matrix with n rows in blocks of size n X blockSize
+      35           0 : spark::spmv::Partition ssarch::do_blocking(
+      36             :     const EigenSparseMatrix& m,
+      37             :     int blockSize,
+      38             :     int inputWidth)
+      39             : {
+      40             : 
+      41           0 :   const int* indptr = m.innerIndexPtr();
+      42           0 :   const double* values = m.valuePtr();
+      43           0 :   const int* colptr = m.outerIndexPtr();
+      44           0 :   int rows = m.rows();
+      45           0 :   int cols = m.cols();
+      46           0 :   int n = rows;
+      47             :   //std::cout << "Mat rows " << n << std::endl;
+      48             : 
+      49           0 :   int nBlocks = cols / blockSize + (cols % blockSize == 0 ? 0 : 1);
+      50             :   //std::cout << "Npartitions: " << nPartitions << std::endl;
+      51             : 
+      52           0 :   std::vector<spark::sparse::CsrMatrix> partitions(nBlocks);
+      53             : 
+      54           0 :   for (int i = 0; i < rows; i++) {
+      55           0 :     for (int j = 0; j < nBlocks; j++) {
+      56           0 :       auto& p = std::get<0>(partitions[j]);
+      57           0 :       if (p.size() == 0)
+      58           0 :         p.push_back(0);
+      59             :       else
+      60           0 :         p.push_back(p.back());
+      61             :     }
+      62             :     //std::cout << "i = " << i << std::endl;
+      63             :     //std::cout << "colptr" << colptr[i] << std::endl;
+      64           0 :     for (int j = colptr[i]; j < colptr[i+1]; j++) {
+      65           0 :       auto& p = partitions[indptr[j] / blockSize];
+      66           0 :       int idxInPartition = indptr[j] - (indptr[j] / blockSize ) * blockSize;
+      67           0 :       std::get<1>(p).push_back(idxInPartition);
+      68           0 :       std::get<2>(p).push_back(values[j]);
+      69           0 :       std::get<0>(p).back()++;
+      70             :     }
+      71             :   }
+      72             : 
+      73             :   //if (n > Spmv_maxRows)
+      74             :     //throw std::invalid_argument(
+      75             :         //"Matrix has too many rows - maximum supported: "
+      76             :         //+ std::to_string(Spmv_maxRows));
+      77             : 
+      78           0 :   std::vector<double> v(cols, 0);
+      79           0 :   std::vector<int> m_colptr;
+      80           0 :   std::vector<indptr_value> m_indptr_value;
+      81             : 
+      82             :   // now we coalesce partitions
+      83           0 :   int cycles = 0;
+      84           0 :   int partition = 0;
+      85           0 :   int reductionCycles = rows * partitions.size();
+      86           0 :   int emptyCycles = 0;
+      87           0 :   for (auto& p : partitions) {
+      88           0 :     auto pp = preprocessBlock(p, partition++, partitions.size());
+      89           0 :     auto& p_colptr = std::get<0>(pp);
+      90           0 :     auto& p_indptr = std::get<1>(pp);
+      91           0 :     auto& p_values = std::get<2>(pp);
+      92             : 
+      93           0 :     int diff = std::get<0>(p).size() - p_colptr.size();
+      94           0 :     emptyCycles += diff;
+      95           0 :     reductionCycles -= diff;
+      96           0 :     cycles += this->countComputeCycles(&std::get<0>(p)[0], n, inputWidth) - diff;
+      97             : 
+      98           0 :     spark::spmv::align(p_indptr, sizeof(int) * inputWidth);
+      99           0 :     spark::spmv::align(p_values, sizeof(double) * inputWidth);
+     100           0 :     std::copy(p_colptr.begin(), p_colptr.end(), back_inserter(m_colptr));
+     101           0 :     for (size_t i = 0; i < p_values.size(); i++)
+     102           0 :       m_indptr_value.push_back(indptr_value( p_values[i], p_indptr[i]));
+     103           0 :   }
+     104             : 
+     105           0 :   Partition br;
+     106           0 :   br.m_colptr_unpaddedLength = m_colptr.size();
+     107           0 :   br.m_indptr_values_unpaddedLength = m_indptr_value.size();
+     108             :   //std::cout << "m_colptr unaligned size" << m_colptr.size() << std::endl;
+     109           0 :   spark::spmv::align(m_colptr, 384);
+     110           0 :   spark::spmv::align(m_indptr_value, 384);
+     111           0 :   std::vector<double> out(n, 0);
+     112           0 :   spark::spmv::align(out, 384);
+     113           0 :   spark::spmv::align(v, sizeof(double) * blockSize);
+     114             : 
+     115           0 :   br.nBlocks = nBlocks;
+     116           0 :   br.n = n;
+     117           0 :   br.paddingCycles = out.size() - n; // number of cycles required to align to the burst size
+     118           0 :   br.totalCycles = cycles + v.size();
+     119           0 :   br.vector_load_cycles = v.size() / nBlocks; // per partition
+     120           0 :   br.m_indptr_values = m_indptr_value;
+     121           0 :   br.m_colptr = m_colptr;
+     122           0 :   br.outSize = out.size() * sizeof(double);
+     123           0 :   br.emptyCycles = emptyCycles;
+     124           0 :   br.reductionCycles = reductionCycles;
+     125             : 
+     126           0 :   return br;
+     127             : }
+     128             : 
+     129             : template<typename T>
+     130           0 : long size_bytes(const std::vector<T>& v) {
+     131           0 :   return sizeof(T) * v.size();
+     132             : }
+     133             : 
+     134             : struct PartitionWriteResult {
+     135             :   int outStartAddr, outSize, colptrStartAddress, colptrSize;
+     136             :   int vStartAddress, indptrValuesStartAddress, indptrValuesSize;
+     137             : };
+     138             : 
+     139           0 : int align(int bytes, int to) {
+     140           0 :   int quot = bytes / to;
+     141           0 :   if (bytes % to != 0)
+     142           0 :     return (quot + 1) * to;
+     143           0 :   return bytes;
+     144             : }
+     145             : 
+     146             : 
+     147             : // write the data for a partition, starting at the given offset
+     148           0 : PartitionWriteResult writeDataForPartition(
+     149             :     spark::runtime::GeneratedSpmvImplementation *impl,
+     150             :     int offset,
+     151             :     const Partition& br,
+     152             :     const std::vector<double>& v) {
+     153             :   // for each partition write this down
+     154             :   PartitionWriteResult pwr;
+     155           0 :   pwr.indptrValuesStartAddress = align(offset, 384);
+     156           0 :   pwr.indptrValuesSize = size_bytes(br.m_indptr_values);
+     157             :   impl->write(
+     158             :       pwr.indptrValuesSize,
+     159             :       pwr.indptrValuesStartAddress,
+     160           0 :       (uint8_t *)&br.m_indptr_values[0]);
+     161             : 
+     162           0 :   pwr.vStartAddress = pwr.indptrValuesStartAddress + pwr.indptrValuesSize;
+     163             :   impl->write(
+     164             :       size_bytes(v),
+     165             :       pwr.vStartAddress,
+     166           0 :       (uint8_t *)&v[0]);
+     167             : 
+     168           0 :   pwr.colptrStartAddress = pwr.vStartAddress + size_bytes(v);
+     169           0 :   pwr.colptrSize = size_bytes(br.m_colptr);
+     170             :   impl->write(
+     171             :       pwr.colptrSize,
+     172             :       pwr.colptrStartAddress,
+     173           0 :       (uint8_t *)&br.m_colptr[0]);
+     174             : 
+     175           0 :   pwr.outStartAddr = pwr.colptrStartAddress + pwr.colptrSize;
+     176           0 :   pwr.outSize = br.outSize;
+     177           0 :   return pwr;
+     178             : }
+     179             : 
+     180             : 
+     181           0 : Eigen::VectorXd ssarch::dfespmv(Eigen::VectorXd x)
+     182             : {
+     183             :   using namespace std;
+     184             : 
+     185           0 :   if (this->impl->getDramReductionEnabled()) {
+     186             :     // because of DRAM read/write latency we can only hope to get correct
+     187             :     // answers for large matrices
+     188             :     // XXX figure out where to place this constant;
+     189           0 :     const int minRowsWithDramReduction = 35000;
+     190           0 :     if (mat.rows() < minRowsWithDramReduction ) {
+     191           0 :       stringstream ss;
+     192           0 :       ss << "Matrix is too small! Minimum supported rows with DRAM reduction: ";
+     193           0 :       ss << minRowsWithDramReduction;
+     194           0 :       ss << " actual rows: " << mat.rows();
+     195           0 :       throw invalid_argument(ss.str());
+     196             :     }
+     197             :   } else {
+     198           0 :     if (maxRows < mat.rows()) {
+     199           0 :       stringstream ss;
+     200           0 :       ss << "Matrix is too large! Maximum supported rows: ";
+     201           0 :       ss << maxRows;
+     202           0 :       ss << " actual rows: " << mat.rows();
+     203           0 :       throw invalid_argument(ss.str());
+     204             :     }
+     205             :   }
+     206             : 
+     207           0 :   int cacheSize = this->cacheSize;
+     208             : 
+     209           0 :   vector<double> v = spark::converters::eigenVectorToStdVector(x);
+     210           0 :   spark::spmv::align(v, sizeof(double) * cacheSize);
+     211           0 :   spark::spmv::align(v, 384);
+     212             : 
+     213           0 :   std::vector<int> nrows, totalCycles, reductionCycles, paddingCycles, colptrSizes, indptrValuesSizes, outputResultSizes;
+     214           0 :   std::vector<int> colptrUnpaddedSizes, indptrValuesUnpaddedLengths;
+     215           0 :   std::vector<long> outputStartAddresses, colptrStartAddresses;
+     216           0 :   std::vector<long> vStartAddresses, indptrValuesStartAddresses;
+     217             : 
+     218           0 :   int offset = 0;
+     219           0 :   int i = 0;
+     220           0 :   for (auto& p : this->partitions) {
+     221           0 :     nrows.push_back(p.n);
+     222           0 :     paddingCycles.push_back(p.paddingCycles);
+     223           0 :     totalCycles.push_back(p.totalCycles);
+     224           0 :     reductionCycles.push_back(p.reductionCycles);
+     225           0 :     colptrUnpaddedSizes.push_back(p.m_colptr_unpaddedLength);
+     226           0 :     indptrValuesUnpaddedLengths.push_back(p.m_indptr_values_unpaddedLength);
+     227             : 
+     228           0 :     PartitionWriteResult pr = writeDataForPartition(this->impl, offset, p, v);
+     229           0 :     outputStartAddresses.push_back(pr.outStartAddr);
+     230           0 :     outputResultSizes.push_back(pr.outSize);
+     231           0 :     colptrStartAddresses.push_back(pr.colptrStartAddress);
+     232           0 :     colptrSizes.push_back(pr.colptrSize);
+     233           0 :     vStartAddresses.push_back(pr.vStartAddress);
+     234           0 :     indptrValuesSizes.push_back(pr.indptrValuesSize);
+     235           0 :     indptrValuesStartAddresses.push_back(pr.indptrValuesStartAddress);
+     236             : 
+     237           0 :     offset = pr.outStartAddr + p.outSize;
+     238             :   }
+     239             : 
+     240             :   // npartitions and vector load cycles should be the same for all partitions
+     241           0 :   int nBlocks = this->partitions[0].nBlocks;
+     242           0 :   int vector_load_cycles = this->partitions[0].vector_load_cycles;
+     243           0 :   std::cout << "Running on DFE" << std::endl;
+     244             : 
+     245           0 :   int nIterations = 1;
+     246           0 :   logResult("Total cycles", totalCycles);
+     247           0 :   logResult("Padding cycles", paddingCycles);
+     248           0 :   logResult("Reduction cycles", reductionCycles);
+     249             : 
+     250           0 :   auto start = std::chrono::high_resolution_clock::now();
+     251             :   this->impl->Spmv(
+     252             :       nIterations,
+     253             :       nBlocks,
+     254             :       vector_load_cycles,
+     255           0 :       &colptrStartAddresses[0],
+     256           0 :       &colptrSizes[0],
+     257           0 :       &indptrValuesStartAddresses[0],
+     258           0 :       &indptrValuesSizes[0],
+     259           0 :       &nrows[0],
+     260           0 :       &outputStartAddresses[0],
+     261           0 :       &reductionCycles[0],
+     262           0 :       &totalCycles[0],
+     263           0 :       &vStartAddresses[0]
+     264           0 :       );
+     265           0 :   double took = dfesnippets::timing::clock_diff(start) / nIterations;
+     266           0 :   double est =(double) totalCycles[0] / (100.0 * 1e6);
+     267           0 :   double gflopsEst = (2.0 * (double)this->mat.nonZeros() / est) / 1E9;
+     268           0 :   double gflopsActual = (2.0 * (double)this->mat.nonZeros() / took) / 1E9;
+     269             : 
+     270           0 :   logResult("Iterations", nIterations);
+     271           0 :   logResult("Took (ms)", took);
+     272           0 :   logResult("Est (ms)", est);
+     273           0 :   logResult("Gflops (est)", gflopsEst);
+     274           0 :   logResult("Gflops (actual)", gflopsActual);
+     275             : 
+     276           0 :   std::vector<double> total;
+     277           0 :   for (size_t i = 0; i < outputStartAddresses.size(); i++) {
+     278           0 :     std::vector<double> tmp(outputResultSizes[i] / sizeof(double), 0);
+     279             :     this->impl->read(
+     280             :         size_bytes(tmp),
+     281           0 :         outputStartAddresses[i],
+     282           0 :         (uint8_t*)&tmp[0]);
+     283           0 :     std::copy(tmp.begin(), tmp.begin() + nrows[i], std::back_inserter(total));
+     284           0 :   }
+     285             : 
+     286             :   // remove the elements which were only for padding
+     287           0 :   return spark::converters::stdvectorToEigen(total);
+     288             : }
+     289             : 
+     290           0 : std::vector<EigenSparseMatrix> ssarch::do_partition(const EigenSparseMatrix& mat, int numPipes) {
+     291           0 :   std::vector<EigenSparseMatrix> res;
+     292           0 :   int rowsPerPartition = mat.rows() / numPipes;
+     293           0 :   int start = 0;
+     294           0 :   for (int i = 0; i < numPipes - 1; i++) {
+     295           0 :     res.push_back(mat.middleRows(start, rowsPerPartition));
+     296           0 :     start += rowsPerPartition;
+     297             :   }
+     298             :   // put all rows left in the last partition
+     299           0 :   res.push_back(mat.middleRows(start, mat.rows() - start));
+     300           0 :   return res;
+     301             : }
+     302             : 
+     303           0 : void ssarch::preprocess(
+     304             :     const EigenSparseMatrix& mat) {
+     305           0 :   this->mat = mat;
+     306             : 
+     307           0 :   int rowsPerPartition = mat.rows() / numPipes;
+     308           0 :   int start = 0;
+     309           0 :   for (int i = 0; i < numPipes - 1; i++) {
+     310             :     this->partitions.push_back(
+     311             :         do_blocking(
+     312           0 :           mat.middleRows(start, rowsPerPartition),
+     313           0 :           this->cacheSize, this->inputWidth));
+     314           0 :     start += rowsPerPartition;
+     315             :   }
+     316             : 
+     317             :   // put all rows left in the last partition
+     318             :   this->partitions.push_back(
+     319           0 :       do_blocking(mat.middleRows(start, mat.rows() - start),
+     320           0 :         this->cacheSize, this->inputWidth));
+     321             : 
+     322           0 : }
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/spmv/src/index-sort-f.html b/coverage/src/spmv/src/index-sort-f.html new file mode 100644 index 0000000..ee7cef9 --- /dev/null +++ b/coverage/src/spmv/src/index-sort-f.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - src/spmv/src + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/spmv/srcHitTotalCoverage
Test:final.infoLines:01900.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Spmv.cpp +
0.0%
+
0.0 %0 / 1900.0 %0 / 12
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/spmv/src/index-sort-l.html b/coverage/src/spmv/src/index-sort-l.html new file mode 100644 index 0000000..ba1aaf6 --- /dev/null +++ b/coverage/src/spmv/src/index-sort-l.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - src/spmv/src + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/spmv/srcHitTotalCoverage
Test:final.infoLines:01900.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Spmv.cpp +
0.0%
+
0.0 %0 / 1900.0 %0 / 12
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/src/spmv/src/index.html b/coverage/src/spmv/src/index.html new file mode 100644 index 0000000..139dfdf --- /dev/null +++ b/coverage/src/spmv/src/index.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - src/spmv/src + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - src/spmv/srcHitTotalCoverage
Test:final.infoLines:01900.0 %
Date:2015-11-30Functions:0120.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
Spmv.cpp +
0.0%
+
0.0 %0 / 1900.0 %0 / 12
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/index-sort-f.html b/coverage/tests/index-sort-f.html new file mode 100644 index 0000000..67e917c --- /dev/null +++ b/coverage/tests/index-sort-f.html @@ -0,0 +1,113 @@ + + + + + + + LCOV - final.info - tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - testsHitTotalCoverage
Test:final.infoLines:01600.0 %
Date:2015-11-30Functions:0220.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
test_architecture.cpp +
0.0%
+
0.0 %0 / 490.0 %0 / 3
test_spmv.cpp +
0.0%
+
0.0 %0 / 420.0 %0 / 4
test_utils.hpp +
0.0%
+
0.0 %0 / 690.0 %0 / 15
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/index-sort-l.html b/coverage/tests/index-sort-l.html new file mode 100644 index 0000000..130f323 --- /dev/null +++ b/coverage/tests/index-sort-l.html @@ -0,0 +1,113 @@ + + + + + + + LCOV - final.info - tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - testsHitTotalCoverage
Test:final.infoLines:01600.0 %
Date:2015-11-30Functions:0220.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
test_spmv.cpp +
0.0%
+
0.0 %0 / 420.0 %0 / 4
test_architecture.cpp +
0.0%
+
0.0 %0 / 490.0 %0 / 3
test_utils.hpp +
0.0%
+
0.0 %0 / 690.0 %0 / 15
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/index.html b/coverage/tests/index.html new file mode 100644 index 0000000..3d0a428 --- /dev/null +++ b/coverage/tests/index.html @@ -0,0 +1,113 @@ + + + + + + + LCOV - final.info - tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - testsHitTotalCoverage
Test:final.infoLines:01600.0 %
Date:2015-11-30Functions:0220.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
test_architecture.cpp +
0.0%
+
0.0 %0 / 490.0 %0 / 3
test_spmv.cpp +
0.0%
+
0.0 %0 / 420.0 %0 / 4
test_utils.hpp +
0.0%
+
0.0 %0 / 690.0 %0 / 15
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/test_architecture.cpp.func-sort-c.html b/coverage/tests/test_architecture.cpp.func-sort-c.html new file mode 100644 index 0000000..86b71b3 --- /dev/null +++ b/coverage/tests/test_architecture.cpp.func-sort-c.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - final.info - tests/test_architecture.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_architecture.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0490.0 %
Date:2015-11-30Functions:030.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_Z41__static_initialization_and_destruction_0ii0
_GLOBAL__sub_I_main0
main0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/test_architecture.cpp.func.html b/coverage/tests/test_architecture.cpp.func.html new file mode 100644 index 0000000..ebf1e04 --- /dev/null +++ b/coverage/tests/test_architecture.cpp.func.html @@ -0,0 +1,84 @@ + + + + + + + LCOV - final.info - tests/test_architecture.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_architecture.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0490.0 %
Date:2015-11-30Functions:030.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I_main0
_Z41__static_initialization_and_destruction_0ii0
main0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/test_architecture.cpp.gcov.html b/coverage/tests/test_architecture.cpp.gcov.html new file mode 100644 index 0000000..ce915dd --- /dev/null +++ b/coverage/tests/test_architecture.cpp.gcov.html @@ -0,0 +1,154 @@ + + + + + + + LCOV - final.info - tests/test_architecture.cpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_architecture.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0490.0 %
Date:2015-11-30Functions:030.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #include <Spark/Dse.hpp>
+       2             : #include <Spark/Utils.hpp>
+       3             : #include <boost/program_options.hpp>
+       4             : #include <chrono>
+       5             : #include <string>
+       6             : 
+       7             : using namespace spark::utils;
+       8             : 
+       9           0 : int main(int argc, char** argv) {
+      10             : 
+      11             :   namespace po = boost::program_options;
+      12             : 
+      13           0 :   std::string numPipes = "numPipes";
+      14           0 :   std::string cacheSize = "cacheSize";
+      15           0 :   std::string inputWidth = "inputWidth";
+      16           0 :   std::string gflopsOnly = "gflopsOnly";
+      17           0 :   std::string help = "help";
+      18           0 :   std::string help_m = "produce help message";
+      19             : 
+      20           0 :   po::options_description desc("Allowed options");
+      21             :   desc.add_options()
+      22           0 :     (help.c_str(), help_m.c_str())
+      23           0 :     (numPipes.c_str(), po::value<std::string>(), "range for number of pipes: start,end,step")
+      24           0 :     (cacheSize.c_str(), po::value<std::string>(), "range for cache size")
+      25           0 :     (inputWidth.c_str(), po::value<std::string>(), "range for input width")
+      26           0 :     (gflopsOnly.c_str(), po::value<bool>(), "print only gflops")
+      27           0 :     ("filePath", po::value<std::string>(), "path to matrix")
+      28           0 :     ;
+      29             : 
+      30           0 :   po::variables_map vm;
+      31           0 :   po::store(po::parse_command_line(argc, argv, desc), vm);
+      32           0 :   po::notify(vm);
+      33             : 
+      34           0 :   if (vm.count("help")) {
+      35           0 :     std::cout << desc << "\n";
+      36           0 :     return 1;
+      37             :   }
+      38             : 
+      39           0 :   std::string path;
+      40           0 :   if (vm.count("filePath")) {
+      41           0 :     path = vm["filePath"].as<std::string>();
+      42             :   } else {
+      43           0 :     std::cout << "Matrix path was not set.\n";
+      44           0 :     return 1;
+      45             :   }
+      46             : 
+      47           0 :   Range numPipesRange{1, 4, 1}, inputWidthRange{8, 40, 8}, cacheSizeRange{1024, 1024 * 32, 1024};
+      48             : 
+      49           0 :   if (vm.count(numPipes)) {
+      50           0 :     numPipesRange = Range(vm[numPipes].as<std::string>());
+      51             :   }
+      52           0 :   if (vm.count(inputWidth)) {
+      53           0 :     inputWidthRange = Range(vm[inputWidth].as<std::string>());
+      54             :   }
+      55           0 :   if (vm.count(cacheSize)) {
+      56           0 :      cacheSizeRange = Range(vm[cacheSize].as<std::string>());
+      57             :   }
+      58             : 
+      59           0 :   bool gflopsOnlyV = false;
+      60           0 :   if (vm.count(gflopsOnly)) {
+      61           0 :     gflopsOnlyV = vm[gflopsOnly].as<bool>();
+      62             :   }
+      63             : 
+      64           0 :   auto start = std::chrono::high_resolution_clock::now();
+      65             : 
+      66           0 :   spark::dse::SparkDse dseTool;
+      67           0 :   spark::dse::DseParameters params;
+      68           0 :   params.numPipesRange = numPipesRange;
+      69           0 :   params.inputWidthRange = inputWidthRange;
+      70           0 :   params.cacheSizeRange = cacheSizeRange;
+      71           0 :   params.gflopsOnly = true;
+      72             : 
+      73           0 :   spark::dse::Benchmark benchmark;
+      74           0 :   benchmark.add_matrix_path(path);
+      75           0 :   dseTool.run(benchmark, params);
+      76           0 :   dfesnippets::timing::print_clock_diff("Test took: ", start);
+      77           0 :   return 0;
+      78           0 : }
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/test_spmv.cpp.func-sort-c.html b/coverage/tests/test_spmv.cpp.func-sort-c.html new file mode 100644 index 0000000..ee9afab --- /dev/null +++ b/coverage/tests/test_spmv.cpp.func-sort-c.html @@ -0,0 +1,88 @@ + + + + + + + LCOV - final.info - tests/test_spmv.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_spmv.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0420.0 %
Date:2015-11-30Functions:040.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
main0
_Z41__static_initialization_and_destruction_0ii0
_GLOBAL__sub_I__ZN11dfesnippets13numeric_utils12almost_equalEdd0
_Z4testSsi0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/test_spmv.cpp.func.html b/coverage/tests/test_spmv.cpp.func.html new file mode 100644 index 0000000..0e4a272 --- /dev/null +++ b/coverage/tests/test_spmv.cpp.func.html @@ -0,0 +1,88 @@ + + + + + + + LCOV - final.info - tests/test_spmv.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_spmv.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0420.0 %
Date:2015-11-30Functions:040.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I__ZN11dfesnippets13numeric_utils12almost_equalEdd0
_Z41__static_initialization_and_destruction_0ii0
_Z4testSsi0
main0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/test_spmv.cpp.gcov.html b/coverage/tests/test_spmv.cpp.gcov.html new file mode 100644 index 0000000..19903dd --- /dev/null +++ b/coverage/tests/test_spmv.cpp.gcov.html @@ -0,0 +1,160 @@ + + + + + + + LCOV - final.info - tests/test_spmv.cpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_spmv.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:0420.0 %
Date:2015-11-30Functions:040.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #include <Spark/Spmv.hpp>
+       2             : #include <Spark/SimpleSpmv.hpp>
+       3             : #include <Spark/Io.hpp>
+       4             : #include <Spark/Converters.hpp>
+       5             : #include <Spark/Execution.hpp>
+       6             : #include <Spark/UserInput.hpp>
+       7             : #include <Spark/GeneratedImplSupport.hpp>
+       8             : 
+       9             : #include <string>
+      10             : #include <boost/filesystem.hpp>
+      11             : 
+      12             : #include <test_utils.hpp>
+      13             : 
+      14             : // relative path to the library dir, this should probably not be hardcoded, but
+      15             : // it's fine for now, till we find a better solution (e.g. a env. variable
+      16             : // SPARK_LIB_PATH etc.)
+      17           0 : const std::string LIB_DIR = "../lib-generated/";
+      18             : 
+      19             : using namespace std;
+      20             : using namespace spark::execution;
+      21             : 
+      22           0 : int test(string path, int implId) {
+      23           0 :   std::cout << "File: " << path << std::endl;
+      24           0 :   spark::io::MmReader<double> m(path);
+      25           0 :   auto eigenMatrix = spark::converters::tripletToEigen(m.mmreadMatrix(path));
+      26           0 :   int cols = eigenMatrix->cols();
+      27             : 
+      28           0 :   std::cout << "Nonzeros: " << eigenMatrix->nonZeros() << std::endl;
+      29             : 
+      30           0 :   Eigen::VectorXd x(cols);
+      31           0 :   for (int i = 0; i < cols; i++) x[i] = (double)i * 0.25;
+      32             : 
+      33           0 :   spark::runtime::SpmvImplementationLoader implLoader;
+      34             :   // TODO find the best architecture somehow
+      35           0 :   int maxRows = eigenMatrix->rows();
+      36             :   spark::runtime::GeneratedSpmvImplementation* deviceImpl;
+      37           0 :   if (implId == -1)
+      38           0 :     deviceImpl = implLoader.architectureWithParams(maxRows);
+      39             :   else
+      40           0 :     deviceImpl = implLoader.architectureWithId(implId);
+      41             : 
+      42           0 :   auto a = new spark::spmv::SimpleSpmvArchitecture(deviceImpl);
+      43             : 
+      44           0 :   a->preprocess(*eigenMatrix);
+      45           0 :   Eigen::VectorXd got = a->dfespmv(x);
+      46           0 :   Eigen::VectorXd exp = *eigenMatrix * x;
+      47           0 :   free(a);
+      48             : 
+      49             :   auto mismatches =
+      50             :       spark::test::check(spark::converters::eigenVectorToStdVector(got),
+      51           0 :                          spark::converters::eigenVectorToStdVector(exp));
+      52             : 
+      53           0 :   if (mismatches.empty()) {
+      54           0 :     std::cout << "Test passed!" << std::endl;
+      55           0 :     return 0;
+      56             :   }
+      57             : 
+      58           0 :   spark::test::print_mismatches(mismatches);
+      59           0 :   std::cout << "Test failed: " << mismatches.size() << " mismatches "
+      60           0 :             << std::endl;
+      61           0 :   return 1;
+      62             : }
+      63             : 
+      64           0 : int main(int argc, char** argv) {
+      65           0 :   cout << "Program arguments:" << endl;
+      66           0 :   for (int i = 0; i < argc; i++) cout << "   " << argv[i] << endl;
+      67             :   // XXX Reasonable argument parsing
+      68             : 
+      69           0 :   if (argc > 1) {
+      70           0 :     int status = -1;
+      71           0 :     if (argc == 2) {
+      72           0 :       status = test(argv[1], -1);
+      73           0 :     } else if (argc == 3) {
+      74           0 :       status = test(argv[1], stoi(argv[2]));
+      75             :     }
+      76           0 :     if (status == 0)
+      77           0 :       std::cout << "All tests passed!" << std::endl;
+      78             :     else
+      79           0 :       std::cout << "Tests failed!" << std::endl;
+      80           0 :     return status;
+      81             :   }
+      82             : 
+      83           0 :   return 1;
+      84           0 : }
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/test_utils.hpp.func-sort-c.html b/coverage/tests/test_utils.hpp.func-sort-c.html new file mode 100644 index 0000000..25314cb --- /dev/null +++ b/coverage/tests/test_utils.hpp.func-sort-c.html @@ -0,0 +1,132 @@ + + + + + + + LCOV - final.info - tests/test_utils.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_utils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0690.0 %
Date:2015-11-30Functions:0150.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark4test20EigenMatrixGeneratorclEi0
_ZN5spark4test5checkERKSt6vectorIdSaIdEES5_0
_ZN5spark4test20EigenMatrixGeneratorD2Ev0
_ZN5spark4test21SimpleVectorGeneratorclEN5Eigen12SparseMatrixIdLi0EiEEi0
_ZN5spark4test3oneEi0
_ZN5spark4test20EigenVectorGeneratorclEN5Eigen12SparseMatrixIdLi0EiEEi0
_ZN5spark4test5checkERKN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEES5_0
_ZN5spark4test16print_mismatchesERKSt6vectorISt5tupleIIiddEESaIS3_EE0
_ZN5spark4test7runTestESsRNS_21sparse_linear_solvers6SolverE0
_ZN5spark4test4testINS0_20EigenMatrixGeneratorENS0_21SimpleVectorGeneratorEEEiiT_T0_RNS_21sparse_linear_solvers6SolverE0
_ZN5spark4test4testINS0_20EigenMatrixGeneratorENS0_20EigenVectorGeneratorEEEiiT_T0_RNS_21sparse_linear_solvers6SolverE0
_ZN5spark4test20EigenMatrixGeneratorC2EN5Eigen12SparseMatrixIdLi0EiEE0
_ZN5spark4test20EigenVectorGeneratorD2Ev0
_ZN5spark4test7runTestESsSsRNS_21sparse_linear_solvers6SolverE0
_ZN5spark4test20EigenVectorGeneratorC2EN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/test_utils.hpp.func.html b/coverage/tests/test_utils.hpp.func.html new file mode 100644 index 0000000..6021eb5 --- /dev/null +++ b/coverage/tests/test_utils.hpp.func.html @@ -0,0 +1,132 @@ + + + + + + + LCOV - final.info - tests/test_utils.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_utils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0690.0 %
Date:2015-11-30Functions:0150.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark4test16print_mismatchesERKSt6vectorISt5tupleIIiddEESaIS3_EE0
_ZN5spark4test20EigenMatrixGeneratorC2EN5Eigen12SparseMatrixIdLi0EiEE0
_ZN5spark4test20EigenMatrixGeneratorD2Ev0
_ZN5spark4test20EigenMatrixGeneratorclEi0
_ZN5spark4test20EigenVectorGeneratorC2EN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE0
_ZN5spark4test20EigenVectorGeneratorD2Ev0
_ZN5spark4test20EigenVectorGeneratorclEN5Eigen12SparseMatrixIdLi0EiEEi0
_ZN5spark4test21SimpleVectorGeneratorclEN5Eigen12SparseMatrixIdLi0EiEEi0
_ZN5spark4test3oneEi0
_ZN5spark4test4testINS0_20EigenMatrixGeneratorENS0_20EigenVectorGeneratorEEEiiT_T0_RNS_21sparse_linear_solvers6SolverE0
_ZN5spark4test4testINS0_20EigenMatrixGeneratorENS0_21SimpleVectorGeneratorEEEiiT_T0_RNS_21sparse_linear_solvers6SolverE0
_ZN5spark4test5checkERKN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEES5_0
_ZN5spark4test5checkERKSt6vectorIdSaIdEES5_0
_ZN5spark4test7runTestESsRNS_21sparse_linear_solvers6SolverE0
_ZN5spark4test7runTestESsSsRNS_21sparse_linear_solvers6SolverE0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/tests/test_utils.hpp.gcov.html b/coverage/tests/test_utils.hpp.gcov.html new file mode 100644 index 0000000..001d1d1 --- /dev/null +++ b/coverage/tests/test_utils.hpp.gcov.html @@ -0,0 +1,245 @@ + + + + + + + LCOV - final.info - tests/test_utils.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - tests - test_utils.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:0690.0 %
Date:2015-11-30Functions:0150.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef TEST_UTILS_H
+       2             : #define TEST_UTILS_H
+       3             : 
+       4             : #include <vector>
+       5             : #include <tuple>
+       6             : #include <iostream>
+       7             : #include <iomanip>
+       8             : 
+       9             : #include <boost/io/ios_state.hpp>
+      10             : 
+      11             : #include <Eigen/Sparse>
+      12             : 
+      13             : #include <Spark/SparseLinearSolvers.hpp>
+      14             : #include <Spark/Converters.hpp>
+      15             : #include <Spark/Io.hpp>
+      16             : 
+      17             : #include <dfesnippets/NumericUtils.hpp>
+      18             : 
+      19             : 
+      20             : namespace spark {
+      21             :   namespace test {
+      22             : 
+      23             :     using Td = Eigen::Triplet<double>;
+      24             :     using Vd = Eigen::VectorXd;
+      25             :     using Md = Eigen::SparseMatrix<double>;
+      26             : 
+      27             :     using MismatchT = std::vector<std::tuple<int, double, double>>;
+      28             : 
+      29           0 :     MismatchT check(
+      30             :         const std::vector<double>& got,
+      31             :         const std::vector<double>& exp
+      32             :         )
+      33             :     {
+      34           0 :       std::vector<std::tuple<int, double, double>> mismatches;
+      35           0 :       for (int i = 0; i < got.size(); i++) {
+      36           0 :         if (!dfesnippets::numeric_utils::almost_equal(got[i], exp[i], 1E-8, 1E-11))
+      37           0 :           mismatches.push_back(std::make_tuple(i, got[i], exp[i]));
+      38             :       }
+      39             : 
+      40           0 :       return mismatches;
+      41             :     }
+      42             : 
+      43           0 :     MismatchT check(
+      44             :         const Eigen::VectorXd& got,
+      45             :         const Eigen::VectorXd& exp)
+      46             :     {
+      47             :       return
+      48             :         check(spark::converters::eigenVectorToStdVector(got),
+      49           0 :             spark::converters::eigenVectorToStdVector(exp));
+      50             :     }
+      51             : 
+      52           0 :     void print_mismatches(const MismatchT& mismatches) {
+      53           0 :       boost::io::ios_all_saver guard(std::cout);
+      54           0 :       if (!mismatches.empty()) {
+      55           0 :         std::cerr << "Results didn't match" << std::endl;
+      56           0 :         for (int i = 0; i < mismatches.size(); i++) {
+      57           0 :           std::cerr << std::fixed << std::setprecision(10);
+      58           0 :           std::cerr << "At " << std::get<0>(mismatches[i]);
+      59           0 :           std::cerr << " got: " << std::get<1>(mismatches[i]);
+      60           0 :           std::cerr << " exp: "  << std::get<2>(mismatches[i]) << std::endl;
+      61             :         }
+      62           0 :       }
+      63           0 :     }
+      64             : 
+      65             :     struct SimpleVectorGenerator {
+      66           0 :       std::tuple<Vd, Vd> operator()(Md mat, int m) {
+      67           0 :         Eigen::VectorXd x(m);
+      68           0 :         for (int i = 0; i < m; i++)
+      69           0 :           x[i] = i * 0.25;
+      70             :         return std::make_tuple(
+      71           0 :             mat * x,
+      72           0 :             x);
+      73             :       }
+      74             :     };
+      75             : 
+      76             : 
+      77           0 :     Md one(int m) {
+      78           0 :       std::vector<Td> nnzs;
+      79           0 :       for (int i = 0; i < m; i++)
+      80           0 :         nnzs.push_back(Td(i, i, 1));
+      81           0 :       Md a(m, m);
+      82           0 :       a.setFromTriplets(nnzs.begin(), nnzs.end());
+      83           0 :       return a;
+      84             :     }
+      85             : 
+      86             :     // functor to generate a matrix
+      87             :     struct IdentityGenerator {
+      88             :       Md operator()(int m) {
+      89             :         return one(m);
+      90             :       }
+      91             :     };
+      92             : 
+      93             :     struct RandomGenerator {
+      94             :       Md operator()(int m) {
+      95             :         return one(m) * 2;
+      96             :       }
+      97             :     };
+      98             : 
+      99           0 :     struct EigenMatrixGenerator {
+     100             :       Md matrix;
+     101           0 :       EigenMatrixGenerator(Md _matrix) : matrix(_matrix) {}
+     102           0 :       Md operator()(int m) {
+     103           0 :         return matrix;
+     104             :       }
+     105             :     };
+     106             : 
+     107             : 
+     108           0 :     struct EigenVectorGenerator {
+     109             :       Vd vd;
+     110           0 :       EigenVectorGenerator(Vd _vd) : vd(_vd) {}
+     111           0 :       std::tuple<Vd, Vd> operator()(Md mat, int m) {
+     112           0 :         std::cout << "Running eigen solver" << std::endl;
+     113           0 :         spark::sparse_linear_solvers::EigenSolver es;
+     114           0 :         Vd sol = es.solve(mat, vd);
+     115           0 :         std::cout << "Eigen solver complete!" << std::endl;
+     116           0 :         return std::make_tuple(vd, sol);
+     117             :       }
+     118             :     };
+     119             : 
+     120             :     template<typename MatrixGenerator, typename RhsGenerator>
+     121           0 :       int test(int m, MatrixGenerator mg, RhsGenerator rhsg,
+     122             :           spark::sparse_linear_solvers::Solver &solver) {
+     123           0 :         Md a = mg(m);
+     124           0 :         auto tpl =  rhsg(a, m);
+     125           0 :         Vd b = std::get<0>(tpl);
+     126           0 :         Vd exp = std::get<1>(tpl);
+     127             : 
+     128           0 :         std::cout << "Running DFE Solver" << std::endl;
+     129           0 :         Vd sol = solver.solve(a, b);
+     130           0 :         std::cout << "DFE solver complete!" << std::endl;
+     131             : 
+     132           0 :         auto mismatches = spark::test::check(sol, exp);
+     133           0 :         if (mismatches.empty())
+     134           0 :           return 0;
+     135           0 :         spark::test::print_mismatches(mismatches);
+     136             : 
+     137           0 :         return 1;
+     138             :       }
+     139             : 
+     140           0 :     int runTest(
+     141             :         std::string path,
+     142             :         spark::sparse_linear_solvers::Solver& solver) {
+     143           0 :       spark::io::MmReader<double> m(path);
+     144           0 :       auto eigenMatrix = spark::converters::tripletToEigen(m.mmreadMatrix(path));
+     145             :       return test(eigenMatrix->rows(),
+     146           0 :           EigenMatrixGenerator{*eigenMatrix},
+     147             :           spark::test::SimpleVectorGenerator{},
+     148           0 :           solver);
+     149             :     }
+     150             : 
+     151           0 :     int runTest(
+     152             :         std::string path,
+     153             :         std::string vectorPath,
+     154             :         spark::sparse_linear_solvers::Solver& solver) {
+     155           0 :       spark::io::MmReader<double> m(path);
+     156           0 :       auto eigenMatrix = spark::converters::tripletToEigen(m.mmreadMatrix(path));
+     157           0 :       spark::io::MmReader<double> mv(vectorPath);
+     158           0 :       auto eigenVector = spark::converters::stdvectorToEigen(mv.readVector());
+     159             :       return test(eigenMatrix->rows(),
+     160           0 :           EigenMatrixGenerator{*eigenMatrix},
+     161             :           EigenVectorGenerator{eigenVector},
+     162           0 :           solver);
+     163             :     }
+     164             : 
+     165             :   }
+     166             : }
+     167             : 
+     168             : 
+     169             : #endif /* end of include guard: TEST_UTILS_H */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/unit-tests/index-sort-f.html b/coverage/unit-tests/index-sort-f.html new file mode 100644 index 0000000..6b7f2f7 --- /dev/null +++ b/coverage/unit-tests/index-sort-f.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - unit-tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - unit-testsHitTotalCoverage
Test:final.infoLines:44100.0 %
Date:2015-11-30Functions:44100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
spmv_test.cpp +
100.0%
+
100.0 %4 / 4100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/unit-tests/index-sort-l.html b/coverage/unit-tests/index-sort-l.html new file mode 100644 index 0000000..205c738 --- /dev/null +++ b/coverage/unit-tests/index-sort-l.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - unit-tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - unit-testsHitTotalCoverage
Test:final.infoLines:44100.0 %
Date:2015-11-30Functions:44100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
spmv_test.cpp +
100.0%
+
100.0 %4 / 4100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/unit-tests/index.html b/coverage/unit-tests/index.html new file mode 100644 index 0000000..8fa700a --- /dev/null +++ b/coverage/unit-tests/index.html @@ -0,0 +1,93 @@ + + + + + + + LCOV - final.info - unit-tests + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - unit-testsHitTotalCoverage
Test:final.infoLines:44100.0 %
Date:2015-11-30Functions:44100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +

Filename Sort by nameLine Coverage Sort by line coverageFunctions Sort by function coverage
spmv_test.cpp +
100.0%
+
100.0 %4 / 4100.0 %4 / 4
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/unit-tests/spmv_test.cpp.func-sort-c.html b/coverage/unit-tests/spmv_test.cpp.func-sort-c.html new file mode 100644 index 0000000..799cddc --- /dev/null +++ b/coverage/unit-tests/spmv_test.cpp.func-sort-c.html @@ -0,0 +1,88 @@ + + + + + + + LCOV - final.info - unit-tests/spmv_test.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - unit-tests - spmv_test.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:44100.0 %
Date:2015-11-30Functions:44100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I__Z14init_unit_testv1
_Z41__static_initialization_and_destruction_0ii1
_ZN25logic_resource_usage_test11test_methodEv1
_ZL33logic_resource_usage_test_invokerv1
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/unit-tests/spmv_test.cpp.func.html b/coverage/unit-tests/spmv_test.cpp.func.html new file mode 100644 index 0000000..d7bd380 --- /dev/null +++ b/coverage/unit-tests/spmv_test.cpp.func.html @@ -0,0 +1,88 @@ + + + + + + + LCOV - final.info - unit-tests/spmv_test.cpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - unit-tests - spmv_test.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:44100.0 %
Date:2015-11-30Functions:44100.0 %
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_GLOBAL__sub_I__Z14init_unit_testv1
_Z41__static_initialization_and_destruction_0ii1
_ZL33logic_resource_usage_test_invokerv1
_ZN25logic_resource_usage_test11test_methodEv1
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/unit-tests/spmv_test.cpp.gcov.html b/coverage/unit-tests/spmv_test.cpp.gcov.html new file mode 100644 index 0000000..92c6419 --- /dev/null +++ b/coverage/unit-tests/spmv_test.cpp.gcov.html @@ -0,0 +1,87 @@ + + + + + + + LCOV - final.info - unit-tests/spmv_test.cpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - unit-tests - spmv_test.cpp (source / functions)HitTotalCoverage
Test:final.infoLines:44100.0 %
Date:2015-11-30Functions:44100.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #define BOOST_TEST_DYN_LINK
+       2             : #define BOOST_TEST_MODULE spmv_test
+       3             : #include <boost/test/unit_test.hpp>
+       4             : 
+       5             : #include <Spark/Spmv.hpp>
+       6             : 
+       7           3 : BOOST_AUTO_TEST_CASE(logic_resource_usage_test)
+       8             : {
+       9           1 :   spark::model::LogicResourceUsage ru{1, 1, 1, 1};
+      10           1 :   BOOST_CHECK_EQUAL(ru.luts, 1);
+      11           4 : }
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/updown.png b/coverage/updown.png new file mode 100644 index 0000000000000000000000000000000000000000..aa56a238b3e6c435265250f9266cd1b8caba0f20 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^AT}Qd8;}%R+`Ae`*?77*hG?8mPH5^{)z4*}Q$iB}huR`+ literal 0 HcmV?d00001 From e30943b8c6a066d056707409acb7bf759ea9f9eb Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Mon, 30 Nov 2015 21:38:55 +0000 Subject: [PATCH 07/23] Update index --- index.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 552e1ff..f76f2e8 100644 --- a/index.html +++ b/index.html @@ -1,3 +1,10 @@ Welcome! This is a page in progress... -Check out the docs in the meantime! +

+Here are some useful links in the meantime: +

+

From 1f0675ebb8d4c184ee1b1379c925c52c9422ba93 Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Mon, 30 Nov 2015 23:40:24 +0000 Subject: [PATCH 08/23] Update coverage --- .../NumericUtils.hpp.func-sort-c.html | 6 +- .../Spark/Converters.hpp.func-sort-c.html | 4 +- .../include/Spark/Dse.hpp.func-sort-c.html | 26 ++++----- .../GeneratedImplSupport.hpp.func-sort-c.html | 18 +++--- .../include/Spark/Io.hpp.func-sort-c.html | 20 +++---- .../include/Spark/Model.hpp.func-sort-c.html | 18 +++--- .../Spark/SimpleSpmv.hpp.func-sort-c.html | 56 +++++++++---------- .../Spark/SparseMatrix.hpp.func-sort-c.html | 4 +- .../include/Spark/Spmv.hpp.func-sort-c.html | 20 +++---- .../include/Spark/Utils.hpp.func-sort-c.html | 10 ++-- coverage/index-sort-f.html | 40 ++++--------- coverage/index-sort-l.html | 32 ++--------- coverage/index.html | 32 ++--------- .../SparseLinearSolvers.cpp.func-sort-c.html | 12 ++-- coverage/src/dse/Dse.cpp.func-sort-c.html | 12 ++-- .../SharedLibLoader.cpp.func-sort-c.html | 12 ++-- coverage/src/main.cpp.func-sort-c.html | 6 +- .../src/spmv/src/Spmv.cpp.func-sort-c.html | 22 ++++---- .../test_architecture.cpp.func-sort-c.html | 6 +- coverage/tests/test_spmv.cpp.func-sort-c.html | 6 +- .../tests/test_utils.hpp.func-sort-c.html | 28 +++++----- .../unit-tests/spmv_test.cpp.func-sort-c.html | 8 +-- 22 files changed, 169 insertions(+), 229 deletions(-) diff --git a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func-sort-c.html b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func-sort-c.html index cc96237..3600c74 100644 --- a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func-sort-c.html +++ b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func-sort-c.html @@ -60,11 +60,11 @@ Hit count Sort by hit count - _ZN11dfesnippets13numeric_utils12almost_equalEdd + _ZN11dfesnippets13numeric_utils5alignEii 0 - _ZN11dfesnippets13numeric_utils12almost_equalEddd + _ZN11dfesnippets13numeric_utils12almost_equalEdd 0 @@ -72,7 +72,7 @@ 0 - _ZN11dfesnippets13numeric_utils5alignEii + _ZN11dfesnippets13numeric_utils12almost_equalEddd 0 diff --git a/coverage/include/Spark/Converters.hpp.func-sort-c.html b/coverage/include/Spark/Converters.hpp.func-sort-c.html index f9012a8..e433835 100644 --- a/coverage/include/Spark/Converters.hpp.func-sort-c.html +++ b/coverage/include/Spark/Converters.hpp.func-sort-c.html @@ -64,11 +64,11 @@ 0 - _ZN5spark10converters16stdvectorToEigenESt6vectorIdSaIdEE + _ZN5spark10converters14tripletToEigenENS_6sparse14SparkCooMatrixIdEE 0 - _ZN5spark10converters14tripletToEigenENS_6sparse14SparkCooMatrixIdEE + _ZN5spark10converters16stdvectorToEigenESt6vectorIdSaIdEE 0 diff --git a/coverage/include/Spark/Dse.hpp.func-sort-c.html b/coverage/include/Spark/Dse.hpp.func-sort-c.html index 5fb1a99..74772d1 100644 --- a/coverage/include/Spark/Dse.hpp.func-sort-c.html +++ b/coverage/include/Spark/Dse.hpp.func-sort-c.html @@ -59,24 +59,20 @@ Function Name Sort by function name Hit count Sort by hit count - - _ZN5spark3dse13DseParametersC2Ev - 0 - _ZN5spark3dse9DseResultC2EOS1_ 0 - _ZN5spark3dse9DseResultC2ERKS1_ + _ZNK5spark3dse9Benchmark18get_benchmark_sizeEv 0 - _ZN5spark3dse9BenchmarkD2Ev + _ZN5spark3dse9DseResultD2Ev 0 - _ZNK5spark3dse9Benchmark18get_benchmark_sizeEv + _ZN5spark3dse9Benchmark15add_matrix_pathESs 0 @@ -84,11 +80,11 @@ 0 - _ZN5spark3dse9DseResultD2Ev + _ZN5spark3dse9BenchmarkC2Ev 0 - _ZN5spark3dselsERSoRNS0_13DseParametersE + _ZN5spark3dse8SparkDseC2Ev 0 @@ -96,19 +92,23 @@ 0 - _ZN5spark3dselsERSoRNS0_9BenchmarkE + _ZN5spark3dse13DseParametersC2Ev 0 - _ZN5spark3dse9Benchmark15add_matrix_pathESs + _ZN5spark3dselsERSoRNS0_13DseParametersE 0 - _ZN5spark3dse8SparkDseC2Ev + _ZN5spark3dse9DseResultC2ERKS1_ 0 - _ZN5spark3dse9BenchmarkC2Ev + _ZN5spark3dselsERSoRNS0_9BenchmarkE + 0 + + + _ZN5spark3dse9BenchmarkD2Ev 0 diff --git a/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html b/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html index e4b429f..5196ee8 100644 --- a/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html +++ b/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html @@ -60,23 +60,23 @@ Hit count Sort by hit count - _ZN5spark7runtime27GeneratedSpmvImplementation8numPipesEv + _ZN5spark7runtime24SpmvImplementationLoader18architectureWithIdEi 0 - _ZN5spark7runtime27GeneratedSpmvImplementation7maxRowsEv + _ZN5spark7runtime24SpmvImplementationLoaderD2Ev 0 - _ZN5spark7runtime24SpmvImplementationLoader18architectureWithIdEi + _ZN5spark7runtime24SpmvImplementationLoaderD0Ev 0 - _ZN5spark7runtime27GeneratedSpmvImplementation23getDramReductionEnabledEv + _ZN5spark7runtime27GeneratedSpmvImplementation8numPipesEv 0 - _ZN5spark7runtime24SpmvImplementationLoader22architectureWithParamsEi + _ZN5spark7runtime20ImplementationLoaderD2Ev 0 @@ -84,19 +84,19 @@ 0 - _ZN5spark7runtime27GeneratedSpmvImplementation10inputWidthEv + _ZN5spark7runtime24SpmvImplementationLoader22architectureWithParamsEi 0 - _ZN5spark7runtime20ImplementationLoaderD2Ev + _ZN5spark7runtime27GeneratedSpmvImplementation10inputWidthEv 0 - _ZN5spark7runtime24SpmvImplementationLoaderD2Ev + _ZN5spark7runtime27GeneratedSpmvImplementation23getDramReductionEnabledEv 0 - _ZN5spark7runtime24SpmvImplementationLoaderD0Ev + _ZN5spark7runtime27GeneratedSpmvImplementation7maxRowsEv 0 diff --git a/coverage/include/Spark/Io.hpp.func-sort-c.html b/coverage/include/Spark/Io.hpp.func-sort-c.html index 89b4fff..aaa5165 100644 --- a/coverage/include/Spark/Io.hpp.func-sort-c.html +++ b/coverage/include/Spark/Io.hpp.func-sort-c.html @@ -60,43 +60,43 @@ Hit count Sort by hit count - _ZN5spark2io8MmReaderIdED2Ev + _ZN5spark2io8MmReaderIdE7mmparseESs 0 - _ZN5spark2io8MmReaderIdE11parseHeaderEb + _ZN5spark2io8MmReaderIdED0Ev 0 - _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENKUlSt5tupleIIiidEES4_E_clES4_S4_ + _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENUlSt5tupleIIiidEES4_E_4_FUNES4_S4_ 0 - _ZN5spark2io8MmReaderIdE10readVectorEv + _ZN5spark2io8MmReaderIdEC2ESs 0 - _ZN5spark2io8MmReaderIdED0Ev + _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENKUlSt5tupleIIiidEES4_E_clES4_S4_ 0 - _ZN5spark2io8MmReaderIdE11parseHeaderESs + _ZN5spark2io8MmReaderIdE10readVectorEv 0 - _ZN5spark2io8MmReaderIdEC2ESs + _ZN5spark2io8MmReaderIdE11parseHeaderEb 0 - _ZN5spark2io8MmReaderIdE12mmreadMatrixESs + _ZN5spark2io8MmReaderIdE11parseHeaderESs 0 - _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENUlSt5tupleIIiidEES4_E_4_FUNES4_S4_ + _ZN5spark2io8MmReaderIdED2Ev 0 - _ZN5spark2io8MmReaderIdE7mmparseESs + _ZN5spark2io8MmReaderIdE12mmreadMatrixESs 0 diff --git a/coverage/include/Spark/Model.hpp.func-sort-c.html b/coverage/include/Spark/Model.hpp.func-sort-c.html index 4817235..5967b00 100644 --- a/coverage/include/Spark/Model.hpp.func-sort-c.html +++ b/coverage/include/Spark/Model.hpp.func-sort-c.html @@ -64,39 +64,39 @@ 1 - _ZNK5spark5model18LogicResourceUsageltERKS1_ + _ZNK5spark5model18LogicResourceUsageplERKS1_ 0 - _ZN5spark5model18LogicResourceUsageC2ERKS1_ + _ZNK5spark5model24ImplementationParametersltERKS1_ 0 - _ZNK5spark5model18LogicResourceUsagemlEd + _ZN5spark5model24ImplementationParametersC2ERKNS0_18LogicResourceUsageEd 0 - _ZNK5spark5model18LogicResourceUsagemlEi + _ZN5spark5model18LogicResourceUsageC2ERKS1_ 0 - _ZNK5spark5model18LogicResourceUsageplERKS1_ + _ZN5spark5model24ImplementationParameters9to_stringEv 0 - _ZN5spark5model24ImplementationParameters9to_stringEv + _ZNK5spark5model18LogicResourceUsageltERKS1_ 0 - _ZN5spark5model24ImplementationParametersC2ERKNS0_18LogicResourceUsageEd + _ZN5spark5model18LogicResourceUsage9to_stringEv 0 - _ZNK5spark5model24ImplementationParametersltERKS1_ + _ZNK5spark5model18LogicResourceUsagemlEi 0 - _ZN5spark5model18LogicResourceUsage9to_stringEv + _ZNK5spark5model18LogicResourceUsagemlEd 0 diff --git a/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html b/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html index ec5a032..2f1cb06 100644 --- a/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html +++ b/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html @@ -60,7 +60,7 @@ Hit count Sort by hit count - _ZN5spark4spmv12indptr_valueC2Ev + _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE7restartEv 0 @@ -68,111 +68,111 @@ 0 - _ZN5spark4spmv22SimpleSpmvArchitecture8get_nameEv + _ZN5spark4spmv22SimpleSpmvArchitecture12write_paramsEv 0 - _ZNK5spark4spmv22SimpleSpmvArchitecture6equalsERKNS0_16SpmvArchitectureE + _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE6doNextEv 0 - _ZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEv + _ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENKUlRKNS0_9PartitionES4_E_clES4_S4_ 0 - _ZN5spark4spmv25SkipEmptyRowsArchitecture15encodeEmptyRowsESt6vectorIjSaIjEEb + _ZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEv 0 - _ZN5spark4spmv22SimpleSpmvArchitectureC2EPNS_7runtime27GeneratedSpmvImplementationE + _ZN5spark4spmv22SimpleSpmvArchitecture14getLibraryNameEv 0 - _ZN5spark4spmv22SimpleSpmvArchitecture14getLibraryNameEv + _ZNK5spark4spmv22SimpleSpmvArchitectureeqERKS1_ 0 - _ZN5spark4spmv22SimpleSpmvArchitecture14getGFlopsCountEv + _ZN5spark4spmv22SimpleSpmvArchitectureD0Ev 0 - _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIdIEEEvSsT_DpT0_ + _ZN5spark4spmv25SkipEmptyRowsArchitecture15encodeEmptyRowsESt6vectorIjSaIjEEb 0 - _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEEC2ENS_5utils5RangeES5_S5_i + _ZN5spark4spmv12indptr_valueC2Ev 0 - _ZN5spark4spmv22SimpleSpmvArchitecture9to_stringEv + _ZN5spark4spmv22SimpleSpmvArchitecture10logResultRESs 0 - _ZN5spark4spmv22SimpleSpmvArchitectureD2Ev + _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiEEvSsSt6vectorIT_SaIS4_EE 0 - _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE6doNextEv + _ZN5spark4spmv22SimpleSpmvArchitecture27getImplementationParametersEv 0 - _ZN5spark4spmv9PartitionD2Ev + _ZN5spark4spmv12indptr_valueC2Edi 0 - _ZN5spark4spmv22SimpleSpmvArchitectureD0Ev + _ZN5spark4spmv22SimpleSpmvArchitecture9to_stringEv 0 - _ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENKUlRKNS0_9PartitionES4_E_clES4_S4_ + _ZN5spark4spmv22SimpleSpmvArchitectureD2Ev 0 - _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiEEvSsSt6vectorIT_SaIS4_EE + _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEEC2ENS_5utils5RangeES5_S5_i 0 - _ZN5spark4spmv22SimpleSpmvArchitecture27getImplementationParametersEv + _ZN5spark4spmv9PartitionD2Ev 0 - _ZN5spark4spmv25SkipEmptyRowsArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii + _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIdIEEEvSsT_DpT0_ 0 - _ZN5spark4spmv22SimpleSpmvArchitecture10logResultRESs + _ZN5spark4spmv9PartitionC2EOS1_ 0 - _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiIEEEvSsT_DpT0_ + _ZN5spark4spmv25SkipEmptyRowsArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii 0 - _ZN5spark4spmv9PartitionC2Ev + _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiIEEEvSsT_DpT0_ 0 - _ZN5spark4spmv9PartitionC2EOS1_ + _ZN5spark4spmv22SimpleSpmvArchitectureC2EPNS_7runtime27GeneratedSpmvImplementationE 0 - _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE7restartEv + _ZN5spark4spmv22SimpleSpmvArchitecture14getGFlopsCountEv 0 - _ZN5spark4spmv12indptr_valueC2Edi + _ZNK5spark4spmv22SimpleSpmvArchitecture6equalsERKNS0_16SpmvArchitectureE 0 - _ZNK5spark4spmv22SimpleSpmvArchitectureeqERKS1_ + _ZN5spark4spmv22SimpleSpmvArchitectureC2Eiiii 0 - _ZN5spark4spmv22SimpleSpmvArchitectureC2Eiiii + _ZN5spark4spmv9PartitionC2Ev 0 - _ZN5spark4spmv22SimpleSpmvArchitecture12write_paramsEv + _ZN5spark4spmv22SimpleSpmvArchitecture8get_nameEv 0 diff --git a/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html b/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html index d17de12..3408b5b 100644 --- a/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html +++ b/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html @@ -60,11 +60,11 @@ Hit count Sort by hit count - _ZN5spark6sparse14SparkCooMatrixIdED2Ev + _ZN5spark6sparse14SparkCooMatrixIdEC2Eii 0 - _ZN5spark6sparse14SparkCooMatrixIdEC2Eii + _ZN5spark6sparse14SparkCooMatrixIdED2Ev 0 diff --git a/coverage/include/Spark/Spmv.hpp.func-sort-c.html b/coverage/include/Spark/Spmv.hpp.func-sort-c.html index a090915..a51396b 100644 --- a/coverage/include/Spark/Spmv.hpp.func-sort-c.html +++ b/coverage/include/Spark/Spmv.hpp.func-sort-c.html @@ -60,7 +60,7 @@ Hit count Sort by hit count - _ZN5spark4spmv16SpmvArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii + _ZN5spark4spmv16SpmvArchitecture18getEstimatedGFlopsEv 0 @@ -68,19 +68,19 @@ 0 - _ZN5spark4spmv16SpmvArchitectureD0Ev + _ZN5spark4spmv16SpmvArchitectureD2Ev 0 - _ZN5spark4spmv16SpmvArchitectureeqERKS1_ + _ZN5spark4spmv16SpmvArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii 0 - _ZN5spark4spmv5alignIdEEvRSt6vectorIT_SaIS3_EEi + _ZN5spark4spmv5alignINS0_12indptr_valueEEEvRSt6vectorIT_SaIS4_EEi 0 - _ZN5spark4spmv16SpmvArchitecture12getFrequencyEv + _ZN5spark4spmv16SpmvArchitectureC2Ev 0 @@ -88,23 +88,23 @@ 0 - _ZN5spark4spmv16SpmvArchitectureC2Ev + _ZN5spark4spmv16SpmvArchitectureD0Ev 0 - _ZN5spark4spmv5alignINS0_12indptr_valueEEEvRSt6vectorIT_SaIS4_EEi + _ZN5spark4spmv5alignIiEEvRSt6vectorIT_SaIS3_EEi 0 - _ZN5spark4spmv16SpmvArchitecture18getEstimatedGFlopsEv + _ZN5spark4spmv16SpmvArchitecture12getFrequencyEv 0 - _ZN5spark4spmv16SpmvArchitectureD2Ev + _ZN5spark4spmv5alignIdEEvRSt6vectorIT_SaIS3_EEi 0 - _ZN5spark4spmv5alignIiEEvRSt6vectorIT_SaIS3_EEi + _ZN5spark4spmv16SpmvArchitectureeqERKS1_ 0 diff --git a/coverage/include/Spark/Utils.hpp.func-sort-c.html b/coverage/include/Spark/Utils.hpp.func-sort-c.html index 474ccf0..1a8f7f8 100644 --- a/coverage/include/Spark/Utils.hpp.func-sort-c.html +++ b/coverage/include/Spark/Utils.hpp.func-sort-c.html @@ -60,11 +60,11 @@ Hit count Sort by hit count - _ZN5spark5utils5RangeC2Eiii + _ZN5spark5utils5Range8at_startEv 0 - _ZN5spark5utils5RangeC2ESs + _ZN5spark5utils5RangeppEv 0 @@ -72,15 +72,15 @@ 0 - _ZN5spark5utils5RangeppEv + _ZN5spark5utils5Range7restartEv 0 - _ZN5spark5utils5Range7restartEv + _ZN5spark5utils5RangeC2ESs 0 - _ZN5spark5utils5Range8at_startEv + _ZN5spark5utils5RangeC2Eiii 0 diff --git a/coverage/index-sort-f.html b/coverage/index-sort-f.html index 0089a6b..23d52b7 100644 --- a/coverage/index-sort-f.html +++ b/coverage/index-sort-f.html @@ -31,18 +31,18 @@ final.info Lines: - 6 - 973 - 0.6 % + 2 + 809 + 0.2 % Date: 2015-11-30 Functions: - 5 - 168 - 3.0 % + 1 + 142 + 0.7 % @@ -70,22 +70,22 @@ Functions Sort by function coverage - dfe-snippets/include/dfesnippets + src/execution
0.0%
0.0 % - 0 / 20 + 0 / 29 0.0 % 0 / 6 - src/execution + dfe-snippets/include/dfesnippets
0.0%
0.0 % - 0 / 29 + 0 / 20 0.0 % 0 / 6 @@ -119,16 +119,6 @@ 0.0 % 0 / 12 - - tests - -
0.0%
- - 0.0 % - 0 / 160 - 0.0 % - 0 / 22 - include/Spark @@ -139,16 +129,6 @@ 1.0 % 1 / 99 - - unit-tests - -
100.0%
- - 100.0 % - 4 / 4 - 100.0 % - 4 / 4 -
diff --git a/coverage/index-sort-l.html b/coverage/index-sort-l.html index 358f93a..eaf5e41 100644 --- a/coverage/index-sort-l.html +++ b/coverage/index-sort-l.html @@ -31,18 +31,18 @@ final.info Lines: - 6 - 973 - 0.6 % + 2 + 809 + 0.2 % Date: 2015-11-30 Functions: - 5 - 168 - 3.0 % + 1 + 142 + 0.7 % @@ -109,16 +109,6 @@ 0.0 % 0 / 12 - - tests - -
0.0%
- - 0.0 % - 0 / 160 - 0.0 % - 0 / 22 - src/spmv/src @@ -139,16 +129,6 @@ 1.0 % 1 / 99 - - unit-tests - -
100.0%
- - 100.0 % - 4 / 4 - 100.0 % - 4 / 4 -
diff --git a/coverage/index.html b/coverage/index.html index 1c33653..56c7abd 100644 --- a/coverage/index.html +++ b/coverage/index.html @@ -31,18 +31,18 @@ final.info Lines: - 6 - 973 - 0.6 % + 2 + 809 + 0.2 % Date: 2015-11-30 Functions: - 5 - 168 - 3.0 % + 1 + 142 + 0.7 % @@ -129,26 +129,6 @@ 0.0 % 0 / 12 - - tests - -
0.0%
- - 0.0 % - 0 / 160 - 0.0 % - 0 / 22 - - - unit-tests - -
100.0%
- - 100.0 % - 4 / 4 - 100.0 % - 4 / 4 -
diff --git a/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html b/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html index dade33c..d5d8639 100644 --- a/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html +++ b/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html @@ -60,27 +60,27 @@ Hit count Sort by hit count - _ZN5spark21sparse_linear_solvers11EigenSolver5solveERKN5Eigen12SparseMatrixIdLi0EiEERKNS2_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + _Z41__static_initialization_and_destruction_0ii 0 - _Z7solveLURKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + _Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 - _GLOBAL__sub_I__Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + _Z7solveLURKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 - _Z41__static_initialization_and_destruction_0ii + _GLOBAL__sub_I__Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 - _Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + _Z7solveCGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 - _Z7solveCGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + _ZN5spark21sparse_linear_solvers11EigenSolver5solveERKN5Eigen12SparseMatrixIdLi0EiEERKNS2_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 diff --git a/coverage/src/dse/Dse.cpp.func-sort-c.html b/coverage/src/dse/Dse.cpp.func-sort-c.html index 8aa2fcf..c8c9fac 100644 --- a/coverage/src/dse/Dse.cpp.func-sort-c.html +++ b/coverage/src/dse/Dse.cpp.func-sort-c.html @@ -60,11 +60,11 @@ Hit count Sort by hit count - _Z41__static_initialization_and_destruction_0ii + _ZNK8SpmvHashclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEE 0 - _ZNK9SpmvEqualclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES6_ + _Z7dse_runSsPN5spark4spmv21SpmvArchitectureSpaceERKN5Eigen12SparseMatrixIdLi1EiEERKNS_3dse13DseParametersE 0 @@ -72,19 +72,19 @@ 0 - _ZN5spark3dse8SparkDse3runERKNS0_9BenchmarkERKNS0_13DseParametersE + _Z41__static_initialization_and_destruction_0ii 0 - _GLOBAL__sub_I__Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_ + _ZNK9SpmvEqualclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES6_ 0 - _ZNK8SpmvHashclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEE + _GLOBAL__sub_I__Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_ 0 - _Z7dse_runSsPN5spark4spmv21SpmvArchitectureSpaceERKN5Eigen12SparseMatrixIdLi1EiEERKNS_3dse13DseParametersE + _ZN5spark3dse8SparkDse3runERKNS0_9BenchmarkERKNS0_13DseParametersE 0 diff --git a/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html b/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html index 73061e3..44db13f 100644 --- a/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html +++ b/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html @@ -60,27 +60,27 @@ Hit count Sort by hit count - _GLOBAL__sub_I__ZN5spark10file_utils11child_filesESs + _ZN5spark9execution15SharedLibLoader12load_libraryESs 0 - _ZN5spark9execution15SharedLibLoader14unload_libraryEv + _ZN5spark9execution15SharedLibLoader19available_librariesEv 0 - _ZN5spark9execution15SharedLibLoaderC2ESs + _Z41__static_initialization_and_destruction_0ii 0 - _ZN5spark9execution15SharedLibLoader19available_librariesEv + _ZN5spark9execution15SharedLibLoader14unload_libraryEv 0 - _ZN5spark9execution15SharedLibLoader12load_libraryESs + _GLOBAL__sub_I__ZN5spark10file_utils11child_filesESs 0 - _Z41__static_initialization_and_destruction_0ii + _ZN5spark9execution15SharedLibLoaderC2ESs 0 diff --git a/coverage/src/main.cpp.func-sort-c.html b/coverage/src/main.cpp.func-sort-c.html index 2f207bb..597f284 100644 --- a/coverage/src/main.cpp.func-sort-c.html +++ b/coverage/src/main.cpp.func-sort-c.html @@ -68,7 +68,7 @@ 0 - _Z10loadParamsRKN5boost10filesystem4pathE + main 0 @@ -76,11 +76,11 @@ 0 - _GLOBAL__sub_I__Z10loadParamsRKN5boost10filesystem4pathE + _Z10loadParamsRKN5boost10filesystem4pathE 0 - main + _GLOBAL__sub_I__Z10loadParamsRKN5boost10filesystem4pathE 0 diff --git a/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html b/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html index 1484217..2f0f4e8 100644 --- a/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html +++ b/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html @@ -64,11 +64,7 @@ 0 - _Z10size_bytesIN5spark4spmv12indptr_valueEElRKSt6vectorIT_SaIS4_EE - 0 - - - _ZN5spark4spmv22SimpleSpmvArchitecture10preprocessERKN5Eigen12SparseMatrixIdLi1EiEE + _Z21writeDataForPartitionPN5spark7runtime27GeneratedSpmvImplementationEiRKNS_4spmv9PartitionERKSt6vectorIdSaIdEE 0 @@ -80,19 +76,19 @@ 0 - _ZN5spark4spmv22SimpleSpmvArchitecture11do_blockingERKN5Eigen12SparseMatrixIdLi1EiEEii + _Z10size_bytesIdElRKSt6vectorIT_SaIS1_EE 0 - _Z41__static_initialization_and_destruction_0ii + _ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii 0 - _ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii + _ZN5spark4spmv22SimpleSpmvArchitecture10preprocessERKN5Eigen12SparseMatrixIdLi1EiEE 0 - _Z10size_bytesIdElRKSt6vectorIT_SaIS1_EE + _Z5alignii 0 @@ -100,11 +96,15 @@ 0 - _Z5alignii + _Z10size_bytesIN5spark4spmv12indptr_valueEElRKSt6vectorIT_SaIS4_EE 0 - _Z21writeDataForPartitionPN5spark7runtime27GeneratedSpmvImplementationEiRKNS_4spmv9PartitionERKSt6vectorIdSaIdEE + _ZN5spark4spmv22SimpleSpmvArchitecture11do_blockingERKN5Eigen12SparseMatrixIdLi1EiEEii + 0 + + + _Z41__static_initialization_and_destruction_0ii 0 diff --git a/coverage/tests/test_architecture.cpp.func-sort-c.html b/coverage/tests/test_architecture.cpp.func-sort-c.html index 86b71b3..04ae043 100644 --- a/coverage/tests/test_architecture.cpp.func-sort-c.html +++ b/coverage/tests/test_architecture.cpp.func-sort-c.html @@ -60,15 +60,15 @@ Hit count Sort by hit count - _Z41__static_initialization_and_destruction_0ii + _GLOBAL__sub_I_main 0 - _GLOBAL__sub_I_main + main 0 - main + _Z41__static_initialization_and_destruction_0ii 0 diff --git a/coverage/tests/test_spmv.cpp.func-sort-c.html b/coverage/tests/test_spmv.cpp.func-sort-c.html index ee9afab..efee1f4 100644 --- a/coverage/tests/test_spmv.cpp.func-sort-c.html +++ b/coverage/tests/test_spmv.cpp.func-sort-c.html @@ -60,15 +60,15 @@ Hit count Sort by hit count - main + _Z41__static_initialization_and_destruction_0ii 0 - _Z41__static_initialization_and_destruction_0ii + _GLOBAL__sub_I__ZN11dfesnippets13numeric_utils12almost_equalEdd 0 - _GLOBAL__sub_I__ZN11dfesnippets13numeric_utils12almost_equalEdd + main 0 diff --git a/coverage/tests/test_utils.hpp.func-sort-c.html b/coverage/tests/test_utils.hpp.func-sort-c.html index 25314cb..56d702d 100644 --- a/coverage/tests/test_utils.hpp.func-sort-c.html +++ b/coverage/tests/test_utils.hpp.func-sort-c.html @@ -60,39 +60,39 @@ Hit count Sort by hit count - _ZN5spark4test20EigenMatrixGeneratorclEi + _ZN5spark4test7runTestESsRNS_21sparse_linear_solvers6SolverE 0 - _ZN5spark4test5checkERKSt6vectorIdSaIdEES5_ + _ZN5spark4test5checkERKN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEES5_ 0 - _ZN5spark4test20EigenMatrixGeneratorD2Ev + _ZN5spark4test21SimpleVectorGeneratorclEN5Eigen12SparseMatrixIdLi0EiEEi 0 - _ZN5spark4test21SimpleVectorGeneratorclEN5Eigen12SparseMatrixIdLi0EiEEi + _ZN5spark4test16print_mismatchesERKSt6vectorISt5tupleIIiddEESaIS3_EE 0 - _ZN5spark4test3oneEi + _ZN5spark4test20EigenMatrixGeneratorclEi 0 - _ZN5spark4test20EigenVectorGeneratorclEN5Eigen12SparseMatrixIdLi0EiEEi + _ZN5spark4test20EigenMatrixGeneratorD2Ev 0 - _ZN5spark4test5checkERKN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEES5_ + _ZN5spark4test4testINS0_20EigenMatrixGeneratorENS0_20EigenVectorGeneratorEEEiiT_T0_RNS_21sparse_linear_solvers6SolverE 0 - _ZN5spark4test16print_mismatchesERKSt6vectorISt5tupleIIiddEESaIS3_EE + _ZN5spark4test20EigenVectorGeneratorC2EN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 - _ZN5spark4test7runTestESsRNS_21sparse_linear_solvers6SolverE + _ZN5spark4test5checkERKSt6vectorIdSaIdEES5_ 0 @@ -100,23 +100,23 @@ 0 - _ZN5spark4test4testINS0_20EigenMatrixGeneratorENS0_20EigenVectorGeneratorEEEiiT_T0_RNS_21sparse_linear_solvers6SolverE + _ZN5spark4test20EigenVectorGeneratorD2Ev 0 - _ZN5spark4test20EigenMatrixGeneratorC2EN5Eigen12SparseMatrixIdLi0EiEE + _ZN5spark4test20EigenVectorGeneratorclEN5Eigen12SparseMatrixIdLi0EiEEi 0 - _ZN5spark4test20EigenVectorGeneratorD2Ev + _ZN5spark4test20EigenMatrixGeneratorC2EN5Eigen12SparseMatrixIdLi0EiEE 0 - _ZN5spark4test7runTestESsSsRNS_21sparse_linear_solvers6SolverE + _ZN5spark4test3oneEi 0 - _ZN5spark4test20EigenVectorGeneratorC2EN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + _ZN5spark4test7runTestESsSsRNS_21sparse_linear_solvers6SolverE 0 diff --git a/coverage/unit-tests/spmv_test.cpp.func-sort-c.html b/coverage/unit-tests/spmv_test.cpp.func-sort-c.html index 799cddc..9731d98 100644 --- a/coverage/unit-tests/spmv_test.cpp.func-sort-c.html +++ b/coverage/unit-tests/spmv_test.cpp.func-sort-c.html @@ -60,19 +60,19 @@ Hit count Sort by hit count - _GLOBAL__sub_I__Z14init_unit_testv + _ZL33logic_resource_usage_test_invokerv 1 - _Z41__static_initialization_and_destruction_0ii + _ZN25logic_resource_usage_test11test_methodEv 1 - _ZN25logic_resource_usage_test11test_methodEv + _Z41__static_initialization_and_destruction_0ii 1 - _ZL33logic_resource_usage_test_invokerv + _GLOBAL__sub_I__Z14init_unit_testv 1 From 410fd404c98e9ad034ceb60183ed1951ea854bbf Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Tue, 1 Dec 2015 13:29:20 +0000 Subject: [PATCH 09/23] Update coverage --- .../NumericUtils.hpp.func-sort-c.html | 20 +- .../dfesnippets/NumericUtils.hpp.func.html | 12 +- .../dfesnippets/NumericUtils.hpp.gcov.html | 20 +- .../dfesnippets/Timing.hpp.func-sort-c.html | 18 +- .../include/dfesnippets/Timing.hpp.func.html | 14 +- .../include/dfesnippets/Timing.hpp.gcov.html | 28 +- .../include/dfesnippets/index-sort-f.html | 34 +- .../include/dfesnippets/index-sort-l.html | 34 +- .../include/dfesnippets/index.html | 30 +- .../Spark/Converters.hpp.func-sort-c.html | 16 +- .../include/Spark/Converters.hpp.func.html | 16 +- .../include/Spark/Converters.hpp.gcov.html | 50 +-- .../include/Spark/Dse.hpp.func-sort-c.html | 28 +- coverage/include/Spark/Dse.hpp.func.html | 2 +- coverage/include/Spark/Dse.hpp.gcov.html | 2 +- .../Spark/Execution.hpp.func-sort-c.html | 76 ++++ .../include/Spark/Execution.hpp.func.html | 76 ++++ .../include/Spark/Execution.hpp.gcov.html | 104 ++++++ .../Spark/FileUtils.hpp.func-sort-c.html | 2 +- .../include/Spark/FileUtils.hpp.func.html | 2 +- .../include/Spark/FileUtils.hpp.gcov.html | 2 +- .../GeneratedImplSupport.hpp.func-sort-c.html | 42 +-- .../Spark/GeneratedImplSupport.hpp.func.html | 26 +- .../Spark/GeneratedImplSupport.hpp.gcov.html | 54 +-- .../include/Spark/Io.hpp.func-sort-c.html | 44 +-- coverage/include/Spark/Io.hpp.func.html | 24 +- coverage/include/Spark/Io.hpp.gcov.html | 130 +++---- .../include/Spark/Model.hpp.func-sort-c.html | 20 +- coverage/include/Spark/Model.hpp.func.html | 2 +- coverage/include/Spark/Model.hpp.gcov.html | 2 +- .../Spark/SimpleSpmv.hpp.func-sort-c.html | 98 +++-- .../include/Spark/SimpleSpmv.hpp.func.html | 44 +-- .../include/Spark/SimpleSpmv.hpp.gcov.html | 112 +++--- .../SparseLinearSolvers.hpp.func-sort-c.html | 6 +- .../Spark/SparseLinearSolvers.hpp.func.html | 2 +- .../Spark/SparseLinearSolvers.hpp.gcov.html | 2 +- .../Spark/SparseMatrix.hpp.func-sort-c.html | 14 +- .../include/Spark/SparseMatrix.hpp.func.html | 14 +- .../include/Spark/SparseMatrix.hpp.gcov.html | 14 +- .../include/Spark/Spmv.hpp.func-sort-c.html | 42 +-- coverage/include/Spark/Spmv.hpp.func.html | 20 +- coverage/include/Spark/Spmv.hpp.gcov.html | 28 +- .../include/Spark/Utils.hpp.func-sort-c.html | 10 +- coverage/include/Spark/Utils.hpp.func.html | 2 +- coverage/include/Spark/Utils.hpp.gcov.html | 2 +- coverage/include/Spark/index-sort-f.html | 112 +++--- coverage/include/Spark/index-sort-l.html | 112 +++--- coverage/include/Spark/index.html | 84 +++-- coverage/index-sort-f.html | 68 ++-- coverage/index-sort-l.html | 68 ++-- coverage/index.html | 54 +-- .../SparseLinearSolvers.cpp.func-sort-c.html | 22 +- .../src/SparseLinearSolvers.cpp.func.html | 14 +- .../src/SparseLinearSolvers.cpp.gcov.html | 12 +- coverage/src/dse/Dse.cpp.func-sort-c.html | 14 +- coverage/src/dse/Dse.cpp.func.html | 2 +- coverage/src/dse/Dse.cpp.gcov.html | 2 +- coverage/src/dse/index-sort-f.html | 2 +- coverage/src/dse/index-sort-l.html | 2 +- coverage/src/dse/index.html | 2 +- .../SharedLibLoader.cpp.func-sort-c.html | 12 +- .../execution/SharedLibLoader.cpp.func.html | 2 +- .../execution/SharedLibLoader.cpp.gcov.html | 2 +- coverage/src/execution/index-sort-f.html | 2 +- coverage/src/execution/index-sort-l.html | 2 +- coverage/src/execution/index.html | 2 +- coverage/src/index-sort-f.html | 26 +- coverage/src/index-sort-l.html | 26 +- coverage/src/index.html | 20 +- coverage/src/main.cpp.func-sort-c.html | 14 +- coverage/src/main.cpp.func.html | 2 +- coverage/src/main.cpp.gcov.html | 2 +- .../src/spmv/src/Spmv.cpp.func-sort-c.html | 54 +-- coverage/src/spmv/src/Spmv.cpp.func.html | 32 +- coverage/src/spmv/src/Spmv.cpp.gcov.html | 346 +++++++++--------- coverage/src/spmv/src/index-sort-f.html | 20 +- coverage/src/spmv/src/index-sort-l.html | 20 +- coverage/src/spmv/src/index.html | 20 +- 78 files changed, 1392 insertions(+), 1122 deletions(-) create mode 100644 coverage/include/Spark/Execution.hpp.func-sort-c.html create mode 100644 coverage/include/Spark/Execution.hpp.func.html create mode 100644 coverage/include/Spark/Execution.hpp.gcov.html diff --git a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func-sort-c.html b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func-sort-c.html index 3600c74..5065275 100644 --- a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func-sort-c.html +++ b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 5 11 - 0.0 % + 45.5 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 1 4 - 0.0 % + 25.0 % @@ -60,19 +60,19 @@ Hit count Sort by hit count - _ZN11dfesnippets13numeric_utils5alignEii - 0 + _ZN11dfesnippets13numeric_utils12almost_equalEdddd + 216657 - _ZN11dfesnippets13numeric_utils12almost_equalEdd + _ZN11dfesnippets13numeric_utils5alignEii 0 - _ZN11dfesnippets13numeric_utils12almost_equalEdddd + _ZN11dfesnippets13numeric_utils12almost_equalEddd 0 - _ZN11dfesnippets13numeric_utils12almost_equalEddd + _ZN11dfesnippets13numeric_utils12almost_equalEdd 0 diff --git a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func.html b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func.html index c5f7d57..e65d611 100644 --- a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func.html +++ b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 5 11 - 0.0 % + 45.5 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 1 4 - 0.0 % + 25.0 % @@ -69,7 +69,7 @@ _ZN11dfesnippets13numeric_utils12almost_equalEdddd - 0 + 216657 _ZN11dfesnippets13numeric_utils5alignEii diff --git a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.gcov.html b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.gcov.html index eb783e9..306da14 100644 --- a/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.gcov.html +++ b/coverage/dfe-snippets/include/dfesnippets/NumericUtils.hpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 5 11 - 0.0 % + 45.5 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 1 4 - 0.0 % + 25.0 % @@ -74,11 +74,11 @@ 12 0 : return std::abs(a - b) <= tol * std::abs(a); 13 : } 14 : - 15 0 : bool almost_equal(double a, double b, double rtol, double atol) { - 16 0 : double diff = std::abs(a - b); - 17 0 : if (diff < atol) - 18 0 : return true; - 19 0 : return (diff / std::abs(a) <= rtol) && (diff / std::abs(b) <= rtol); + 15 216657 : bool almost_equal(double a, double b, double rtol, double atol) { + 16 216657 : double diff = std::abs(a - b); + 17 216657 : if (diff < atol) + 18 195406 : return true; + 19 21251 : return (diff / std::abs(a) <= rtol) && (diff / std::abs(b) <= rtol); 20 : } 21 : 22 : /** Returns the smallest number greater than bytes that is multiple of k. */ diff --git a/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func-sort-c.html b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func-sort-c.html index 3cf8dba..2e0a3df 100644 --- a/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func-sort-c.html +++ b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 9 - 0.0 % + 9 + 100.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 2 - 0.0 % + 2 + 100.0 % @@ -60,12 +60,12 @@ Hit count Sort by hit count - _ZN11dfesnippets6timing10clock_diffENSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE - 0 + _ZN11dfesnippets6timing16print_clock_diffESsNSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE + 40 - _ZN11dfesnippets6timing16print_clock_diffESsNSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE - 0 + _ZN11dfesnippets6timing10clock_diffENSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE + 40
diff --git a/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func.html b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func.html index a987e40..770c43c 100644 --- a/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func.html +++ b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 9 - 0.0 % + 9 + 100.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 2 - 0.0 % + 2 + 100.0 % @@ -61,11 +61,11 @@ _ZN11dfesnippets6timing10clock_diffENSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE - 0 + 40 _ZN11dfesnippets6timing16print_clock_diffESsNSt6chrono10time_pointINS1_3_V212system_clockENS1_8durationIlSt5ratioILl1ELl1000000000EEEEEE - 0 + 40
diff --git a/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.gcov.html b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.gcov.html index 4996d30..0631c63 100644 --- a/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.gcov.html +++ b/coverage/dfe-snippets/include/dfesnippets/Timing.hpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 9 - 0.0 % + 9 + 100.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 2 - 0.0 % + 2 + 100.0 % @@ -70,23 +70,23 @@ 8 : namespace dfesnippets { 9 : namespace timing { 10 : - 11 0 : inline double clock_diff( + 11 40 : inline double clock_diff( 12 : std::chrono::high_resolution_clock::time_point start) { 13 : using namespace std::chrono; - 14 0 : auto end = std::chrono::high_resolution_clock::now(); - 15 0 : return duration_cast<duration<double> >(end - start).count(); + 14 40 : auto end = std::chrono::high_resolution_clock::now(); + 15 40 : return duration_cast<duration<double> >(end - start).count(); 16 : } 17 : 18 : /** Print the difference between now and start */ - 19 0 : inline void print_clock_diff( + 19 40 : inline void print_clock_diff( 20 : std::string item, 21 : std::chrono::high_resolution_clock::time_point start) { 22 : using namespace std::chrono; - 23 0 : auto end = std::chrono::high_resolution_clock::now(); - 24 0 : std::cout << item << " took "; - 25 0 : std::cout << duration_cast<duration<double> >(end - start).count(); - 26 0 : std::cout << " seconds." << std::endl; - 27 0 : } + 23 40 : auto end = std::chrono::high_resolution_clock::now(); + 24 40 : std::cout << item << " took "; + 25 40 : std::cout << duration_cast<duration<double> >(end - start).count(); + 26 40 : std::cout << " seconds." << std::endl; + 27 40 : } 28 : 29 : /** Print the difference between end and start */ 30 : inline void print_clock_diff(std::string item, diff --git a/coverage/dfe-snippets/include/dfesnippets/index-sort-f.html b/coverage/dfe-snippets/include/dfesnippets/index-sort-f.html index b88e472..3c94f45 100644 --- a/coverage/dfe-snippets/include/dfesnippets/index-sort-f.html +++ b/coverage/dfe-snippets/include/dfesnippets/index-sort-f.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 14 20 - 0.0 % + 70.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 3 6 - 0.0 % + 50.0 % @@ -70,24 +70,24 @@ Functions Sort by function coverage - Timing.hpp + NumericUtils.hpp -
0.0%
+
45.5%45.5%
- 0.0 % - 0 / 9 - 0.0 % - 0 / 2 + 45.5 % + 5 / 11 + 25.0 % + 1 / 4 - NumericUtils.hpp + Timing.hpp -
0.0%
+
100.0%
- 0.0 % - 0 / 11 - 0.0 % - 0 / 4 + 100.0 % + 9 / 9 + 100.0 % + 2 / 2 diff --git a/coverage/dfe-snippets/include/dfesnippets/index-sort-l.html b/coverage/dfe-snippets/include/dfesnippets/index-sort-l.html index e57d5d5..796fb1c 100644 --- a/coverage/dfe-snippets/include/dfesnippets/index-sort-l.html +++ b/coverage/dfe-snippets/include/dfesnippets/index-sort-l.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 14 20 - 0.0 % + 70.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 3 6 - 0.0 % + 50.0 % @@ -70,24 +70,24 @@ Functions Sort by function coverage - Timing.hpp + NumericUtils.hpp -
0.0%
+
45.5%45.5%
- 0.0 % - 0 / 9 - 0.0 % - 0 / 2 + 45.5 % + 5 / 11 + 25.0 % + 1 / 4 - NumericUtils.hpp + Timing.hpp -
0.0%
+
100.0%
- 0.0 % - 0 / 11 - 0.0 % - 0 / 4 + 100.0 % + 9 / 9 + 100.0 % + 2 / 2 diff --git a/coverage/dfe-snippets/include/dfesnippets/index.html b/coverage/dfe-snippets/include/dfesnippets/index.html index 0f8c57c..8791f40 100644 --- a/coverage/dfe-snippets/include/dfesnippets/index.html +++ b/coverage/dfe-snippets/include/dfesnippets/index.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 14 20 - 0.0 % + 70.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 3 6 - 0.0 % + 50.0 % @@ -72,22 +72,22 @@ NumericUtils.hpp -
0.0%
+
45.5%45.5%
- 0.0 % - 0 / 11 - 0.0 % - 0 / 4 + 45.5 % + 5 / 11 + 25.0 % + 1 / 4 Timing.hpp -
0.0%
+
100.0%
- 0.0 % - 0 / 9 - 0.0 % - 0 / 2 + 100.0 % + 9 / 9 + 100.0 % + 2 / 2 diff --git a/coverage/include/Spark/Converters.hpp.func-sort-c.html b/coverage/include/Spark/Converters.hpp.func-sort-c.html index e433835..5916a39 100644 --- a/coverage/include/Spark/Converters.hpp.func-sort-c.html +++ b/coverage/include/Spark/Converters.hpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 20 - 0.0 % + 20 + 100.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 3 - 0.0 % + 3 + 100.0 % @@ -61,15 +61,15 @@ _ZN5spark10converters22eigenVectorToStdVectorERKN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE - 0 + 120 _ZN5spark10converters14tripletToEigenENS_6sparse14SparkCooMatrixIdEE - 0 + 40 _ZN5spark10converters16stdvectorToEigenESt6vectorIdSaIdEE - 0 + 40
diff --git a/coverage/include/Spark/Converters.hpp.func.html b/coverage/include/Spark/Converters.hpp.func.html index 2227d24..2331f53 100644 --- a/coverage/include/Spark/Converters.hpp.func.html +++ b/coverage/include/Spark/Converters.hpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 20 - 0.0 % + 20 + 100.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 3 - 0.0 % + 3 + 100.0 % @@ -61,15 +61,15 @@ _ZN5spark10converters14tripletToEigenENS_6sparse14SparkCooMatrixIdEE - 0 + 40 _ZN5spark10converters16stdvectorToEigenESt6vectorIdSaIdEE - 0 + 40 _ZN5spark10converters22eigenVectorToStdVectorERKN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE - 0 + 120
diff --git a/coverage/include/Spark/Converters.hpp.gcov.html b/coverage/include/Spark/Converters.hpp.gcov.html index 7e13754..4f524de 100644 --- a/coverage/include/Spark/Converters.hpp.gcov.html +++ b/coverage/include/Spark/Converters.hpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 20 - 0.0 % + 20 + 100.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 3 - 0.0 % + 3 + 100.0 % @@ -76,32 +76,32 @@ 14 : using EigenSparseMatrix = std::unique_ptr<Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>>; 15 : 16 : // convert a Spark COO matrix to an Eigen Sparse Matrix - 17 0 : inline EigenSparseMatrix tripletToEigen(spark::sparse::SparkCooMatrix<double> mat) { - 18 0 : auto coo = mat.data; - 19 0 : EigenSparseMatrix m(new Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>(mat.n, mat.m)); - 20 0 : std::vector<Eigen::Triplet<double>> trips; - 21 0 : for (size_t i = 0; i < coo.size(); i++) + 17 40 : inline EigenSparseMatrix tripletToEigen(spark::sparse::SparkCooMatrix<double> mat) { + 18 40 : auto coo = mat.data; + 19 40 : EigenSparseMatrix m(new Eigen::SparseMatrix<double, Eigen::RowMajor, int32_t>(mat.n, mat.m)); + 20 80 : std::vector<Eigen::Triplet<double>> trips; + 21 976610 : for (size_t i = 0; i < coo.size(); i++) 22 : trips.push_back( 23 : Eigen::Triplet<double>( - 24 0 : std::get<0>(coo[i]), - 25 0 : std::get<1>(coo[i]), - 26 0 : std::get<2>(coo[i]))); - 27 0 : m->setFromTriplets(trips.begin(), trips.end()); - 28 0 : return m; + 24 976570 : std::get<0>(coo[i]), + 25 976570 : std::get<1>(coo[i]), + 26 1953140 : std::get<2>(coo[i]))); + 27 40 : m->setFromTriplets(trips.begin(), trips.end()); + 28 80 : return m; 29 : } 30 : - 31 0 : inline Eigen::VectorXd stdvectorToEigen(std::vector<double> v) { - 32 0 : Eigen::VectorXd m(v.size()); - 33 0 : for (size_t i = 0; i < v.size(); i++) - 34 0 : m[i] = v[i]; - 35 0 : return m; + 31 40 : inline Eigen::VectorXd stdvectorToEigen(std::vector<double> v) { + 32 40 : Eigen::VectorXd m(v.size()); + 33 216697 : for (size_t i = 0; i < v.size(); i++) + 34 216657 : m[i] = v[i]; + 35 40 : return m; 36 : } 37 : - 38 0 : inline std::vector<double> eigenVectorToStdVector(const Eigen::VectorXd& v) { - 39 0 : std::vector<double> m(v.size()); - 40 0 : for (int i = 0; i < v.size(); i++) - 41 0 : m[i] = v[i]; - 42 0 : return m; + 38 120 : inline std::vector<double> eigenVectorToStdVector(const Eigen::VectorXd& v) { + 39 120 : std::vector<double> m(v.size()); + 40 650091 : for (int i = 0; i < v.size(); i++) + 41 649971 : m[i] = v[i]; + 42 120 : return m; 43 : } 44 : 45 : } diff --git a/coverage/include/Spark/Dse.hpp.func-sort-c.html b/coverage/include/Spark/Dse.hpp.func-sort-c.html index 74772d1..35dc937 100644 --- a/coverage/include/Spark/Dse.hpp.func-sort-c.html +++ b/coverage/include/Spark/Dse.hpp.func-sort-c.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 @@ -60,55 +60,55 @@ Hit count Sort by hit count - _ZN5spark3dse9DseResultC2EOS1_ + _ZN5spark3dse9DseResultC2ERKS1_ 0 - _ZNK5spark3dse9Benchmark18get_benchmark_sizeEv + _ZNK5spark3dse9Benchmark15get_matrix_pathEi 0 - _ZN5spark3dse9DseResultD2Ev + _ZN5spark3dse9BenchmarkD2Ev 0 - _ZN5spark3dse9Benchmark15add_matrix_pathESs + _ZN5spark3dse8SparkDseC2Ev 0 - _ZN5spark3dse9DseResultC2ESt10shared_ptrINS_4spmv16SpmvArchitectureEE + _ZN5spark3dse9BenchmarkC2Ev 0 - _ZN5spark3dse9BenchmarkC2Ev + _ZN5spark3dse13DseParametersC2Ev 0 - _ZN5spark3dse8SparkDseC2Ev + _ZN5spark3dse9Benchmark15add_matrix_pathESs 0 - _ZNK5spark3dse9Benchmark15get_matrix_pathEi + _ZN5spark3dse9DseResultD2Ev 0 - _ZN5spark3dse13DseParametersC2Ev + _ZN5spark3dselsERSoRNS0_9BenchmarkE 0 - _ZN5spark3dselsERSoRNS0_13DseParametersE + _ZN5spark3dse9DseResultC2EOS1_ 0 - _ZN5spark3dse9DseResultC2ERKS1_ + _ZNK5spark3dse9Benchmark18get_benchmark_sizeEv 0 - _ZN5spark3dselsERSoRNS0_9BenchmarkE + _ZN5spark3dselsERSoRNS0_13DseParametersE 0 - _ZN5spark3dse9BenchmarkD2Ev + _ZN5spark3dse9DseResultC2ESt10shared_ptrINS_4spmv16SpmvArchitectureEE 0 diff --git a/coverage/include/Spark/Dse.hpp.func.html b/coverage/include/Spark/Dse.hpp.func.html index 34f9d49..eade15c 100644 --- a/coverage/include/Spark/Dse.hpp.func.html +++ b/coverage/include/Spark/Dse.hpp.func.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/include/Spark/Dse.hpp.gcov.html b/coverage/include/Spark/Dse.hpp.gcov.html index 7b4ce38..fdf6edf 100644 --- a/coverage/include/Spark/Dse.hpp.gcov.html +++ b/coverage/include/Spark/Dse.hpp.gcov.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/include/Spark/Execution.hpp.func-sort-c.html b/coverage/include/Spark/Execution.hpp.func-sort-c.html new file mode 100644 index 0000000..3cf3e63 --- /dev/null +++ b/coverage/include/Spark/Execution.hpp.func-sort-c.html @@ -0,0 +1,76 @@ + + + + + + + LCOV - final.info - include/Spark/Execution.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Execution.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:010.0 %
Date:2015-12-01Functions:010.0 %
+
+ +
+ + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark9execution15SharedLibLoaderD2Ev0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Execution.hpp.func.html b/coverage/include/Spark/Execution.hpp.func.html new file mode 100644 index 0000000..66a9f64 --- /dev/null +++ b/coverage/include/Spark/Execution.hpp.func.html @@ -0,0 +1,76 @@ + + + + + + + LCOV - final.info - include/Spark/Execution.hpp - functions + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Execution.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:010.0 %
Date:2015-12-01Functions:010.0 %
+
+ +
+ + + + + + + + + + +

Function Name Sort by function nameHit count Sort by hit count
_ZN5spark9execution15SharedLibLoaderD2Ev0
+
+
+ + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/Execution.hpp.gcov.html b/coverage/include/Spark/Execution.hpp.gcov.html new file mode 100644 index 0000000..b5e75ff --- /dev/null +++ b/coverage/include/Spark/Execution.hpp.gcov.html @@ -0,0 +1,104 @@ + + + + + + + LCOV - final.info - include/Spark/Execution.hpp + + + + + + + + + + + + + + +
LCOV - code coverage report
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Current view:top level - include/Spark - Execution.hpp (source / functions)HitTotalCoverage
Test:final.infoLines:010.0 %
Date:2015-12-01Functions:010.0 %
+
+ + + + + + + + +

+
          Line data    Source code
+
+       1             : #ifndef EXECUTION_H
+       2             : 
+       3             : #define EXECUTION_H
+       4             : 
+       5             : #include <string>
+       6             : #include <vector>
+       7             : 
+       8             : namespace spark {
+       9             :   namespace execution {
+      10             :     // loads and manages shared libraries at runtime
+      11           0 :     class SharedLibLoader {
+      12             :       std::string libPath;
+      13             :       // a handle to the currently loaded library, or NULL if no library is
+      14             :       // loaded.
+      15             :       void* handle;
+      16             :       public:
+      17             :       SharedLibLoader(std::string _libDirectoryPath);
+      18             : 
+      19             :       std::vector<std::string> available_libraries();
+      20             : 
+      21             :       bool load_library(std::string path);
+      22             : 
+      23             :       bool unload_library();
+      24             :     };
+      25             :   }
+      26             : }
+      27             : 
+      28             : #endif /* end of include guard: EXECUTION_H */
+
+
+
+ + + + +
Generated by: LCOV version 1.10
+
+ + + diff --git a/coverage/include/Spark/FileUtils.hpp.func-sort-c.html b/coverage/include/Spark/FileUtils.hpp.func-sort-c.html index 2847e9a..9dbb12f 100644 --- a/coverage/include/Spark/FileUtils.hpp.func-sort-c.html +++ b/coverage/include/Spark/FileUtils.hpp.func-sort-c.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/include/Spark/FileUtils.hpp.func.html b/coverage/include/Spark/FileUtils.hpp.func.html index 980d364..e2d70fa 100644 --- a/coverage/include/Spark/FileUtils.hpp.func.html +++ b/coverage/include/Spark/FileUtils.hpp.func.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/include/Spark/FileUtils.hpp.gcov.html b/coverage/include/Spark/FileUtils.hpp.gcov.html index c5546fb..42dd8dd 100644 --- a/coverage/include/Spark/FileUtils.hpp.gcov.html +++ b/coverage/include/Spark/FileUtils.hpp.gcov.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html b/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html index 5196ee8..4688d1f 100644 --- a/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html +++ b/coverage/include/Spark/GeneratedImplSupport.hpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 22 25 - 0.0 % + 88.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 8 11 - 0.0 % + 72.7 % @@ -60,43 +60,43 @@ Hit count Sort by hit count - _ZN5spark7runtime24SpmvImplementationLoader18architectureWithIdEi - 0 + _ZN5spark7runtime27GeneratedSpmvImplementation7maxRowsEv + 80 _ZN5spark7runtime24SpmvImplementationLoaderD2Ev - 0 + 40 - _ZN5spark7runtime24SpmvImplementationLoaderD0Ev - 0 + _ZN5spark7runtime20ImplementationLoaderD2Ev + 40 - _ZN5spark7runtime27GeneratedSpmvImplementation8numPipesEv - 0 + _ZN5spark7runtime27GeneratedSpmvImplementation10inputWidthEv + 40 - _ZN5spark7runtime20ImplementationLoaderD2Ev - 0 + _ZN5spark7runtime24SpmvImplementationLoader22architectureWithParamsEi + 40 _ZN5spark7runtime27GeneratedSpmvImplementation9cacheSizeEv - 0 + 40 - _ZN5spark7runtime24SpmvImplementationLoader22architectureWithParamsEi - 0 + _ZN5spark7runtime27GeneratedSpmvImplementation23getDramReductionEnabledEv + 40 - _ZN5spark7runtime27GeneratedSpmvImplementation10inputWidthEv - 0 + _ZN5spark7runtime27GeneratedSpmvImplementation8numPipesEv + 40 - _ZN5spark7runtime27GeneratedSpmvImplementation23getDramReductionEnabledEv + _ZN5spark7runtime24SpmvImplementationLoader18architectureWithIdEi 0 - _ZN5spark7runtime27GeneratedSpmvImplementation7maxRowsEv + _ZN5spark7runtime24SpmvImplementationLoaderD0Ev 0 diff --git a/coverage/include/Spark/GeneratedImplSupport.hpp.func.html b/coverage/include/Spark/GeneratedImplSupport.hpp.func.html index f77ceb4..dbc07bf 100644 --- a/coverage/include/Spark/GeneratedImplSupport.hpp.func.html +++ b/coverage/include/Spark/GeneratedImplSupport.hpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 22 25 - 0.0 % + 88.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 8 11 - 0.0 % + 72.7 % @@ -65,7 +65,7 @@ _ZN5spark7runtime20ImplementationLoaderD2Ev - 0 + 40 _ZN5spark7runtime24SpmvImplementationLoader18architectureWithIdEi @@ -73,7 +73,7 @@ _ZN5spark7runtime24SpmvImplementationLoader22architectureWithParamsEi - 0 + 40 _ZN5spark7runtime24SpmvImplementationLoaderD0Ev @@ -81,27 +81,27 @@ _ZN5spark7runtime24SpmvImplementationLoaderD2Ev - 0 + 40 _ZN5spark7runtime27GeneratedSpmvImplementation10inputWidthEv - 0 + 40 _ZN5spark7runtime27GeneratedSpmvImplementation23getDramReductionEnabledEv - 0 + 40 _ZN5spark7runtime27GeneratedSpmvImplementation7maxRowsEv - 0 + 80 _ZN5spark7runtime27GeneratedSpmvImplementation8numPipesEv - 0 + 40 _ZN5spark7runtime27GeneratedSpmvImplementation9cacheSizeEv - 0 + 40
diff --git a/coverage/include/Spark/GeneratedImplSupport.hpp.gcov.html b/coverage/include/Spark/GeneratedImplSupport.hpp.gcov.html index f9964c7..e6d633a 100644 --- a/coverage/include/Spark/GeneratedImplSupport.hpp.gcov.html +++ b/coverage/include/Spark/GeneratedImplSupport.hpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 22 25 - 0.0 % + 88.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 8 11 - 0.0 % + 72.7 % @@ -131,24 +131,24 @@ 69 : virtual ~GeneratedSpmvImplementation() { 70 : } 71 : - 72 0 : int maxRows() { - 73 0 : return max_rows; + 72 80 : int maxRows() { + 73 80 : return max_rows; 74 : } 75 : - 76 0 : int numPipes() { - 77 0 : return num_pipes; + 76 40 : int numPipes() { + 77 40 : return num_pipes; 78 : } 79 : - 80 0 : int cacheSize() { - 81 0 : return cache_size; + 80 40 : int cacheSize() { + 81 40 : return cache_size; 82 : } 83 : - 84 0 : int inputWidth() { - 85 0 : return input_width; + 84 40 : int inputWidth() { + 85 40 : return input_width; 86 : } 87 : - 88 0 : bool getDramReductionEnabled() { - 89 0 : return dram_reduction_enabled == 1; + 88 40 : bool getDramReductionEnabled() { + 89 40 : return dram_reduction_enabled == 1; 90 : } 91 : 92 : virtual void Spmv( @@ -284,15 +284,15 @@ 222 : public: 223 : ImplementationLoader() {} 224 : - 225 0 : virtual ~ImplementationLoader() { - 226 0 : for (const auto& s : impls) { - 227 0 : delete s; + 225 80 : virtual ~ImplementationLoader() { + 226 80 : for (const auto& s : impls) { + 227 40 : delete s; 228 : } - 229 0 : } + 229 40 : } 230 : }; 231 : 232 : // provide interface for SpmvImplementation loader - 233 0 : class SpmvImplementationLoader : public ImplementationLoader { + 233 40 : class SpmvImplementationLoader : public ImplementationLoader { 234 : public: 235 : SpmvImplementationLoader(); 236 : @@ -300,16 +300,16 @@ 238 : * Load the generated spmv implementation which supports the given number 239 : * of rows. If more exists, picks the one with smallest maxRows. 240 : */ - 241 0 : GeneratedSpmvImplementation* architectureWithParams(int maxRows) { - 242 0 : GeneratedSpmvImplementation* bestArch = nullptr; - 243 0 : for (const auto& a : this->impls) { - 244 0 : GeneratedSpmvImplementation* simpl = static_cast<GeneratedSpmvImplementation*>(a); - 245 0 : if (simpl->maxRows() > maxRows && + 241 40 : GeneratedSpmvImplementation* architectureWithParams(int maxRows) { + 242 40 : GeneratedSpmvImplementation* bestArch = nullptr; + 243 80 : for (const auto& a : this->impls) { + 244 40 : GeneratedSpmvImplementation* simpl = static_cast<GeneratedSpmvImplementation*>(a); + 245 80 : if (simpl->maxRows() > maxRows && 246 0 : (!bestArch || simpl->maxRows() < bestArch->maxRows())) { - 247 0 : bestArch = simpl; + 247 40 : bestArch = simpl; 248 : } 249 : } - 250 0 : return bestArch; + 250 40 : return bestArch; 251 : } 252 : 253 0 : GeneratedSpmvImplementation* architectureWithId(int id) { diff --git a/coverage/include/Spark/Io.hpp.func-sort-c.html b/coverage/include/Spark/Io.hpp.func-sort-c.html index aaa5165..6bcaee6 100644 --- a/coverage/include/Spark/Io.hpp.func-sort-c.html +++ b/coverage/include/Spark/Io.hpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 60 86 - 0.0 % + 69.8 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 7 10 - 0.0 % + 70.0 % @@ -60,43 +60,43 @@ Hit count Sort by hit count - _ZN5spark2io8MmReaderIdE7mmparseESs - 0 + _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENKUlSt5tupleIIiidEES4_E_clES4_S4_ + 20956167 - _ZN5spark2io8MmReaderIdED0Ev - 0 + _ZN5spark2io8MmReaderIdE7mmparseESs + 768597 - _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENUlSt5tupleIIiidEES4_E_4_FUNES4_S4_ - 0 + _ZN5spark2io8MmReaderIdE11parseHeaderESs + 40 - _ZN5spark2io8MmReaderIdEC2ESs - 0 + _ZN5spark2io8MmReaderIdE11parseHeaderEb + 40 - _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENKUlSt5tupleIIiidEES4_E_clES4_S4_ - 0 + _ZN5spark2io8MmReaderIdED2Ev + 40 - _ZN5spark2io8MmReaderIdE10readVectorEv - 0 + _ZN5spark2io8MmReaderIdE12mmreadMatrixESs + 40 - _ZN5spark2io8MmReaderIdE11parseHeaderEb - 0 + _ZN5spark2io8MmReaderIdEC2ESs + 40 - _ZN5spark2io8MmReaderIdE11parseHeaderESs + _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENUlSt5tupleIIiidEES4_E_4_FUNES4_S4_ 0 - _ZN5spark2io8MmReaderIdED2Ev + _ZN5spark2io8MmReaderIdED0Ev 0 - _ZN5spark2io8MmReaderIdE12mmreadMatrixESs + _ZN5spark2io8MmReaderIdE10readVectorEv 0 diff --git a/coverage/include/Spark/Io.hpp.func.html b/coverage/include/Spark/Io.hpp.func.html index 0e78dea..3e60868 100644 --- a/coverage/include/Spark/Io.hpp.func.html +++ b/coverage/include/Spark/Io.hpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 60 86 - 0.0 % + 69.8 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 7 10 - 0.0 % + 70.0 % @@ -65,23 +65,23 @@ _ZN5spark2io8MmReaderIdE11parseHeaderESs - 0 + 40 _ZN5spark2io8MmReaderIdE11parseHeaderEb - 0 + 40 _ZN5spark2io8MmReaderIdE12mmreadMatrixESs - 0 + 40 _ZN5spark2io8MmReaderIdE7mmparseESs - 0 + 768597 _ZN5spark2io8MmReaderIdEC2ESs - 0 + 40 _ZN5spark2io8MmReaderIdED0Ev @@ -89,11 +89,11 @@ _ZN5spark2io8MmReaderIdED2Ev - 0 + 40 _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENKUlSt5tupleIIiidEES4_E_clES4_S4_ - 0 + 20956167 _ZZN5spark2io8MmReaderIdE12mmreadMatrixESsENUlSt5tupleIIiidEES4_E_4_FUNES4_S4_ diff --git a/coverage/include/Spark/Io.hpp.gcov.html b/coverage/include/Spark/Io.hpp.gcov.html index 667abcd..96de8fb 100644 --- a/coverage/include/Spark/Io.hpp.gcov.html +++ b/coverage/include/Spark/Io.hpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 60 86 - 0.0 % + 69.8 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 7 10 - 0.0 % + 70.0 % @@ -87,76 +87,76 @@ 25 : using SparseMatrix = spark::sparse::SparkCooMatrix<value_type>; 26 : using CoordType = typename SparseMatrix::CoordType; 27 : - 28 0 : typename SparseMatrix::CoordType mmparse(const std::string line) { - 29 0 : std::stringstream ss{line}; + 28 768597 : typename SparseMatrix::CoordType mmparse(const std::string line) { + 29 768597 : std::stringstream ss{line}; 30 : int x, y; 31 : value_type val; - 32 0 : ss >> x >> y >> val; - 33 0 : return std::make_tuple(x - 1, y - 1, val); + 32 768597 : ss >> x >> y >> val; + 33 768597 : return std::make_tuple(x - 1, y - 1, val); 34 : } 35 : - 36 0 : void parseHeader(std::string line) { + 36 40 : void parseHeader(std::string line) { 37 : // is this dense / sparse ? - 38 0 : sparse = true; - 39 0 : if (line.find("coordinate") != std::string::npos) { - 40 0 : sparse = true; + 38 40 : sparse = true; + 39 40 : if (line.find("coordinate") != std::string::npos) { + 40 40 : sparse = true; 41 0 : } else if (line.find("array") != std::string::npos) { 42 0 : sparse = false; 43 : } else { 44 0 : throw std::invalid_argument("Cannot parse header, requires either 'coordinate' or 'matrix' type"); 45 : } 46 : - 47 0 : if (line[0] =='%' && line[1] == '%') { - 48 0 : if (line.find("matrix") != std::string::npos) { - 49 0 : symmetric = line.find("symmetric") != std::string::npos; + 47 40 : if (line[0] =='%' && line[1] == '%') { + 48 38 : if (line.find("matrix") != std::string::npos) { + 49 38 : symmetric = line.find("symmetric") != std::string::npos; 50 : } else 51 0 : throw std::invalid_argument("Unsupported file type: " + line); 52 : } - 53 0 : } + 53 40 : } 54 : - 55 0 : bool parseHeader(bool pprint=false) { - 56 0 : std::string line; - 57 0 : if (!getline(*f, line)) + 55 40 : bool parseHeader(bool pprint=false) { + 56 40 : std::string line; + 57 40 : if (!getline(*f, line)) 58 0 : throw std::invalid_argument("File " + path + " is empty"); 59 : - 60 0 : parseHeader(line); + 60 40 : parseHeader(line); 61 : 62 : // skip comments - 63 0 : while (getline(*f, line) && line[0] == '%') - 64 0 : continue; + 63 193 : while (getline(*f, line) && line[0] == '%') + 64 113 : continue; 65 : 66 : // read the dimensions - 67 0 : std::stringstream ss; - 68 0 : ss << line; - 69 0 : ss >> nrows >> ncols; - 70 0 : if (sparse) - 71 0 : ss >> nnzs; - 72 0 : matrix = ncols > 1; + 67 80 : std::stringstream ss; + 68 40 : ss << line; + 69 40 : ss >> nrows >> ncols; + 70 40 : if (sparse) + 71 40 : ss >> nnzs; + 72 40 : matrix = ncols > 1; 73 : - 74 0 : if (pprint) { + 74 40 : if (pprint) { 75 0 : std::cout << "sparse: " << sparse << std::endl; 76 0 : std::cout << "symmetric: " << symmetric << std::endl; 77 0 : std::cout << "matrix: " << matrix << std::endl; 78 0 : std::cout << "ncols: " << ncols << std::endl; 79 0 : std::cout << "nrows: " << nrows << std::endl; 80 0 : std::cout << "nnzs: " << nnzs << std::endl; - 81 0 : } - 82 0 : } + 81 40 : } + 82 40 : } 83 : 84 : std::ifstream* f; 85 : std::string path; 86 : 87 : public: 88 : - 89 0 : MmReader(std::string _path) : path(_path) { - 90 0 : f = new std::ifstream{_path}; - 91 0 : if (!f->is_open()) + 89 40 : MmReader(std::string _path) : path(_path) { + 90 40 : f = new std::ifstream{_path}; + 91 40 : if (!f->is_open()) 92 0 : throw std::invalid_argument("Could not open file path " + path); - 93 0 : } + 93 40 : } 94 : - 95 0 : virtual ~MmReader() { - 96 0 : delete f; - 97 0 : } + 95 40 : virtual ~MmReader() { + 96 40 : delete f; + 97 80 : } 98 : 99 0 : std::vector<double> readVector() { 100 0 : parseHeader(); @@ -193,42 +193,42 @@ 131 : // - the values will be adjusted to 0 based indexing 132 : // - for symmetric matrices, the symmetric entries are also included 133 : // - Triplets will be sorted in lexicographical order of their coordinates (row, column) - 134 0 : spark::sparse::SparkCooMatrix<value_type> mmreadMatrix(std::string path) { - 135 0 : parseHeader(); + 134 40 : spark::sparse::SparkCooMatrix<value_type> mmreadMatrix(std::string path) { + 135 40 : parseHeader(); 136 : - 137 0 : if (!matrix) + 137 40 : if (!matrix) 138 0 : throw std::invalid_argument("Matrix has only one column ==> Use readVector"); 139 : 140 : // skip comments - 141 0 : std::vector<CoordType> values; - 142 0 : std::string line; - 143 0 : for (int i = 0; i < nnzs; i++) { - 144 0 : if (!getline(*f, line)) + 141 40 : std::vector<CoordType> values; + 142 80 : std::string line; + 143 768637 : for (int i = 0; i < nnzs; i++) { + 144 768597 : if (!getline(*f, line)) 145 0 : throw std::invalid_argument("File has less than given nonzeros!"); - 146 0 : auto tpl = mmparse(line); - 147 0 : values.push_back(tpl); - 148 0 : auto row = std::get<0>(tpl); - 149 0 : auto col = std::get<1>(tpl); - 150 0 : if (symmetric && row != col) - 151 0 : values.push_back( + 146 768597 : auto tpl = mmparse(line); + 147 768597 : values.push_back(tpl); + 148 768597 : auto row = std::get<0>(tpl); + 149 768597 : auto col = std::get<1>(tpl); + 150 768597 : if (symmetric && row != col) + 151 207973 : values.push_back( 152 : std::make_tuple( - 153 0 : std::get<1>(tpl), - 154 0 : std::get<0>(tpl), - 155 0 : std::get<2>(tpl))); + 153 207973 : std::get<1>(tpl), + 154 207973 : std::get<0>(tpl), + 155 207973 : std::get<2>(tpl))); 156 : } 157 : - 158 0 : auto start = std::chrono::high_resolution_clock::now(); - 159 0 : std::sort(values.begin(), values.end(), - 160 0 : [](CoordType x, CoordType y) { + 158 40 : auto start = std::chrono::high_resolution_clock::now(); + 159 40 : std::sort(values.begin(), values.end(), + 160 20956167 : [](CoordType x, CoordType y) { 161 : return - 162 0 : std::get<0>(x) < std::get<0>(y) || - 163 0 : (std::get<0>(x) == std::get<0>(y) && std::get<1>(x) < std::get<1>(y)); - 164 0 : }); - 165 0 : dfesnippets::timing::print_clock_diff("Sorting took: ", start); + 162 41912334 : std::get<0>(x) < std::get<0>(y) || + 163 22633174 : (std::get<0>(x) == std::get<0>(y) && std::get<1>(x) < std::get<1>(y)); + 164 64545588 : }); + 165 40 : dfesnippets::timing::print_clock_diff("Sorting took: ", start); 166 : - 167 0 : spark::sparse::SparkCooMatrix<value_type> m(nrows, ncols); - 168 0 : m.data = values; - 169 0 : return m; + 167 40 : spark::sparse::SparkCooMatrix<value_type> m(nrows, ncols); + 168 40 : m.data = values; + 169 80 : return m; 170 : } 171 : }; 172 : } diff --git a/coverage/include/Spark/Model.hpp.func-sort-c.html b/coverage/include/Spark/Model.hpp.func-sort-c.html index 5967b00..14de232 100644 --- a/coverage/include/Spark/Model.hpp.func-sort-c.html +++ b/coverage/include/Spark/Model.hpp.func-sort-c.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 1 @@ -64,39 +64,39 @@ 1 - _ZNK5spark5model18LogicResourceUsageplERKS1_ + _ZN5spark5model18LogicResourceUsage9to_stringEv 0 - _ZNK5spark5model24ImplementationParametersltERKS1_ + _ZN5spark5model24ImplementationParametersC2ERKNS0_18LogicResourceUsageEd 0 - _ZN5spark5model24ImplementationParametersC2ERKNS0_18LogicResourceUsageEd + _ZNK5spark5model18LogicResourceUsagemlEi 0 - _ZN5spark5model18LogicResourceUsageC2ERKS1_ + _ZNK5spark5model18LogicResourceUsageplERKS1_ 0 - _ZN5spark5model24ImplementationParameters9to_stringEv + _ZN5spark5model18LogicResourceUsageC2ERKS1_ 0 - _ZNK5spark5model18LogicResourceUsageltERKS1_ + _ZNK5spark5model24ImplementationParametersltERKS1_ 0 - _ZN5spark5model18LogicResourceUsage9to_stringEv + _ZNK5spark5model18LogicResourceUsagemlEd 0 - _ZNK5spark5model18LogicResourceUsagemlEi + _ZN5spark5model24ImplementationParameters9to_stringEv 0 - _ZNK5spark5model18LogicResourceUsagemlEd + _ZNK5spark5model18LogicResourceUsageltERKS1_ 0 diff --git a/coverage/include/Spark/Model.hpp.func.html b/coverage/include/Spark/Model.hpp.func.html index 567f0fc..5092864 100644 --- a/coverage/include/Spark/Model.hpp.func.html +++ b/coverage/include/Spark/Model.hpp.func.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 1 diff --git a/coverage/include/Spark/Model.hpp.gcov.html b/coverage/include/Spark/Model.hpp.gcov.html index ad68a0a..f51030d 100644 --- a/coverage/include/Spark/Model.hpp.gcov.html +++ b/coverage/include/Spark/Model.hpp.gcov.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 1 diff --git a/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html b/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html index 2f1cb06..7548436 100644 --- a/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html +++ b/coverage/include/Spark/SimpleSpmv.hpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 - 134 - 0.0 % + 26 + 113 + 23.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 - 29 - 0.0 % + 11 + 27 + 40.7 % @@ -60,119 +60,111 @@ Hit count Sort by hit count - _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE7restartEv - 0 - - - _ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENUlRKNS0_9PartitionES4_E_4_FUNES4_S4_ - 0 - - - _ZN5spark4spmv22SimpleSpmvArchitecture12write_paramsEv - 0 + _ZN5spark4spmv12indptr_valueC2Edi + 977712 - _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE6doNextEv - 0 + _ZN5spark4spmv12indptr_valueC2Ev + 464 - _ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENKUlRKNS0_9PartitionES4_E_clES4_S4_ - 0 + _ZN5spark4spmv22SimpleSpmvArchitecture8get_nameEv + 320 - _ZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEv - 0 + _ZN5spark4spmv22SimpleSpmvArchitecture10logResultRESs + 320 - _ZN5spark4spmv22SimpleSpmvArchitecture14getLibraryNameEv - 0 + _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIdIEEEvSsT_DpT0_ + 160 - _ZNK5spark4spmv22SimpleSpmvArchitectureeqERKS1_ - 0 + _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiEEvSsSt6vectorIT_SaIS4_EE + 120 - _ZN5spark4spmv22SimpleSpmvArchitectureD0Ev - 0 + _ZN5spark4spmv9PartitionC2EOS1_ + 120 - _ZN5spark4spmv25SkipEmptyRowsArchitecture15encodeEmptyRowsESt6vectorIjSaIjEEb - 0 + _ZN5spark4spmv9PartitionD2Ev + 120 - _ZN5spark4spmv12indptr_valueC2Ev - 0 + _ZN5spark4spmv9PartitionC2Ev + 80 - _ZN5spark4spmv22SimpleSpmvArchitecture10logResultRESs - 0 + _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiIEEEvSsT_DpT0_ + 40 - _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiEEvSsSt6vectorIT_SaIS4_EE - 0 + _ZN5spark4spmv22SimpleSpmvArchitectureC2EPNS_7runtime27GeneratedSpmvImplementationE + 40 - _ZN5spark4spmv22SimpleSpmvArchitecture27getImplementationParametersEv + _ZN5spark4spmv22SimpleSpmvArchitecture12write_paramsEv 0 - _ZN5spark4spmv12indptr_valueC2Edi + _ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENKUlRKNS0_9PartitionES4_E_clES4_S4_ 0 - _ZN5spark4spmv22SimpleSpmvArchitecture9to_stringEv + _ZN5spark4spmv22SimpleSpmvArchitecture14getLibraryNameEv 0 - _ZN5spark4spmv22SimpleSpmvArchitectureD2Ev + _ZN5spark4spmv22SimpleSpmvArchitecture27getImplementationParametersEv 0 - _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEEC2ENS_5utils5RangeES5_S5_i + _ZN5spark4spmv22SimpleSpmvArchitecture14getGFlopsCountEv 0 - _ZN5spark4spmv9PartitionD2Ev + _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE6doNextEv 0 - _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIdIEEEvSsT_DpT0_ + _ZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEv 0 - _ZN5spark4spmv9PartitionC2EOS1_ + _ZN5spark4spmv22SimpleSpmvArchitectureD0Ev 0 - _ZN5spark4spmv25SkipEmptyRowsArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii + _ZZN5spark4spmv22SimpleSpmvArchitecture23getEstimatedClockCyclesEvENUlRKNS0_9PartitionES4_E_4_FUNES4_S4_ 0 - _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiIEEEvSsT_DpT0_ + _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEEC2ENS_5utils5RangeES5_S5_i 0 - _ZN5spark4spmv22SimpleSpmvArchitectureC2EPNS_7runtime27GeneratedSpmvImplementationE + _ZN5spark4spmv22SimpleSpmvArchitectureD2Ev 0 - _ZN5spark4spmv22SimpleSpmvArchitecture14getGFlopsCountEv + _ZNK5spark4spmv22SimpleSpmvArchitecture6equalsERKNS0_16SpmvArchitectureE 0 - _ZNK5spark4spmv22SimpleSpmvArchitecture6equalsERKNS0_16SpmvArchitectureE + _ZN5spark4spmv22SimpleSpmvArchitectureC2Eiiii 0 - _ZN5spark4spmv22SimpleSpmvArchitectureC2Eiiii + _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE7restartEv 0 - _ZN5spark4spmv9PartitionC2Ev + _ZN5spark4spmv22SimpleSpmvArchitecture9to_stringEv 0 - _ZN5spark4spmv22SimpleSpmvArchitecture8get_nameEv + _ZNK5spark4spmv22SimpleSpmvArchitectureeqERKS1_ 0 diff --git a/coverage/include/Spark/SimpleSpmv.hpp.func.html b/coverage/include/Spark/SimpleSpmv.hpp.func.html index 53f4fcd..2045e0a 100644 --- a/coverage/include/Spark/SimpleSpmv.hpp.func.html +++ b/coverage/include/Spark/SimpleSpmv.hpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 - 134 - 0.0 % + 26 + 113 + 23.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 - 29 - 0.0 % + 11 + 27 + 40.7 % @@ -61,15 +61,15 @@ _ZN5spark4spmv12indptr_valueC2Edi - 0 + 977712 _ZN5spark4spmv12indptr_valueC2Ev - 0 + 464 _ZN5spark4spmv22SimpleSpmvArchitecture10logResultRESs - 0 + 320 _ZN5spark4spmv22SimpleSpmvArchitecture12write_paramsEv @@ -93,19 +93,19 @@ _ZN5spark4spmv22SimpleSpmvArchitecture8get_nameEv - 0 + 320 _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIdIEEEvSsT_DpT0_ - 0 + 160 _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiEEvSsSt6vectorIT_SaIS4_EE - 0 + 120 _ZN5spark4spmv22SimpleSpmvArchitecture9logResultIiIEEEvSsT_DpT0_ - 0 + 40 _ZN5spark4spmv22SimpleSpmvArchitecture9to_stringEv @@ -113,7 +113,7 @@ _ZN5spark4spmv22SimpleSpmvArchitectureC2EPNS_7runtime27GeneratedSpmvImplementationE - 0 + 40 _ZN5spark4spmv22SimpleSpmvArchitectureC2Eiiii @@ -127,14 +127,6 @@ _ZN5spark4spmv22SimpleSpmvArchitectureD2Ev 0 - - _ZN5spark4spmv25SkipEmptyRowsArchitecture15encodeEmptyRowsESt6vectorIjSaIjEEb - 0 - - - _ZN5spark4spmv25SkipEmptyRowsArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii - 0 - _ZN5spark4spmv27SimpleSpmvArchitectureSpaceINS0_22SimpleSpmvArchitectureEE6doNextEv 0 @@ -149,15 +141,15 @@ _ZN5spark4spmv9PartitionC2EOS1_ - 0 + 120 _ZN5spark4spmv9PartitionC2Ev - 0 + 80 _ZN5spark4spmv9PartitionD2Ev - 0 + 120 _ZNK5spark4spmv22SimpleSpmvArchitecture6equalsERKNS0_16SpmvArchitectureE diff --git a/coverage/include/Spark/SimpleSpmv.hpp.gcov.html b/coverage/include/Spark/SimpleSpmv.hpp.gcov.html index 7497f2c..cb264dc 100644 --- a/coverage/include/Spark/SimpleSpmv.hpp.gcov.html +++ b/coverage/include/Spark/SimpleSpmv.hpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 - 134 - 0.0 % + 26 + 113 + 23.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 - 29 - 0.0 % + 11 + 27 + 40.7 % @@ -82,12 +82,12 @@ 20 : struct indptr_value { 21 : double value; 22 : int indptr; - 23 0 : indptr_value(double _value, int _indptr) : value(_value), indptr(_indptr) {} - 24 0 : indptr_value() : value(0), indptr(0) {} + 23 977712 : indptr_value(double _value, int _indptr) : value(_value), indptr(_indptr) {} + 24 464 : indptr_value() : value(0), indptr(0) {} 25 : } __attribute__((packed)); 26 : #pragma pack() 27 : - 28 0 : struct Partition { + 28 320 : struct Partition { 29 : int nBlocks, n, paddingCycles, totalCycles, vector_load_cycles, outSize; 30 : int reductionCycles, emptyCycles; 31 : int m_colptr_unpaddedLength; @@ -166,12 +166,12 @@ 104 : * For execution we build the architecture and give it a pointer to the 105 : * device implementation. 106 : */ - 107 0 : SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation* _impl): - 108 0 : cacheSize(_impl->cacheSize()), - 109 0 : inputWidth(_impl->inputWidth()), - 110 0 : numPipes(_impl->numPipes()), - 111 0 : maxRows(_impl->maxRows()), - 112 0 : impl(_impl) { } + 107 40 : SimpleSpmvArchitecture(spark::runtime::GeneratedSpmvImplementation* _impl): + 108 40 : cacheSize(_impl->cacheSize()), + 109 40 : inputWidth(_impl->inputWidth()), + 110 40 : numPipes(_impl->numPipes()), + 111 40 : maxRows(_impl->maxRows()), + 112 200 : impl(_impl) { } 113 : 114 0 : virtual std::string getLibraryName() { 115 0 : std::stringstream ss; @@ -247,8 +247,8 @@ 185 : 186 : virtual Eigen::VectorXd dfespmv(Eigen::VectorXd x) override; 187 : - 188 0 : virtual std::string get_name() override { - 189 0 : return std::string("Simple"); + 188 320 : virtual std::string get_name() override { + 189 320 : return std::string("Simple"); 190 : } 191 : 192 : private: @@ -262,19 +262,19 @@ 200 : int inputWidth); 201 : 202 : template<typename U> - 203 0 : void logResult(std::string s, std::vector<U> vals) { - 204 0 : logResultR(s); - 205 0 : for (const auto& v : vals) - 206 0 : std::cout << v << ","; - 207 0 : std::cout << std::endl; - 208 0 : } + 203 120 : void logResult(std::string s, std::vector<U> vals) { + 204 120 : logResultR(s); + 205 360 : for (const auto& v : vals) + 206 240 : std::cout << v << ","; + 207 120 : std::cout << std::endl; + 208 120 : } 209 : 210 : template<typename Arg, typename... Args> - 211 0 : void logResult(std::string s, Arg a, Args... as) { - 212 0 : logResultR(s, as...); - 213 0 : std::cout << a << ","; - 214 0 : std::cout << std::endl; - 215 0 : } + 211 200 : void logResult(std::string s, Arg a, Args... as) { + 212 200 : logResultR(s, as...); + 213 200 : std::cout << a << ","; + 214 200 : std::cout << std::endl; + 215 200 : } 216 : 217 : template<typename Arg, typename... Args> 218 : void logResultR(std::string s, Arg a, Args... as) { @@ -282,10 +282,10 @@ 220 : std::cout << a << ","; 221 : } 222 : - 223 0 : void logResultR(std::string s) { - 224 0 : std::cout << "Result " << get_name() << " "; - 225 0 : std::cout << s << "="; - 226 0 : } + 223 320 : void logResultR(std::string s) { + 224 320 : std::cout << "Result " << get_name() << " "; + 225 320 : std::cout << s << "="; + 226 320 : } 227 : 228 : 229 : }; @@ -376,44 +376,44 @@ 314 : 315 : // Model for an architecture which can skip sequences of empty rows 316 : class SkipEmptyRowsArchitecture : public SimpleSpmvArchitecture { - 317 : protected: + 317 : protected: 318 : - 319 0 : std::vector<uint32_t> encodeEmptyRows(std::vector<uint32_t> pin, bool encode) { - 320 0 : std::vector<uint32_t> encoded; - 321 0 : if (!encode) { - 322 0 : return pin; + 319 : std::vector<uint32_t> encodeEmptyRows(std::vector<uint32_t> pin, bool encode) { + 320 : std::vector<uint32_t> encoded; + 321 : if (!encode) { + 322 : return pin; 323 : } 324 : - 325 0 : int emptyRunLength = 0; - 326 0 : for (size_t i = 0; i < pin.size(); i++) { - 327 0 : uint32_t rowLength = pin[i] - (i == 0 ? 0 : pin[i - 1]); - 328 0 : if (rowLength == 0) { - 329 0 : emptyRunLength++; + 325 : int emptyRunLength = 0; + 326 : for (size_t i = 0; i < pin.size(); i++) { + 327 : uint32_t rowLength = pin[i] - (i == 0 ? 0 : pin[i - 1]); + 328 : if (rowLength == 0) { + 329 : emptyRunLength++; 330 : } else { - 331 0 : if (emptyRunLength != 0) { - 332 0 : encoded.push_back(emptyRunLength | (1 << 31)); + 331 : if (emptyRunLength != 0) { + 332 : encoded.push_back(emptyRunLength | (1 << 31)); 333 : } - 334 0 : emptyRunLength = 0; - 335 0 : encoded.push_back(pin[i]); + 334 : emptyRunLength = 0; + 335 : encoded.push_back(pin[i]); 336 : } 337 : } 338 : - 339 0 : if (emptyRunLength != 0) { - 340 0 : encoded.push_back(emptyRunLength | (1 << 31)); + 339 : if (emptyRunLength != 0) { + 340 : encoded.push_back(emptyRunLength | (1 << 31)); 341 : } 342 : - 343 0 : return encoded; - 344 : } + 343 : return encoded; + 344 : } 345 : - 346 0 : virtual spark::sparse::CsrMatrix preprocessBlock( + 346 : virtual spark::sparse::CsrMatrix preprocessBlock( 347 : const spark::sparse::CsrMatrix& in, 348 : int blockNumber, 349 : int nBlocks) override { - 350 0 : bool encode = blockNumber != 0 && blockNumber != nBlocks - 1; + 350 : bool encode = blockNumber != 0 && blockNumber != nBlocks - 1; 351 : return std::make_tuple( - 352 0 : encodeEmptyRows(std::get<0>(in), encode), - 353 0 : std::get<1>(in), - 354 0 : std::get<2>(in)); + 352 : encodeEmptyRows(std::get<0>(in), encode), + 353 : std::get<1>(in), + 354 : std::get<2>(in)); 355 : } 356 : 357 : public: diff --git a/coverage/include/Spark/SparseLinearSolvers.hpp.func-sort-c.html b/coverage/include/Spark/SparseLinearSolvers.hpp.func-sort-c.html index 421f0b3..ef509e6 100644 --- a/coverage/include/Spark/SparseLinearSolvers.hpp.func-sort-c.html +++ b/coverage/include/Spark/SparseLinearSolvers.hpp.func-sort-c.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 @@ -60,11 +60,11 @@ Hit count Sort by hit count - _ZN5spark21sparse_linear_solvers6Solver7analyzeERKN5Eigen12SparseMatrixIdLi0EiEE + _ZN5spark21sparse_linear_solvers6Solver10preprocessERKN5Eigen12SparseMatrixIdLi0EiEE 0 - _ZN5spark21sparse_linear_solvers6Solver10preprocessERKN5Eigen12SparseMatrixIdLi0EiEE + _ZN5spark21sparse_linear_solvers6Solver7analyzeERKN5Eigen12SparseMatrixIdLi0EiEE 0 diff --git a/coverage/include/Spark/SparseLinearSolvers.hpp.func.html b/coverage/include/Spark/SparseLinearSolvers.hpp.func.html index 7ccc111..b0f21fa 100644 --- a/coverage/include/Spark/SparseLinearSolvers.hpp.func.html +++ b/coverage/include/Spark/SparseLinearSolvers.hpp.func.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/include/Spark/SparseLinearSolvers.hpp.gcov.html b/coverage/include/Spark/SparseLinearSolvers.hpp.gcov.html index 76e8184..584e89f 100644 --- a/coverage/include/Spark/SparseLinearSolvers.hpp.gcov.html +++ b/coverage/include/Spark/SparseLinearSolvers.hpp.gcov.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html b/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html index 3408b5b..1e588f9 100644 --- a/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html +++ b/coverage/include/Spark/SparseMatrix.hpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 2 - 0.0 % + 2 + 100.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 2 - 0.0 % + 2 + 100.0 % @@ -61,11 +61,11 @@ _ZN5spark6sparse14SparkCooMatrixIdEC2Eii - 0 + 40 _ZN5spark6sparse14SparkCooMatrixIdED2Ev - 0 + 40
diff --git a/coverage/include/Spark/SparseMatrix.hpp.func.html b/coverage/include/Spark/SparseMatrix.hpp.func.html index 5acd0d0..13fd1c9 100644 --- a/coverage/include/Spark/SparseMatrix.hpp.func.html +++ b/coverage/include/Spark/SparseMatrix.hpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 2 - 0.0 % + 2 + 100.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 2 - 0.0 % + 2 + 100.0 % @@ -61,11 +61,11 @@ _ZN5spark6sparse14SparkCooMatrixIdEC2Eii - 0 + 40 _ZN5spark6sparse14SparkCooMatrixIdED2Ev - 0 + 40
diff --git a/coverage/include/Spark/SparseMatrix.hpp.gcov.html b/coverage/include/Spark/SparseMatrix.hpp.gcov.html index cf52ae0..d02478b 100644 --- a/coverage/include/Spark/SparseMatrix.hpp.gcov.html +++ b/coverage/include/Spark/SparseMatrix.hpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 2 - 0.0 % + 2 + 100.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 2 - 0.0 % + 2 + 100.0 % @@ -73,7 +73,7 @@ 11 : using PartitionedCsrMatrix = std::vector<CsrMatrix>; 12 : 13 : template<typename value_type> - 14 0 : class SparkCooMatrix { + 14 40 : class SparkCooMatrix { 15 : 16 : public: 17 : using CoordType = std::tuple<int, int, value_type>; @@ -81,7 +81,7 @@ 19 : int n, m; 20 : std::vector<CoordType> data; 21 : - 22 0 : SparkCooMatrix(int _n, int _m) : n(_n), m(_m) {} + 22 40 : SparkCooMatrix(int _n, int _m) : n(_n), m(_m) {} 23 : }; 24 : } 25 : } diff --git a/coverage/include/Spark/Spmv.hpp.func-sort-c.html b/coverage/include/Spark/Spmv.hpp.func-sort-c.html index a51396b..c1c149c 100644 --- a/coverage/include/Spark/Spmv.hpp.func-sort-c.html +++ b/coverage/include/Spark/Spmv.hpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 9 19 - 0.0 % + 47.4 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 5 12 - 0.0 % + 41.7 % @@ -60,51 +60,51 @@ Hit count Sort by hit count - _ZN5spark4spmv16SpmvArchitecture18getEstimatedGFlopsEv - 0 - - - _ZN5spark4spmv21SpmvArchitectureSpaceC2Ev - 0 + _ZN5spark4spmv5alignIdEEvRSt6vectorIT_SaIS3_EEi + 732 - _ZN5spark4spmv16SpmvArchitectureD2Ev - 0 + _ZN5spark4spmv5alignIiEEvRSt6vectorIT_SaIS3_EEi + 572 _ZN5spark4spmv16SpmvArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii - 0 + 492 _ZN5spark4spmv5alignINS0_12indptr_valueEEEvRSt6vectorIT_SaIS4_EEi - 0 + 80 _ZN5spark4spmv16SpmvArchitectureC2Ev + 40 + + + _ZN5spark4spmv21SpmvArchitectureSpaceC2Ev 0 - _ZN5spark4spmv21SpmvArchitectureSpace4nextEv + _ZN5spark4spmv16SpmvArchitecture12getFrequencyEv 0 - _ZN5spark4spmv16SpmvArchitectureD0Ev + _ZN5spark4spmv16SpmvArchitectureeqERKS1_ 0 - _ZN5spark4spmv5alignIiEEvRSt6vectorIT_SaIS3_EEi + _ZN5spark4spmv16SpmvArchitectureD0Ev 0 - _ZN5spark4spmv16SpmvArchitecture12getFrequencyEv + _ZN5spark4spmv16SpmvArchitecture18getEstimatedGFlopsEv 0 - _ZN5spark4spmv5alignIdEEvRSt6vectorIT_SaIS3_EEi + _ZN5spark4spmv16SpmvArchitectureD2Ev 0 - _ZN5spark4spmv16SpmvArchitectureeqERKS1_ + _ZN5spark4spmv21SpmvArchitectureSpace4nextEv 0 diff --git a/coverage/include/Spark/Spmv.hpp.func.html b/coverage/include/Spark/Spmv.hpp.func.html index d613e4f..f44f32e 100644 --- a/coverage/include/Spark/Spmv.hpp.func.html +++ b/coverage/include/Spark/Spmv.hpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 9 19 - 0.0 % + 47.4 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 5 12 - 0.0 % + 41.7 % @@ -65,7 +65,7 @@ _ZN5spark4spmv16SpmvArchitecture15preprocessBlockERKSt5tupleIISt6vectorIjSaIjEES3_IiSaIiEES3_IdSaIdEEEEii - 0 + 492 _ZN5spark4spmv16SpmvArchitecture18getEstimatedGFlopsEv @@ -73,7 +73,7 @@ _ZN5spark4spmv16SpmvArchitectureC2Ev - 0 + 40 _ZN5spark4spmv16SpmvArchitectureD0Ev @@ -97,15 +97,15 @@ _ZN5spark4spmv5alignINS0_12indptr_valueEEEvRSt6vectorIT_SaIS4_EEi - 0 + 80 _ZN5spark4spmv5alignIdEEvRSt6vectorIT_SaIS3_EEi - 0 + 732 _ZN5spark4spmv5alignIiEEvRSt6vectorIT_SaIS3_EEi - 0 + 572
diff --git a/coverage/include/Spark/Spmv.hpp.gcov.html b/coverage/include/Spark/Spmv.hpp.gcov.html index f6b3b3c..18f44b8 100644 --- a/coverage/include/Spark/Spmv.hpp.gcov.html +++ b/coverage/include/Spark/Spmv.hpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 9 19 - 0.0 % + 47.4 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 5 12 - 0.0 % + 41.7 % @@ -72,7 +72,7 @@ 10 : namespace spmv { 11 : 12 : // A generic architecture for SpMV - 13 0 : class SpmvArchitecture { + 13 40 : class SpmvArchitecture { 14 : 15 : public: 16 0 : double getEstimatedGFlops() { @@ -99,11 +99,11 @@ 37 0 : virtual ~SpmvArchitecture() {} 38 : 39 : protected: - 40 0 : virtual spark::sparse::CsrMatrix preprocessBlock( + 40 492 : virtual spark::sparse::CsrMatrix preprocessBlock( 41 : const spark::sparse::CsrMatrix& in, 42 : int blockNumber, 43 : int nBlocks) { - 44 0 : return in; + 44 492 : return in; 45 : } 46 : virtual bool equals(const SpmvArchitecture& a) const = 0; 47 : }; @@ -131,13 +131,13 @@ 69 : }; 70 : 71 : template<typename T> - 72 0 : void align(std::vector<T>& v, int widthInBytes) { - 73 0 : int limit = widthInBytes / sizeof(T); - 74 0 : while ((v.size() * sizeof(T)) % widthInBytes != 0 && limit != 0) { - 75 0 : v.push_back(T{}); - 76 0 : limit--; + 72 1384 : void align(std::vector<T>& v, int widthInBytes) { + 73 1384 : int limit = widthInBytes / sizeof(T); + 74 119870 : while ((v.size() * sizeof(T)) % widthInBytes != 0 && limit != 0) { + 75 117102 : v.push_back(T{}); + 76 117102 : limit--; 77 : } - 78 0 : } + 78 1384 : } 79 : 80 : } 81 : } diff --git a/coverage/include/Spark/Utils.hpp.func-sort-c.html b/coverage/include/Spark/Utils.hpp.func-sort-c.html index 1a8f7f8..11bc07e 100644 --- a/coverage/include/Spark/Utils.hpp.func-sort-c.html +++ b/coverage/include/Spark/Utils.hpp.func-sort-c.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 @@ -60,11 +60,11 @@ Hit count Sort by hit count - _ZN5spark5utils5Range8at_startEv + _ZN5spark5utils5RangeC2ESs 0 - _ZN5spark5utils5RangeppEv + _ZN5spark5utils5RangeC2Eiii 0 @@ -76,11 +76,11 @@ 0 - _ZN5spark5utils5RangeC2ESs + _ZN5spark5utils5Range8at_startEv 0 - _ZN5spark5utils5RangeC2Eiii + _ZN5spark5utils5RangeppEv 0 diff --git a/coverage/include/Spark/Utils.hpp.func.html b/coverage/include/Spark/Utils.hpp.func.html index 5b67e7b..40edd68 100644 --- a/coverage/include/Spark/Utils.hpp.func.html +++ b/coverage/include/Spark/Utils.hpp.func.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/include/Spark/Utils.hpp.gcov.html b/coverage/include/Spark/Utils.hpp.gcov.html index e9b06c6..443a4f8 100644 --- a/coverage/include/Spark/Utils.hpp.gcov.html +++ b/coverage/include/Spark/Utils.hpp.gcov.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/include/Spark/index-sort-f.html b/coverage/include/Spark/index-sort-f.html index 83fac7d..f547868 100644 --- a/coverage/include/Spark/index-sort-f.html +++ b/coverage/include/Spark/index-sort-f.html @@ -31,18 +31,18 @@ final.info Lines: - 2 - 390 - 0.5 % + 141 + 370 + 38.1 % Date: - 2015-11-30 + 2015-12-01 Functions: - 1 - 99 - 1.0 % + 37 + 98 + 37.8 % @@ -80,14 +80,14 @@ 0 / 1 - SparseMatrix.hpp + Execution.hpp
0.0%
0.0 % - 0 / 2 + 0 / 1 0.0 % - 0 / 2 + 0 / 1 SparseLinearSolvers.hpp @@ -100,84 +100,94 @@ 0 / 2 - Converters.hpp + Utils.hpp
0.0%
0.0 % - 0 / 20 + 0 / 27 0.0 % - 0 / 3 + 0 / 6 - Utils.hpp + Dse.hpp
0.0%
0.0 % - 0 / 27 + 0 / 31 0.0 % - 0 / 6 + 0 / 13 - Io.hpp + Model.hpp -
0.0%
+
6.5%6.5%
- 0.0 % - 0 / 86 - 0.0 % - 0 / 10 + 6.5 % + 2 / 31 + 10.0 % + 1 / 10 - GeneratedImplSupport.hpp + SimpleSpmv.hpp -
0.0%
+
23.0%23.0%
- 0.0 % - 0 / 25 - 0.0 % - 0 / 11 + 23.0 % + 26 / 113 + 40.7 % + 11 / 27 Spmv.hpp -
0.0%
+
47.4%47.4%
- 0.0 % - 0 / 19 - 0.0 % - 0 / 12 + 47.4 % + 9 / 19 + 41.7 % + 5 / 12 - Dse.hpp + Io.hpp -
0.0%
+
69.8%69.8%
- 0.0 % - 0 / 31 - 0.0 % - 0 / 13 + 69.8 % + 60 / 86 + 70.0 % + 7 / 10 - SimpleSpmv.hpp + GeneratedImplSupport.hpp -
0.0%
+
88.0%88.0%
- 0.0 % - 0 / 134 - 0.0 % - 0 / 29 + 88.0 % + 22 / 25 + 72.7 % + 8 / 11 - Model.hpp + SparseMatrix.hpp -
6.5%6.5%
+
100.0%
- 6.5 % - 2 / 31 - 10.0 % - 1 / 10 + 100.0 % + 2 / 2 + 100.0 % + 2 / 2 + + + Converters.hpp + +
100.0%
+ + 100.0 % + 20 / 20 + 100.0 % + 3 / 3 diff --git a/coverage/include/Spark/index-sort-l.html b/coverage/include/Spark/index-sort-l.html index eccedac..59cfdd8 100644 --- a/coverage/include/Spark/index-sort-l.html +++ b/coverage/include/Spark/index-sort-l.html @@ -31,18 +31,18 @@ final.info Lines: - 2 - 390 - 0.5 % + 141 + 370 + 38.1 % Date: - 2015-11-30 + 2015-12-01 Functions: - 1 - 99 - 1.0 % + 37 + 98 + 37.8 % @@ -70,14 +70,14 @@ Functions Sort by function coverage - SparseMatrix.hpp + Execution.hpp
0.0%
0.0 % - 0 / 2 + 0 / 1 0.0 % - 0 / 2 + 0 / 1 SparseLinearSolvers.hpp @@ -100,84 +100,94 @@ 0 / 1 - Spmv.hpp + Utils.hpp
0.0%
0.0 % - 0 / 19 + 0 / 27 0.0 % - 0 / 12 + 0 / 6 - Converters.hpp + Dse.hpp
0.0%
0.0 % - 0 / 20 + 0 / 31 0.0 % - 0 / 3 + 0 / 13 - GeneratedImplSupport.hpp + Model.hpp -
0.0%
+
6.5%6.5%
- 0.0 % - 0 / 25 - 0.0 % - 0 / 11 + 6.5 % + 2 / 31 + 10.0 % + 1 / 10 - Utils.hpp + SimpleSpmv.hpp -
0.0%
+
23.0%23.0%
- 0.0 % - 0 / 27 - 0.0 % - 0 / 6 + 23.0 % + 26 / 113 + 40.7 % + 11 / 27 - Dse.hpp + Spmv.hpp -
0.0%
+
47.4%47.4%
- 0.0 % - 0 / 31 - 0.0 % - 0 / 13 + 47.4 % + 9 / 19 + 41.7 % + 5 / 12 Io.hpp -
0.0%
+
69.8%69.8%
- 0.0 % - 0 / 86 - 0.0 % - 0 / 10 + 69.8 % + 60 / 86 + 70.0 % + 7 / 10 - SimpleSpmv.hpp + GeneratedImplSupport.hpp -
0.0%
+
88.0%88.0%
- 0.0 % - 0 / 134 - 0.0 % - 0 / 29 + 88.0 % + 22 / 25 + 72.7 % + 8 / 11 - Model.hpp + SparseMatrix.hpp -
6.5%6.5%
+
100.0%
- 6.5 % - 2 / 31 - 10.0 % - 1 / 10 + 100.0 % + 2 / 2 + 100.0 % + 2 / 2 + + + Converters.hpp + +
100.0%
+ + 100.0 % + 20 / 20 + 100.0 % + 3 / 3 diff --git a/coverage/include/Spark/index.html b/coverage/include/Spark/index.html index fa5b4a4..7ed966b 100644 --- a/coverage/include/Spark/index.html +++ b/coverage/include/Spark/index.html @@ -31,18 +31,18 @@ final.info Lines: - 2 - 390 - 0.5 % + 141 + 370 + 38.1 % Date: - 2015-11-30 + 2015-12-01 Functions: - 1 - 99 - 1.0 % + 37 + 98 + 37.8 % @@ -72,12 +72,12 @@ Converters.hpp -
0.0%
+
100.0%
- 0.0 % - 0 / 20 - 0.0 % - 0 / 3 + 100.0 % + 20 / 20 + 100.0 % + 3 / 3 Dse.hpp @@ -90,34 +90,44 @@ 0 / 13 - FileUtils.hpp + Execution.hpp
0.0%
0.0 % - 0 / 11 + 0 / 1 0.0 % 0 / 1 - GeneratedImplSupport.hpp + FileUtils.hpp
0.0%
0.0 % - 0 / 25 - 0.0 % 0 / 11 + 0.0 % + 0 / 1 + + + GeneratedImplSupport.hpp + +
88.0%88.0%
+ + 88.0 % + 22 / 25 + 72.7 % + 8 / 11 Io.hpp -
0.0%
+
69.8%69.8%
- 0.0 % - 0 / 86 - 0.0 % - 0 / 10 + 69.8 % + 60 / 86 + 70.0 % + 7 / 10 Model.hpp @@ -132,12 +142,12 @@ SimpleSpmv.hpp -
0.0%
+
23.0%23.0%
- 0.0 % - 0 / 134 - 0.0 % - 0 / 29 + 23.0 % + 26 / 113 + 40.7 % + 11 / 27 SparseLinearSolvers.hpp @@ -152,22 +162,22 @@ SparseMatrix.hpp -
0.0%
+
100.0%
- 0.0 % - 0 / 2 - 0.0 % - 0 / 2 + 100.0 % + 2 / 2 + 100.0 % + 2 / 2 Spmv.hpp -
0.0%
+
47.4%47.4%
- 0.0 % - 0 / 19 - 0.0 % - 0 / 12 + 47.4 % + 9 / 19 + 41.7 % + 5 / 12 Utils.hpp diff --git a/coverage/index-sort-f.html b/coverage/index-sort-f.html index 23d52b7..862b29c 100644 --- a/coverage/index-sort-f.html +++ b/coverage/index-sort-f.html @@ -31,18 +31,18 @@ final.info Lines: - 2 - 809 - 0.2 % + 324 + 789 + 41.1 % Date: - 2015-11-30 + 2015-12-01 Functions: - 1 - 142 - 0.7 % + 53 + 141 + 37.6 % @@ -80,54 +80,54 @@ 0 / 6 - dfe-snippets/include/dfesnippets + src/dse
0.0%
0.0 % - 0 / 20 + 0 / 79 0.0 % - 0 / 6 + 0 / 7 - src/dse + src -
0.0%
+
1.0%1.0%
- 0.0 % - 0 / 79 - 0.0 % - 0 / 7 + 1.0 % + 1 / 101 + 16.7 % + 2 / 12 - src/spmv/src + include/Spark -
0.0%
+
38.1%38.1%
- 0.0 % - 0 / 190 - 0.0 % - 0 / 12 + 38.1 % + 141 / 370 + 37.8 % + 37 / 98 - src + dfe-snippets/include/dfesnippets -
0.0%
+
70.0%70.0%
- 0.0 % - 0 / 101 - 0.0 % - 0 / 12 + 70.0 % + 14 / 20 + 50.0 % + 3 / 6 - include/Spark + src/spmv/src -
0.5%0.5%
+
88.4%88.4%
- 0.5 % - 2 / 390 - 1.0 % - 1 / 99 + 88.4 % + 168 / 190 + 91.7 % + 11 / 12 diff --git a/coverage/index-sort-l.html b/coverage/index-sort-l.html index eaf5e41..e659a2e 100644 --- a/coverage/index-sort-l.html +++ b/coverage/index-sort-l.html @@ -31,18 +31,18 @@ final.info Lines: - 2 - 809 - 0.2 % + 324 + 789 + 41.1 % Date: - 2015-11-30 + 2015-12-01 Functions: - 1 - 142 - 0.7 % + 53 + 141 + 37.6 % @@ -69,16 +69,6 @@ Line Coverage Sort by line coverage Functions Sort by function coverage - - dfe-snippets/include/dfesnippets - -
0.0%
- - 0.0 % - 0 / 20 - 0.0 % - 0 / 6 - src/execution @@ -102,32 +92,42 @@ src -
0.0%
+
1.0%1.0%
- 0.0 % - 0 / 101 - 0.0 % - 0 / 12 + 1.0 % + 1 / 101 + 16.7 % + 2 / 12 - src/spmv/src + include/Spark -
0.0%
+
38.1%38.1%
- 0.0 % - 0 / 190 - 0.0 % - 0 / 12 + 38.1 % + 141 / 370 + 37.8 % + 37 / 98 - include/Spark + dfe-snippets/include/dfesnippets -
0.5%0.5%
+
70.0%70.0%
- 0.5 % - 2 / 390 - 1.0 % - 1 / 99 + 70.0 % + 14 / 20 + 50.0 % + 3 / 6 + + + src/spmv/src + +
88.4%88.4%
+ + 88.4 % + 168 / 190 + 91.7 % + 11 / 12 diff --git a/coverage/index.html b/coverage/index.html index 56c7abd..402988e 100644 --- a/coverage/index.html +++ b/coverage/index.html @@ -31,18 +31,18 @@ final.info Lines: - 2 - 809 - 0.2 % + 324 + 789 + 41.1 % Date: - 2015-11-30 + 2015-12-01 Functions: - 1 - 142 - 0.7 % + 53 + 141 + 37.6 % @@ -72,32 +72,32 @@ dfe-snippets/include/dfesnippets -
0.0%
+
70.0%70.0%
- 0.0 % - 0 / 20 - 0.0 % - 0 / 6 + 70.0 % + 14 / 20 + 50.0 % + 3 / 6 include/Spark -
0.5%0.5%
+
38.1%38.1%
- 0.5 % - 2 / 390 - 1.0 % - 1 / 99 + 38.1 % + 141 / 370 + 37.8 % + 37 / 98 src -
0.0%
+
1.0%1.0%
- 0.0 % - 0 / 101 - 0.0 % - 0 / 12 + 1.0 % + 1 / 101 + 16.7 % + 2 / 12 src/dse @@ -122,12 +122,12 @@ src/spmv/src -
0.0%
+
88.4%88.4%
- 0.0 % - 0 / 190 - 0.0 % - 0 / 12 + 88.4 % + 168 / 190 + 91.7 % + 11 / 12 diff --git a/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html b/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html index d5d8639..6f61628 100644 --- a/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html +++ b/coverage/src/SparseLinearSolvers.cpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 1 15 - 0.0 % + 6.7 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 2 6 - 0.0 % + 33.3 % @@ -61,26 +61,26 @@ _Z41__static_initialization_and_destruction_0ii - 0 + 40 - _Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE - 0 + _GLOBAL__sub_I__Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + 40 _Z7solveLURKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 - _GLOBAL__sub_I__Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + _Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 - _Z7solveCGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + _ZN5spark21sparse_linear_solvers11EigenSolver5solveERKN5Eigen12SparseMatrixIdLi0EiEERKNS2_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 - _ZN5spark21sparse_linear_solvers11EigenSolver5solveERKN5Eigen12SparseMatrixIdLi0EiEERKNS2_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE + _Z7solveCGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE 0 diff --git a/coverage/src/SparseLinearSolvers.cpp.func.html b/coverage/src/SparseLinearSolvers.cpp.func.html index 766721a..fc07224 100644 --- a/coverage/src/SparseLinearSolvers.cpp.func.html +++ b/coverage/src/SparseLinearSolvers.cpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 1 15 - 0.0 % + 6.7 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 2 6 - 0.0 % + 33.3 % @@ -61,11 +61,11 @@ _GLOBAL__sub_I__Z9solveBICGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE - 0 + 40 _Z41__static_initialization_and_destruction_0ii - 0 + 40 _Z7solveCGRKN5Eigen12SparseMatrixIdLi0EiEERKNS_6MatrixIdLin1ELi1ELi0ELin1ELi1EEE diff --git a/coverage/src/SparseLinearSolvers.cpp.gcov.html b/coverage/src/SparseLinearSolvers.cpp.gcov.html index 3f9fd47..b485bc7 100644 --- a/coverage/src/SparseLinearSolvers.cpp.gcov.html +++ b/coverage/src/SparseLinearSolvers.cpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 1 15 - 0.0 % + 6.7 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 2 6 - 0.0 % + 33.3 % @@ -125,7 +125,7 @@ 63 : const Eigen::VectorXd& b) 64 : { 65 0 : return solveBICG(A, b); - 66 0 : } + 66 120 : } diff --git a/coverage/src/dse/Dse.cpp.func-sort-c.html b/coverage/src/dse/Dse.cpp.func-sort-c.html index c8c9fac..45089d1 100644 --- a/coverage/src/dse/Dse.cpp.func-sort-c.html +++ b/coverage/src/dse/Dse.cpp.func-sort-c.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 @@ -60,7 +60,7 @@ Hit count Sort by hit count - _ZNK8SpmvHashclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEE + _Z41__static_initialization_and_destruction_0ii 0 @@ -68,23 +68,23 @@ 0 - _Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_ + _ZN5spark3dse8SparkDse3runERKNS0_9BenchmarkERKNS0_13DseParametersE 0 - _Z41__static_initialization_and_destruction_0ii + _ZNK8SpmvHashclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEE 0 - _ZNK9SpmvEqualclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES6_ + _GLOBAL__sub_I__Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_ 0 - _GLOBAL__sub_I__Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_ + _Z6betterSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES3_ 0 - _ZN5spark3dse8SparkDse3runERKNS0_9BenchmarkERKNS0_13DseParametersE + _ZNK9SpmvEqualclERKSt10shared_ptrIN5spark4spmv16SpmvArchitectureEES6_ 0 diff --git a/coverage/src/dse/Dse.cpp.func.html b/coverage/src/dse/Dse.cpp.func.html index d7f5ef5..722f852 100644 --- a/coverage/src/dse/Dse.cpp.func.html +++ b/coverage/src/dse/Dse.cpp.func.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/dse/Dse.cpp.gcov.html b/coverage/src/dse/Dse.cpp.gcov.html index 75629f9..9856fc2 100644 --- a/coverage/src/dse/Dse.cpp.gcov.html +++ b/coverage/src/dse/Dse.cpp.gcov.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/dse/index-sort-f.html b/coverage/src/dse/index-sort-f.html index ba385f0..fb5e147 100644 --- a/coverage/src/dse/index-sort-f.html +++ b/coverage/src/dse/index-sort-f.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/dse/index-sort-l.html b/coverage/src/dse/index-sort-l.html index f76fec5..78e4e4b 100644 --- a/coverage/src/dse/index-sort-l.html +++ b/coverage/src/dse/index-sort-l.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/dse/index.html b/coverage/src/dse/index.html index aafdbee..2f61c45 100644 --- a/coverage/src/dse/index.html +++ b/coverage/src/dse/index.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html b/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html index 44db13f..73d6b8a 100644 --- a/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html +++ b/coverage/src/execution/SharedLibLoader.cpp.func-sort-c.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 @@ -60,19 +60,19 @@ Hit count Sort by hit count - _ZN5spark9execution15SharedLibLoader12load_libraryESs + _Z41__static_initialization_and_destruction_0ii 0 - _ZN5spark9execution15SharedLibLoader19available_librariesEv + _ZN5spark9execution15SharedLibLoaderC2ESs 0 - _Z41__static_initialization_and_destruction_0ii + _ZN5spark9execution15SharedLibLoader14unload_libraryEv 0 - _ZN5spark9execution15SharedLibLoader14unload_libraryEv + _ZN5spark9execution15SharedLibLoader19available_librariesEv 0 @@ -80,7 +80,7 @@ 0 - _ZN5spark9execution15SharedLibLoaderC2ESs + _ZN5spark9execution15SharedLibLoader12load_libraryESs 0 diff --git a/coverage/src/execution/SharedLibLoader.cpp.func.html b/coverage/src/execution/SharedLibLoader.cpp.func.html index cde273c..829992c 100644 --- a/coverage/src/execution/SharedLibLoader.cpp.func.html +++ b/coverage/src/execution/SharedLibLoader.cpp.func.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/execution/SharedLibLoader.cpp.gcov.html b/coverage/src/execution/SharedLibLoader.cpp.gcov.html index 058fe91..d4fd5b9 100644 --- a/coverage/src/execution/SharedLibLoader.cpp.gcov.html +++ b/coverage/src/execution/SharedLibLoader.cpp.gcov.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/execution/index-sort-f.html b/coverage/src/execution/index-sort-f.html index bd21f59..01f6cc6 100644 --- a/coverage/src/execution/index-sort-f.html +++ b/coverage/src/execution/index-sort-f.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/execution/index-sort-l.html b/coverage/src/execution/index-sort-l.html index 1465442..39f616f 100644 --- a/coverage/src/execution/index-sort-l.html +++ b/coverage/src/execution/index-sort-l.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/execution/index.html b/coverage/src/execution/index.html index b9698fa..d671b09 100644 --- a/coverage/src/execution/index.html +++ b/coverage/src/execution/index.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/index-sort-f.html b/coverage/src/index-sort-f.html index 97f76a9..b43cd94 100644 --- a/coverage/src/index-sort-f.html +++ b/coverage/src/index-sort-f.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 1 101 - 0.0 % + 1.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 2 12 - 0.0 % + 16.7 % @@ -70,24 +70,24 @@ Functions Sort by function coverage - SparseLinearSolvers.cpp + main.cpp
0.0%
0.0 % - 0 / 15 + 0 / 86 0.0 % 0 / 6 - main.cpp + SparseLinearSolvers.cpp -
0.0%
+
6.7%6.7%
- 0.0 % - 0 / 86 - 0.0 % - 0 / 6 + 6.7 % + 1 / 15 + 33.3 % + 2 / 6 diff --git a/coverage/src/index-sort-l.html b/coverage/src/index-sort-l.html index 608888e..1005b7e 100644 --- a/coverage/src/index-sort-l.html +++ b/coverage/src/index-sort-l.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 1 101 - 0.0 % + 1.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 2 12 - 0.0 % + 16.7 % @@ -70,24 +70,24 @@ Functions Sort by function coverage - SparseLinearSolvers.cpp + main.cpp
0.0%
0.0 % - 0 / 15 + 0 / 86 0.0 % 0 / 6 - main.cpp + SparseLinearSolvers.cpp -
0.0%
+
6.7%6.7%
- 0.0 % - 0 / 86 - 0.0 % - 0 / 6 + 6.7 % + 1 / 15 + 33.3 % + 2 / 6 diff --git a/coverage/src/index.html b/coverage/src/index.html index 8a9fe1e..fced873 100644 --- a/coverage/src/index.html +++ b/coverage/src/index.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 1 101 - 0.0 % + 1.0 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 2 12 - 0.0 % + 16.7 % @@ -72,12 +72,12 @@ SparseLinearSolvers.cpp -
0.0%
+
6.7%6.7%
- 0.0 % - 0 / 15 - 0.0 % - 0 / 6 + 6.7 % + 1 / 15 + 33.3 % + 2 / 6 main.cpp diff --git a/coverage/src/main.cpp.func-sort-c.html b/coverage/src/main.cpp.func-sort-c.html index 597f284..8621a92 100644 --- a/coverage/src/main.cpp.func-sort-c.html +++ b/coverage/src/main.cpp.func-sort-c.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 @@ -60,27 +60,27 @@ Hit count Sort by hit count - _Z17write_dse_resultsRKSt6vectorIN5spark3dse9DseResultESaIS2_EEd + _Z41__static_initialization_and_destruction_0ii 0 - _Z13loadBenchmarkRKN5boost10filesystem4pathE + _Z17write_dse_resultsRKSt6vectorIN5spark3dse9DseResultESaIS2_EEd 0 - main + _Z10loadParamsRKN5boost10filesystem4pathE 0 - _Z41__static_initialization_and_destruction_0ii + _GLOBAL__sub_I__Z10loadParamsRKN5boost10filesystem4pathE 0 - _Z10loadParamsRKN5boost10filesystem4pathE + main 0 - _GLOBAL__sub_I__Z10loadParamsRKN5boost10filesystem4pathE + _Z13loadBenchmarkRKN5boost10filesystem4pathE 0 diff --git a/coverage/src/main.cpp.func.html b/coverage/src/main.cpp.func.html index efcc793..92eb800 100644 --- a/coverage/src/main.cpp.func.html +++ b/coverage/src/main.cpp.func.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/main.cpp.gcov.html b/coverage/src/main.cpp.gcov.html index ee9c281..d61a5d8 100644 --- a/coverage/src/main.cpp.gcov.html +++ b/coverage/src/main.cpp.gcov.html @@ -37,7 +37,7 @@ Date: - 2015-11-30 + 2015-12-01 Functions: 0 diff --git a/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html b/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html index 2f0f4e8..de20160 100644 --- a/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html +++ b/coverage/src/spmv/src/Spmv.cpp.func-sort-c.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 168 190 - 0.0 % + 88.4 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 11 12 - 0.0 % + 91.7 % @@ -60,51 +60,51 @@ Hit count Sort by hit count - _Z10size_bytesIiElRKSt6vectorIT_SaIS1_EE - 0 + _ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii + 492 - _Z21writeDataForPartitionPN5spark7runtime27GeneratedSpmvImplementationEiRKNS_4spmv9PartitionERKSt6vectorIdSaIdEE - 0 + _Z10size_bytesIdElRKSt6vectorIT_SaIS1_EE + 240 - _GLOBAL__sub_I__ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii - 0 + _Z21writeDataForPartitionPN5spark7runtime27GeneratedSpmvImplementationEiRKNS_4spmv9PartitionERKSt6vectorIdSaIdEE + 80 - _ZN5spark4spmv22SimpleSpmvArchitecture12do_partitionERKN5Eigen12SparseMatrixIdLi1EiEEi - 0 + _ZN5spark4spmv22SimpleSpmvArchitecture11do_blockingERKN5Eigen12SparseMatrixIdLi1EiEEii + 80 - _Z10size_bytesIdElRKSt6vectorIT_SaIS1_EE - 0 + _Z5alignii + 80 - _ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii - 0 + _Z10size_bytesIiElRKSt6vectorIT_SaIS1_EE + 80 - _ZN5spark4spmv22SimpleSpmvArchitecture10preprocessERKN5Eigen12SparseMatrixIdLi1EiEE - 0 + _Z10size_bytesIN5spark4spmv12indptr_valueEElRKSt6vectorIT_SaIS4_EE + 80 - _Z5alignii - 0 + _Z41__static_initialization_and_destruction_0ii + 40 _ZN5spark4spmv22SimpleSpmvArchitecture7dfespmvEN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE - 0 + 40 - _Z10size_bytesIN5spark4spmv12indptr_valueEElRKSt6vectorIT_SaIS4_EE - 0 + _ZN5spark4spmv22SimpleSpmvArchitecture10preprocessERKN5Eigen12SparseMatrixIdLi1EiEE + 40 - _ZN5spark4spmv22SimpleSpmvArchitecture11do_blockingERKN5Eigen12SparseMatrixIdLi1EiEEii - 0 + _GLOBAL__sub_I__ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii + 40 - _Z41__static_initialization_and_destruction_0ii + _ZN5spark4spmv22SimpleSpmvArchitecture12do_partitionERKN5Eigen12SparseMatrixIdLi1EiEEi 0 diff --git a/coverage/src/spmv/src/Spmv.cpp.func.html b/coverage/src/spmv/src/Spmv.cpp.func.html index 62ced79..1d69809 100644 --- a/coverage/src/spmv/src/Spmv.cpp.func.html +++ b/coverage/src/spmv/src/Spmv.cpp.func.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 168 190 - 0.0 % + 88.4 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 11 12 - 0.0 % + 91.7 % @@ -61,39 +61,39 @@ _GLOBAL__sub_I__ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii - 0 + 40 _Z10size_bytesIN5spark4spmv12indptr_valueEElRKSt6vectorIT_SaIS4_EE - 0 + 80 _Z10size_bytesIdElRKSt6vectorIT_SaIS1_EE - 0 + 240 _Z10size_bytesIiElRKSt6vectorIT_SaIS1_EE - 0 + 80 _Z21writeDataForPartitionPN5spark7runtime27GeneratedSpmvImplementationEiRKNS_4spmv9PartitionERKSt6vectorIdSaIdEE - 0 + 80 _Z41__static_initialization_and_destruction_0ii - 0 + 40 _Z5alignii - 0 + 80 _ZN5spark4spmv22SimpleSpmvArchitecture10preprocessERKN5Eigen12SparseMatrixIdLi1EiEE - 0 + 40 _ZN5spark4spmv22SimpleSpmvArchitecture11do_blockingERKN5Eigen12SparseMatrixIdLi1EiEEii - 0 + 80 _ZN5spark4spmv22SimpleSpmvArchitecture12do_partitionERKN5Eigen12SparseMatrixIdLi1EiEEi @@ -101,11 +101,11 @@ _ZN5spark4spmv22SimpleSpmvArchitecture18countComputeCyclesEPjii - 0 + 492 _ZN5spark4spmv22SimpleSpmvArchitecture7dfespmvEN5Eigen6MatrixIdLin1ELi1ELi0ELin1ELi1EEE - 0 + 40
diff --git a/coverage/src/spmv/src/Spmv.cpp.gcov.html b/coverage/src/spmv/src/Spmv.cpp.gcov.html index 503d5ba..57e4e74 100644 --- a/coverage/src/spmv/src/Spmv.cpp.gcov.html +++ b/coverage/src/spmv/src/Spmv.cpp.gcov.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 168 190 - 0.0 % + 88.4 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 11 12 - 0.0 % + 91.7 % @@ -76,59 +76,59 @@ 14 : using ssarch = spark::spmv::SimpleSpmvArchitecture; 15 : 16 : // how many cycles does it take to resolve the accesses - 17 0 : int ssarch::countComputeCycles(uint32_t* v, int size, int inputWidth) + 17 492 : int ssarch::countComputeCycles(uint32_t* v, int size, int inputWidth) 18 : { - 19 0 : int cycles = 0; - 20 0 : int crtPos = 0; - 21 0 : for (int i = 0; i < size; i++) { - 22 0 : int toread = v[i] - (i > 0 ? v[i - 1] : 0); - 23 0 : do { - 24 0 : int canread = std::min(inputWidth - crtPos, toread); - 25 0 : crtPos += canread; - 26 0 : crtPos %= inputWidth; - 27 0 : cycles++; - 28 0 : toread -= canread; - 29 0 : } while (toread > 0); + 19 492 : int cycles = 0; + 20 492 : int crtPos = 0; + 21 6259686 : for (int i = 0; i < size; i++) { + 22 6259194 : int toread = v[i] - (i > 0 ? v[i - 1] : 0); + 23 6294435 : do { + 24 6294435 : int canread = std::min(inputWidth - crtPos, toread); + 25 6294435 : crtPos += canread; + 26 6294435 : crtPos %= inputWidth; + 27 6294435 : cycles++; + 28 6294435 : toread -= canread; + 29 6294435 : } while (toread > 0); 30 : } - 31 0 : return cycles; + 31 492 : return cycles; 32 : } 33 : 34 : // transform a given matrix with n rows in blocks of size n X blockSize - 35 0 : spark::spmv::Partition ssarch::do_blocking( + 35 80 : spark::spmv::Partition ssarch::do_blocking( 36 : const EigenSparseMatrix& m, 37 : int blockSize, 38 : int inputWidth) 39 : { 40 : - 41 0 : const int* indptr = m.innerIndexPtr(); - 42 0 : const double* values = m.valuePtr(); - 43 0 : const int* colptr = m.outerIndexPtr(); - 44 0 : int rows = m.rows(); - 45 0 : int cols = m.cols(); - 46 0 : int n = rows; + 41 80 : const int* indptr = m.innerIndexPtr(); + 42 80 : const double* values = m.valuePtr(); + 43 80 : const int* colptr = m.outerIndexPtr(); + 44 80 : int rows = m.rows(); + 45 80 : int cols = m.cols(); + 46 80 : int n = rows; 47 : //std::cout << "Mat rows " << n << std::endl; 48 : - 49 0 : int nBlocks = cols / blockSize + (cols % blockSize == 0 ? 0 : 1); + 49 80 : int nBlocks = cols / blockSize + (cols % blockSize == 0 ? 0 : 1); 50 : //std::cout << "Npartitions: " << nPartitions << std::endl; 51 : - 52 0 : std::vector<spark::sparse::CsrMatrix> partitions(nBlocks); + 52 80 : std::vector<spark::sparse::CsrMatrix> partitions(nBlocks); 53 : - 54 0 : for (int i = 0; i < rows; i++) { - 55 0 : for (int j = 0; j < nBlocks; j++) { - 56 0 : auto& p = std::get<0>(partitions[j]); - 57 0 : if (p.size() == 0) - 58 0 : p.push_back(0); + 54 216737 : for (int i = 0; i < rows; i++) { + 55 6475851 : for (int j = 0; j < nBlocks; j++) { + 56 6259194 : auto& p = std::get<0>(partitions[j]); + 57 6259194 : if (p.size() == 0) + 58 492 : p.push_back(0); 59 : else - 60 0 : p.push_back(p.back()); + 60 6258702 : p.push_back(p.back()); 61 : } 62 : //std::cout << "i = " << i << std::endl; 63 : //std::cout << "colptr" << colptr[i] << std::endl; - 64 0 : for (int j = colptr[i]; j < colptr[i+1]; j++) { - 65 0 : auto& p = partitions[indptr[j] / blockSize]; - 66 0 : int idxInPartition = indptr[j] - (indptr[j] / blockSize ) * blockSize; - 67 0 : std::get<1>(p).push_back(idxInPartition); - 68 0 : std::get<2>(p).push_back(values[j]); - 69 0 : std::get<0>(p).back()++; + 64 1193227 : for (int j = colptr[i]; j < colptr[i+1]; j++) { + 65 976570 : auto& p = partitions[indptr[j] / blockSize]; + 66 976570 : int idxInPartition = indptr[j] - (indptr[j] / blockSize ) * blockSize; + 67 976570 : std::get<1>(p).push_back(idxInPartition); + 68 976570 : std::get<2>(p).push_back(values[j]); + 69 976570 : std::get<0>(p).back()++; 70 : } 71 : } 72 : @@ -137,60 +137,60 @@ 75 : //"Matrix has too many rows - maximum supported: " 76 : //+ std::to_string(Spmv_maxRows)); 77 : - 78 0 : std::vector<double> v(cols, 0); - 79 0 : std::vector<int> m_colptr; - 80 0 : std::vector<indptr_value> m_indptr_value; + 78 160 : std::vector<double> v(cols, 0); + 79 160 : std::vector<int> m_colptr; + 80 160 : std::vector<indptr_value> m_indptr_value; 81 : 82 : // now we coalesce partitions - 83 0 : int cycles = 0; - 84 0 : int partition = 0; - 85 0 : int reductionCycles = rows * partitions.size(); - 86 0 : int emptyCycles = 0; - 87 0 : for (auto& p : partitions) { - 88 0 : auto pp = preprocessBlock(p, partition++, partitions.size()); - 89 0 : auto& p_colptr = std::get<0>(pp); - 90 0 : auto& p_indptr = std::get<1>(pp); - 91 0 : auto& p_values = std::get<2>(pp); + 83 80 : int cycles = 0; + 84 80 : int partition = 0; + 85 80 : int reductionCycles = rows * partitions.size(); + 86 80 : int emptyCycles = 0; + 87 572 : for (auto& p : partitions) { + 88 492 : auto pp = preprocessBlock(p, partition++, partitions.size()); + 89 492 : auto& p_colptr = std::get<0>(pp); + 90 492 : auto& p_indptr = std::get<1>(pp); + 91 492 : auto& p_values = std::get<2>(pp); 92 : - 93 0 : int diff = std::get<0>(p).size() - p_colptr.size(); - 94 0 : emptyCycles += diff; - 95 0 : reductionCycles -= diff; - 96 0 : cycles += this->countComputeCycles(&std::get<0>(p)[0], n, inputWidth) - diff; + 93 492 : int diff = std::get<0>(p).size() - p_colptr.size(); + 94 492 : emptyCycles += diff; + 95 492 : reductionCycles -= diff; + 96 492 : cycles += this->countComputeCycles(&std::get<0>(p)[0], n, inputWidth) - diff; 97 : - 98 0 : spark::spmv::align(p_indptr, sizeof(int) * inputWidth); - 99 0 : spark::spmv::align(p_values, sizeof(double) * inputWidth); - 100 0 : std::copy(p_colptr.begin(), p_colptr.end(), back_inserter(m_colptr)); - 101 0 : for (size_t i = 0; i < p_values.size(); i++) - 102 0 : m_indptr_value.push_back(indptr_value( p_values[i], p_indptr[i])); - 103 0 : } + 98 492 : spark::spmv::align(p_indptr, sizeof(int) * inputWidth); + 99 492 : spark::spmv::align(p_values, sizeof(double) * inputWidth); + 100 492 : std::copy(p_colptr.begin(), p_colptr.end(), back_inserter(m_colptr)); + 101 978204 : for (size_t i = 0; i < p_values.size(); i++) + 102 977712 : m_indptr_value.push_back(indptr_value( p_values[i], p_indptr[i])); + 103 492 : } 104 : - 105 0 : Partition br; - 106 0 : br.m_colptr_unpaddedLength = m_colptr.size(); - 107 0 : br.m_indptr_values_unpaddedLength = m_indptr_value.size(); + 105 80 : Partition br; + 106 80 : br.m_colptr_unpaddedLength = m_colptr.size(); + 107 80 : br.m_indptr_values_unpaddedLength = m_indptr_value.size(); 108 : //std::cout << "m_colptr unaligned size" << m_colptr.size() << std::endl; - 109 0 : spark::spmv::align(m_colptr, 384); - 110 0 : spark::spmv::align(m_indptr_value, 384); - 111 0 : std::vector<double> out(n, 0); - 112 0 : spark::spmv::align(out, 384); - 113 0 : spark::spmv::align(v, sizeof(double) * blockSize); + 109 80 : spark::spmv::align(m_colptr, 384); + 110 80 : spark::spmv::align(m_indptr_value, 384); + 111 160 : std::vector<double> out(n, 0); + 112 80 : spark::spmv::align(out, 384); + 113 80 : spark::spmv::align(v, sizeof(double) * blockSize); 114 : - 115 0 : br.nBlocks = nBlocks; - 116 0 : br.n = n; - 117 0 : br.paddingCycles = out.size() - n; // number of cycles required to align to the burst size - 118 0 : br.totalCycles = cycles + v.size(); - 119 0 : br.vector_load_cycles = v.size() / nBlocks; // per partition - 120 0 : br.m_indptr_values = m_indptr_value; - 121 0 : br.m_colptr = m_colptr; - 122 0 : br.outSize = out.size() * sizeof(double); - 123 0 : br.emptyCycles = emptyCycles; - 124 0 : br.reductionCycles = reductionCycles; + 115 80 : br.nBlocks = nBlocks; + 116 80 : br.n = n; + 117 80 : br.paddingCycles = out.size() - n; // number of cycles required to align to the burst size + 118 80 : br.totalCycles = cycles + v.size(); + 119 80 : br.vector_load_cycles = v.size() / nBlocks; // per partition + 120 80 : br.m_indptr_values = m_indptr_value; + 121 80 : br.m_colptr = m_colptr; + 122 80 : br.outSize = out.size() * sizeof(double); + 123 80 : br.emptyCycles = emptyCycles; + 124 80 : br.reductionCycles = reductionCycles; 125 : - 126 0 : return br; + 126 160 : return br; 127 : } 128 : 129 : template<typename T> - 130 0 : long size_bytes(const std::vector<T>& v) { - 131 0 : return sizeof(T) * v.size(); + 130 400 : long size_bytes(const std::vector<T>& v) { + 131 400 : return sizeof(T) * v.size(); 132 : } 133 : 134 : struct PartitionWriteResult { @@ -198,53 +198,53 @@ 136 : int vStartAddress, indptrValuesStartAddress, indptrValuesSize; 137 : }; 138 : - 139 0 : int align(int bytes, int to) { - 140 0 : int quot = bytes / to; - 141 0 : if (bytes % to != 0) + 139 80 : int align(int bytes, int to) { + 140 80 : int quot = bytes / to; + 141 80 : if (bytes % to != 0) 142 0 : return (quot + 1) * to; - 143 0 : return bytes; + 143 80 : return bytes; 144 : } 145 : 146 : 147 : // write the data for a partition, starting at the given offset - 148 0 : PartitionWriteResult writeDataForPartition( + 148 80 : PartitionWriteResult writeDataForPartition( 149 : spark::runtime::GeneratedSpmvImplementation *impl, 150 : int offset, 151 : const Partition& br, 152 : const std::vector<double>& v) { 153 : // for each partition write this down 154 : PartitionWriteResult pwr; - 155 0 : pwr.indptrValuesStartAddress = align(offset, 384); - 156 0 : pwr.indptrValuesSize = size_bytes(br.m_indptr_values); + 155 80 : pwr.indptrValuesStartAddress = align(offset, 384); + 156 80 : pwr.indptrValuesSize = size_bytes(br.m_indptr_values); 157 : impl->write( 158 : pwr.indptrValuesSize, 159 : pwr.indptrValuesStartAddress, - 160 0 : (uint8_t *)&br.m_indptr_values[0]); + 160 80 : (uint8_t *)&br.m_indptr_values[0]); 161 : - 162 0 : pwr.vStartAddress = pwr.indptrValuesStartAddress + pwr.indptrValuesSize; + 162 80 : pwr.vStartAddress = pwr.indptrValuesStartAddress + pwr.indptrValuesSize; 163 : impl->write( 164 : size_bytes(v), 165 : pwr.vStartAddress, - 166 0 : (uint8_t *)&v[0]); + 166 80 : (uint8_t *)&v[0]); 167 : - 168 0 : pwr.colptrStartAddress = pwr.vStartAddress + size_bytes(v); - 169 0 : pwr.colptrSize = size_bytes(br.m_colptr); + 168 80 : pwr.colptrStartAddress = pwr.vStartAddress + size_bytes(v); + 169 80 : pwr.colptrSize = size_bytes(br.m_colptr); 170 : impl->write( 171 : pwr.colptrSize, 172 : pwr.colptrStartAddress, - 173 0 : (uint8_t *)&br.m_colptr[0]); + 173 80 : (uint8_t *)&br.m_colptr[0]); 174 : - 175 0 : pwr.outStartAddr = pwr.colptrStartAddress + pwr.colptrSize; - 176 0 : pwr.outSize = br.outSize; - 177 0 : return pwr; + 175 80 : pwr.outStartAddr = pwr.colptrStartAddress + pwr.colptrSize; + 176 80 : pwr.outSize = br.outSize; + 177 80 : return pwr; 178 : } 179 : 180 : - 181 0 : Eigen::VectorXd ssarch::dfespmv(Eigen::VectorXd x) + 181 40 : Eigen::VectorXd ssarch::dfespmv(Eigen::VectorXd x) 182 : { 183 : using namespace std; 184 : - 185 0 : if (this->impl->getDramReductionEnabled()) { + 185 40 : if (this->impl->getDramReductionEnabled()) { 186 : // because of DRAM read/write latency we can only hope to get correct 187 : // answers for large matrices 188 : // XXX figure out where to place this constant; @@ -257,7 +257,7 @@ 195 0 : throw invalid_argument(ss.str()); 196 : } 197 : } else { - 198 0 : if (maxRows < mat.rows()) { + 198 40 : if (maxRows < mat.rows()) { 199 0 : stringstream ss; 200 0 : ss << "Matrix is too large! Maximum supported rows: "; 201 0 : ss << maxRows; @@ -266,87 +266,87 @@ 204 : } 205 : } 206 : - 207 0 : int cacheSize = this->cacheSize; + 207 40 : int cacheSize = this->cacheSize; 208 : - 209 0 : vector<double> v = spark::converters::eigenVectorToStdVector(x); - 210 0 : spark::spmv::align(v, sizeof(double) * cacheSize); - 211 0 : spark::spmv::align(v, 384); + 209 40 : vector<double> v = spark::converters::eigenVectorToStdVector(x); + 210 40 : spark::spmv::align(v, sizeof(double) * cacheSize); + 211 40 : spark::spmv::align(v, 384); 212 : - 213 0 : std::vector<int> nrows, totalCycles, reductionCycles, paddingCycles, colptrSizes, indptrValuesSizes, outputResultSizes; - 214 0 : std::vector<int> colptrUnpaddedSizes, indptrValuesUnpaddedLengths; - 215 0 : std::vector<long> outputStartAddresses, colptrStartAddresses; - 216 0 : std::vector<long> vStartAddresses, indptrValuesStartAddresses; + 213 80 : std::vector<int> nrows, totalCycles, reductionCycles, paddingCycles, colptrSizes, indptrValuesSizes, outputResultSizes; + 214 80 : std::vector<int> colptrUnpaddedSizes, indptrValuesUnpaddedLengths; + 215 80 : std::vector<long> outputStartAddresses, colptrStartAddresses; + 216 80 : std::vector<long> vStartAddresses, indptrValuesStartAddresses; 217 : - 218 0 : int offset = 0; - 219 0 : int i = 0; - 220 0 : for (auto& p : this->partitions) { - 221 0 : nrows.push_back(p.n); - 222 0 : paddingCycles.push_back(p.paddingCycles); - 223 0 : totalCycles.push_back(p.totalCycles); - 224 0 : reductionCycles.push_back(p.reductionCycles); - 225 0 : colptrUnpaddedSizes.push_back(p.m_colptr_unpaddedLength); - 226 0 : indptrValuesUnpaddedLengths.push_back(p.m_indptr_values_unpaddedLength); + 218 40 : int offset = 0; + 219 40 : int i = 0; + 220 120 : for (auto& p : this->partitions) { + 221 80 : nrows.push_back(p.n); + 222 80 : paddingCycles.push_back(p.paddingCycles); + 223 80 : totalCycles.push_back(p.totalCycles); + 224 80 : reductionCycles.push_back(p.reductionCycles); + 225 80 : colptrUnpaddedSizes.push_back(p.m_colptr_unpaddedLength); + 226 80 : indptrValuesUnpaddedLengths.push_back(p.m_indptr_values_unpaddedLength); 227 : - 228 0 : PartitionWriteResult pr = writeDataForPartition(this->impl, offset, p, v); - 229 0 : outputStartAddresses.push_back(pr.outStartAddr); - 230 0 : outputResultSizes.push_back(pr.outSize); - 231 0 : colptrStartAddresses.push_back(pr.colptrStartAddress); - 232 0 : colptrSizes.push_back(pr.colptrSize); - 233 0 : vStartAddresses.push_back(pr.vStartAddress); - 234 0 : indptrValuesSizes.push_back(pr.indptrValuesSize); - 235 0 : indptrValuesStartAddresses.push_back(pr.indptrValuesStartAddress); + 228 80 : PartitionWriteResult pr = writeDataForPartition(this->impl, offset, p, v); + 229 80 : outputStartAddresses.push_back(pr.outStartAddr); + 230 80 : outputResultSizes.push_back(pr.outSize); + 231 80 : colptrStartAddresses.push_back(pr.colptrStartAddress); + 232 80 : colptrSizes.push_back(pr.colptrSize); + 233 80 : vStartAddresses.push_back(pr.vStartAddress); + 234 80 : indptrValuesSizes.push_back(pr.indptrValuesSize); + 235 80 : indptrValuesStartAddresses.push_back(pr.indptrValuesStartAddress); 236 : - 237 0 : offset = pr.outStartAddr + p.outSize; + 237 80 : offset = pr.outStartAddr + p.outSize; 238 : } 239 : 240 : // npartitions and vector load cycles should be the same for all partitions - 241 0 : int nBlocks = this->partitions[0].nBlocks; - 242 0 : int vector_load_cycles = this->partitions[0].vector_load_cycles; - 243 0 : std::cout << "Running on DFE" << std::endl; + 241 40 : int nBlocks = this->partitions[0].nBlocks; + 242 40 : int vector_load_cycles = this->partitions[0].vector_load_cycles; + 243 40 : std::cout << "Running on DFE" << std::endl; 244 : - 245 0 : int nIterations = 1; - 246 0 : logResult("Total cycles", totalCycles); - 247 0 : logResult("Padding cycles", paddingCycles); - 248 0 : logResult("Reduction cycles", reductionCycles); + 245 40 : int nIterations = 1; + 246 40 : logResult("Total cycles", totalCycles); + 247 40 : logResult("Padding cycles", paddingCycles); + 248 40 : logResult("Reduction cycles", reductionCycles); 249 : - 250 0 : auto start = std::chrono::high_resolution_clock::now(); + 250 40 : auto start = std::chrono::high_resolution_clock::now(); 251 : this->impl->Spmv( 252 : nIterations, 253 : nBlocks, 254 : vector_load_cycles, - 255 0 : &colptrStartAddresses[0], - 256 0 : &colptrSizes[0], - 257 0 : &indptrValuesStartAddresses[0], - 258 0 : &indptrValuesSizes[0], - 259 0 : &nrows[0], - 260 0 : &outputStartAddresses[0], - 261 0 : &reductionCycles[0], - 262 0 : &totalCycles[0], - 263 0 : &vStartAddresses[0] - 264 0 : ); - 265 0 : double took = dfesnippets::timing::clock_diff(start) / nIterations; - 266 0 : double est =(double) totalCycles[0] / (100.0 * 1e6); - 267 0 : double gflopsEst = (2.0 * (double)this->mat.nonZeros() / est) / 1E9; - 268 0 : double gflopsActual = (2.0 * (double)this->mat.nonZeros() / took) / 1E9; + 255 40 : &colptrStartAddresses[0], + 256 40 : &colptrSizes[0], + 257 40 : &indptrValuesStartAddresses[0], + 258 40 : &indptrValuesSizes[0], + 259 40 : &nrows[0], + 260 40 : &outputStartAddresses[0], + 261 40 : &reductionCycles[0], + 262 40 : &totalCycles[0], + 263 40 : &vStartAddresses[0] + 264 80 : ); + 265 40 : double took = dfesnippets::timing::clock_diff(start) / nIterations; + 266 40 : double est =(double) totalCycles[0] / (100.0 * 1e6); + 267 40 : double gflopsEst = (2.0 * (double)this->mat.nonZeros() / est) / 1E9; + 268 40 : double gflopsActual = (2.0 * (double)this->mat.nonZeros() / took) / 1E9; 269 : - 270 0 : logResult("Iterations", nIterations); - 271 0 : logResult("Took (ms)", took); - 272 0 : logResult("Est (ms)", est); - 273 0 : logResult("Gflops (est)", gflopsEst); - 274 0 : logResult("Gflops (actual)", gflopsActual); + 270 40 : logResult("Iterations", nIterations); + 271 40 : logResult("Took (ms)", took); + 272 40 : logResult("Est (ms)", est); + 273 40 : logResult("Gflops (est)", gflopsEst); + 274 40 : logResult("Gflops (actual)", gflopsActual); 275 : - 276 0 : std::vector<double> total; - 277 0 : for (size_t i = 0; i < outputStartAddresses.size(); i++) { - 278 0 : std::vector<double> tmp(outputResultSizes[i] / sizeof(double), 0); + 276 80 : std::vector<double> total; + 277 120 : for (size_t i = 0; i < outputStartAddresses.size(); i++) { + 278 80 : std::vector<double> tmp(outputResultSizes[i] / sizeof(double), 0); 279 : this->impl->read( 280 : size_bytes(tmp), - 281 0 : outputStartAddresses[i], - 282 0 : (uint8_t*)&tmp[0]); - 283 0 : std::copy(tmp.begin(), tmp.begin() + nrows[i], std::back_inserter(total)); - 284 0 : } + 281 80 : outputStartAddresses[i], + 282 160 : (uint8_t*)&tmp[0]); + 283 80 : std::copy(tmp.begin(), tmp.begin() + nrows[i], std::back_inserter(total)); + 284 80 : } 285 : 286 : // remove the elements which were only for padding - 287 0 : return spark::converters::stdvectorToEigen(total); + 287 80 : return spark::converters::stdvectorToEigen(total); 288 : } 289 : 290 0 : std::vector<EigenSparseMatrix> ssarch::do_partition(const EigenSparseMatrix& mat, int numPipes) { @@ -362,26 +362,26 @@ 300 0 : return res; 301 : } 302 : - 303 0 : void ssarch::preprocess( + 303 40 : void ssarch::preprocess( 304 : const EigenSparseMatrix& mat) { - 305 0 : this->mat = mat; + 305 40 : this->mat = mat; 306 : - 307 0 : int rowsPerPartition = mat.rows() / numPipes; - 308 0 : int start = 0; - 309 0 : for (int i = 0; i < numPipes - 1; i++) { + 307 40 : int rowsPerPartition = mat.rows() / numPipes; + 308 40 : int start = 0; + 309 80 : for (int i = 0; i < numPipes - 1; i++) { 310 : this->partitions.push_back( 311 : do_blocking( - 312 0 : mat.middleRows(start, rowsPerPartition), - 313 0 : this->cacheSize, this->inputWidth)); - 314 0 : start += rowsPerPartition; + 312 40 : mat.middleRows(start, rowsPerPartition), + 313 80 : this->cacheSize, this->inputWidth)); + 314 40 : start += rowsPerPartition; 315 : } 316 : 317 : // put all rows left in the last partition 318 : this->partitions.push_back( - 319 0 : do_blocking(mat.middleRows(start, mat.rows() - start), - 320 0 : this->cacheSize, this->inputWidth)); + 319 40 : do_blocking(mat.middleRows(start, mat.rows() - start), + 320 80 : this->cacheSize, this->inputWidth)); 321 : - 322 0 : } + 322 160 : } diff --git a/coverage/src/spmv/src/index-sort-f.html b/coverage/src/spmv/src/index-sort-f.html index ee7cef9..572c3bb 100644 --- a/coverage/src/spmv/src/index-sort-f.html +++ b/coverage/src/spmv/src/index-sort-f.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 168 190 - 0.0 % + 88.4 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 11 12 - 0.0 % + 91.7 % @@ -72,12 +72,12 @@ Spmv.cpp -
0.0%
+
88.4%88.4%
- 0.0 % - 0 / 190 - 0.0 % - 0 / 12 + 88.4 % + 168 / 190 + 91.7 % + 11 / 12 diff --git a/coverage/src/spmv/src/index-sort-l.html b/coverage/src/spmv/src/index-sort-l.html index ba1aaf6..f43ab91 100644 --- a/coverage/src/spmv/src/index-sort-l.html +++ b/coverage/src/spmv/src/index-sort-l.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 168 190 - 0.0 % + 88.4 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 11 12 - 0.0 % + 91.7 % @@ -72,12 +72,12 @@ Spmv.cpp -
0.0%
+
88.4%88.4%
- 0.0 % - 0 / 190 - 0.0 % - 0 / 12 + 88.4 % + 168 / 190 + 91.7 % + 11 / 12 diff --git a/coverage/src/spmv/src/index.html b/coverage/src/spmv/src/index.html index 139dfdf..be74b05 100644 --- a/coverage/src/spmv/src/index.html +++ b/coverage/src/spmv/src/index.html @@ -31,18 +31,18 @@ final.info Lines: - 0 + 168 190 - 0.0 % + 88.4 % Date: - 2015-11-30 + 2015-12-01 Functions: - 0 + 11 12 - 0.0 % + 91.7 % @@ -72,12 +72,12 @@ Spmv.cpp -
0.0%
+
88.4%88.4%
- 0.0 % - 0 / 190 - 0.0 % - 0 / 12 + 88.4 % + 168 / 190 + 91.7 % + 11 / 12 From a3f25941a14eed0c15c5cda5da8b98d0dc166055 Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Tue, 1 Dec 2015 18:25:38 +0000 Subject: [PATCH 10/23] Update matrix data --- matrices/dw8192.html | 25 +++++++++++++++++++++++++ matrices/dw8192.png | Bin 0 -> 26431 bytes matrices/dw8192/dw8192.png | Bin 0 -> 26431 bytes matrices/dw8192/sim_run.csv | 19 +++++++++++++++++++ matrices/dw8192/summary.csv | 2 ++ matrices/epb1.html | 25 +++++++++++++++++++++++++ matrices/epb1.png | Bin 0 -> 21699 bytes matrices/epb1/epb1.png | Bin 0 -> 21699 bytes matrices/epb1/sim_run.csv | 19 +++++++++++++++++++ matrices/epb1/summary.csv | 2 ++ matrices/index.html | 8 ++++++++ matrices/psmigr_2.html | 25 +++++++++++++++++++++++++ matrices/psmigr_2.png | Bin 0 -> 164552 bytes matrices/psmigr_2/psmigr_2.png | Bin 0 -> 164552 bytes matrices/psmigr_2/sim_run.csv | 19 +++++++++++++++++++ matrices/psmigr_2/summary.csv | 2 ++ matrices/raefsky1.html | 25 +++++++++++++++++++++++++ matrices/raefsky1.png | Bin 0 -> 36424 bytes matrices/raefsky1/raefsky1.png | Bin 0 -> 36424 bytes matrices/raefsky1/sim_run.csv | 19 +++++++++++++++++++ matrices/raefsky1/summary.csv | 2 ++ matrices/t2d_q9_A_01.html | 25 +++++++++++++++++++++++++ matrices/t2d_q9_A_01.png | Bin 0 -> 14455 bytes matrices/t2d_q9_A_01/sim_run.csv | 19 +++++++++++++++++++ matrices/t2d_q9_A_01/summary.csv | 2 ++ matrices/t2d_q9_A_01/t2d_q9_A_01.png | Bin 0 -> 14455 bytes 26 files changed, 238 insertions(+) create mode 100644 matrices/dw8192.html create mode 100644 matrices/dw8192.png create mode 100644 matrices/dw8192/dw8192.png create mode 100644 matrices/dw8192/sim_run.csv create mode 100644 matrices/dw8192/summary.csv create mode 100644 matrices/epb1.html create mode 100644 matrices/epb1.png create mode 100644 matrices/epb1/epb1.png create mode 100644 matrices/epb1/sim_run.csv create mode 100644 matrices/epb1/summary.csv create mode 100644 matrices/index.html create mode 100644 matrices/psmigr_2.html create mode 100644 matrices/psmigr_2.png create mode 100644 matrices/psmigr_2/psmigr_2.png create mode 100644 matrices/psmigr_2/sim_run.csv create mode 100644 matrices/psmigr_2/summary.csv create mode 100644 matrices/raefsky1.html create mode 100644 matrices/raefsky1.png create mode 100644 matrices/raefsky1/raefsky1.png create mode 100644 matrices/raefsky1/sim_run.csv create mode 100644 matrices/raefsky1/summary.csv create mode 100644 matrices/t2d_q9_A_01.html create mode 100644 matrices/t2d_q9_A_01.png create mode 100644 matrices/t2d_q9_A_01/sim_run.csv create mode 100644 matrices/t2d_q9_A_01/summary.csv create mode 100644 matrices/t2d_q9_A_01/t2d_q9_A_01.png diff --git a/matrices/dw8192.html b/matrices/dw8192.html new file mode 100644 index 0000000..691ac61 --- /dev/null +++ b/matrices/dw8192.html @@ -0,0 +1,25 @@ +

Matrix: dw8192

+

Name, Order, Nonzeros, Unique Values, Sparsity, MC(2), MC(5), MC(8), MC(10) +dw8192 8194 41746 673 0.06218 0.44814 0.68117 0.97480 1.00000 1.00000 +

+

+

Program arguments: + ../build/test_spmv_sim + ../test-benchmark/dw8192.mtx +File: ../test-benchmark/dw8192.mtx +Sorting took: took 0.0713946 seconds. +Nonzeros: 41746 +Running on DFE +Result Simple Total cycles=41970,41968, +Result Simple Padding cycles=32,32, +Result Simple Reduction cycles=32768,32768, +Running on architecture with + maxRows = 200000 +Result Simple Iterations=1, +Result Simple Took (ms)=2.33056, +Result Simple Est (ms)=0.0004197, +Result Simple Gflops (est)=0.198933, +Result Simple Gflops (actual)=3.58249e-05, +Test passed! +All tests passed! +

\ No newline at end of file diff --git a/matrices/dw8192.png b/matrices/dw8192.png new file mode 100644 index 0000000000000000000000000000000000000000..cabd91270bff25f42262f0c7f10f1bffb6c5a51e GIT binary patch literal 26431 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 IGk2f-JJ)}DwEzGB literal 0 HcmV?d00001 diff --git a/matrices/dw8192/dw8192.png b/matrices/dw8192/dw8192.png new file mode 100644 index 0000000000000000000000000000000000000000..cabd91270bff25f42262f0c7f10f1bffb6c5a51e GIT binary patch literal 26431 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 IGk2f-JJ)}DwEzGB literal 0 HcmV?d00001 diff --git a/matrices/dw8192/sim_run.csv b/matrices/dw8192/sim_run.csv new file mode 100644 index 0000000..88569c7 --- /dev/null +++ b/matrices/dw8192/sim_run.csv @@ -0,0 +1,19 @@ +Program arguments: + ../build/test_spmv_sim + ../test-benchmark/dw8192.mtx +File: ../test-benchmark/dw8192.mtx +Sorting took: took 0.0713946 seconds. +Nonzeros: 41746 +Running on DFE +Result Simple Total cycles=41970,41968, +Result Simple Padding cycles=32,32, +Result Simple Reduction cycles=32768,32768, +Running on architecture with + maxRows = 200000 +Result Simple Iterations=1, +Result Simple Took (ms)=2.33056, +Result Simple Est (ms)=0.0004197, +Result Simple Gflops (est)=0.198933, +Result Simple Gflops (actual)=3.58249e-05, +Test passed! +All tests passed! diff --git a/matrices/dw8192/summary.csv b/matrices/dw8192/summary.csv new file mode 100644 index 0000000..27df980 --- /dev/null +++ b/matrices/dw8192/summary.csv @@ -0,0 +1,2 @@ +Name, Order, Nonzeros, Unique Values, Sparsity, MC(2), MC(5), MC(8), MC(10) +dw8192 8194 41746 673 0.06218 0.44814 0.68117 0.97480 1.00000 1.00000 diff --git a/matrices/epb1.html b/matrices/epb1.html new file mode 100644 index 0000000..8521dbb --- /dev/null +++ b/matrices/epb1.html @@ -0,0 +1,25 @@ +

Matrix: epb1

+

Name, Order, Nonzeros, Unique Values, Sparsity, MC(2), MC(5), MC(8), MC(10) +epb1 14736 95053 73230 0.04377 0.00017 0.00135 0.01077 0.04309 0.31577 +

+

Program arguments: + ../build/test_spmv_sim + ../test-benchmark/epb1.mtx +File: ../test-benchmark/epb1.mtx +Sorting took: took 0.157675 seconds. +Nonzeros: 95053 +Running on DFE +Result Simple Total cycles=128288,128276, +Result Simple Padding cycles=25,25, +Result Simple Reduction cycles=110505,110505, +Running on architecture with + maxRows = 200000 +Result Simple Iterations=1, +Result Simple Took (ms)=7.24573, +Result Simple Est (ms)=0.00128288, +Result Simple Gflops (est)=0.148187, +Result Simple Gflops (actual)=2.6237e-05, +Test passed! +All tests passed! +

+

\ No newline at end of file diff --git a/matrices/epb1.png b/matrices/epb1.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dba89d08850983541e3131994c558381f85390 GIT binary patch literal 21699 zcmeIaXH-;8*Dbn1ltx8bQ9u*{C8!{XBn1fqDy<+va#T=4BSFcz#a1x@iisdmkPIS{ zqlzGsvyw$Jl5;+*+UI?*-+RAtZaCxKU*{R)88+QJRMoCpbFR5&?FXut&eLyY-HKrt zJwZ`H9m6(pU>LOyZVP-9;^boo|IpaW5j1e{p9k)mFZ@ksr>JX>VGLK%|5WiZah4dy zfe{qWXt=!o-RbJk)L&RWReOzN8|Mqc36jaqr`#Go+n9AvAATO@^GY++s9;y>wnuF) zA4u=NtG;xJiQBzB+$beByZ-wpsvWN$%3Zs>?d(TBu06~#>WB4r$x%HkDY4)16*e>5 zb%HLVcExc=Twn0uLe<2=Xi(qh84vG(FD#}s&@Ai>o_T~3eZWiNIMBa7_b_Vshr{B3 z|M@>14V?a9ZG`rvOa5({R&g;gT%9+|*_MB?Z?KFsPXBm$O#k_d7qR|ql1HVbjl@Eg z51o5lN6YTf)9l<`TE$*#9~?)uijB=p3ztWd9zJ?>`ND;Vtyc9O>|Nd) zo__mJsV5{PJPZiXj=L20JT!E)B`!W*(Q{>9^VY5Rzn${mXJj}o&swIX3mE3bbaWUv z4%MA`@ZiBnOG>Db+i_*TH zvCv(+b~UA&p05s<(tq*dh0R*@PkX!dRoCj*r!LFi-|?c;M%%#Pb?Zj=rKln!V;N_^ z{z|EwTm28Gr>8~idSqkc;`m@p#5*0Hg?mgB!cN)q@QmN)HGMpuJ9yyBmoLK)c*El} zRJb}fMPAy1yDWciyO3CD_3DE6M)r>)&wSUur{^DkF%hyYm^v4)Qq9ZAdr4%|mhH#+ zv{OYSoqiwRCwAlbLYI4*WmiG&k37eur0%!~FCvU~RpCOHm6&zgwU$&vt32lk8+dN! zmm;Lc#0Eay-KGpp4i+}||B-Hb-*xH>v$C9=kLzsx`OalcP0ir(&iv5%vG!2$E|<@{ z_v{H4GA#=ls16NflXRl#Umm?RJEUgc>DU_VG}adU{Q2(e*61bag7xLmGGb;(#A+X} z*{?FcfwhHh@g%L36Bl3d-<(5Tv1~~W-Ye;peB|iS6KTckdAU<%`;^Vh-X^4`I_;bI zd7oVjo{iaXL#$c3Kij|$^9a$KH*cCv^?tEgyA&pI-6rSfmS@4imMtmz=3Q>1#~O>h zy=Mw1JZnAXf0&=ib&6YCSqLSQY3y4KorC8_TSFJRy}SAKK71`LFAw$JSnzh9d-SsQ zqL~Nk<%Omv2mfE}52Z)umwc>E=-(7|6%>#BP zt5UMNh;9qxW3NW79;&@LM|oUut58^#d4)_V3qObI-|(C|^`k0C=vU&J+uX=?m=ELg zKh`Ua*G*7km-=5BTEkrA5fG^9>+jEH+ZcKi5W;j!FKBxDmUers*SzqvCr_^U??2T` zTxl&{zYc55wdXc%>RbbBf9_y78i@T;ZcQm`6}%B5@P~$m28(I*jJ>L!p5BCD_@9N* znpos+w={h{yEeJ8%x|9`%<9dXH`|yh{E~_voBa8ihnxFLvT<=y4Yq4|0kb1VOb;yz8-kc9$ee}h|$mQqewAMVQG2*=) zY$MBVKR?|qGf8*Z++mpSwofNH^H19P&q6}@EN<``mbFHeet*Nv#8Y9&R@6})IaCpwy7#K_hsZUOH!?bzv z?Ae=wg43OLpXp&@&v<^%wU29PXqe3|UQ^EQ_R0?tw@rn(VgbV~0kd}WG5Uiq??Nwj>8G(;l8X8=L)QK1Bv)y;JjXgC{Z(t3MjxmlcVCi=-pLZHsT5p@0 zG}4^R^>uZ1->FmxnpFiw!5yoEh0ixQx2kn#vYHy)4T9BrK~YgvT|H3SIJA1eN#$E* z<>!(0>L4L`nZ=I`B90?X62<`oD|WxX3mN9vosn6e3J|^iZ8t4-qpNN6)b$BjJ&!WCgCs?nWCRPa)&`$b!C3+#p~C}I}e>3 zx=nk)Zcp9$nZZbbsG_bik8z*j@9Cx?Qtnx>{9<8|=C-|AIsh|GsrK~DVBfZr3Of}+yqCxJh zvkDt3%NT#0ErH#axyNxMk5*`cV_Rgc)%Sj*aQDYx~d zK}|KaC?6jm)rf#lfi8e3hOaa)}#pX+<3k_e4WjE`46d-krCZpDubb4OTE z@kIGc z7^4f%yzZ@XD0*~rDqTsRjuEX7c)3Hy(`Co-vg3ETk{=em7AG7$|b>E1pfp z%K&~;gMi&(6wu=S&a9fXaHdAm?dM%)gYH9oM~`w5nwy&?+~<==cjni-G2q>C9Jq^8 zZnJd&w}}A8IhpJy?PLR+3f&h}Uu!+<8yLu2uL_rHAIsFY$vq2;v#r>>xb-IOj{T~G zHDP<$*#(F5=W@e6RbHQrdjI}JwtHZ3ur6AI|-ZZo0dT z892&p&mD$Dph#-&>^8+~P6W}~`Lyb#ObBdY=RF5UT$Le~v>=dKCUhHKhIudHIHEBT zbWHDqDnM$eo30-~WkiDe!Z;D=g1$S<1w&ZkXp*i^6bnV<%Szf0JO*G&27K0o0ZEuC zd^308`Sa&rf7->XL`d6o^KuWr&^CHnZPuu7TgW|}zwBp`PwRVzlb=L80#ld=MO5~U z#q-(oS3lni-e+4-4|9}T!Mx?GJQNj@v-?O{il7`!}(_{pyd11nv!BRskAyuY5+gAMZeFkv^ z0Pw}zn3z%)#=?cGl`oH>fNQ)y{mN#n=KQsyjrEl>7E^#p>l4Dlo#9IT9`BoNy=L}l z>k|kM9z1$9<7QHA8X#pB`0N>k5px6U472JJbaZqB(3|^7)k`d0$;tf1M&|M`JU0** zxvZ(#-?F~az0n0QlX3O)7E>h$uN|rLvu{+5)6ydHtsFDmRgH{n#tUXHJqrmT&cj@s zV1c=_zP?bL?-}6W74bob->f6&CZ*vYK8PG0r|MC_&U|N;aEK=;D~qNTOg{upXH{yg zkmE3{j)vBE=bsbStFuG(JV%aH@Ehhe{qD$Z zTpiIaK2cFoF;KKJZvTh7!F<^(Zu9!b`|FQf*XCNQ7m7DL8{eE~u%GHZn>}^FwQpzZ zIWl?}wNeYOVL0vEzt;tY7`vd6LdRuzt+~y#=-URnkLQ*fICnap>GqujY|VgUg%N?( zE%qw>0Z^lx=a2voQ>ZiFSsXq2GKJQ`9$+{plC;yr(hBE8(slR;)>kIP(ckF*ZjTvd z9RmcOw{vLW55M8&q*v&wm9GRBmZe>X>Z0O{Y3CAb4}DTBpe6BA<36=4%?wtncrRbJ zhptdK3pq!kOFw_O>rC+|}&OtNM_QEg|E?p7>Vi|@8VQC~OZDham z(sch@tJYK=PR@@GLva?rX zqx}31p;IXCU$}6=q3`R?w9Z<%9A0Wsnc+;PO{YX`OpHZu=>wawA3uI956WyL6tB;v zaY_h7>PoYTisp=_fk852ch$E}MpzrEtM7W)2-&^t6V**Vkw^LXAa;fow1tHVG-rOc zhdA5iI>?5SLYQz=GUuV)np#>T6W$y7KqKGI&d#bv?1;uu(OjJfbMC5-Av}}wWW})3 z7#|<%wQ}#(^YJR1)X11mnf%35W zuENlLr!HCa_w`x88j6zkd(wNrj^T9U{z{@| zQd6p-B%o#f?VSzWr?@mlro&PagQ*fcUmG%2&iUcFE?x(c+$WM}!lT{<+zW&|q99mx`Cez1s za|BE~!?s&`?)Q(&>b!)(V(ZM-k(+wz_PO_;G#>EuaFj@v$6?sV-qodi=ZUT$!TI~% zYGi-hukCx{q}l`$%*0}xLeuV!yz2CSbDRyjVTa@Jm7TkbKeT{vxKMN#pM>LtHhw&V zogwGx;S$&+^jv2X0-AqW$-!l1IpCRoOwHP#^yy9YD}1k%G$#y2Nikf*t_k%`VHY(n z8WTmAcX~oeaXUTXtz)BuFLvyN; zYzmF46ef$zI`9wP;$N7eT({^DiNoY~XTGj-XMMpIm2y}_I8kcc!G}WS{oVLa(v+S8 zR+Ub9Xe3Cs@T~>q=&z76 zm;M>dThQD+@u<1J+o8Gi8~5=Q?mVU1zk_yQm?|@j%|mZ_U;FY|^?)M!YVt{EC37^F zN*JkV)b0nP{!E_5&S*?;DEZ14wUSQia>x4Oq1BUYa4J(}I*ipP1~}HwQx1KEiKG_r z=OZl@jnKyp&e9B?Qh{!Rc?o}Xnh70zdnW{4w+_1WR+SOH#Ou-EOZQWr<`6XZ*qpxW6ed*yyk(Z{>9U5l1QUJOp{xl6<_BM_)&{^3x?K>~D zUO|u=H+gKH@{mqb<5ag%+DZKgqjupybAo0E6;1pm%AB};2BRAJxez?sD$%FirCk84Wt_thz4^jj$0Thqn0{b{Ct}N1y#xQBhB(WBlMcV+Og3Atb^rkM{~w_>omz8PCR~nd0$!G#H8MhkB$BXq@7^{bMqIFa*M_$NGeO*PqYE#Sv~<0@ z>xztRjh))ccXdK_Q%+bzY>4g?dw`yGF)k{sCsc8H>Cx9u+Z7*AZD$XB{^Us{P{n=qZ|?=q2*78z#w8;wjE%bSo8W+An~OpL7hlU)b0j-V6UmeK-FID zZqNiF4R)Q&{Ba{SohzZBprA|0s@PU!(p%ZL&ycZ~53Lm0MGK}8Mp+A>Vk)4u-UEG@ z8%f+z(qTz3Z`6{s#*1CduU|g`#6`i}!Le+=tqCl6QK~+N6w^lTFtutWMYoiqJ$Y^{ z2~v!`{HkemoM@@M-nwm@rjE`~irQIe2p89=<)>xOE3x%IW2% zxbZmCozMsM&W*@HemUAzKW-hNqvGPNbLR8Ef7qmT-l{wXe5zr6ZKcp((yoUDx=r%p zq6^_xvxCdL)XiSco@Lz#O1gnHP)BWOwpNN>zgQVCi)-mRB4$-A z+U+2KI8OGQ8T*k@j$}&>Rn2n_GnAW+-##t{&M>bG3_UiH#I-ul%EAT8Ad=m z;PkXFnyH>~O2N^ffGEE{spjhH3iSoO+*`3li@n?S?Afzn4?n2Kh zq6kEHF0t7Kg?=0l^L;jNE zNV8}v_TDHlatT7wpQKZMX$a?DpTn5s?W`notRlKhimftXzA>Fxb`XA#8CqR>G$~7u z!&Bc*pi3|e>bg+0=dJ$Ps}cZ8Jk&V+!QF2+!BrG6D!IeQ1BT{)4^}FDy&eD)6N3G5 zKmgw*8S?XQ?mRJ^HL*JXP^=Az{8vkgIk^nGLib#tuO;hfGHOw9`L;Yp^@+S;E*Dc) zOFk)t0FfHdg}ieE{_NAISG3k596=2u$#TFo?jgvF-b+P;lSk`-WN{Ww-@QWl2u=DF z1ds`QBj4lmAvY=vQC`yV@>~1>lgiLE8eG+_G6Zs9>h~{O?{^<3HOBp%L;J55A<5GOPI5W z0(EuAVWfWkL1SQG_{}Z~f`H$<;lK-&8vz5u)W~rFJHabZS4a}#VR5ZROsL6O6Xx(!P$00Mq^*61u%bm88`#o*VqhJCdjP(5+ zMrA^SfKK)#+)9Xy#!b!-qb_AZ94H@gAh@J#GAI1#izth1JlvAy3uUaf!Y%KiwJ-Y) zddYGgkw*0JNmvs+l$9cmOaD9+d?(a5xzrF-@PVgRa<^XxW&sd1tm8Q4Q9gh#FJ1}v z??1)ZTe+x}M&W@9VsI%57_h&Ig2FcV(v30!R-v6eiIf3fhlg6nfkG*%7%z)0k`XEE zVW7cd(%Y((6vzJJ$O@=|=dPY&!mu1BIKU4@_9ufigZ~;+(j*K@9oKrdP^U0?@zXzy z^&l`c*=MLROm8pJ-`|x)d})nF8lSN*@qf57V36WtD8&VZyAJF{syT#kn>3JSRH07y z8sIBQ` z5@SWJT827u?NeLFi#NQ+zNbThl1&{jgPU;Pf4>?ik8@3zRgMS>sstht9ppK+XS^yc z0KdN_yg++HAszs?IYnQb(D3aA-`wJ_07%pfM>_MfxrV3vEAz&(+MC{Azc>c9r_ue0 z=7meS6DPU~^FS@#jKRfDJ=T!l)I+eG2Q^N0w++WjMTCqLZ$bf{ zR&Q^wTlw?87Urjq(AtTV251xo?y=TGD^u5$aCy|DFgaN%@Oenc$ebQWp#_pGmBD@7_i7iB(d(#qWW4 z6rwTkA2NHYtw2q`25?7Bz^vylU-BfFm3_Jl%0ECFNa$QgjvZ6}PvTK@3B(O&rNPlT z-K-mX&)V%gJc+{cHcl-FJCQbyYj?skaBP#}FRy$Ff|6yJgyRK3Kus8c(OQr~61Fi5 zd^O7${z%KNfr|9cpT|I**4^(W2pWhPL%B1sFL8MCw|j3X9f(6noKDTEs;c@k*7bML zD1j>aKnOu7Jdd|PQ1jPsv}Y-QzDIux_Rd%X7-aUay9QRV>rHKz?62vG8Aic?|Fv~Cx( zV-9!{jS_uD{*Mn&ffAetGG$?#_dlYMf8{c2A`~dX~NNbdqmX_Q=ZhsLGG0`Fj zu7ruAmDDXe_Q&&vyT~ncI!9azKb-)nPXc63RK=Ib;ehr632%8Q!pAcZK1>l}m6-B6 zkfoeV{4T9`3KeRIGUgSXrccVM46LcJ-*OkCZ_l70_5HngjB{s@r`!dpWib)PUITv$ z0)LdlsPHE!p<0HmQX4T8JmmWrC*{}lyBIY`9|B|2cgT0~On*Mg!bdUcjQy1`2=c#L zi&X&Ra-86-t9Q}T_O(GDd5?>7X38t_EiuU@BNl@4VeIMyG<~8$B#`}Xg7BvPKHMQW z9mpMN2sLFMX*LQBfJeSP8~B41{6N>VIEuddtNk6k6hI5{f%Btj%uZ=p7YUS4ABX_7 zmi-JUdeDDE{;Q>E5l`uoixEOWi|yzN3J8#&0=9CPEEV&VMwJN`zrS!{C*lp=fRYL# zTN|k`Uw&xnPKq4iyB|KP-9}fv2B_xCdYg_j{O)kkW81mK5crmax}x!KvLok+ZZ!$e zi+4mQ%;B*UF3OF*#HpYwJ)(di2p_TI6r{~aPT0GgF`4S^m&6*VLFv= zN^|TN49cGeaCvo~9O!}n%IDDch)?3}5sTT@7<*6tfu^W14^kaUnV`QxrHGZtp(~qh zHsdL^A9xcr6(-C%{)-XrQ~waYf4kW%;>p&4thatDpf4yKLT8nm-Gw;~t;BZ6dm?(| zvA26f6e(ng3}TbVC>;WY1Z$#*TepErVhkv^#Gizw$ID+alOx`LqBVVttaBD!6_^&* zbO)`JMRvGq>L<{5I43;iJZ}CNJqZF1$1WJBNUHxzFl1wZ`;r*`?pkFQqP_|OaJj{= z8a9j6Oa~;fMcc=qSlL$kVMGNkgxz*myPGchYy>e9Kg-X zTWOQcCn>2Pr{cb`%VD^I8-*W0_zOx(8re3Tvy@^$k+J983kZ6=q1A7J`OvdTX#6P! z?8NZ^Q+H_r#b;&UE^5{%W-6{NsKm^A{0a%;KXO1=KpqDb{%|lo8F)JV{vL&@*~_D8 zt)Pg{jv8<1ojrS&Rm9?nfKkDaSl8@uBZ#+gD10CR7&5%M#)x$dWce9&2Itk>M7OcA z*HWw(1kGV6xIBZLR^&A73VV(eE#y~9c>gwv*$m5%KnHqV{X?lWs zZFBWwBM9r@qhd#Z=Wv&SFakwO@S{Y7StGX%#1lc&#}J`A%f8msXkEV^i!w^>_B_YY z+0X3jbwGBGfMf>lsm6`;workcZVL6?(O}D=+HcAn>*mtO!H)`r#55n(oknof~SEp4ul^P*B&OO#CPxN zQc|Knwen6-LALim2c=fgW9t5KHKI*O=5lY zT`RM*fo1+|NywlAQeSEoOnFN%uH^ylcZBC`Ryc&<=L(%x6)JHeT?M4bZ!B-nJ%EQb zLna{#I!~wPLT6wMvysagC@j{OK427uCy0n1)GxKbz}J4r*?aO1`%v-vXz}doOl>95 zqwe*wZX~o8PJiRm`(W`@zq(Ag_VgQ>)t?N@^#NWnp#2^O0s>kLa&UM-U6Xc23*$sp z4~`b-e_h1-EHA`2B2-x=yjF9N>l7x7)W+&esx+z>BMTrRTZp#64WjDboFDzdY^(t# z&dxG@5O>fSd-$}5puKspx-&hNZh`aXbBeK>TV9v@gp|}wm9X1T)croYlTB&HGDyiW z%yXdombvL?$%ZIrIAK93$&ok@Foq^$cq%50I0Y-ho zA-Ed@bikWYKt~w;&Pn_SH?gbV5I%?h8=sLxFUv9m^Yj%IgqkLmd^JU{BKB31iGB$} za8E%`Jk_cUWABp*(SK_Jshi<`2Pv9EJqe=*9R*RIr~c^UJ<7+&=;PtzD`X9q52Drx z*m{VlWl=~K#6LhEKT;ZrdZ|D`)Ib0;j;$y&MdAtOy9-5vgQ#cGIHYd;M3+}Xsu0c` z{Vuo8@TU^evB1np#$<1xRzFAU?p5F4jeU)7_T_I-{=+xW?MBer(L^^20cwE>fo@gG zgHTpv58T%TiB%M>rTTgr;xrV?H(nk!oXm<2P`WZthh&HnanzzS(4uf*PN${yuZY2M zyhOJ+htM9k8M;||9I=p(piGchn1h1x=sr!Le_&VO3V-b51QbwlJK*3F3NyV82V*%% zsm3e99Z1aoQgmPfkSu_TVNDglDiGnh`r`RP7-mF8u}C8_99#?(1=B`yUP%Ou0ci`; zIwnEz#!7h61X_f8H`bF;!e2hUos-^g!oa^@8d0W$==-|Ez_I&v8BJbI2p@t0l8piR z2xIlD-b#fjBlaXhfT?MIHBa!Deqk9e9I$v04hZ2tUYUOMbX$lRy3!{go0y$48ZVJ8 z=wmhdxQK>&avPeMMI5BkNN_z`et&lrRBL3m0}qa<`}_?Mokv{^wrQpG7MoSVvf}@p=V-c|>3mj;% z`@v%c6(0@oih;fyi{csxy)9{8b9{gvxy%1E)kP0%wBS^G4)#VmMji`@6Cu)`c}#*v z$$N#(a^{j!Q(Gd>-1z{R-!bDN1MpR=Li82!ShRywO89Uq1IHvxLavEmym7jz1V#>} zB<`&!#f3r=5uz%wH8qTD7?fRP!OArGvK4tTktJiGHX;oi^VT3FLlx&a7pg#qNjkSQ z#9jpU#7h8P(+GGp2UZCpc;5nJz$0@Wye|z9e~}v#3=M=pua)-h#F!WbNcYr1Z{a3@ zx>RSK-T4;GN<=UQd@N!E%`oU!_xgKV+jnV_gO}4TwMvMswWnPyUdz9HH}$}|*OG6I zTbwK36Xg_@6{#^YwJ?WJ88Kyv^L1cgZ%a6+)nI*r3QPsm(13%m%6Juko}vzh5m7L* z!(i7m&(F8pCgtVnf&Ief7nFr6S>8asF24=5nKN&yd`rn-7BkxxJ%)me#P<4L7JyK(P{17XLK(Wc&Oe-;s$7H$VMraM_Sorw(6 zi?Wa&Yr~F!bB|e~Xb-r^3Kq@=#)Mqgq-Zsc9{<-`jjRL8xH^*SGE@v-SEhHAqXjdm z2FwpwCo=iZ4b{s-ZVf(=M$p3$1|~&E%K=PBNq=zz&qur_--0p6`}glV9u88Gc{f_f zC)j@|dlPL_uD$t}^74y;NpC-AOn{DogheP+=C^^*j#9ZZ#_Es!8%hB0WbHtTQvzY~ zgZG9P@}^}@0GSVTXjB#lVdZZTXT%=rr%)eKhS_MJNzX2A05Jo}H|;K9;Sc;`QXeE_ zYG4gasu`-ynV|S-hkpL4dgjdS<=NpkAQmmps8f-T03MURm+eYsnE~w?yzjegh9HILs0u)lm$D9RbZr+Jb(pqTezvE`xy943%D~wb{nhDM*n9YQm7v zazs>A6LF#Y>|XJ(uS9D4>mjIX+s%c+90#wm=*?aQsO44IWLx!rd$HX6NDvJ1yJy|0 zI2@>r8Nn>l40$Rr9U5j>fo4Fk(YAqPSbS@P-s^E&=via>D_>bP#1N2x6(X8c5d%TC z8J>4@fvdf8(D5^{{6-pLA3=F~STkv=!@d@FEnG)l9^_ksl9SZR?~HG?wa%l=?Cfcf zCTXKGIit$yDDa`F03B`mr`8nNxe5FEaYLB%+_*4j4ZZ#W%`N~CJQH<>sawMN?t5l(5R8NY&~76XB-5i?E+fFZ`UP6^_hP0b z@OUQ#0rg;vz;G84$kv0Tg5mU$IwH#XZ*_!%Y-CYDSzu+x;ztVplxSE3(82Bq24^_{ zjS(|j z@%fisWgN9B9#xab;8Vmnh)AhIz7-7L4EhcU$v2onVaaK>N>ChLO{EwiVTHmqIe7l7 zpTh)vCm3EBHAW8g-}eY=!7+5z0pwJ52&Eo4Y4rPBbXOlV*uJj7 ziFUY-dyI!x8kO&q!xZ+x0oc}3|Kb0GAN!g?x3HrAzsmEvSunjxLujxfnKlH=0}FuS zfW$`{LU%2>gNRv#KR0kI4lOj|@pr)7qkNie8%6}ug~ii`?x7}apkH#fBA&H@$VnXu z$t~lI4IfZ#>L5Mz4`T=Ysze6bk1hIwTZf_wVyvA1RSWcmvLBEiqy<_?p!O@{gZg#C z*F1vha(^RUF6#p16RT5z&c*`8w)C|>^3wf`B>a$rZfr-7WUzii@E)9IG|^PnfhQ=t zh)%Kd18#j#)QhL|0Wj~Mhz*k17rl8(IlI{_M*qMO$quo=5)~XL2E|6j=O?|_3(RU> zCji=g13gDT;1Z}jj`N-WEm_K#c({k}IoK;pOBEb{e^&z&HI$SlN1R8Rjwpwp)&;>B zY6T;$X%T>RdV@ir&LG7B2-NlL_7`DcDUETV)0_6e9D*rt=ScJ9u$rD;qPCIiS;Q|O z>*pqbCp)Pd!l&q!671Ce9VteIddOyrGD{@i#Kw-x^gzBE1KAe}JxJ#P*(VbW|9{dc zz#9~?AWU0AuGaSM>K)h_@&@v6D=0VFcsl>jHKf6On2I04Po`Ro2-V_wzy)O6AgJr= z27|8BEU|*JJTPdYeGhtBH;xcSeq_WU2Lm$53kueXmi;etr__awAGKa@fxx8bW}Lfu zQ*>!zAk?;{)44mP)yQ2LT%+_Qom8YA;eo~M;@|E2evj6qhS=TAYe~;!uWwJ(3KbN% zC^6{t`pc~~RN?Xo*!$%0wZ{n=o&WcUlW@;i)-x!!=|6qpW39nFF*0Dmi`4t!5dyWq~nZZE`D5UMqq< z6=OnF93ikMdnB7k95GQLHe-KN`C#)U0IPYKzc4A z|9Du)lkZwOI`N-A$z^9fd{`z;%{oa>#dR+xHkR;TIL^N|lpKYfqi%C!Une&4^ zCHvgG|J100k@q!eo{D706ogk#3|YpT>yN445`8si$ihi3&C6RqV+)&7VHTPD*5K+N zgIA^xWI(llNX=Z^U!-O^_0oS&YLe1syhlg%-IXw3t<%xWvdM=?rB7gY4q_MoDnSut zZuR-1iq*|uWw~wlAoYPooT8Wc&HAxsl2(ODx&>^=OU*(~+@6nj+A_=olB!{w1!$H? zC<7gqn*dowqoH$WEEtXrb8mfVb_Sxq4D7PAiyey&Mh=R`^w(fzh=hP-mrld?@J8DQ z0<(ZY9q2e*&8IzyuwN)JhJ9`5JP=iN8=KUBb{|=SF9>bJ`kUUQ|F6-TJ|};{f=Qoy z+xJET2_&N3VPNY+RWaC}mUe!fT2^G+sx)U2|L0q`x{b-8%~MyHjI@hT?;J#H4XS&` z65d9(FL|c`t%K;%T;%Ca5VevpuMUX?_LHESVTN?)mjZ@~kaPX8qGXXWGR7d~b~}Qx z90}v#pMTmsBJJo6(Glsr`^0UU#JfG-NRH>o7cYJhq=>9mRngH0QA~j?p&M}!*(~6h zxxt1BBo8*Xx)wn#unDYp2~<#231O0pnJ_!^`+zkQh>!(Q?=Mx6TSv(&?Co&z7lKUOfpX2}U|j z@xwueZ!65X3ydzSh-ZNAbBgJYw7@|P%Mf`rfY3nwgHqes18qZ&PWTFGJ_-~x+<6Zk z#zAoEU?iLZjtZZE8mw>_n1RAU%Ar*thwWG@5~O(g0LDC^HivP1g2Dv{QhhLAYM@5Q zQwpci0h3dpMyIK9{fF%oF+fuMFQ5shkS=j|q>8Lr8g?JUb}OUz0$|8q0}>J<1qKNE zebu4DgUriN!DE3AenN;(I$RDk!Vd8ujx981P@2S9a(B!5YLf9BS(LMOqQ>k%jVZ;W zK|k#*z3@i>lD&c0AKrAe*fh@^H+2^ria1W$-$)t3-}zf%qLh7*1sEf-^l$X*P#n9! zzf6#DMq*(C^`|yC;9i+?4LK(O%2=qt2;ZN-DnYt}2m=OVM?>K!iij6}MB{}CpmtfH z-t^o9CUP5*Bg_bCa}=2-lv$mTno_vJ;xAtz{$0!BQEhr74k-R0#ztz zM~N}&Z3!<_QzvQB&`+Y!K(RK$Y`qoYv7^JKzddwxFrqG!pN(YOtppR%cv0^$U<-hDbvMvWn3J=i!5b(F5 zolKDPgLQ(kJAV)g8n9iY5&WgF*ixZ-&o1(Rz!`h_i{Lh@k0@bv1bUvZ@v&2pGC~LA1{1X^;qbc%V5pC*X`}6X2PCHYAdd~ z)Hv5vLT0OAWtFsJ|H(*y{~b_1Q4EBzs#4t;r-D2Mg|N|O8LDZT#>QzVweI#@2t!;j zD@!b58PGWa1RmrJg`KjQP_jpwG}v$E60B@(wIOTuZ| zNA3WSEXb{xt}-RJpfoVQ^39XHCU>z+~lEW&~g9Xj+m|KU#u3GiZm zB!vL+8-c1q%_g4&g%kFOdrYgox(4x}G(!(bhC=C=nzkCB1mkQ&IfpoS(Xr zQ`Qc4>14pbyFKF&B|nZ8ZA{3_-&xzucSk-Pn>NpGWi?Hi7D>2h*q-ht`JwK+|Mg^F z7dc;EE~lew$DE4oPQ$hS=kSyh(a(c!&H0;e(SQbbDhN#OH|z*9m(KTv4mF+bb<3(*sQ7!^aPE|mm33| zw_(25X35y(dF=Mc$Osn!**~3sLtQlx=n#KI8*JAD^&l}Jp(4%+oYPb@tZAY|zf>M)h9n}*I-C!XeMkCR1Q9ImfdSH%DH3Mf!I@W8xT#k#0u;| zeGU?Z#`y*UP~@d;+G~0)W$OE7>xENPSUR`JAo;^`^L*AWlh=%&F5vK&W=W+&uPS4a zumzQ?Zg>$!jv#NOWfzd-2lwb_){IjD;K0^;cltes@z5!&C^~ zq4OSP2c))URj?0%&h*-CaWV=RoWsVtC%m2F9GKaqYvBza@r8wk*4EZgT%L8U>Az(O zWkKmofmeJz?kuK9jvSE=kZNYFUAP8}1Z`WIu-$>-)8!cDZj9)g=G8yGWSaN$>_(I` z)Bqt*Ii;jc)+u93J~=!2Q@#+kVnV4b+-rH57iw1mk!3@T;CBzHU4*UfFc6+b&tAOP zqsmKYO*4MQWs8Pl>`^KhMcjwzsCxHNan-Q=`~?b=gy-^y1;%%))nSs_pbG(?ncbU~ zoctX2ruuB&R$vP9Tb}F8Th@L13Qfbp!ax*jK=o>{JrP)iOvvzJ1^DWyl=pgvetTVA zB$(PQL4D;Zx(tp&;bPvH%O4}QnY_Em3cFUW9Lu`$u8CKB<1o=BMF_uV^DC_d3|Md}xAoQB za{&j&W(=Ic64(eN%d-smBH{L(h3?uAK8^|qw16~pExX-w1YX^s0l6ZW2h?EaZ!?t9 z=K5b5kHF^mZHv;5j*e)@1L`!|=K(wn>C!|ZQ8uM1lXecAg0mz{cKe7i?rEOZnf+d- zo$k=eeU14b%@|DWms?zWq{>O+=$+bx$4uBcxuz#qn4{zv0DExxb+3cQyMqo?tvVH_ z4bxFoQ6O*U$5nibeaCR-{Dw&2@RoF7NlCFF2*;N^wu z@2R5aObC?N7hR(H5yrp=Fj#IW4fiMU0CiKXY@-gx5z-#(IG*|b$~5;dhCO{UO~1C%B)LYJdai3cm)4qc{bSC|kt+^kdn>+#LZa=(Er-lkk@ z;2qmGUjxcn&#D+W!?vF0GyEbOd>od1(|u_ zrfij7xiN4%xn^0{Gg4E=r%Kpc@+BpvY02TcDc2Vun{k(V_rJ+r@_T{rhVJFmpooyQq6}m8AeUZ1DT9A@L$}wBN;Onj8EB}$* zNKpm%=c$$!*3FU~7&t%gHo&Dn!u#kTiiqL;hDn;}O4vrU5F1VkT}f8_H6t~d35`n$ z1KbogXu}yZ=7~~~$uu^Wd{B?CqXI+YO z$L8V_aw@oJ*kK0riv46Veh9W>K?7y(@}N0GD_ksf#Y+x%5S1vgo;}bUh{A9{37?51 z6CRnIFcKZiG}vAUx8sT8r5OS}$2tYrhhqB^V z(*lG>B?G7!F}M6~&sG6XD+KT+DE`kuaXdaFLpU-uHufwm|7YM#MjIt+BqxU8Z5D#B zGg4D8Aqa#op(L&W8);=We%CS(K`(u_#Hp~=fR2ud_wAwg|1HI7zi50J-YC)SwUSca z_Wucy`K@UK4{9g32=CkMf8a2v<^t|uImyl#t9l9&859>U1iro$2Y$}QhGp2pNrbY& zG9;G;w__#a8WDv-yQ?4w2O=@c(ZK=sU@M_FWPk~jvL^}RR|8l{kwJyfkgS^_a`h7p z;6-9o)JMq)uo=IAq7-b0;^uOho`3-R9P~BV?P3LPi!?7`n9X>bg*ESu^ogO&mRJ8U z8HqkRj)102>W0=A_%~gQa;G`z-ZA~*FbjGaP$WdJm4X;MwJk!%bvmZ4y&Y*a!bS!L z{Mqd(P}y)ThgLlg4j!gw4}`d!32&_t6%!j-_pD{e9vCnK%K`!IIJw6_2oW;92d36H zAt52sg(?tfZZGk{qA#K?z4A&#<3_n0_~c8Y0Arzaa1q|PF_b>=Z$2~ipM1ui$&>hv2u{t%bWQ9TWf81TKS8i7;u ztxz#cwaD$Fiwc&*=<`1o8ZdZs zpd(m*eZq+xZBV9a>gq}bZVg(|a#Nmx0MM^5D~|9AF#`eZk_F*1IKtxqqHGftz$Zj4 z8)7)Rj(`(_Zgn})a@=WGq~ovO|KX&DZD1*Ql4;JeacYcffKkmt3Q$K`6}R~}BxucgCe z`G38WD;1_z+^?H;BN#Txjn2ds6&VGh%~9a4ISPzCPy}8CgWi+&{(XbFKNz^6mVQj< zU5TU?90O`>VtRVLWXq2q2|#Ahwnnf)1;#)r3sqGS=YdqLFq5919!zF0nFI`260>&z z+Cf;EdUy<^FTi!T>AnXCWW4w*GJ4ev4UZAfyKmrKFbO~uizYMSRc@*fRu)E~gbfC5 zODLS9ce5E8g@Xq$9;(7bw1=XqYPJQoDjERq1Q&V}q;C*JP=T+r$WtHKf^@ez$ia~O zU4}jFT4_cpFJCfQe}8ud1VJkHrERdkWm~mVvX-m#k&7c+ISa#>VfV}%@zSV@XXeE* z2Zm&*6}N)|O%g@uNI5uK0jS7TZkiTKO0V!#n}KuP zlr7Eaj4V5BCOUi*3X^uma^KNr`Yq#|7GxhzxYzBGTh4R)`NW}mqIRDkOFqxAdxik> zBnTYQ3a2-sMeY7|Z0`XVImL@Pf}4hrj|rST-)bXL)~(B_KY;@qApFa6H{kUjoc*>_ z4zIk0yh2Ut`jD9kRtJ#tjvEtP;0*|h+NlO~3)jhe7D(<_dZg_bxW;eyxibhDuggGM zp&#B@V_dcozBc0{M3`RfS{sb;Hkvw0Wh|E6KDJ}wEG9TJmfcMR1LDu3?Z8IVH8o#= z;bZ@JrR;XZJ~OkjV3Ayg(k;ZVJD)sH0jatR@uD-={yb=jY7lvI1ZjoHsKr>x36ZEx z@bA0r2#qn)b;@JJ_)$d*!>;T_-NZ0Z0MI`=f8HutasoXA410+*rvH8F{}01dwShT~ W6-8_P())l$oN)G%LaN*qpZ@{LR-@kl literal 0 HcmV?d00001 diff --git a/matrices/epb1/epb1.png b/matrices/epb1/epb1.png new file mode 100644 index 0000000000000000000000000000000000000000..e4dba89d08850983541e3131994c558381f85390 GIT binary patch literal 21699 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 W6-8_P())l$oN)G%LaN*qpZ@{LR-@kl literal 0 HcmV?d00001 diff --git a/matrices/epb1/sim_run.csv b/matrices/epb1/sim_run.csv new file mode 100644 index 0000000..467cc38 --- /dev/null +++ b/matrices/epb1/sim_run.csv @@ -0,0 +1,19 @@ +Program arguments: + ../build/test_spmv_sim + ../test-benchmark/epb1.mtx +File: ../test-benchmark/epb1.mtx +Sorting took: took 0.157675 seconds. +Nonzeros: 95053 +Running on DFE +Result Simple Total cycles=128288,128276, +Result Simple Padding cycles=25,25, +Result Simple Reduction cycles=110505,110505, +Running on architecture with + maxRows = 200000 +Result Simple Iterations=1, +Result Simple Took (ms)=7.24573, +Result Simple Est (ms)=0.00128288, +Result Simple Gflops (est)=0.148187, +Result Simple Gflops (actual)=2.6237e-05, +Test passed! +All tests passed! diff --git a/matrices/epb1/summary.csv b/matrices/epb1/summary.csv new file mode 100644 index 0000000..b1cbc5f --- /dev/null +++ b/matrices/epb1/summary.csv @@ -0,0 +1,2 @@ +Name, Order, Nonzeros, Unique Values, Sparsity, MC(2), MC(5), MC(8), MC(10) +epb1 14736 95053 73230 0.04377 0.00017 0.00135 0.01077 0.04309 0.31577 diff --git a/matrices/index.html b/matrices/index.html new file mode 100644 index 0000000..98d0264 --- /dev/null +++ b/matrices/index.html @@ -0,0 +1,8 @@ +

matrices:

+
\ No newline at end of file diff --git a/matrices/psmigr_2.html b/matrices/psmigr_2.html new file mode 100644 index 0000000..c1fbb0e --- /dev/null +++ b/matrices/psmigr_2.html @@ -0,0 +1,25 @@ +

Matrix: psmigr_2

+

Name, Order, Nonzeros, Unique Values, Sparsity, MC(2), MC(5), MC(8), MC(10) +psmigr_2 3142 540022 531668 5.47015 0.00003 0.00019 0.00126 0.00411 0.03064 +

+

+

Program arguments: + ../build/test_spmv_sim + ../test-benchmark/psmigr_2.mtx +File: ../test-benchmark/psmigr_2.mtx +Sorting took: took 1.40616 seconds. +Nonzeros: 540022 +Running on DFE +Result Simple Total cycles=27113,26642, +Result Simple Padding cycles=14,14, +Result Simple Reduction cycles=6280,6280, +Running on architecture with + maxRows = 200000 +Result Simple Iterations=1, +Result Simple Took (ms)=1.42415, +Result Simple Est (ms)=0.00027113, +Result Simple Gflops (est)=3.98349, +Result Simple Gflops (actual)=0.000758378, +Test passed! +All tests passed! +

\ No newline at end of file diff --git a/matrices/psmigr_2.png b/matrices/psmigr_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c4668df435bc53a9e3274ac7e3b561b2d0fb8ba0 GIT binary patch literal 164552 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 +XVG@uuIB;S@L}6AKl;cyx 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

=O+p{86A| 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 z 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 literal 0 HcmV?d00001 diff --git a/matrices/psmigr_2/psmigr_2.png b/matrices/psmigr_2/psmigr_2.png new file mode 100644 index 0000000000000000000000000000000000000000..c4668df435bc53a9e3274ac7e3b561b2d0fb8ba0 GIT binary patch literal 164552 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 +XVG@uuIB;S@L}6AKl;cyx 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

=O+p{86A| zW1T~Klu0bBzzbhYGy~!Sq0_pvJK@mR#K7{~RyiIfq1&GtuekRdven4L;g!Zn zR#=bQWAK$Y@7a2@bR&;dl>2nQP{oyQ;=!7P)BQcj1UbJ%ABhG}%<)`}f}D{>LsK*J znuK<*z>d|wG5MyN=V1H@B0L(VzSeOkhrvCT&_uT6hmI1o6)(1npMf|j`*Z7rojhfy zbDoMkJk6Yh%kOw~6Y%{V2~P4>DJFAW*KfbJs9DPzZz+F@ZML`4-m#4RJLJUb`JV~3 zUQvnXitO{CLZ(it!2VEf`^vaEfdInxe>zbOJ&RRy9BRn+wr+fC+c?Lj5 zwqA=wAydCH%a96nYrqImTmruh&*G<{qBAZZa*QD2`Tkp*xR{@RJ<&P-82W$K~TZae~n{uysqcK zApT?W`WKh1*r>~xje=7yAp#C6_vQoZ5fu+9eV@~OpHIxe-y-ECqGOelt{=X?XT#%| z+j3FP#!J|F>(_vI9D?QaNPBS&NsizbdG5QA` z`88TjO6moSbf9kP0NWO&78msWXndQj4myh?7yVyZVTZ1y^35OaSUtA%d))EVEDJKC zUN>wgd48g05?ReNgQU^|6;AJ&Q3sY=?<{*;aJ9h?#Oe4kWiPWZud??tCoCb-f_;%IupQAR0oyFuoxHk;G95Pikjb5ax>OXKbI53=Iz;n!D=MZV>PpSDA5Q5zkkrx;P)K8;5GJS#uaV(^{%O#6_;gc zo_A@BOIf2wQTiW}B6j#2N#F{qw9I!(ogH{My@ETk4kLafD*!i*2pv}SHnWmd_v|G-TCfahcJ!2{eWAQ47g_8{Sy7X49L<$$0iJ z(n&t^N?hPd4%lQPi3cXe(z_LhU52vvBR)P(y~-Lvs5ZYiadd!}EBA_bX_091(@E4dOx>aFGYj~~esr>i$2juzdwA#dUPcEg!R^*NY!UZ02OenUY^;$; z6%{Hhz9+^u3f#<_Wbx&99J~pi{vEN{3x1h-*5Bk(BIE*xzCTCBA3^eLlzYb{qMOms zsrLDx%un;dh7kXi!K6LwJKiT_+@z>+(0sM{l-N^0&7<|fA&FS?AdJQRK|vO@x)%n_ z;tgp~mDMKJ1`_nH&OP?&>;iEsWyrl1bt%I}bP~AB)BAYm((o5Lb2UW~`6>JlA!s^0zZaW>*7*8F_jz%m+aFP`X1`9`me*_9H+zs z9g7X51;yh6z^lT_cUQOh>`LWDiG5c8=m4glmm@YJu)0Tg`Om*wnmwpk5G&`VEn)+% zrj5S2rTP9kgS&nbT6jk}!cH#|dh08DEx(fa5TbqO;Nd0B(CeoS8R^&gGQs}lHh^-g zOFmXpo_q$Ua()(EGysu|kMs!MvI+~kVsh`ql-rwABAm%bTDsyT0o)Bsgb^m5Cw=_cx4L|DEIsAAnyl;s#+2?_ zR#1`HtjQhIG*d9ID5P2@p)SU085hs?zs_*0qsz7#3I2OE%bWF8dB=tX*wtBX2_o`$ zTC+?;IT1MR1WyYKQM>*f(HWk=fe$)^y>#7L+veEwAYSKZ*grNYaQUGdvv&B{Nri~% zL@-(Kqt~UK5OoaUfpCEq&6x85GdGsYFpcwfzGroQ=c{|#3q&D@x`AiUAgafU*HN1& zm&efa{QxPnf@gb?S9By-06~=3!GoHca@4b^ocGhUqck>K!8Bs(cGgC}AZ#slS zx%Vn}yVSus)1|0aaO>RDa{DmrZqhC@v9``Qx$oZ#6Do2x5Q=64xpt~!t#&i5OX`Ao zr!z}tm=_k|gR%htp-)~}v{B@kFi42PPI549F|H)&RXW;pa`|6~Zh$y;2vr)RxesVVantHe2yl7vgOMF;r^ve!73keRkC3=f^gl};lbz4mAlCBp? zC6e`4i^f;wP0Vs=mZM#`3{V|jbPS)Idlqs`&)gCQfa>G&BXl)Xg*8FwK1}12D7KyeMFna`*TMyKFfr>*34{A}dHPbw8L%O`sFFJe!Z9C!DE z-RhN~U6jz{h=OIKmA_SBxnp^kNZ7YxxJ;91e+@KL*rDT%scgM3(w7r+$^vbR{8Xqb zMfQb<>#8;%H&SfQ2Iu}t<6wz_@6XYhtGB(QAWe+U0@F;I;Q~ebpx46F+~b-Q%=k$N z@W5KB*Yba;J8J)W-{r^SXmmD3C1_ht@MSI$}Sn#Hnp#FEL5JQ{zshtaJz zeKfkxksjK4J_}BI<`?U+Zt|>@HcmYRmJ#y>n{S9gy4b)&1lI9QE;LL#Xgec1HO+UZ zJGW%Y{--Yjq5`*(J>o^_Y&)Y*RZjAVWH+kC0Mxy7|I_xs>h^?!gP+Zb9I+tQtL)q! z`YKX?51rX`_DH4H zin833b>n90ud~kt{*(5vz}wJV8a=q-K$emXju}n@nkyXmA}2;o+UNAel08p@FFG}* z;qf8->h9|(s(anTP>Y)`e=O`^&K&amY~9t z(V<)T_(xck3of*1nmS}7sr>4p@U;jZb1 zm@Hm=T`w4L7`(I(&^8giJ%yycy7c)Ih0H(AvbQs&mRx3LZ`o(N63grnJ^2F<`Tvin zvy5u1i`FhqDNu?O*8s(#IECQu?$#D4R*D99DDLj=THKxDZYfTS6P#edzVyBKet+_Z zF&IhqIXQc;^{hFygHo)`?Nh?HL%?@y8Nx)IPFSBx?I!&LSe&9gOn;3QNG9fgCQDjN zlIhX4v~Y_3Vq%&%u4I>AYcn!m4=QRufR%W_Jd4e8rGCEbJWpL6$l&#s zSV>Uv33Ed?pA+_SqrG44^g5#kjE_sx^V{y*rAd&OqLQw}wLWJN^L;Jf)_8dv?Xhv3rB{-S%u_bRh)r6kwyjzu>~%4xDCi4@`v zTVgWH*2snEShHFM#qLppL19`yI!%9{8W7=`#w)I4Lx-cD_kQO|v&UUEvVlWx4lIL)4CXWJ>uO& z?^m9@?P`!AKVs5w@pKEWdLu3S3cm2>651I0etzL{#cC4aJ}E)lIY;I!BhDGY(D$$# z!_0#kHxq`5v2CSe!uC>E*4z|r@XMSYt@GBIX#M6&k2=Y_c9nw;-rR;hpC2`wkJV-j zUyiy&_0f$t*Pdep(9Wa#yFx-TCE>TZz>hGOcw>nJDc_R}u2)H4%h5CJ9%5e69N|<- zMcpQ+nfFSdrc+iA@RW^%+GHfSD)4i|$J*d#03WHJZNgD0;lZMDDX|bIsu975&Jx6~ zMiF%ciP}i~NP`rNdMV(_qlfTZs0r)Zs^qN;GXNpUJ$(g)uDY{;nc_K+G1kC}Go0=9 zrf`_7HaBPrmB-$K-8P1laP}Ha)(HKayvWx=ti$KQO8?zN>E6k~p*|%X*})t)Qe+pn zpZ`>5GNfP9xqc;4~E(m&CB03pdsw|)ew13Zx)^zN>D0#9mL8{ ziQnSsT$SxPOM*uu^gfX5G1H@%HIseClfr? z%C@J}9ctoH7{MuCd>}QYu5Sw)+aFpkZf2-!4HLno_;vFKL~o^-*Pc#RF545(J$oDA z-6(uO`0&QfrlX%l3_FvNI> zzW{DAlSjq^M~AHm@bjzzGvKl_rv8T6#cZ&2HfDXtA)U*BVWRyJvZ*w`KzfHgDr^WG zf$ee~vi@^%Ja3nohRfWgAO=jEgr!@)A=XmbPD4RczUrQnL9|Ft$hJc&k12ZX+$E{bno>xS}sOST*Z}+<6I0colu^vx4{< zV_RjPBOGn3&X)^Dtt`AW!di8GB{F=cyxNtZ z-uZmXTf4(JFb^Xo>uCDLD%SLIpA^JYZq+M~$UV}=96e#RJoiRf0S>lP&?YsWcq zKfj*@xsTV#+EskYO;(ZpcTt_7z{`K1ty)h3Iwy$jD21hM5uGF7^H@eTkgE4WE(Pbl zRGTQ1#}9@Nrg{OL`m=r~S^B$Q5#yf)R0yibnN|WNm2hu=acT%T6lO9o`$%b3`oxfl z*uHJ2E$SAP&_(xAGKyu=FeC?XtE_Yv*Rz=YQqDQipp^(usGK-hrdKRH8RL?|;-0s0 z7|3wT!CN@&{c~K1w%b_)JB0aiGz2EN_Cs2+wm#FXa#Um*Nn{jyi;^_HgCf@@r-3X) zpzUaG^ZOt+HDt32`DjP=N|XZpU^wDqX|3GG%ack5&sH082eucoB*tG7QK6WO^e$zr zR8PV{H}F@9A645u2fvR~O@2?7PfoYZm$a2FL&?zfn z=4f<3m9uz~1)xG7=J1fTjgncAdDhd((CR#n{xiuEi>v6c<_QS&74Z zg++N{=K(hv^N7=szc%XZvvZBJd&JV@?0w<-+T&^h^E@`lo+_~Iqx3}y8&+Jk%r1y zvv$t)i#sR-jQ;HE@bJlXC~ycZ#e(t;MdY)|br~8I z42*e@FD6&_J81EIvtVgNulNTEPU@p!3b@)LHbxBKQZ$5bwrVorJrYV~)JpiJNYr~Z z3#LIEJHjkhmUy9>zARxN&N~}hNJpCn6CGB{VG6AWA4!~Aptpawc@oxi2`|Qg$rMPE zX~;jx=CYMn_4&%?I4KNvG-tM0Kq;Hj-AUzFuc(AV?VXQb7TqD$%MZ>GQ z{4W|EbL;QF-e;$Gh3@XZudN`7+l2led`$ly;berkv7HvRz-D6+16+1D;FZu-ihGr= z*zgknuxEw!v4GRvH3d8`$3T&|>~$)8L;UNODgJ<2uY!-DjR^ENrmn7s(i-US>xDC?#ne(tTQX-Uh!mzxTk_ z*Rl}kn!7@jfBVxS_OP~MSRI~$pDIdf-sQ6K&OGMuVE2>Yy0EYOsWHlVodgNH&X^m? zsEQZ~>W`y!jy%6HX|GTNGRDuni3B3UBAWg7BY^z(TnpEfS^5sII;~4=Dk(3iazZcvZR+E&W z;cO{Z=+0bxGk?+lpc@B^OE6(z{)iScdz+*QK;wx{QB(&2pOWmYZ#G_Ja;>2P?@Ut4 zqRhgmb#dn#ZHNk<5O?s4UnCMbzXLdv(B;em1dz8l>Go`J?}Ou`0>QHTJdYjQonBDW5Y{++30Y?-1P(Fv%i~s87hgLcdrC?@3ECUB zG5q2!(iDiH_nDr-kkjf;*bdb29rM1kZsoS=?!N1wh?qTA(oi4mWqbQ;k_2s+;vHal7*YbZcM#Y`Elpo162>3VKD~QDV|~z^Vh?R#$~7ylGcM=BbS>V>o& zE1HXxhk5sFPhfYjZ`i>XQm*lex#4+k>Pq?ePbG9MMPK!hFmx7D z4fhnW6E{sZYCO{~kX#?=H|GOv9uBfe+YEE(uY(xM4M(JMxR@0WFa;HQu6dX;uCg*k zRF;P{&1FK-9;6m@4EsPEg~k(ao&SQ!Sc0i(ImJzj6k`73VVxj-#d!yB?mN>q9p`8^$r{F)BKla1MM>t6zdBWJ0 z)}IH8LvbB>N>sFzKjtJ~agWq6Dc)cPH#?6uB;kL|vETW{n&4VtgZBWJ9Z{PEuAv8e z%`HpmW(S=#`b+gz5CNW-MCLAS3|Z8tZW)udP=;`Q-wZW{6D#8VG-2lgFxzd2d6Sk~ z&=wN@vS;M{Dk5WxcccAKd%~H*H1Ebny%JPi$=-ZP52tdT?=iJQs zlc;`BQIjYMveR~;=wMt? zwxhh}_sOH|0RTwBJ2@hyKHD<6sd1@U35qIvXSZ5U8ZvTY^k5x|2*DQ9h;{t z-1rLwonCqnuD8dhd7$(rHau!KeF2;qHEzD){T-u4uk}T-ygYX#8^u5r$LP?m+N{Am zQ-e%a?0p`^*vuy#wCXby5D0MFzaw=+EWuh&^*gnmjao6o$Bwxvv}bqs=5@vojQSKR&O=&mfBVA0~%!H>RiLYv^KtX|4zTr%OE!F zP!rrZNaE6UP@NCq34T(lwQH}j-f)?HvVf{qE1JAL%vL4Iv{Gg%_hnj$iLG%9s6l>} zC$cx(S^A$6QXhWO;HrO($?wfxRzX-0_7~3~$U@6e#w*)^G?gcIU5$yv)%eBWC)Y;g zTBXedvh1Ksw(QCX@vIN(GJ-lr8@4$w&o2UFzRGF>AIXV4h0Qz^nUuxfV)34^?RpVD8Rea0BN(HP=R4*Q zRh=1&i5HPY^^Kz%AJVFE4~!*5hl!i7p~V<#muD8(x=%yI++vPt zrYq|>4FqILM?l`3FotTQy&#G=|Ca@bOpP~_U#sfsMZ8Sg_J*pm)u_q;dOdR8hA+?P z&?gcle8r4lD&-d4O0@19yC#9W?9k%? zO1vaT`}wx5RTmm^NvR8|Hd{=KXzd%5G3a9^v?<2X(6{T?aqy34w@cg;RrJM!2nJyh zPiESay`8lk$tf=2a>m{gC@lOj{PhLrtHo!pBk%NKvPG2gZtyIKE8imG+j}z7Zjb+h zhW&&I4CF`WHF;iRKcg<<#{)WBYYQOqp|=My^QH39t>Lejo{SBSJ&Z}B6CU)b?Ndk@ z#2w#RUuh>(pzUrC=`hDa;#qJ7WFi#gd66gBsO^4hNmne-F+#hKTxEA}+&O}|qucLo zMQR4BucKgF01Y8wg0*=bD#;jq+_sK2DS!f_c*#O`RCtOtQTjolRMMxXgQIkmiB7>C zvCEXEK;RIiIAF+sP|wjQ{?EnDV*CB?*gfg!R}p(^lW60^r5#%`e|mzpb4v|hXQ#T5 z`QUyewwUx^9Su*Ec-V;x+Fvy=fj+s5x6FRnk0;$o09(Cd^!r$K-W%(K`EA zR=E%Jr(scUJMrwK`0-CsUogt;I10zbkkYNGrwZ-gQU*9j3k30)jQlK%w9H1H&H1~# z*SWg*k`3^ z^teD5VcpZpj^7XQ*WJ5rj7_-(WNPZ^4o{+lGtQ4EH>^3^esr1-~DU&}>AOp+b6LHPVq9KyAOLg~H3GuHr=BEg1QlW=x! zV${^gPM?ojyJvV@;=Vl#vipSN5<}357tUoEn^=g@!k?vlRUX`w_=+0^ftcmB6kTAz8d?ShjZ5_s>HIBT;gfY~a+aS>t;%lD9)mG%g1K)S+lct;b!J*BD(C_ODyv>nZ7)K!MvMdz(Qq3Lw znw3LYg5J23Dt4{_)+S((OFNXaNHY$(2)`t9L}O9eT+%X{tk1$tuAfYNI9^6O_7&%g zabQJl-Amb&+_V&VDA5f4MACtCS*5D-nfM=`-}EGi7DgpM9z8fJXgAw<MPT>318(v>Oo32Bq{M>GSrGSpzaQIe!=APOBs#t(KrK~Z+|frU^;N+dJmD{ zwXc0`8heWLt!Rv2q|MdyQVp)>z4hu$q z_*In><+14RqHW90wZ{we?f39jdzm>R2?DwSi|@D$hZA({1a4+-GjZqudL)dVgMX81 ze<@vHhlBE^R2K6AB?U!6DlI)nQ;VB_dKAN4x)_SO^!T^ zoU5c;JJUQm-Y!{4!Ik8c-b{Iw5_3x!m!2<)B}9iX=dL!|5X0h@J$_mCb}%<`;dQ{N z0jKo0`J%J18lgwyBc)Hc%S)118X%?>|0ti_KqBl%?$@!Ea(T#^!t1>P4}Ky%d5#=&gNLLBjaY+-!uikwMDSTrCSO| z0O|SQWnjXX*jU=#L3sC-#QUZp_ZKn_5MfJ%Zq!+-lQD#^81JG2*Gx5`R^~JsZau;y zH{S2cEYGYgx$u+c)L9 z&Bxc|>6!7WVhL%~3@Z_@sm;rr^ir$nK4~beLiTeC1I9e6Ify*)Dsq>G*k|pELBWnQ zCGJO(b&jSq_4H&z*nU|`dRl1QzK}wl0grOH2YP+RUMI>KF5div01Xg#R&K-aptb?1 z{pZlNTy?0qsg~YbWk22v$)%~AgSMP48aL#Q6d4-i9^;WREq&r!xkTWWZrlL=vZ0E2 zr}`h*WzyC}Q+{*i169VrK0Fen%R!vri)0-S(oJW^)kgZd@f#_^*kzHcVBi<>pd-oq z1MuklF<}j|&*pi>xaybp8Z0!0E_BvBDFZV@eDRHqntGDD*wR? z-q*jTAG5;^rCxlJex4PuEM}JW2v13)@E6?PF!s?Wnv`aQ@}HTqF|1A(x0=1_)h>2$ zyV(pvw^{C-@YX3FeZ7<#|0gyc7UIb8o%*_CN;%u~8#kJh^Dyp4OHS;{GJ;c!>Us*{NHK7l^+t*dpEs-MpdoJlGes9tP zcC3GJQ^hE|oa7gP66|z>@E46rYexOLe1mJ^g=eDqxlk<9QsRcr>W${@QC^x}y4DNb zCXhj6y&sh_t7%%g8J5w>NQVml%X+|Pc7J2kuobX|XHes7t&R+Z()Sn2e9Ox2%C!i? z8YnkBE3;FPQZ}ei??1dR9gL{)I}DRf#JxCtEvkL$_T4C)EvEqcK#9t#6&2;P#6fHFSlnByd1w_?i7zGM)Sg|mY1Y8#adWna|u4Z50o*i@! zYE<1vz}(}PbIBFF=qETr%aex;en>~b3oh0S44YNs_&|Tih>hFUw-n~%SNh$AOfJ|| zs&y$$xLQ@Yg0y`9yr+^PNvnLMNG%q|oY0tXqE)d8JdJ(_JEcKdF)n7O!NoR}UapLm zn9o8y#~ysXQrzU_?@=1|)`~9O%lX(&N#fIC^A=LiG`+CkN`07h_?5~&4`Qc0Yz2ik za^DVlCDm6Dm1`_RJ=(K%rll$`Ghr8E;D@C*?UYl$*`ZdYHyUC(cAv>)atrK z!&A8qU+mt~@5H>2ko*63iy@@(rkp*vOWJ#zt{dVj)DjpU8!6x7|5VNgzQDK9D-Pjo!&gwY1XvI{x z3Glv<=h@|$BX9iEtS04ZZZpm^ISFNjg2#Ob5*Exzmw&||Y+%~_Q8jR=CK2T%-y6GV_G8?>#vGY+B9}n zX*mCN2@0A8ASJ+?dr4^V@~n`NG{abGa3RO}V{QDBu)T#r7*jjhD)H!Vlx15&wHR^= zR9PXZ6)X^KOwPR5!ulS!iQCfWvSY=RkQ>H)M%kW4al+n05 zcqigoe}vhs!j)HA2S;BTP{H@13asLA3<*8r7R&uO3l&@Uv99(TEjukxJ%=^qs4{Ib zGM2VCb@O?pT!f9FNKePpIarcQI#UOt*}LEvn2YeuHtmuoOn_f`<*`^AD z?#QTEq*&(P5mg;r>#l7yQDv>3%C=H=UHm)OYADr{n>09&|I_CI7{#++Fs&vw6cUn{ z5C2hniOh@SG80fz-vIib${gcynC^fI9kR_72+9d1Bpi%S!7kSPv#BA@$h3WLKQmMP z5*#WAe$;$N;&3VKsT|JB<{Zo!g`bYSDAbL=d~(U_0?Gu(FC5vNaY(<>d6!6Q9>Nk~ zpWn0Y>wn(-$FEs*xId*RJWr}DW;uW4uR%%KbTW;L>>Gm{_ztyIWApw_wDC+jsW2Ae z?8_{XTFWBG>~a*NUECNccP%JUvxzs9jd$VGxJ#`iJQ*%!A4ED}(C!=TtuY|L!ip2_ zDAEz+yBhmBZZRLFF6Q_-15s}@ZN}s%(0ic|`K0&#K}A&Zn0QA9a#2$p7MkiGy(OQW z#Ls#5xm@vC70uX7AocxarWfk`4Cm0h9ajowhPrU_c{66PLURzV zbJ2{?NT0|uW)7L=Mt)-L|9+LFui}$_qL6B;#)W?5*EX)A?e9naCLOjQ@87wso~jG# zX7XU(Rg_N!&#R(!elv*;qX`%L;-X|Qof~pG+i<1u0|Sp`ST1veKd!4O3*I9xH5n%0 z9TghS3tj+R9){;0-`OXBfX(SAPOzg{7rc-&;O|`E%kwJEa52S8AO+T$CiPv^FTIMV zFpm`%c}_iE^}F)u2VH|E=B=KwG@8>R~{{jhuIN49sF>u;Iy9FL^_yj`ZncjRR( zOernOC!ge(c7b_@HNKC3i~biMo!~jO7a#k%+vawij8s%CN7FKnZYvfbJ^qX~m-aCU znsvqdQ+eSa`zXs?;AXe`8SRpEbhG$cBm>8Amo2DRyH%cQxny5@FizcA{!+RJCUgs=g@?bkdpGv|G`0NzFNd*_o-Y6 z365pI)9mo0zD>ckCzlNV1fOPRGBrP#3B#Lu=`9c{e58s@pSQNSF%||Co2__C+ zD6Jw;<5rkAD?aVs5);gylqXrcU5iUk%9y{qH-}i8TR#%Tcizn;P7|H*ztm2Q$%gZ9 z_T93=`=bh2ehb4Q=n5gjf?osbduhfRP}+Td9UHFdrH8C|4skZ~kDFnXQ#4HurG##k zqsM_UeLINQuNS1P9#V&Vc$U1`nGQtSP*(Dza3`$1?!2Hb0tOt-yEz-WyleTlsh2u& z@n1xI+eaNqo5FK0ftFjs*w_q`aIUHf2{D~w-=tW$lk&Fgwr_v_sblE@-d?<|shmNe z)Q4glsKfx5`n5zZSv}Kdk|ecj%Qdq}J&Df|RWW&)e8%Q*87FvA%m7kg-36Q-RSo|H zeyAYazHRj`hmneVg;<5pU&ejVwR%dHTa!5r8nLj4b_`CO7*c*?zzh1mU_4fea-ylN zSU@STC^!O@8PqC@rR>t3kBaVAQG4AH4E)|L^3WYcfcOmXM`zB}otmpHtX(Ozh#{sw zG0nEbO$xsThJ=ZCOGfX7BPWG_JGm`WF?00q)RD3cDM4=E7%K2E4xDQ7*=Z||%9l_z zFB3s^fpjtTWYff`eW4UKl|YqxI1uV$Y;xwA4mf3!Y}`A9mHSjwvjxWAM@mjtnf-GQZ_<#)&g7^27DKMFCcz%bmAHz64Zi?&( zB;He~AY$&v@(ZRMy8-BF=Av|pr{KB*<+iH$q%)}ImZfL9oyq2ea@|mJ&D2P9DSl{} zuwIri$NPZzfy3M@R?b*$xI;!O7WP$qE@|k^!`jI=0F45VD9GMyc_eHzfalG-SnBB? zc)uw%5nfsnYV!Y>|5rzp7!_OTL(QB(oOg2GDo|`kc3{3p&;J2{P}F$2ALobseoTucXcZ17P9mPyL>;#ZqM)>8+*)&-?5O^_}f5Z7%4e z`K!`aK9#YIhVFh;&`lTAD#a#DM+*MPkZxoATG_HR`o&kw;-@k{Ufy=gI zM!J6JWX5S}E96WpMPxpYYQ!v|8Te=-*-~9_$F2S`<#^-ml~fjdvPt#<=b-%$TQ<*3 z$iBzO_7-HsIez+s9%H&sSM3cK-6PH{L(K35)6EkJomVo^RE=uf5UZ-Si}KvPwuTbp zqzB&9aZAIH(?ZLelPTe(q3WJx-D%C@u%h)r%gSbcWk zLLX~qr0H)i&@KA#zM-sHQjAoy_|joYkT&ljD29dqEBIlsV3)HFBDt+%*8TGva1!1d zmGpT@Uv`^B-YS&a-h=f03);zQ_QCiD7)0;oAJ?Xz$WOa&P5v>l^-N8NRpC~IzoyT- zrhb5M?E6)6+@fM9qipcWHp!^CP`m(9$}O5R`P)7sCVYQ#~@x zRebJ@DV}S2iP?&Z6)BuhN{R)m3YX9N!_~G+@L>w?%>Q7V%`Gh#|5*k$&Ynz+I$W{; zfjQ4tz}1lfMc=T5i)wx;2|2h!&dv*YeLls2HIh`$D!Jg7Es4Sr?I3{% z(ArPt>FMpIUaLTdFG)I036wvunbxeJRf=@Pl}^l5I2Hsq*G@&0l*?~nG_R6g8vJqO z*DDD_oCAhg`OG`5M_0k5I}r|16lk5NZ3nn2v$Xt9#$;d{osJPfQT; z{-0r>t4rfkX)qk{`qKM!yBT{6M}FR2o4#CI*1%b7{yh*GeCZmO@~0RXkoELg)nnm4NPb;++SHx$eBR>TMr0BsHIuxqMgo4O{)KcIP2#gUi04m{XrU~Qz49ppiYe!VRAM#&ZXsT-VU zKAez}i_O%tg17MMhgIj@wZS+1+gBxK(kD5O>)?2dpT>hvoK0@BPo@=#71?#h3%fkg zxwg4PwDK8e=}$U1dPMQsPY3zK+E`84g|6kCm@yDJyK1a}=HVs@lV=r);aQ}F)vf=M zhu}D56q)`Urh2;=ZmQEs`-uBA9OKk9{_qP%>Q6i-T~#QOo0NDz+y|jsBNntDH z9cSuWc`?l&DJPvjfGP!@A5#{Jp@{8RH%zt_PlYLdm|;x)oyaIl9k?4a;2J@-C+zh)W=Q7d~>^0wnOb}i>ty5ipY%=~t_Qrt0;_kcPe%R+lJubBbz2XEY`O*K$rv-+?(ZlO3Q z&3IMjR?CKJG$_`K^%6V7N21WoCub0Q_;on7>bN&Ab{zjV3RCY~vdbecZ{Q{6>NI@^ zys`C>UHh^UwkasXk7=Pkj97uUt(0`LoU#Un&v}{U)Vu~^cswSn5TD7qRka6HRaRJK z#|GqhEu%solva~xnxSm7t4TL<$J{3a3B7?>%;WdoF2lXLY+bRqr1G_Swo+#o5jV5O zV525^Rg6vwf$sspH-&uXWow+ zmsPV`CA1&DQqc-y&7BuK0;)@u{%yCn^1GlM?{8K|XA*Psnd9Bpar^auS%5`U)!CH- z24L2(U@5%C{1Lu2MBcb*ZuwJQn$vIpa$_&*d=h|8*^Beoi?apCR1f#}BR${ezL1>x zy*ym}Q!3p-OGTqCMIV+C{8@BsKA8;|qa(rL;tl@d(|He{{p#8#& z($_AcyJ%J03}Ag27ZI8p_kpV7Y(WKqJR@YT{auGH7s`!y)|RkD1!nqgSy$SdgPdn6 zW+GVbU>v$ZWE5|5FPL-pgy18C!xuil_rlBa*KsjjAeTjO<2PQnd0%4^w^S=IESEh; zSkxjW`7nlVTM&G2O5$qi;Q!p}mQ41doV1XhR?B5!B7$DqFqw4jGW2V+jn;boGivT` zMqyMOH;n#T%@Wv!rJmi`IopbSxu)rr&dBjj$12GQN3E55b4m&?!-RzJ$Mig&+0jgW zEp<+9&Xi-=_thF|uOsC8qs)RmpNZP!wPFZURF3Z_i7SGZV!M?Xa@qVl*QMZ z8fSIbYd4a14gOA| z&Rw53e^R;4Qkb0<`EO@VERrUyhviuP#9lOsbvA;Kl0a>RaOv8w^>gQ$2Lp>qRxk;Q zKMrtF(wvd3+I9@qQI?gFZaLx%sM}eS9e3x5CTKL=$|cChR&FUgwzpQm>z#X%9t=srz4~)Q9o1aDTeFOM zAS6dDHHc>{;rWyM=#x;=-Io3BYaVG)4dA+uL{03XqA1IKf?i%luwRZ$#OI%}RjW$b zyA5I5(&XN$t5{M}ZNu9$az|RLYPZ$6AyKe(RQ9hH<+wMJu9{O06>O>tXUCe)F=3Q= zN)f^y?*q9pP_!NV7fNj#UNSc9KG~chwg-Ih>12Vf5O`!I92lnVHvvWVDCmhgJEzhp z#7M`FObo^c9$d)PxV-mQiW9C@vgYqSf_-_ui-NR-(pHFva2CZG4st(ObssSs zs7j=&i?h7u)d4kX^yUk{l93mideVu#a0lG$kl!H=3VscbelNr-&5of zzA5AFzD%y&YMb^snrb<%O0yPL3Lvf28kU1;Z5e;R*VcCL8&1zk zdiP!}mxvE%FJ<2@zX$SamP{^EcsTX9x50{nklr?7kZ7oCpFcGU>B~^o3LWGeTM0kW zX+5;>8BcbB9giuI-EqetbyFM?`y?N#GT<^OE*`X<)weyjUOl1cRNilUu7rAm+`1sf zg}D!R!=f>VE)o9>Po8@#|2$Eh5aYA{+?V^@?QFO$fgAjCJpGLIZ+%Q&U|{(3M%msI z|DV8(I9Bvo;GaSPLGHV|C~P+NFC5gbXG9LD;6QfgyDaF8=x&!*=E4}Xkz1qIx_qOE zjAehyi$)I!F>c2ite~$TGK#1bW2N?*puu(XxOudo1B8)HS(yKgNLZRfBg4)1-h6{c zdrmwT^7J7=+_BudDsd^E`i~c3FN@`_XYrb-gy22(MRnig<3bRMFSde_6YH#|@($eC zP!(k=W4ai8?i-zky5Z(yFDFRBU1OsAMQ?%oE#!LVIJ1Hsn!qPcdA8aBA*D&*9!zf! z69+i}FS=zczdoma?Wsj#Y`Zm*T*HZ_#_jO6854|g)F%sYHG0l^ZIa}O0z=8*X7#?o z(lDk>dtw;a`QB?!UEXK4Myhb%5?DWJI853ox=iRDI*jpA;#9JK|A}CED1d>GawOp% z`F=3CpDyQ>>ddV~ag2ojccCNhikxC*1N0m0haT2VXupnRV~*s;OWGs&Vz90;a!qH- z{L=4`BKXV>j(fTo$33I4oT2JDW_XPS4?W<(wJ&xdINn>x|9ME@61Qvj0kRE$xYNS# zWbFlhRuu={{5HEQHigkY!q<`2+X*DpUClC)(7Ycn=O{}nBULq(u8o$#a9FY^SVaktKGiaWU64YTtPwtcVH#uep% z`mmRW&DeiGx^D23w``K{NbUpG_E%&KMT!&# z^qfg#Fj%U))*e0`D;ZnIs1?&jpqP4nM-ESSN6-h13tF$cpCMRdWim1?8g`7z^Vd^Fi74XP6 z02j*`cpquzzBcn>Wo6wuKY!cN(ea;iHI&MiSQU7ILP$vH0Iy5^=R>i7TC)EPYGUaV zgu4{~scXFN2B?Pq2|Kr>IXrRUzC~YDd#}}1&og)Etn9@<=h(jkc34ml^5Z$q%ZF$9 z%iCJd#mWeaseo5!l7I>y{M|jVzqFSs_~Owjix34SHL^cLLv+kZh!KCSlT_F{t7_`C zDu?m~q%hRB0H+f9B0a3R^4XOJ>4F7?5yvJ#| zsX4?odPrE*+1K3wGyqbC;K8@w_dY6M_?U(Bk(oG88`M;226CyJYcw7+&`bei8L{6g zssz+T!1Y=eq6*U~d4p{&q4*uA$(D?&Dc9tGHQN$l3!CDu+GMypW-vM%2D`{g@oqCQ zKr-Go9;Z=IO3;aLv%O7^zDRV(_G#9z#CXw@djl3eqz2`Q*L*LW*%SBk8F-PgXMxJ> z1JsD_;Nr&IxQ4oXR(*10+a@ddMOCreyw&B&;kIq6v2~xt*x5ZJe*)u-6US0TcyD^) z6nWj7T=J@(PAy_7)4-&O_a~Hm(-GT;cSiD|*3}?_0r7DY{?XT*;O9{IpaF7`bP{Ge z-gIS|eVKyRgG5&Z>#_yq6&|~b>F8wQU}TE6I1@ly=fH+f@U#Z^S5`kWs;RUo^AVYr zlz?oHK4o%>bq7R#47c95MIlnSH%CDf)KI$e!)sFgZ$dCl94*U3I8K~#vqtuhT`hZM zIuV`^n_TTu5yN)s!ce?Iex0Xb417;+q`!_6o@K_7_%iCozxkj#!+hW^m(w8^K+kP_ z8rz=anVP{(*gf^9mh^0uV}d1 zkpEK+o-dafxtr%@`7Ubx>!OvxGE1(ebqAWn7(0F)-PUmvOCtiwiD61E{-(-{p` zv8J}BaQRfq%EPi)iBt_{PI<<W!tIFj^{ zR?w>r*N2-L**L5Oh66kddWpmnd8TK=`k1GEgwD6?d6uu2jIZ|W6%^9nYivfWY`#$C zE1s(>DDPeNS7niNALT=UN2RQq2-6u)l;h-gprur14&Lh|)TFMW#cxiO;<{%duOsw? zgs(hKq;7!%5;~xWy)v&VCoj%Wv|=smhj%-I>p=^yx73ps)RVSc5=KFb`iMI@sj*<* zv5)(k-NFN%NqvqWVGAs1`bd62Y;IV&o`f4YHYXXr%kU!NkjIT-qrJq5st&@V?D-Up z{f`H^x|Dx`!hgfiEx`KMOV03IYz>`}HeC&MjGAHKcLFnj2abHc9JxTi-VNa?*X)&U z6Q;xozE(w*htv(C)L|;O@fU#i)-A6W_FttV zK3*OR)%&O)azd)ryREqkhE^oi`eiUW5?mH$W7S@=a2w%wX8X^`#)L8QC88Cp`hq=#l`kuK>Ny1N?$=|*CdlpZ>U z&cpkD-#O=B*uQ7*XW#2y>snV(`2epQaXuENy#vQQ56N1B6*dP;N`07e1E1IlydupZ zC}@8+qe5=7R%+h^*hx~uiKmRzQHxjN`9ArEWbMaC{pXk^3hJh;y1cK4_7Ma((b?C< z!#_iN#SenSkheU+hV`+cYl5vn@P1;aF%UHQ$BCcjtytaiedU`Jfh>7VwU&W~QuiBc z2r=U1j{@Uj?9#*+FA>FTu6edXNh|GQwGjb#n!HsX;O_5;2Ih?zD8cubJ>{@yjVRD*akQ z7r>{1+1vUf+#0%`>>5cXi}GbO+L$x8y4i-Apg##R%+nZ^{b`>{a|MG&8DQZNvFJxi zkQGVq918lnzkYsFt}pH%J>qP|6E{YnC=_uw$>k=0)enVDAm?H`ZY|-bhU(Y6)&YXH z9X8M>#^LHSyr#|9gjogNH;Kpjf3mxl7Jc7~^RM`~{>Z(Z08zV(EEO23gbZVP64?;S zIF;koeU!1~%hOqMEnmt+%(!Qokk$c-42vd41$>K6S(X&GZrnERGo!-dyKa*fijQ-U zMr@}_Kef16M`4(#iILn!sU>BFdaWrS6td0M*w8`e;9s+C5b^D8+H~TVI;=D7Chj>k z4IchVd~BO*3zReDx%7Td!?;v7>X8oney=IqZNEYGYha>m<1MQ2#GnDdKtNwuB=aql ze*DDf2NHwr7hOAr3f7yYB*-|K0*?>u>!-8jQr2)d>6OOy6A>a2K3gaE%bErE3NWR) zIrMpQ=c`V8@7OozrEEg0z+5aDq&i<)SMh~!)vuZ0zs@;AMo%#9nt!@5Ou*7obE~Rz;0616 z&xH?T_cht7TDJa>2|81WG*!kPS6#I4K-17>3+Yh8Qc~A#Gr;=EsvDs5G7qO6R(VlG zUZPC@H!X$Nw8j5%l-Z)iUEWD(SUxO#AHT8rD(bI5CO^Iyz5^47@X4R3suOo9rE5BjsIWRD~sQI}SFdX*HWayG!f>(eQh zZOinsv$yh=R-u8sPR}M;+md}R!nUb@dgCt-@_U<_)f~f5@f|?#|1#B|%km1i+w#L@aHMT{3E;fDv`itWPVwyrQ2|yJ=I9D!J(?NVw;-ZiJYyb z2;Nf?U=Fv%Q6RaqXP{!8v?W4tU7C>Z&oE)Mjk8J`di$)X5OS20#g_1fAI9$_v@RU% z+OO@3-Xi58$(?A7QT$PIsh6sA5)P&NRp`k(j?ujz-5A6?>1@?%MMAW-HAvpo1u3bG zP3$sLLf%1g?Ktpq=KwvuU9u$dGgWiE^A}cD^WuX<9DYM2QAL-yb}2?EQqp51vh)gFmXVr2IWzzGYA zKM6D=kE=s}@K`Fa%s%mn41A`m1Fq-2#I}(iONiYAS`;|U^v(>}5X4yq(0^Pa5C zk3~Rbqfl;L;^QV<<8Avfj7At7%{w#$0sWEXtTiKfaW~JlZb>iadhV{7hO%iyK@Hv1 z7#i(*nweOWzLwmySzA-(d%K{jCN%CrVH{@j~$C61@ zOzIhkjII;MZtNhEO2erv9EU)Gr=t!$^h}eQXtIHHi!v(tRP@|sZ(~4t5cmY9zvkf+ z=+K`lrP%ddcHQK}Upu9g+{!eltUgysPY_%u-87h58a1fr{F3>HjtVoDyWep~tE4LV zBgfS1;26BIB4=8(K=d8oe%UpNg=rNWeWIw;3+_Ger$^BTSWvY{jFmsOugV8i%N>17 z+r$t4KGy=7bHt&~O?#^M~uyh@5T;fOg>x87k8pmai?{9AsP^%<2LZ&S9eiv8kO27U=^ZFUp6E5tRtnk+wD zAnHTsl@)2rq$%gxpB(hr-jF9SO;-=&5-zISs?3Hb&yggww8lx8qZqX@UNm#6O6p!k z(;~{3x}Yvg_UnXLYGfyEC66K_latDC=rtMd7gBU`X1iOP-R{uU(&by3KZvf(jqA@C z56PE~qxc7rV}b%7R#3*vN*Fhh6EhjaN7`j1^BQV~c4D%F&2VA~)={hq%TeI~(InsK%#a{bu^ zR*vBFL4BW`Z0~=JP7y>VYCKYOgbw)KtQOZ)G+x&RKe*X+49j*|#b%BeBc(mPr9_x}}B@7wb=j zfzj%`{ByczmDfG#aRv&9kFZfUx@me5Y=g7}aPnL)nqsW75=p*n=IxIeeJsp_>sf+N z3N_OciVf<2&U9+FMTlpae=7;5Yi2inSDXw-`NW`oI>`d*=PM3mK*ZU(;BS6O=Gs1h z@mYB)FJHoe-pj|6_h!SxS`(2~#=Buu6H~rb%tS_BajH3$E6EiA;!z5t$uI;C+e^wh ziZywNP3&_|Fhzj7QZGF{EYghxv3Ba+Xur%~6ylvY*NY83v9yFBMB{$~Ox zwoK^nf8^tobD)-n+Gt~Fy*Hmb?OIUT=3I!}l>;U`ISyh9sB#dX-zMAUSno_l_+4d9 zhndRtwNyV)kFsHvxI;u~IYu9SF?1c~X&)14<=LVwYGtpvf{CXBgC>8Q$kGvgoP3c8 z|GEu#Wr?Rb6uv!XS^mjH_RD!E!HEAQ)!DBs0WPqO-7)GwloRK>D5f~%bF|J$XTsuo z6x$S`8&3Kbm`T$sr(7GgX(-{O`l1K#pMCzr3p3@~@19>>L9VGCRnRs!^h2qW52I!D z46_xj72DW1j}#A;xpRM_>ceXtD0M>vdgy>t^Y_HQs?k4xmSggd{)jA_joaS3!|ZfY zp0R%rA6A8L+!UOcY%Wx9AEro6B9%!G=`4}d21k%jd;-aUP61mY<=)9{(-p8pU67rxvO&V_DnQC#DLozwAQjoF-MbYf!cn>(qoPKB!SO_vLr3WGc zwZ18=y;dHXg7h?+-i&2CK4Fk6(y1e~p8~U#62jl9e;iFWBlsF0PaVqWLn@PHmBb)q zY5KZ#0XY@3;WMnTfsQInj6|_JfQbr>>|N*29`a{52`MigO0FmI+QQz&=90#SCvTdX znzsSz!!$VtCg`|2!J*1(A%oh`;rKf9@x%>wN32=zX?7BIKW8HQU}V z?)wV-{Y^%t3D1;!6KP_N_v`bst{(sWEkG!-!L->W-{l|9GlcWSyPZ#<4b60ox;^OlI}I7C0CZweVlvWpc{SF>89G*M09lA z^dcyXe1 z3@oO4?d!z}qgD%$IM4%@`gr99XHt{QGwDk+43e+FZ8sIQ5?_sa`a+sdztZv`GPI|L z=*yeJB1*1Xz72LODBR|UC1IE?oMD)H)W!5J-5DMqu_m5q1%LcuY$S4Lc64-IwjCz7 z(_=HLUe&Sb^nVeTojAGq{uuwr5$Y-im*d8-WvxC3{>TRme9Qiw7I5TmK&0H90tb*T zFU~u|)GS_+*c0&lmN1vPgU}#V(Z3<$?#{o(Ym7(am2K;CCD_Cy=hiV*)>HPTrm(AG}`|5I6n4K5^r^ z5>9zvlYA4I;c4PEO=&738%-`{Uw=cs->DLx>#G+kY!Odba#1q@ro}PdYP;64S;ynuObX?AUkq=e>x{E9<9!t0waLLuaBE z*MxE5|IZ8Xp-Rm6??P{SF_W+ zMNzX4R-+zNNZAU9;SO9*Rcw;G#LM=@a$IL@k~f-}Kked(4azQ^Yp zee(3M5hlaF6jSaNxp=Rn%ZH}7gH?e9ivJym4}ZvPCKWcmPtz(uOEkyWn@VD3v?{qI zrRO4!;ap$&>-b>{k1AVC0o_?vHjUpG38Lb6(IQ&dyR2YV!YE98`NV&+GBL)o55py6 zFTy{4F>|6XB}o_s*+qSc8cv+X+Qa)x=6YP-D=`wi!pz0}{JBG8*7_Lxl0sO%wNJ~2 z*8##JX=z2iw?414Mxc1zO|ST7I|R+c01`tm?#gIdm`;R&$sU5WhL6k{X%o>$S}t`5 z50v80Dp*8}B0p++(#f}W8{7oiDt+noBevAqC6XxteF5!r)3MrLJ&2ub6@|RtLjn#( z^E%$3iK!$MV_kYib=_<4j+DSa3MVC^&WPSzw_hlaVcq!lV zt+uwu@7i^SdCsK;?`_{De?W@vie*?b0{gh=C4$~N;hDZBzh!V)=%k_)CmD1^Xeym2 z$l22Wc`(^WA7Jj+0zXGU)0w=$pAbo`%;p;>{Di$>chJ`d%!8yD%(=@7&r^NNxgA#i znfd+D0nr4#8()PiU6QduSp7*ytp4HBohR%#pi(k@XS5d7x|cj7I*vLrK- zzVd}-u6$B?42D0u_#-dBir&o9XOyB{4D#NpRNg7AG`ZI%eduA{c~FD5<=N}x-tpTd zg8k$M=UIYIAW&^n#5b!5KWJ}4xPCgkmbMdoPc{^|L=zksS_TsiV}vi8<{Qc ztw{xi;Sx(t9&hU5=^0&;LZOnbS?MUhasZRC9AJgebMq)XDxS}_IHEY+(5CHm&Q|5r zSj9omAy1oZ1CMS`ucRRf3!~(xDL<%>8>0()gM*7|RxJnGulU~D)8=XQ0pY4-DCt(1 zyG}T7rXWbTxU6E~ul{?*6P&_gb#3wwqO{~%ZB&^ z7{eeWs_kcR`KRHnnpjT;&o_lmQS!Xa0x`;W_KSDbo1W;)elA9Kr@pOXClvg#VNdpp zeZbG(vYK6?_yK`{#=0|WiF=XjZAjGU-RfFYquL+&uPV&Jx>(BlKZP$VKC_aTV_5|< zL))Ht?@rF=S>BVJ3+whYa|*svY8U^Ab7F|P6aT%s=jRcwV~cWb^kIhpdClrAOHrfG z>s{2aeYSO1HWgj5Bx7;hNkYnJbU#0VTH;j2$U5-e5HYh|6PLAP$EH?~Z~Y6o8P23@1~}=q z2Uot%PuNmnp;f zt7e1sBhxf}N0oK(CuQ;|7LvR-Btpifpt;ViW$}%L$X!?JSSH=lg|{@NqNUthT>0zR zzwGn!Ns1y7=#6zsdT$lV^=MPL=rl?DbeNx0l@W875M$a6Jb} z6$VxvGjd6BNT0EDt=*)y-_$OpKqfsf$&!#9mNDr|DcyUT%Aw^Ps{^e{n6^V|< z#0FkVfe^DOLNe+G(Z?>MAO3biwn+Uj1g3DIVZgLM717M5^w6`b{T{7#pT z*Zk;Y?jE!TWG?~CSe@WIaK(nCxb=Kbot(7G|K9Ec91?tL;A56bF-;m{nptPljy1O=6WG)V!@G1TBT2>HNYG?3m?|ne}Z1&l*ww_(* zgF$YIP~+1l|9!@tsoOujJyc|b7jla76>otOXT96V1HqVH+U`9gk(MnOuj`%|4ow9J zP6_s@F&sn;k{;d0WDyOz0aQqcI!7#(0E15;NcBRFSBk)>pi$cnla z$jYg;y2HyeMl+ESECkEzB)+R<_)?gJ8}?U(3n4SnCzeHk#EL0cCZb$&Mi%Md@NjWW zQbR+3ahdql@4^4YwrAt^wW_l#BFi_=%DU#7x)-(y+Bg#v^qP$$2QMf71?NvwV3`x= zw$a%xFD6p3#B!4kIDKdfy=~pk6PddnNxBbOlA2KPq`_J$yB#xLC|;dTX5HtJ73jM_30UIccX$n0d(2hV1R5A&oPy3A{6{9QN0}j4aK#8CVBJo*F-!- zn+TmP@)`q$9Yc+uoFjSU$T*9?SwcnZ+hZ-lYeS5U&f!W(Q5oDk5-}CG;5M;=?|1|n zSjS7Z{SL-+1bH?u2v+Zw&{;P=8D?__DfqR_?WrX~1!L*VK@<&ARVvjiZrcI^s=X6G za5ajC6*gN9rqG z;OdH2+|StzEH*A(gnGSOA|{sPn{u<}9Pc8_>B0bq!L?t|hluB4-uvur7Z!C?TpmGD z>jJC@f;m1`w!G~8qb5(FY!DJ-Y;UZy7|kD|BLhq%p)|Xl_Klpf=hXXG&nsj&TTRSr zblW9?xfbu81GSMWdpMkYiCW)IMLRLz*ZR7JhG6>2CNpyPwn<+s_ReA(-zbq?fAVia zzn+Xpg-|slbt1Jr3XUDSm%gD~QSr#kZ$GQClK~;>^&`QPyqW0W!F7%q*(0hIOUkv* zsqPLhoFs>b*wSbF`{(wxN4jNo{>U^*#-u+YdNxgO)0#Hjg<8meygg+aZw;rIa2g|9 z^0EkdgEJXwzoL%QZmX^N3(DD5U05;^w)*3%k2BZ z3WXhC6|BLvuFq8`W$sfDv@dgLlq_s%6Q_uTTADR&*Up4Z-;cy`^ZsF#lsuyBL*5Tg z_JC=Az-t@Bo%@QO|3vf|Qz`V#R6NGA4+jedyGBjQ5pKM4NNWkuEC!)O!|#6-mJbPk zC%`wf(A&c`ezLkSQ-mwS17xO}oLI^ELS-4pz9^YvKaYHc{lJg1 zFk?2JP0)T{i# z2+kzZQ|&K{3kka3QJ0P)PEL|)2RX3M4O?Qqa*h=P3b_r_;KT4}wUqnn^X@-5Ih^|d%p;ts zS4VN-?;*eU6aZff1kXhCBH?X>Wtfr074G8w4vH$%d8j9vIW@?bp&|<(QR+LmLTG8@pqekcKLl{|D$W8AQvhs*gX>maaj70Wn!nk_Mp4n$-y?u`MKf zT972Zgh7kXiRYNFRymjoWNXV7r3Yy`6d2Mpq_&OM7&7BgB`q@*jn6w252+~wh0P}# zH6MDTYjc;v_L*7MeeOOkMte21Um$?UQCsPceDS_jbVT<4fa7LRmKCAx33Hd`8nWnW zeNYSA$NTz=<0?*NQD!Q!_yB9eg#j>JiJf`bv<+tM@F9a2tDhRuSx&0Yj?B z@mnC;^O@r}1OUFa=pWZ7(C+u&0Y6@#ApfXl=OOYTQ9KiQsM zb%L4f*BOczj(*Tb&%t$+wo(K{crJA-;j(=+>~KVBolxZWo=d$?exja;>;!y-c@K{{ z0X~i?Y*e+7&N7p&z2PbbUhIda&2v|$c&l^P-)P;8Uy5$#?kkd=T9uquFS0SwN7zYu zrfnDZy;9iokdeHkDWM5Rj&3=Jjl7$I~&@fHRL- zZYfNWkSRl|jD0tZ7%J3*B_CpwJZNVjsQN_728AVJFPs~d>S?I+~efQZODLJm2u$FuyLTQ_c@t-sN z7Guo140k8Oe?`3@S2^d^PFkm}KmJ{ata!KJX(?O42FFhQuGZq&MFLfLQszWPmQk9aW0^{n%y~lMg$N_JR5)~oe45$`4d`z-!#QYK9n{eIEvJrdsv!U*! zhFQTDu<*hJZHszIxOC#GLell;)d2TG{fLmqV8WeF7)Kr73cZM0NJlIc-uyWM9i8cY0sr?&+c;y_P8_-yQ~#l{*F`Q@7m7X9`wyY2YEqc$@9 zqoz(MWSn1$tJ15wz-1NvYVjBJewRep($e`s=JH#lc|KbGqA$6bJfxHuu&RWRtD=;DCBgXp<5Wy!1gWrhpX^T3KJEk9QBQMA)zz}@uVA9k zl^`A2rs2^txA={?EvV2d;*FxW7&BM!uQ$xTa_)sF_%+Kch=_<(pYg%*kMu>#?!C{t z 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 literal 0 HcmV?d00001 diff --git a/matrices/psmigr_2/sim_run.csv b/matrices/psmigr_2/sim_run.csv new file mode 100644 index 0000000..f4b6b67 --- /dev/null +++ b/matrices/psmigr_2/sim_run.csv @@ -0,0 +1,19 @@ +Program arguments: + ../build/test_spmv_sim + ../test-benchmark/psmigr_2.mtx +File: ../test-benchmark/psmigr_2.mtx +Sorting took: took 1.40616 seconds. +Nonzeros: 540022 +Running on DFE +Result Simple Total cycles=27113,26642, +Result Simple Padding cycles=14,14, +Result Simple Reduction cycles=6280,6280, +Running on architecture with + maxRows = 200000 +Result Simple Iterations=1, +Result Simple Took (ms)=1.42415, +Result Simple Est (ms)=0.00027113, +Result Simple Gflops (est)=3.98349, +Result Simple Gflops (actual)=0.000758378, +Test passed! +All tests passed! diff --git a/matrices/psmigr_2/summary.csv b/matrices/psmigr_2/summary.csv new file mode 100644 index 0000000..37ce7ae --- /dev/null +++ b/matrices/psmigr_2/summary.csv @@ -0,0 +1,2 @@ +Name, Order, Nonzeros, Unique Values, Sparsity, MC(2), MC(5), MC(8), MC(10) +psmigr_2 3142 540022 531668 5.47015 0.00003 0.00019 0.00126 0.00411 0.03064 diff --git a/matrices/raefsky1.html b/matrices/raefsky1.html new file mode 100644 index 0000000..a1dfd8b --- /dev/null +++ b/matrices/raefsky1.html @@ -0,0 +1,25 @@ +

Matrix: raefsky1

+

+

Name, Order, Nonzeros, Unique Values, Sparsity, MC(2), MC(5), MC(8), MC(10) +raefsky1 3244 294276 271382 2.79636 0.01598 0.02852 0.03467 0.03989 0.08861 +

+

Program arguments: + ../build/test_spmv_sim + ../test-benchmark/raefsky1.mtx +File: ../test-benchmark/raefsky1.mtx +Sorting took: took 0.681008 seconds. +Nonzeros: 294276 +Running on DFE +Result Simple Total cycles=19229,19610, +Result Simple Padding cycles=11,11, +Result Simple Reduction cycles=6484,6484, +Running on architecture with + maxRows = 200000 +Result Simple Iterations=1, +Result Simple Took (ms)=1.06774, +Result Simple Est (ms)=0.00019229, +Result Simple Gflops (est)=3.06075, +Result Simple Gflops (actual)=0.000551211, +Test passed! +All tests passed! +

\ No newline at end of file diff --git a/matrices/raefsky1.png b/matrices/raefsky1.png new file mode 100644 index 0000000000000000000000000000000000000000..c550220f879967c4f0c03747930bf262bc6c8df1 GIT binary patch literal 36424 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 z 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 literal 0 HcmV?d00001 diff --git a/matrices/raefsky1/raefsky1.png b/matrices/raefsky1/raefsky1.png new file mode 100644 index 0000000000000000000000000000000000000000..c550220f879967c4f0c03747930bf262bc6c8df1 GIT binary patch literal 36424 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 z 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 literal 0 HcmV?d00001 diff --git a/matrices/raefsky1/sim_run.csv b/matrices/raefsky1/sim_run.csv new file mode 100644 index 0000000..917ab83 --- /dev/null +++ b/matrices/raefsky1/sim_run.csv @@ -0,0 +1,19 @@ +Program arguments: + ../build/test_spmv_sim + ../test-benchmark/raefsky1.mtx +File: ../test-benchmark/raefsky1.mtx +Sorting took: took 0.681008 seconds. +Nonzeros: 294276 +Running on DFE +Result Simple Total cycles=19229,19610, +Result Simple Padding cycles=11,11, +Result Simple Reduction cycles=6484,6484, +Running on architecture with + maxRows = 200000 +Result Simple Iterations=1, +Result Simple Took (ms)=1.06774, +Result Simple Est (ms)=0.00019229, +Result Simple Gflops (est)=3.06075, +Result Simple Gflops (actual)=0.000551211, +Test passed! +All tests passed! diff --git a/matrices/raefsky1/summary.csv b/matrices/raefsky1/summary.csv new file mode 100644 index 0000000..6cfedb0 --- /dev/null +++ b/matrices/raefsky1/summary.csv @@ -0,0 +1,2 @@ +Name, Order, Nonzeros, Unique Values, Sparsity, MC(2), MC(5), MC(8), MC(10) +raefsky1 3244 294276 271382 2.79636 0.01598 0.02852 0.03467 0.03989 0.08861 diff --git a/matrices/t2d_q9_A_01.html b/matrices/t2d_q9_A_01.html new file mode 100644 index 0000000..3e06cfb --- /dev/null +++ b/matrices/t2d_q9_A_01.html @@ -0,0 +1,25 @@ +

Matrix: t2d_q9_A_01

+

Name, Order, Nonzeros, Unique Values, Sparsity, MC(2), MC(5), MC(8), MC(10) +t2d_q9_A_01 9803 87025 1383 0.09056 0.15825 0.52272 0.91217 0.99587 1.00000 +

+

+

Program arguments: + ../build/test_spmv_sim + ../test-benchmark/t2d_q9_A_01.mtx +File: ../test-benchmark/t2d_q9_A_01.mtx +Sorting took: took 0.144676 seconds. +Nonzeros: 87025 +Running on DFE +Result Simple Total cycles=61649,61669, +Result Simple Padding cycles=44,43, +Result Simple Reduction cycles=49000,49010, +Running on architecture with + maxRows = 200000 +Result Simple Iterations=1, +Result Simple Took (ms)=3.3849, +Result Simple Est (ms)=0.00061649, +Result Simple Gflops (est)=0.282324, +Result Simple Gflops (actual)=5.14196e-05, +Test passed! +All tests passed! +

\ No newline at end of file diff --git a/matrices/t2d_q9_A_01.png b/matrices/t2d_q9_A_01.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f0307f9071a1983e4c5cb5b160f7cc0a20a028 GIT binary patch literal 14455 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 B1 Date: Tue, 1 Dec 2015 18:26:46 +0000 Subject: [PATCH 11/23] Update index --- index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/index.html b/index.html index f76f2e8..8c178b9 100644 --- a/index.html +++ b/index.html @@ -5,6 +5,7 @@

From b6f1c4dc8ccd32b216ef16cfe81c31b0ca7992f6 Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Wed, 2 Dec 2015 17:49:08 +0000 Subject: [PATCH 12/23] Tiny update of index --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 8c178b9..713dbb4 100644 --- a/index.html +++ b/index.html @@ -1,4 +1,4 @@ -Welcome! This is a page in progress... +Welcome to caskorg! This is a page in progress...

Here are some useful links in the meantime: From 14ffaf7340c94748476e208bdb6448eeb564ed36 Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Mon, 30 Nov 2015 01:15:55 +0000 Subject: [PATCH 13/23] Sanitize index page --- index.html | 70 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index 713dbb4..3402361 100644 --- a/index.html +++ b/index.html @@ -1,11 +1,59 @@ -Welcome to caskorg! This is a page in progress... - -

-Here are some useful links in the meantime: -

-

+ + + + + + + + Fork me on GitHub +
+ + +

CASK

+

Work in progress, tread lightly...

+ +
+

Customised Architectures for Sparse Kernels

+ +

CASK can generate, tune and package custom architectures for sparse + kernels.

+ +

+

+ + +
+

Useful Links

+

+

+

+

+

+ +
+

Publications

+

Feel free to cite any (or all) of these, of course...

+ +

CASK - An Open-Source Framework for the + Exploration of Custom Architecture for Sparse Kernels
+ Paul Grigoras, Pavel Burovskiy, Eddie Hung, Wayne Luk
+ to appear FPGA 2016

+ +

+ Accelerating SpMV on FPGA by Compressing Nonzero Values
+ Paul Grigoras, Pavel Burovskiy, Eddie Hung, Wayne Luk
+ FCCM 2015

+ +

+ An Efficient Sparse Conjugate Gradient Solver Using a Benes Permutation Network
+ Gary Chow, Paul Grigoras, Pavel Burovskiy, Wayne Luk
+ FPL 2014

+ +
+ + From 1ca5788d4b6986496a8a0d2fe548e2f5cf18ee9c Mon Sep 17 00:00:00 2001 From: Paul Grigoras Date: Mon, 30 Nov 2015 01:16:31 +0000 Subject: [PATCH 14/23] Add css, js etc. --- .../bootstrap/dist/css/bootstrap-theme.css | 587 ++ .../dist/css/bootstrap-theme.css.map | 1 + .../dist/css/bootstrap-theme.min.css | 6 + .../dist/css/bootstrap-theme.min.css.map | 1 + node_modules/bootstrap/dist/css/bootstrap.css | 6760 +++++++++++++++++ .../bootstrap/dist/css/bootstrap.css.map | 1 + .../bootstrap/dist/css/bootstrap.min.css | 6 + .../bootstrap/dist/css/bootstrap.min.css.map | 1 + .../fonts/glyphicons-halflings-regular.eot | Bin 0 -> 20127 bytes .../fonts/glyphicons-halflings-regular.svg | 288 + .../fonts/glyphicons-halflings-regular.ttf | Bin 0 -> 45404 bytes .../fonts/glyphicons-halflings-regular.woff | Bin 0 -> 23424 bytes .../fonts/glyphicons-halflings-regular.woff2 | Bin 0 -> 18028 bytes node_modules/bootstrap/dist/js/bootstrap.js | 2363 ++++++ .../bootstrap/dist/js/bootstrap.min.js | 7 + node_modules/bootstrap/dist/js/npm.js | 13 + 16 files changed, 10034 insertions(+) create mode 100644 node_modules/bootstrap/dist/css/bootstrap-theme.css create mode 100644 node_modules/bootstrap/dist/css/bootstrap-theme.css.map create mode 100644 node_modules/bootstrap/dist/css/bootstrap-theme.min.css create mode 100644 node_modules/bootstrap/dist/css/bootstrap-theme.min.css.map create mode 100644 node_modules/bootstrap/dist/css/bootstrap.css create mode 100644 node_modules/bootstrap/dist/css/bootstrap.css.map create mode 100644 node_modules/bootstrap/dist/css/bootstrap.min.css create mode 100644 node_modules/bootstrap/dist/css/bootstrap.min.css.map create mode 100644 node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.eot create mode 100644 node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.svg create mode 100644 node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf create mode 100644 node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.woff create mode 100644 node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 create mode 100644 node_modules/bootstrap/dist/js/bootstrap.js create mode 100644 node_modules/bootstrap/dist/js/bootstrap.min.js create mode 100644 node_modules/bootstrap/dist/js/npm.js diff --git a/node_modules/bootstrap/dist/css/bootstrap-theme.css b/node_modules/bootstrap/dist/css/bootstrap-theme.css new file mode 100644 index 0000000..ebe57fb --- /dev/null +++ b/node_modules/bootstrap/dist/css/bootstrap-theme.css @@ -0,0 +1,587 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +.btn-default, +.btn-primary, +.btn-success, +.btn-info, +.btn-warning, +.btn-danger { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075); +} +.btn-default:active, +.btn-primary:active, +.btn-success:active, +.btn-info:active, +.btn-warning:active, +.btn-danger:active, +.btn-default.active, +.btn-primary.active, +.btn-success.active, +.btn-info.active, +.btn-warning.active, +.btn-danger.active { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-default.disabled, +.btn-primary.disabled, +.btn-success.disabled, +.btn-info.disabled, +.btn-warning.disabled, +.btn-danger.disabled, +.btn-default[disabled], +.btn-primary[disabled], +.btn-success[disabled], +.btn-info[disabled], +.btn-warning[disabled], +.btn-danger[disabled], +fieldset[disabled] .btn-default, +fieldset[disabled] .btn-primary, +fieldset[disabled] .btn-success, +fieldset[disabled] .btn-info, +fieldset[disabled] .btn-warning, +fieldset[disabled] .btn-danger { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-default .badge, +.btn-primary .badge, +.btn-success .badge, +.btn-info .badge, +.btn-warning .badge, +.btn-danger .badge { + text-shadow: none; +} +.btn:active, +.btn.active { + background-image: none; +} +.btn-default { + text-shadow: 0 1px 0 #fff; + background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0)); + background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #dbdbdb; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus { + background-color: #e0e0e0; + background-position: 0 -15px; +} +.btn-default:active, +.btn-default.active { + background-color: #e0e0e0; + border-color: #dbdbdb; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #e0e0e0; + background-image: none; +} +.btn-primary { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88)); + background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #245580; +} +.btn-primary:hover, +.btn-primary:focus { + background-color: #265a88; + background-position: 0 -15px; +} +.btn-primary:active, +.btn-primary.active { + background-color: #265a88; + border-color: #245580; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #265a88; + background-image: none; +} +.btn-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #3e8f3e; +} +.btn-success:hover, +.btn-success:focus { + background-color: #419641; + background-position: 0 -15px; +} +.btn-success:active, +.btn-success.active { + background-color: #419641; + border-color: #3e8f3e; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #419641; + background-image: none; +} +.btn-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #28a4c9; +} +.btn-info:hover, +.btn-info:focus { + background-color: #2aabd2; + background-position: 0 -15px; +} +.btn-info:active, +.btn-info.active { + background-color: #2aabd2; + border-color: #28a4c9; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #2aabd2; + background-image: none; +} +.btn-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #e38d13; +} +.btn-warning:hover, +.btn-warning:focus { + background-color: #eb9316; + background-position: 0 -15px; +} +.btn-warning:active, +.btn-warning.active { + background-color: #eb9316; + border-color: #e38d13; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #eb9316; + background-image: none; +} +.btn-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-color: #b92c28; +} +.btn-danger:hover, +.btn-danger:focus { + background-color: #c12e2a; + background-position: 0 -15px; +} +.btn-danger:active, +.btn-danger.active { + background-color: #c12e2a; + border-color: #b92c28; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #c12e2a; + background-image: none; +} +.thumbnail, +.img-thumbnail { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + background-color: #e8e8e8; + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + background-color: #2e6da4; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.navbar-default { + background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8)); + background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075); +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2)); + background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075); +} +.navbar-brand, +.navbar-nav > li > a { + text-shadow: 0 1px 0 rgba(255, 255, 255, .25); +} +.navbar-inverse { + background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222)); + background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + background-repeat: repeat-x; + border-radius: 4px; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .active > a { + background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f)); + background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0); + background-repeat: repeat-x; + -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); + box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25); +} +.navbar-inverse .navbar-brand, +.navbar-inverse .navbar-nav > li > a { + text-shadow: 0 -1px 0 rgba(0, 0, 0, .25); +} +.navbar-static-top, +.navbar-fixed-top, +.navbar-fixed-bottom { + border-radius: 0; +} +@media (max-width: 767px) { + .navbar .navbar-nav .open .dropdown-menu > .active > a, + .navbar .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; + } +} +.alert { + text-shadow: 0 1px 0 rgba(255, 255, 255, .2); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05); +} +.alert-success { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); + background-repeat: repeat-x; + border-color: #b2dba1; +} +.alert-info { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); + background-repeat: repeat-x; + border-color: #9acfea; +} +.alert-warning { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); + background-repeat: repeat-x; + border-color: #f5e79e; +} +.alert-danger { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3)); + background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); + background-repeat: repeat-x; + border-color: #dca7a7; +} +.progress { + background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090)); + background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-success { + background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44)); + background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-info { + background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5)); + background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-warning { + background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f)); + background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-danger { + background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c)); + background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); + background-repeat: repeat-x; +} +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.list-group { + border-radius: 4px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075); + box-shadow: 0 1px 2px rgba(0, 0, 0, .075); +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + text-shadow: 0 -1px 0 #286090; + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0); + background-repeat: repeat-x; + border-color: #2b669a; +} +.list-group-item.active .badge, +.list-group-item.active:hover .badge, +.list-group-item.active:focus .badge { + text-shadow: none; +} +.panel { + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05); + box-shadow: 0 1px 2px rgba(0, 0, 0, .05); +} +.panel-default > .panel-heading { + background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8)); + background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); + background-repeat: repeat-x; +} +.panel-primary > .panel-heading { + background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4)); + background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0); + background-repeat: repeat-x; +} +.panel-success > .panel-heading { + background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6)); + background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); + background-repeat: repeat-x; +} +.panel-info > .panel-heading { + background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3)); + background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); + background-repeat: repeat-x; +} +.panel-warning > .panel-heading { + background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc)); + background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); + background-repeat: repeat-x; +} +.panel-danger > .panel-heading { + background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc)); + background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); + background-repeat: repeat-x; +} +.well { + background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); + background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5)); + background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); + background-repeat: repeat-x; + border-color: #dcdcdc; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1); +} +/*# sourceMappingURL=bootstrap-theme.css.map */ diff --git a/node_modules/bootstrap/dist/css/bootstrap-theme.css.map b/node_modules/bootstrap/dist/css/bootstrap-theme.css.map new file mode 100644 index 0000000..21e1910 --- /dev/null +++ b/node_modules/bootstrap/dist/css/bootstrap-theme.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap-theme.css","less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"AAAA;;;;GAIG;ACeH;;;;;;EAME,yCAAA;EC2CA,4FAAA;EACQ,oFAAA;CFvDT;ACgBC;;;;;;;;;;;;ECsCA,yDAAA;EACQ,iDAAA;CFxCT;ACMC;;;;;;;;;;;;;;;;;;ECiCA,yBAAA;EACQ,iBAAA;CFnBT;AC/BD;;;;;;EAuBI,kBAAA;CDgBH;ACyBC;;EAEE,uBAAA;CDvBH;AC4BD;EErEI,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;EAuC2C,0BAAA;EAA2B,mBAAA;CDjBvE;ACpBC;;EAEE,0BAAA;EACA,6BAAA;CDsBH;ACnBC;;EAEE,0BAAA;EACA,sBAAA;CDqBH;ACfG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6BL;ACbD;EEtEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8DD;AC5DC;;EAEE,0BAAA;EACA,6BAAA;CD8DH;AC3DC;;EAEE,0BAAA;EACA,sBAAA;CD6DH;ACvDG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqEL;ACpDD;EEvEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsGD;ACpGC;;EAEE,0BAAA;EACA,6BAAA;CDsGH;ACnGC;;EAEE,0BAAA;EACA,sBAAA;CDqGH;AC/FG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6GL;AC3FD;EExEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ID;AC5IC;;EAEE,0BAAA;EACA,6BAAA;CD8IH;AC3IC;;EAEE,0BAAA;EACA,sBAAA;CD6IH;ACvIG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqJL;AClID;EEzEI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CDsLD;ACpLC;;EAEE,0BAAA;EACA,6BAAA;CDsLH;ACnLC;;EAEE,0BAAA;EACA,sBAAA;CDqLH;AC/KG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CD6LL;ACzKD;EE1EI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EAEA,uHAAA;ECnBF,oEAAA;EH4CA,4BAAA;EACA,sBAAA;CD8ND;AC5NC;;EAEE,0BAAA;EACA,6BAAA;CD8NH;AC3NC;;EAEE,0BAAA;EACA,sBAAA;CD6NH;ACvNG;;;;;;;;;;;;;;;;;;EAME,0BAAA;EACA,uBAAA;CDqOL;AC1MD;;EClCE,mDAAA;EACQ,2CAAA;CFgPT;ACrMD;;EE3FI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF0FF,0BAAA;CD2MD;ACzMD;;;EEhGI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFgGF,0BAAA;CD+MD;ACtMD;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EH+HA,mBAAA;ECjEA,4FAAA;EACQ,oFAAA;CF8QT;ACjND;;EE7GI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,yDAAA;EACQ,iDAAA;CFwRT;AC9MD;;EAEE,+CAAA;CDgND;AC5MD;EEhII,sEAAA;EACA,iEAAA;EACA,2FAAA;EAAA,oEAAA;EACA,4BAAA;EACA,uHAAA;ECnBF,oEAAA;EHkJA,mBAAA;CDkND;ACrND;;EEhII,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;ED2CF,wDAAA;EACQ,gDAAA;CF+ST;AC/ND;;EAYI,0CAAA;CDuNH;AClND;;;EAGE,iBAAA;CDoND;AC/LD;EAfI;;;IAGE,YAAA;IE7JF,yEAAA;IACA,oEAAA;IACA,8FAAA;IAAA,uEAAA;IACA,4BAAA;IACA,uHAAA;GH+WD;CACF;AC3MD;EACE,8CAAA;EC3HA,2FAAA;EACQ,mFAAA;CFyUT;ACnMD;EEtLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+MD;AC1MD;EEvLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuND;ACjND;EExLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CD+ND;ACxND;EEzLI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EF8KF,sBAAA;CDuOD;ACxND;EEjMI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH4ZH;ACrND;EE3MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHmaH;AC3ND;EE5MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH0aH;ACjOD;EE7MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHibH;ACvOD;EE9MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHwbH;AC7OD;EE/MI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH+bH;AChPD;EElLI,8MAAA;EACA,yMAAA;EACA,sMAAA;CHqaH;AC5OD;EACE,mBAAA;EC9KA,mDAAA;EACQ,2CAAA;CF6ZT;AC7OD;;;EAGE,8BAAA;EEnOE,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFiOF,sBAAA;CDmPD;ACxPD;;;EAQI,kBAAA;CDqPH;AC3OD;ECnME,kDAAA;EACQ,0CAAA;CFibT;ACrOD;EE5PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHoeH;AC3OD;EE7PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CH2eH;ACjPD;EE9PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHkfH;ACvPD;EE/PI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHyfH;AC7PD;EEhQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHggBH;ACnQD;EEjQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;CHugBH;ACnQD;EExQI,yEAAA;EACA,oEAAA;EACA,8FAAA;EAAA,uEAAA;EACA,4BAAA;EACA,uHAAA;EFsQF,sBAAA;EC3NA,0FAAA;EACQ,kFAAA;CFqeT","file":"bootstrap-theme.css","sourcesContent":["/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n text-shadow: none;\n}\n.btn:active,\n.btn.active {\n background-image: none;\n}\n.btn-default {\n background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #dbdbdb;\n text-shadow: 0 1px 0 #fff;\n border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n background-color: #e0e0e0;\n background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n background-color: #e0e0e0;\n border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #e0e0e0;\n background-image: none;\n}\n.btn-primary {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n background-color: #265a88;\n background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n background-color: #265a88;\n border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #265a88;\n background-image: none;\n}\n.btn-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n background-color: #419641;\n background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n background-color: #419641;\n border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #419641;\n background-image: none;\n}\n.btn-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n background-color: #2aabd2;\n background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n background-color: #2aabd2;\n border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #2aabd2;\n background-image: none;\n}\n.btn-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n background-color: #eb9316;\n background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n background-color: #eb9316;\n border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #eb9316;\n background-image: none;\n}\n.btn-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n background-repeat: repeat-x;\n border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n background-color: #c12e2a;\n background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n background-color: #c12e2a;\n border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #c12e2a;\n background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n background-color: #e8e8e8;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n background-color: #2e6da4;\n}\n.navbar-default {\n background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: -o-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);\n background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);\n}\n.navbar-inverse {\n background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n@media (max-width: 767px) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n }\n}\n.alert {\n text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.alert-success {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n border-color: #b2dba1;\n}\n.alert-info {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n border-color: #9acfea;\n}\n.alert-warning {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n border-color: #f5e79e;\n}\n.alert-danger {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n border-color: #dca7a7;\n}\n.progress {\n background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n}\n.progress-bar {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n}\n.progress-bar-success {\n background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n}\n.progress-bar-info {\n background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n}\n.progress-bar-warning {\n background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n}\n.progress-bar-danger {\n background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n}\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.list-group {\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 #286090;\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n text-shadow: none;\n}\n.panel {\n -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n.panel-default > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n}\n.panel-primary > .panel-heading {\n background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n}\n.panel-success > .panel-heading {\n background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n}\n.panel-info > .panel-heading {\n background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n}\n.panel-warning > .panel-heading {\n background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n}\n.panel-danger > .panel-heading {\n background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n}\n.well {\n background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n border-color: #dcdcdc;\n -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */","/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]} \ No newline at end of file diff --git a/node_modules/bootstrap/dist/css/bootstrap-theme.min.css b/node_modules/bootstrap/dist/css/bootstrap-theme.min.css new file mode 100644 index 0000000..dc95d8e --- /dev/null +++ b/node_modules/bootstrap/dist/css/bootstrap-theme.min.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)} +/*# sourceMappingURL=bootstrap-theme.min.css.map */ \ No newline at end of file diff --git a/node_modules/bootstrap/dist/css/bootstrap-theme.min.css.map b/node_modules/bootstrap/dist/css/bootstrap-theme.min.css.map new file mode 100644 index 0000000..2c6b65a --- /dev/null +++ b/node_modules/bootstrap/dist/css/bootstrap-theme.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/bootstrap/dist/css/bootstrap.css b/node_modules/bootstrap/dist/css/bootstrap.css new file mode 100644 index 0000000..42c79d6 --- /dev/null +++ b/node_modules/bootstrap/dist/css/bootstrap.css @@ -0,0 +1,6760 @@ +/*! + * Bootstrap v3.3.6 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\002a"; +} +.glyphicon-plus:before { + content: "\002b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover, +a.text-primary:focus { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover, +a.text-success:focus { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover, +a.text-info:focus { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover, +a.text-warning:focus { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover, +a.text-danger:focus { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover, +a.bg-primary:focus { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover, +a.bg-success:focus { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover, +a.bg-info:focus { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover, +a.bg-warning:focus { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover, +a.bg-danger:focus { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.form-group-sm select.form-control { + height: 30px; + line-height: 30px; +} +.form-group-sm textarea.form-control, +.form-group-sm select[multiple].form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 6px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.form-group-lg select.form-control { + height: 46px; + line-height: 46px; +} +.form-group-lg textarea.form-control, +.form-group-lg select[multiple].form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 11px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback, +.input-group-lg + .form-control-feedback, +.form-group-lg .form-control + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback, +.input-group-sm + .form-control-feedback, +.form-group-sm .form-control + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 11px; + font-size: 18px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + font-size: 12px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +a.btn.disabled, +fieldset[disabled] a.btn { + pointer-events: none; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:focus, +.btn-default.focus { + color: #333; + background-color: #e6e6e6; + border-color: #8c8c8c; +} +.btn-default:hover { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active:hover, +.btn-default.active:hover, +.open > .dropdown-toggle.btn-default:hover, +.btn-default:active:focus, +.btn-default.active:focus, +.open > .dropdown-toggle.btn-default:focus, +.btn-default:active.focus, +.btn-default.active.focus, +.open > .dropdown-toggle.btn-default.focus { + color: #333; + background-color: #d4d4d4; + border-color: #8c8c8c; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:focus, +.btn-primary.focus { + color: #fff; + background-color: #286090; + border-color: #122b40; +} +.btn-primary:hover { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active:hover, +.btn-primary.active:hover, +.open > .dropdown-toggle.btn-primary:hover, +.btn-primary:active:focus, +.btn-primary.active:focus, +.open > .dropdown-toggle.btn-primary:focus, +.btn-primary:active.focus, +.btn-primary.active.focus, +.open > .dropdown-toggle.btn-primary.focus { + color: #fff; + background-color: #204d74; + border-color: #122b40; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:focus, +.btn-success.focus { + color: #fff; + background-color: #449d44; + border-color: #255625; +} +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active:hover, +.btn-success.active:hover, +.open > .dropdown-toggle.btn-success:hover, +.btn-success:active:focus, +.btn-success.active:focus, +.open > .dropdown-toggle.btn-success:focus, +.btn-success:active.focus, +.btn-success.active.focus, +.open > .dropdown-toggle.btn-success.focus { + color: #fff; + background-color: #398439; + border-color: #255625; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:focus, +.btn-info.focus { + color: #fff; + background-color: #31b0d5; + border-color: #1b6d85; +} +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active:hover, +.btn-info.active:hover, +.open > .dropdown-toggle.btn-info:hover, +.btn-info:active:focus, +.btn-info.active:focus, +.open > .dropdown-toggle.btn-info:focus, +.btn-info:active.focus, +.btn-info.active.focus, +.open > .dropdown-toggle.btn-info.focus { + color: #fff; + background-color: #269abc; + border-color: #1b6d85; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:focus, +.btn-warning.focus { + color: #fff; + background-color: #ec971f; + border-color: #985f0d; +} +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active:hover, +.btn-warning.active:hover, +.open > .dropdown-toggle.btn-warning:hover, +.btn-warning:active:focus, +.btn-warning.active:focus, +.open > .dropdown-toggle.btn-warning:focus, +.btn-warning:active.focus, +.btn-warning.active.focus, +.open > .dropdown-toggle.btn-warning.focus { + color: #fff; + background-color: #d58512; + border-color: #985f0d; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:focus, +.btn-danger.focus { + color: #fff; + background-color: #c9302c; + border-color: #761c19; +} +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active:hover, +.btn-danger.active:hover, +.open > .dropdown-toggle.btn-danger:hover, +.btn-danger:active:focus, +.btn-danger.active:focus, +.open > .dropdown-toggle.btn-danger:focus, +.btn-danger:active.focus, +.btn-danger.active.focus, +.open > .dropdown-toggle.btn-danger.focus { + color: #fff; + background-color: #ac2925; + border-color: #761c19; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-top: 4px solid \9; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px dashed; + border-bottom: 4px solid \9; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn, +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group .form-control:focus { + z-index: 3; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + z-index: 2; + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 3; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding-top: 30px; + padding-bottom: 30px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + padding-right: 15px; + padding-left: 15px; + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding-top: 48px; + padding-bottom: 48px; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-object.img-thumbnail { + max-width: none; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item, +button.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +button.list-group-item:hover, +a.list-group-item:focus, +button.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +button.list-group-item { + width: 100%; + text-align: left; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success, +button.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading, +button.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +button.list-group-item-success:hover, +a.list-group-item-success:focus, +button.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +button.list-group-item-success.active, +a.list-group-item-success.active:hover, +button.list-group-item-success.active:hover, +a.list-group-item-success.active:focus, +button.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info, +button.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading, +button.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +button.list-group-item-info:hover, +a.list-group-item-info:focus, +button.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +button.list-group-item-info.active, +a.list-group-item-info.active:hover, +button.list-group-item-info.active:hover, +a.list-group-item-info.active:focus, +button.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning, +button.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading, +button.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +button.list-group-item-warning:hover, +a.list-group-item-warning:focus, +button.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +button.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +button.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus, +button.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger, +button.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading, +button.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +button.list-group-item-danger:hover, +a.list-group-item-danger:focus, +button.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +button.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +button.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus, +button.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + filter: alpha(opacity=0); + opacity: 0; + + line-break: auto; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + + line-break: auto; +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + background-color: rgba(0, 0, 0, 0); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + margin-top: -10px; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -10px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -10px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -10px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-header:before, +.modal-header:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-header:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table !important; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table !important; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table !important; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table !important; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table !important; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/node_modules/bootstrap/dist/css/bootstrap.css.map b/node_modules/bootstrap/dist/css/bootstrap.css.map new file mode 100644 index 0000000..09f8cda --- /dev/null +++ b/node_modules/bootstrap/dist/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"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AW,iBAAA;CHsR9C;AGrRmC;EAAW,iBAAA;CHwR9C;AGvRmC;EAAW,iBAAA;CH0R9C;AGzRmC;EAAW,iBAAA;CH4R9C;AG3RmC;EAAW,iBAAA;CH8R9C;AG7RmC;EAAW,iBAAA;CHgS9C;AG/RmC;EAAW,iBAAA;CHkS9C;AGjSmC;EAAW,iBAAA;CHoS9C;AGnSmC;EAAW,iBAAA;CHsS9C;AGrSmC;EAAW,iBAAA;CHwS9C;AGvSmC;EAAW,iBAAA;CH0S9C;AGzSmC;EAAW,iBAAA;CH4S9C;AG3SmC;EAAW,iBAAA;CH8S9C;AG7SmC;EAAW,iBAAA;CHgT9C;AG/SmC;EAAW,iBAAA;CHkT9C;AGjTmC;EAAW,iBAAA;CHoT9C;AGnTmC;EAAW,iBAAA;CHsT9C;AGrTmC;EAAW,iBAAA;CHwT9C;AGvTmC;EAAW,iBAAA;CH0T9C;AGzTmC;EAAW,iBAAA;CH4T9C;AG3TmC;EAAW,iBAAA;CH8T9C;AG7TmC;EAAW,iBAAA;CHgU9C;AG/TmC;EAAW,iBAAA;CHkU9C;AGjUmC;EAAW,iBAAA;CHoU9C;AGnUmC;EAAW,iBAAA;CHsU9C;AGrUmC;EAAW,iBAAA;CHwU9C;AGvUmC;EAAW,iBAAA;CH0U9C;AGzUmC;EAAW,iBAAA;CH4U9C;AG3UmC;EAAW,iBAAA;CH8U9C;AG7UmC;EAAW,iBAAA;CHgV9C;AG/UmC;EAAW,iBAAA;CHkV9C;AGjVmC;EAAW,iBAAA;CHoV9C;AGnVmC;EAAW,iBAAA;CHsV9C;AGrVmC;EAAW,iBAAA;CHwV9C;AGvVmC;EAAW,iBAAA;CH0V9C;AGzVmC;EAAW,iBAAA;CH4V9C;AG3VmC;EAAW,iBAAA;CH8V9C;AG7VmC;EAAW,iBAAA;CHgW9C;AG/VmC;EAAW,iBAAA;CHkW9C;AGjWmC;EAAW,iBAAA;CHoW9C;AGnWmC;EAAW,iBAAA;CHsW9C;AGrWmC;EAAW,iBAAA;CHwW9C;AGvWmC;EAAW,iBAAA;CH0W9C;AGzWmC;EAAW,iBAAA;CH4W9C;AG3WmC;EAAW,iBAAA;CH8W9C;AG7WmC;EAAW,iBAAA;CHgX9C;AG/WmC;EAAW,iBAAA;CHkX9C;AGjXmC;EAAW,iBAAA;CHoX9C;AGnXmC;EAAW,iBAAA;CHsX9C;AGrXmC;EAAW,iBAAA;CHwX9C;AGvXmC;EAAW,iBAAA;CH0X9C;AGzXmC;EAAW,iBAAA;CH4X9C;AG3XmC;EAAW,iBAAA;CH8X9C;AG7XmC;EAAW,iBAAA;CHgY9C;AG/XmC;EAAW,iBAAA;CHkY9C;AGjYmC;EAAW,iBAAA;CHoY9C;AGnYmC;EAAW,iBAAA;CHsY9C;AGrYmC;EAAW,iBAAA;CHwY9C;AGvYmC;EAAW,iBAAA;CH0Y9C;AGzYmC;EAAW,iBAAA;CH4Y9C;AG3YmC;EAAW,iBAAA;CH8Y9C;AG7YmC;EAAW,iBAAA;CHgZ9C;AG/YmC;EAAW,iBAAA;CHkZ9C;AGjZmC;EAAW,iBAAA;CHoZ9C;AGnZmC;EAAW,iBAAA;CHsZ9C;AGrZmC;EAAW,iBAAA;CHwZ9C;AGvZmC;EAAW,iBAAA;CH0Z9C;AGzZmC;EAAW,iBAAA;CH4Z9C;AG3ZmC;EAAW,iBAAA;CH8Z9C;AG7ZmC;EAAW,iBAAA;CHga9C;AG/ZmC;EAAW,iBAAA;CHka9C;AGjamC;EAAW,iBAAA;CHoa9C;AGnamC;EAAW,iBAAA;CHsa9C;AGramC;EAAW,iBAAA;CHwa9C;AGvamC;EAAW,iBAAA;CH0a9C;AGzamC;EAAW,iBAAA;CH4a9C;AG3amC;EAAW,iBAAA;CH8a9C;AG7amC;EAAW,iBAAA;CHgb9C;AG/amC;EAAW,iBAAA;CHkb9C;AGjbmC;EAAW,iBAAA;CHob9C;AGnbmC;EAAW,iBAAA;CHsb9C;AGrbmC;EAAW,iBAAA;CHwb9C;AGvbmC;EAAW,iBAAA;CH0b9C;AGzbmC;EAAW,iBAAA;CH4b9C;AG3bmC;EAAW,iBAAA;CH8b9C;AG7bmC;EAAW,iBAAA;CHgc9C;AG/bmC;EAAW,iBAAA;CHkc9C;AGjcmC;EAAW,iBAAA;CHoc9C;AGncmC;EAAW,iBAAA;CHsc9C;AGrcmC;EAAW,iBAAA;CHwc9C;AGvcmC;EAAW,iBAAA;CH0c9C;AGzcmC;EAAW,iBAAA;CH4c9C;AG3cmC;EAAW,iBAAA;CH8c9C;AG7cmC;EAAW,iBAAA;CHgd9C;AG/cmC;EAAW,iBAAA;CHkd9C;AGjdmC;EAAW,iBAAA;CHod9C;AGndmC;EAAW,iBAAA;CHsd9C;AGrdmC;EAAW,iBAAA;CHwd9C;AGvdmC;EAAW,iBAAA;CH0d9C;AGzdmC;EAAW,iBAAA;CH4d9C;AG3dmC;EAAW,iBAAA;CH8d9C;AG7dmC;EAAW,iBAAA;CHge9C;AG/dmC;EAAW,iBAAA;CHke9C;AGjemC;EAAW,iBAAA;CHoe9C;AGnemC;EAAW,iBAAA;CHse9C;AGremC;EAAW,iBAAA;CHwe9C;AGvemC;EAAW,iBAAA;CH0e9C;AGzemC;EAAW,iBAAA;CH4e9C;AG3emC;EAAW,iBAAA;CH8e9C;AG7emC;EAAW,iBAAA;CHgf9C;AG/emC;EAAW,iBAAA;CHkf9C;AGjfmC;EAAW,iBAAA;CHof9C;AGnfmC;EAAW,iBAAA;CHsf9C;AGrfmC;EAAW,iBAAA;CHwf9C;AGvfmC;EAAW,iBAAA;CH0f9C;AGzfmC;EAAW,iBAAA;CH4f9C;AG3fmC;EAAW,iBAAA;CH8f9C;AG7fmC;EAAW,iBAAA;CHggB9C;AG/fmC;EAAW,iBAAA;CHkgB9C;AGjgBmC;EAAW,iBAAA;CHogB9C;AGngBmC;EAAW,iBAAA;CHsgB9C;AGrgBmC;EAAW,iBAAA;CHwgB9C;AGvgBmC;EAAW,iBAAA;CH0gB9C;AGzgBmC;EAAW,iBAAA;CH4gB9C;AG3gBmC;EAAW,iBAAA;CH8gB9C;AG7gBmC;EAAW,iBAAA;CHghB9C;AG/gBmC;EAAW,iBAAA;CHkhB9C;AGjhBmC;EAAW,iBAAA;CHohB9C;AGnhBmC;EAAW,iBAAA;CHshB9C;AGrhBmC;EAAW,iBAAA;CHwhB9C;AGvhBmC;EAAW,iBAAA;CH0hB9C;AGzhBmC;EAAW,iBAAA;CH4hB9C;AG3hBmC;EAAW,iBAAA;CH8hB9C;AG7hBmC;EAAW,iBAAA;CHgiB9C;AG/hBmC;EAAW,iBAAA;CHkiB9C;AGjiBmC;EAAW,iBAAA;CHoiB9C;AGniBmC;EAAW,iBAAA;CHsiB9C;AGriBmC;EAAW,iBAAA;CHwiB9C;AGviBmC;EAAW,iBAAA;CH0iB9C;AGziBmC;EAAW,iBAAA;CH4iB9C;AG3iBmC;EAAW,iBAAA;CH8iB9C;AG7iBmC;EAAW,iBAAA;CHgjB9C;AG/iBmC;EAAW,iBAAA;CHkjB9C;AGjjBmC;EAAW,iBAAA;CHojB9C;AGnjBmC;EAAW,iBAAA;CHsjB9C;AGrjBmC;EAAW,iBAAA;CHwjB9C;AGvjBmC;EAAW,iBAAA;CH0jB9C;AGzjBmC;EAAW,iBAAA;CH4jB9C;AG3jBmC;EAAW,iBAAA;CH8jB9C;AG7jBmC;EAAW,iBAAA;CHgkB9C;AG/jBmC;EAAW,iBAAA;CHkkB9C;AGjkBmC;EAAW,iBAAA;CHokB9C;AGnkBmC;EAAW,iBAAA;CHskB9C;AGrkBmC;EAAW,iBAAA;CHwkB9C;AGvkBmC;EAAW,iBAAA;CH0kB9C;AGzkBmC;EAAW,iBAAA;CH4kB9C;AG3kBmC;EAAW,iBAAA;CH8kB9C;AG7kBmC;EAAW,iBAAA;CHglB9C;AG/kBmC;EAAW,iBAAA;CHklB9C;AGjlBmC;EAAW,iBAAA;CHolB9C;AGnlBmC;EAAW,iBAAA;CHslB9C;AGrlBmC;EAAW,iBAAA;CHwlB9C;AGvlBmC;EAAW,iBAAA;CH0lB9C;AGzlBmC;EAAW,iBAAA;CH4lB9C;AG3lBmC;EAAW,iBAAA;CH8lB9C;AG7lBmC;EAAW,iBAAA;CHgmB9C;AG/lBmC;EAAW,iBAAA;CHkmB9C;AGjmBmC;EAAW,iBAAA;CHomB9C;AGnmBmC;EAAW,iBAAA;CHsmB9C;AGrmBmC;EAAW,iBAAA;CHwmB9C;AGvmBmC;EAAW,iBAAA;CH0mB9C;AGzmBmC;EAAW,iBAAA;CH4mB9C;AG3mBmC;EAAW,iBAAA;CH8mB9C;AG7mBmC;EAAW,iBAAA;CHgnB9C;AG/mBmC;EAAW,iBAAA;CHknB9C;AGjnBmC;EAAW,iBAAA;CHonB9C;AGnnBmC;EAAW,iBAAA;CHsnB9C;AGrnBmC;EAAW,iBAAA;CHwnB9C;AGvnBmC;EAAW,iBAAA;CH0nB9C;AGznBmC;EAAW,iBAAA;CH4nB9C;AG3nBmC;EAAW,iBAAA;CH8nB9C;AG7nBmC;EAAW,iBAAA;CHgoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AG/nBmC;EAAW,iBAAA;CHkoB9C;AGjoBmC;EAAW,iBAAA;CHooB9C;AGnoBmC;EAAW,iBAAA;CHsoB9C;AGroBmC;EAAW,iBAAA;CHwoB9C;AGvoBmC;EAAW,iBAAA;CH0oB9C;AGzoBmC;EAAW,iBAAA;CH4oB9C;AG3oBmC;EAAW,iBAAA;CH8oB9C;AG7oBmC;EAAW,iBAAA;CHgpB9C;AG/oBmC;EAAW,iBAAA;CHkpB9C;AGjpBmC;EAAW,iBAAA;CHopB9C;AGnpBmC;EAAW,iBAAA;CHspB9C;AGrpBmC;EAAW,iBAAA;CHwpB9C;AGvpBmC;EAAW,iBAAA;CH0pB9C;AGzpBmC;EAAW,iBAAA;CH4pB9C;AG3pBmC;EAAW,iBAAA;CH8pB9C;AG7pBmC;EAAW,iBAAA;CHgqB9C;AG/pBmC;EAAW,iBAAA;CHkqB9C;AGjqBmC;EAAW,iBAAA;CHoqB9C;AGnqBmC;EAAW,iBAAA;CHsqB9C;AGrqBmC;EAAW,iBAAA;CHwqB9C;AGvqBmC;EAAW,iBAAA;CH0qB9C;AGzqBmC;EAAW,iBAAA;CH4qB9C;AG3qBmC;EAAW,iBAAA;CH8qB9C;AG7qBmC;EAAW,iBAAA;CHgrB9C;AG/qBmC;EAAW,iBAAA;CHkrB9C;AGjrBmC;EAAW,iBAAA;CHorB9C;AGnrBmC;EAAW,iBAAA;CHsrB9C;AGrrBmC;EAAW,iBAAA;CHwrB9C;AGvrBmC;EAAW,iBAAA;CH0rB9C;AGzrBmC;EAAW,iBAAA;CH4rB9C;AG3rBmC;EAAW,iBAAA;CH8rB9C;AG7rBmC;EAAW,iBAAA;CHgsB9C;AG/rBmC;EAAW,iBAAA;CHksB9C;AGjsBmC;EAAW,iBAAA;CHosB9C;AGnsBmC;EAAW,iBAAA;CHssB9C;AGrsBmC;EAAW,iBAAA;CHwsB9C;AGvsBmC;EAAW,iBAAA;CH0sB9C;AGzsBmC;EAAW,iBAAA;CH4sB9C;AG3sBmC;EAAW,iBAAA;CH8sB9C;AG7sBmC;EAAW,iBAAA;CHgtB9C;AG/sBmC;EAAW,iBAAA;CHktB9C;AGjtBmC;EAAW,iBAAA;CHotB9C;AGntBmC;EAAW,iBAAA;CHstB9C;AGrtBmC;EAAW,iBAAA;CHwtB9C;AGvtBmC;EAAW,iBAAA;CH0tB9C;AGztBmC;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CE,oBAAA;CfwkDH;AezkDC;EACE,oBAAA;Cf2kDH;Ae5kDC;EACE,WAAA;Cf8kDH;Ae/kDC;EACE,oBAAA;CfilDH;AellDC;EACE,mBAAA;CfolDH;AehlDC;EACE,YAAA;CfklDH;AelmDC;EACE,WAAA;CfomDH;AermDC;EACE,mBAAA;CfumDH;AexmDC;EACE,mBAAA;Cf0mDH;Ae3mDC;EACE,UAAA;Cf6mDH;Ae9mDC;EACE,mBAAA;CfgnDH;AejnDC;EACE,mBAAA;CfmnDH;AepnDC;EACE,UAAA;CfsnDH;AevnDC;EACE,mBAAA;CfynDH;Ae1nDC;EACE,mBAAA;Cf4nDH;Ae7nDC;EACE,UAAA;Cf+nDH;AehoDC;EACE,mBAAA;CfkoDH;AenoDC;EACE,kBAAA;CfqoDH;AejoDC;EACE,WAAA;CfmoDH;AernDC;EACE,kBAAA;CfunDH;AexnDC;EACE,0BAAA;Cf0nDH;Ae3nDC;EACE,0BAAA;Cf6nDH;Ae9nDC;EACE,iBAAA;CfgoDH;AejoDC;EACE,0BAAA;CfmoDH;AepoDC;EACE,0BAAA;CfsoDH;AevoDC;EACE,iBAAA;CfyoDH;Ae1oDC;EACE,0BAAA;Cf4oDH;Ae7oDC;EACE,0BAAA;Cf+oDH;AehpDC;EACE,iBAAA;CfkpDH;AenpDC;EACE,0BAAA;CfqpDH;AetpDC;EACE,yBAAA;CfwpDH;AezpDC;EACE,gBAAA;Cf2pDH;Aa3pDD;EElCI;IACE,YAAA;GfgsDH;EezrDD;IACE,YAAA;Gf2rDD;Ee5rDD;IACE,oBAAA;Gf8rDD;Ee/rDD;IACE,oBAAA;GfisDD;EelsDD;IACE,WAAA;GfosDD;EersDD;IACE,oBAAA;GfusDD;EexsDD;IACE,oBAAA;Gf0sDD;Ee3sDD;IACE,WAAA;Gf6sDD;Ee9sDD;IACE,oBAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,WAAA;GfstDD;EevtDD;IACE,oBAAA;GfytDD;Ee1tDD;IACE,mBAAA;Gf4tDD;Ee9sDD;IACE,YAAA;GfgtDD;EejtDD;IACE,oBAAA;GfmtDD;EeptDD;IACE,oBAAA;GfstDD;EevtDD;IACE,WAAA;GfytDD;Ee1tDD;IACE,oBAAA;Gf4tDD;Ee7tDD;IACE,oBAAA;Gf+tDD;EehuDD;IACE,WAAA;GfkuDD;EenuDD;IACE,oBAAA;GfquDD;EetuDD;IACE,oBAAA;GfwuDD;EezuDD;IACE,WAAA;Gf2uDD;Ee5uDD;IACE,oBAAA;Gf8uDD;Ee/uDD;IACE,mBAAA;GfivDD;Ee7uDD;IACE,YAAA;Gf+uDD;Ee/vDD;IACE,WAAA;GfiwDD;EelwDD;IACE,mBAAA;GfowDD;EerwDD;IACE,mBAAA;GfuwDD;EexwDD;IACE,UAAA;Gf0wDD;Ee3wDD;IACE,mBAAA;Gf6wDD;Ee9wDD;IACE,mBAAA;GfgxDD;EejxDD;IACE,UAAA;GfmxDD;EepxDD;IACE,mBAAA;GfsxDD;EevxDD;IACE,mBAAA;GfyxDD;Ee1xDD;IACE,UAAA;Gf4xDD;Ee7xDD;IACE,mBAAA;Gf+xDD;EehyDD;IACE,kBAAA;GfkyDD;Ee9xDD;IACE,WAAA;GfgyDD;EelxDD;IACE,kBAAA;GfoxDD;EerxDD;IACE,0BAAA;GfuxDD;EexxDD;IACE,0BAAA;Gf0xDD;Ee3xDD;IACE,iBAAA;Gf6xDD;Ee9xDD;IACE,0BAAA;GfgyDD;EejyDD;IACE,0BAAA;GfmyDD;EepyDD;IACE,iBAAA;GfsyDD;EevyDD;IACE,0BAAA;GfyyDD;Ee1yDD;IACE,0BAAA;Gf4yDD;Ee7yDD;IACE,iBAAA;Gf+yDD;EehzDD;IACE,0BAAA;GfkzDD;EenzDD;IACE,yBAAA;GfqzDD;EetzDD;IACE,gBAAA;GfwzDD;CACF;AahzDD;EE3CI;IACE,YAAA;Gf81DH;Eev1DD;IACE,YAAA;Gfy1DD;Ee11DD;IACE,oBAAA;Gf41DD;Ee71DD;IACE,oBAAA;Gf+1DD;Eeh2DD;IACE,WAAA;Gfk2DD;Een2DD;IACE,oBAAA;Gfq2DD;Eet2DD;IACE,oBAAA;Gfw2DD;Eez2DD;IACE,WAAA;Gf22DD;Ee52DD;IACE,oBAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,WAAA;Gfo3DD;Eer3DD;IACE,oBAAA;Gfu3DD;Eex3DD;IACE,mBAAA;Gf03DD;Ee52DD;IACE,YAAA;Gf82DD;Ee/2DD;IACE,oBAAA;Gfi3DD;Eel3DD;IACE,oBAAA;Gfo3DD;Eer3DD;IACE,WAAA;Gfu3DD;Eex3DD;IACE,oBAAA;Gf03DD;Ee33DD;IACE,oBAAA;Gf63DD;Ee93DD;IACE,WAAA;Gfg4DD;Eej4DD;IACE,oBAAA;Gfm4DD;Eep4DD;IACE,oBAAA;Gfs4DD;Eev4DD;IACE,WAAA;Gfy4DD;Ee14DD;IACE,oBAAA;Gf44DD;Ee74DD;IACE,mBAAA;Gf+4DD;Ee34DD;IACE,YAAA;Gf64DD;Ee75DD;IACE,WAAA;Gf+5DD;Eeh6DD;IACE,mBAAA;Gfk6DD;Een6DD;IACE,mBAAA;Gfq6DD;Eet6DD;IACE,UAAA;Gfw6DD;Eez6DD;IACE,mBAAA;Gf26DD;Ee56DD;IACE,mBAAA;Gf86DD;Ee/6DD;IACE,UAAA;Gfi7DD;Eel7DD;IACE,mBAAA;Gfo7DD;Eer7DD;IACE,mBAAA;Gfu7DD;Eex7DD;IACE,UAAA;Gf07DD;Ee37DD;IACE,mBAAA;Gf67DD;Ee97DD;IACE,kBAAA;Gfg8DD;Ee57DD;IACE,WAAA;Gf87DD;Eeh7DD;IACE,kBAAA;Gfk7DD;Een7DD;IACE,0BAAA;Gfq7DD;Eet7DD;IACE,0BAAA;Gfw7DD;Eez7DD;IACE,iBAAA;Gf27DD;Ee57DD;IACE,0BAAA;Gf87DD;Ee/7DD;IACE,0BAAA;Gfi8DD;Eel8DD;IACE,iBAAA;Gfo8DD;Eer8DD;IACE,0BAAA;Gfu8DD;Eex8DD;IACE,0BAAA;Gf08DD;Ee38DD;IACE,iBAAA;Gf68DD;Ee98DD;IACE,0BAAA;Gfg9DD;Eej9DD;IACE,yBAAA;Gfm9DD;Eep9DD;IACE,gBAAA;Gfs9DD;CACF;Aa38DD;EE9CI;IACE,YAAA;Gf4/DH;Eer/DD;IACE,YAAA;Gfu/DD;Eex/DD;IACE,oBAAA;Gf0/DD;Ee3/DD;IACE,oBAAA;Gf6/DD;Ee9/DD;IACE,WAAA;GfggED;EejgED;IACE,oBAAA;GfmgED;EepgED;IACE,oBAAA;GfsgED;EevgED;IACE,WAAA;GfygED;Ee1gED;IACE,oBAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,WAAA;GfkhED;EenhED;IACE,oBAAA;GfqhED;EethED;IACE,mBAAA;GfwhED;Ee1gED;IACE,YAAA;Gf4gED;Ee7gED;IACE,oBAAA;Gf+gED;EehhED;IACE,oBAAA;GfkhED;EenhED;IACE,WAAA;GfqhED;EethED;IACE,oBAAA;GfwhED;EezhED;IACE,oBAAA;Gf2hED;Ee5hED;IACE,WAAA;Gf8hED;Ee/hED;IACE,oBAAA;GfiiED;EeliED;IACE,oBAAA;GfoiED;EeriED;IACE,WAAA;GfuiED;EexiED;IACE,oBAAA;Gf0iED;Ee3iED;IACE,mBAAA;Gf6iED;EeziED;IACE,YAAA;Gf2iED;Ee3jED;IACE,WAAA;Gf6jED;Ee9jED;IACE,mBAAA;GfgkED;EejkED;IACE,mBAAA;GfmkED;EepkED;IACE,UAAA;GfskED;EevkED;IACE,mBAAA;GfykED;Ee1kED;IACE,mBAAA;Gf4kED;Ee7kED;IACE,UAAA;Gf+kED;EehlED;IACE,mBAAA;GfklED;EenlED;IACE,mBAAA;GfqlED;EetlED;IACE,UAAA;GfwlED;EezlED;IACE,mBAAA;Gf2lED;Ee5lED;IACE,kBAAA;Gf8lED;Ee1lED;IACE,WAAA;Gf4lED;Ee9kED;IACE,kBAAA;GfglED;EejlED;IACE,0BAAA;GfmlED;EeplED;IACE,0BAAA;GfslED;EevlED;IACE,iBAAA;GfylED;Ee1lED;IACE,0BAAA;Gf4lED;Ee7lED;IACE,0BAAA;Gf+lED;EehmED;IACE,iBAAA;GfkmED;EenmED;IACE,0BAAA;GfqmED;EetmED;IACE,0BAAA;GfwmED;EezmED;IACE,iBAAA;Gf2mED;Ee5mED;IACE,0BAAA;Gf8mED;Ee/mED;IACE,yBAAA;GfinED;EelnED;IACE,gBAAA;GfonED;CACF;AgBxrED;EACE,8BAAA;ChB0rED;AgBxrED;EACE,iBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;ChB0rED;AgBxrED;EACE,iBAAA;ChB0rED;AgBprED;EACE,YA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","file":"bootstrap.css","sourcesContent":["/*!\n * Bootstrap v3.3.6 (http://getbootstrap.com)\n * Copyright 2011-2015 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\002a\";\n}\n.glyphicon-plus:before {\n content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #fff;\n background-color: #333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #ddd;\n}\n.table .table {\n background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #ddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #fff;\n background-image: none;\n border: 1px solid #ccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999;\n}\n.form-control::-ms-expand {\n border: 0;\n background-color: transparent;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"].form-control,\n input[type=\"time\"].form-control,\n input[type=\"datetime-local\"].form-control,\n input[type=\"month\"].form-control {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.form-group-sm select.form-control {\n height: 30px;\n line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n min-height: 32px;\n padding: 6px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.form-group-lg select.form-control {\n height: 46px;\n line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n min-height: 38px;\n padding: 11px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 11px;\n font-size: 18px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n font-size: 12px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n pointer-events: none;\n}\n.btn-default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n color: #333;\n background-color: #e6e6e6;\n border-color: #8c8c8c;\n}\n.btn-default:hover {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n color: #333;\n background-color: #d4d4d4;\n border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n background-color: #fff;\n border-color: #ccc;\n}\n.btn-default .badge {\n color: #fff;\n background-color: #333;\n}\n.btn-primary {\n color: #fff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n color: #fff;\n background-color: #286090;\n border-color: #122b40;\n}\n.btn-primary:hover {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #fff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n color: #fff;\n background-color: #204d74;\n border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.btn-success {\n color: #fff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n color: #fff;\n background-color: #449d44;\n border-color: #255625;\n}\n.btn-success:hover {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #fff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n color: #fff;\n background-color: #398439;\n border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #fff;\n}\n.btn-info {\n color: #fff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n color: #fff;\n background-color: #31b0d5;\n border-color: #1b6d85;\n}\n.btn-info:hover {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #fff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n color: #fff;\n background-color: #269abc;\n border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #fff;\n}\n.btn-warning {\n color: #fff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n color: #fff;\n background-color: #ec971f;\n border-color: #985f0d;\n}\n.btn-warning:hover {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #fff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n color: #fff;\n background-color: #d58512;\n border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #fff;\n}\n.btn-danger {\n color: #fff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n color: #fff;\n background-color: #c9302c;\n border-color: #761c19;\n}\n.btn-danger:hover {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #fff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n color: #fff;\n background-color: #ac2925;\n border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #fff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid \\9;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #fff;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #fff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px dashed;\n border-bottom: 4px solid \\9;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group .form-control:focus {\n z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n z-index: 2;\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #fff;\n border: 1px solid #ddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #fff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #ddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #fff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #ccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777;\n}\n.navbar-default .navbar-link:hover {\n color: #333;\n}\n.navbar-default .btn-link {\n color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #ccc;\n}\n.navbar-inverse {\n background-color: #222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #fff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #fff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #fff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #fff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #fff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #fff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #ccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #fff;\n border: 1px solid #ddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n z-index: 2;\n color: #23527c;\n background-color: #eeeeee;\n border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 3;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #fff;\n border-color: #ddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #fff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #fff;\n line-height: 1;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #fff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding-top: 30px;\n padding-bottom: 30px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding-top: 48px;\n padding-bottom: 48px;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #fff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-object.img-thumbnail {\n max-width: none;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #fff;\n border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n text-decoration: none;\n color: #555;\n background-color: #f5f5f5;\n}\nbutton.list-group-item {\n width: 100%;\n text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #ddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #ddd;\n}\n.panel-default {\n border-color: #ddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #fff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000;\n text-shadow: 0 1px 0 #fff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #fff;\n border: 1px solid #999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 12px;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #fff;\n text-align: center;\n background-color: #000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-style: normal;\n font-weight: normal;\n letter-spacing: normal;\n line-break: auto;\n line-height: 1.42857143;\n text-align: left;\n text-align: start;\n text-decoration: none;\n text-shadow: none;\n text-transform: none;\n white-space: normal;\n word-break: normal;\n word-spacing: normal;\n word-wrap: normal;\n font-size: 14px;\n background-color: #fff;\n background-clip: padding-box;\n border: 1px solid #ccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #fff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #fff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #fff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000px;\n -moz-perspective: 1000px;\n perspective: 1000px;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #fff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n margin-top: -10px;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #fff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #fff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #fff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -10px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -10px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -10px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table !important;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table !important;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table !important;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table !important;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table !important;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS and IE text size adjust after device orientation change,\n// without disabling user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability of focused elements when they are also in an\n// active/hover state.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n box-sizing: content-box; //2\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\002a\"; } }\n.glyphicon-plus { &:before { content: \"\\002b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n\n[role=\"button\"] {\n cursor: pointer;\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @dl-horizontal-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover,\n a&:focus {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover,\n a&:focus {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: floor((@gutter / 2));\n padding-right: ceil((@gutter / 2));\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: ceil((@gutter / -2));\n margin-right: floor((@gutter / -2));\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: ceil((@grid-gutter-width / 2));\n padding-right: floor((@grid-gutter-width / 2));\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Unstyle the caret on ``\n// element gets special love because it's special, and that's a fact!\n.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n height: @input-height;\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n\n select& {\n height: @input-height;\n line-height: @input-height;\n }\n\n textarea&,\n select[multiple]& {\n height: auto;\n }\n}\n","//\n// Buttons\n// --------------------------------------------------\n\n\n// Base styles\n// --------------------------------------------------\n\n.btn {\n display: inline-block;\n margin-bottom: 0; // For input.btn\n font-weight: @btn-font-weight;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n .button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);\n .user-select(none);\n\n &,\n &:active,\n &.active {\n &:focus,\n &.focus {\n .tab-focus();\n }\n }\n\n &:hover,\n &:focus,\n &.focus {\n color: @btn-default-color;\n text-decoration: none;\n }\n\n &:active,\n &.active {\n outline: 0;\n background-image: none;\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n .opacity(.65);\n .box-shadow(none);\n }\n\n a& {\n &.disabled,\n fieldset[disabled] & {\n pointer-events: none; // Future-proof disabling of clicks on `` elements\n }\n }\n}\n\n\n// Alternate buttons\n// --------------------------------------------------\n\n.btn-default {\n .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border);\n}\n.btn-primary {\n .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border);\n}\n// Success appears as green\n.btn-success {\n .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border);\n}\n// Info appears as blue-green\n.btn-info {\n .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border);\n}\n// Warning appears as orange\n.btn-warning {\n .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border);\n}\n// Danger and error appear as red\n.btn-danger {\n .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border);\n}\n\n\n// Link buttons\n// -------------------------\n\n// Make a button look and behave like a link\n.btn-link {\n color: @link-color;\n font-weight: normal;\n border-radius: 0;\n\n &,\n &:active,\n &.active,\n &[disabled],\n fieldset[disabled] & {\n background-color: transparent;\n .box-shadow(none);\n }\n &,\n &:hover,\n &:focus,\n &:active {\n border-color: transparent;\n }\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n background-color: transparent;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @btn-link-disabled-color;\n text-decoration: none;\n }\n }\n}\n\n\n// Button Sizes\n// --------------------------------------------------\n\n.btn-lg {\n // line-height: ensure even-numbered height of button next to large input\n .button-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @btn-border-radius-large);\n}\n.btn-sm {\n // line-height: ensure proper height of button next to small input\n .button-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n.btn-xs {\n .button-size(@padding-xs-vertical; @padding-xs-horizontal; @font-size-small; @line-height-small; @btn-border-radius-small);\n}\n\n\n// Block button\n// --------------------------------------------------\n\n.btn-block {\n display: block;\n width: 100%;\n}\n\n// Vertically space out multiple block buttons\n.btn-block + .btn-block {\n margin-top: 5px;\n}\n\n// Specificity overrides\ninput[type=\"submit\"],\ninput[type=\"reset\"],\ninput[type=\"button\"] {\n &.btn-block {\n width: 100%;\n }\n}\n","// Button variants\n//\n// Easily pump out default styles, as well as :hover, :focus, :active,\n// and disabled options for all buttons\n\n.button-variant(@color; @background; @border) {\n color: @color;\n background-color: @background;\n border-color: @border;\n\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 25%);\n }\n &:hover {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n color: @color;\n background-color: darken(@background, 10%);\n border-color: darken(@border, 12%);\n\n &:hover,\n &:focus,\n &.focus {\n color: @color;\n background-color: darken(@background, 17%);\n border-color: darken(@border, 25%);\n }\n }\n &:active,\n &.active,\n .open > .dropdown-toggle& {\n background-image: none;\n }\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus,\n &.focus {\n background-color: @background;\n border-color: @border;\n }\n }\n\n .badge {\n color: @background;\n background-color: @color;\n }\n}\n\n// Button sizes\n.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n border-radius: @border-radius;\n}\n","// Opacity\n\n.opacity(@opacity) {\n opacity: @opacity;\n // IE8 filter\n @opacity-ie: (@opacity * 100);\n filter: ~\"alpha(opacity=@{opacity-ie})\";\n}\n","//\n// Component animations\n// --------------------------------------------------\n\n// Heads up!\n//\n// We don't use the `.opacity()` mixin here since it causes a bug with text\n// fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.\n\n.fade {\n opacity: 0;\n .transition(opacity .15s linear);\n &.in {\n opacity: 1;\n }\n}\n\n.collapse {\n display: none;\n\n &.in { display: block; }\n tr&.in { display: table-row; }\n tbody&.in { display: table-row-group; }\n}\n\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n .transition-property(~\"height, visibility\");\n .transition-duration(.35s);\n .transition-timing-function(ease);\n}\n","//\n// Dropdown menus\n// --------------------------------------------------\n\n\n// Dropdown arrow/caret\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: @caret-width-base dashed;\n border-top: @caret-width-base solid ~\"\\9\"; // IE8\n border-right: @caret-width-base solid transparent;\n border-left: @caret-width-base solid transparent;\n}\n\n// The dropdown wrapper (div)\n.dropup,\n.dropdown {\n position: relative;\n}\n\n// Prevent the focus on the dropdown toggle when closing dropdowns\n.dropdown-toggle:focus {\n outline: 0;\n}\n\n// The dropdown menu (ul)\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: @zindex-dropdown;\n display: none; // none by default, but block on \"open\" of the menu\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0; // override default ul\n list-style: none;\n font-size: @font-size-base;\n text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)\n background-color: @dropdown-bg;\n border: 1px solid @dropdown-fallback-border; // IE8 fallback\n border: 1px solid @dropdown-border;\n border-radius: @border-radius-base;\n .box-shadow(0 6px 12px rgba(0,0,0,.175));\n background-clip: padding-box;\n\n // Aligns the dropdown menu to right\n //\n // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]`\n &.pull-right {\n right: 0;\n left: auto;\n }\n\n // Dividers (basically an hr) within the dropdown\n .divider {\n .nav-divider(@dropdown-divider-bg);\n }\n\n // Links within the dropdown menu\n > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: @line-height-base;\n color: @dropdown-link-color;\n white-space: nowrap; // prevent links from randomly breaking onto new lines\n }\n}\n\n// Hover/Focus state\n.dropdown-menu > li > a {\n &:hover,\n &:focus {\n text-decoration: none;\n color: @dropdown-link-hover-color;\n background-color: @dropdown-link-hover-bg;\n }\n}\n\n// Active state\n.dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-active-color;\n text-decoration: none;\n outline: 0;\n background-color: @dropdown-link-active-bg;\n }\n}\n\n// Disabled state\n//\n// Gray out text and ensure the hover/focus state remains gray\n\n.dropdown-menu > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @dropdown-link-disabled-color;\n }\n\n // Nuke hover/focus effects\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none; // Remove CSS gradient\n .reset-filter();\n cursor: @cursor-disabled;\n }\n}\n\n// Open state for the dropdown\n.open {\n // Show the menu\n > .dropdown-menu {\n display: block;\n }\n\n // Remove the outline when :focus is triggered\n > a {\n outline: 0;\n }\n}\n\n// Menu positioning\n//\n// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown\n// menu with the parent.\n.dropdown-menu-right {\n left: auto; // Reset the default from `.dropdown-menu`\n right: 0;\n}\n// With v3, we enabled auto-flipping if you have a dropdown within a right\n// aligned nav component. To enable the undoing of that, we provide an override\n// to restore the default dropdown menu alignment.\n//\n// This is only for left-aligning a dropdown menu within a `.navbar-right` or\n// `.pull-right` nav component.\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n\n// Dropdown section headers\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: @font-size-small;\n line-height: @line-height-base;\n color: @dropdown-header-color;\n white-space: nowrap; // as with > li > a\n}\n\n// Backdrop to catch body clicks on mobile, etc.\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: (@zindex-dropdown - 10);\n}\n\n// Right aligned dropdowns\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n\n// Allow for dropdowns to go bottom up (aka, dropup-menu)\n//\n// Just add .dropup after the standard .dropdown class and you're set, bro.\n// TODO: abstract this so that the navbar fixed styles are not placed here?\n\n.dropup,\n.navbar-fixed-bottom .dropdown {\n // Reverse the caret\n .caret {\n border-top: 0;\n border-bottom: @caret-width-base dashed;\n border-bottom: @caret-width-base solid ~\"\\9\"; // IE8\n content: \"\";\n }\n // Different positioning for bottom up menu\n .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n }\n}\n\n\n// Component alignment\n//\n// Reiterate per navbar.less and the modified component alignment there.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-right {\n .dropdown-menu {\n .dropdown-menu-right();\n }\n // Necessary for overrides of the default right aligned menu.\n // Will remove come v4 in all likelihood.\n .dropdown-menu-left {\n .dropdown-menu-left();\n }\n }\n}\n","// Horizontal dividers\n//\n// Dividers (basically an hr) within dropdowns and nav lists\n\n.nav-divider(@color: #e5e5e5) {\n height: 1px;\n margin: ((@line-height-computed / 2) - 1) 0;\n overflow: hidden;\n background-color: @color;\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n","//\n// Button groups\n// --------------------------------------------------\n\n// Make the div behave like a button\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .btn alignment given font-size hack above\n > .btn {\n position: relative;\n float: left;\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active,\n &.active {\n z-index: 2;\n }\n }\n}\n\n// Prevent double borders when buttons are next to each other\n.btn-group {\n .btn + .btn,\n .btn + .btn-group,\n .btn-group + .btn,\n .btn-group + .btn-group {\n margin-left: -1px;\n }\n}\n\n// Optional: Group multiple button groups together for a toolbar\n.btn-toolbar {\n margin-left: -5px; // Offset the first child's margin\n &:extend(.clearfix all);\n\n .btn,\n .btn-group,\n .input-group {\n float: left;\n }\n > .btn,\n > .btn-group,\n > .input-group {\n margin-left: 5px;\n }\n}\n\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n\n// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match\n.btn-group > .btn:first-child {\n margin-left: 0;\n &:not(:last-child):not(.dropdown-toggle) {\n .border-right-radius(0);\n }\n}\n// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n .border-left-radius(0);\n}\n\n// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-right-radius(0);\n }\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-left-radius(0);\n}\n\n// On active and open, don't show outline\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n\n\n// Sizing\n//\n// Remix the default button sizing classes into new ones for easier manipulation.\n\n.btn-group-xs > .btn { &:extend(.btn-xs); }\n.btn-group-sm > .btn { &:extend(.btn-sm); }\n.btn-group-lg > .btn { &:extend(.btn-lg); }\n\n\n// Split button dropdowns\n// ----------------------\n\n// Give the line between buttons some depth\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n\n// The clickable button for toggling the menu\n// Remove the gradient and set the same inset shadow as the :active state\n.btn-group.open .dropdown-toggle {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n\n // Show no shadow for `.btn-link` since it has no other button styles.\n &.btn-link {\n .box-shadow(none);\n }\n}\n\n\n// Reposition the caret\n.btn .caret {\n margin-left: 0;\n}\n// Carets in other button sizes\n.btn-lg .caret {\n border-width: @caret-width-large @caret-width-large 0;\n border-bottom-width: 0;\n}\n// Upside down carets for .dropup\n.dropup .btn-lg .caret {\n border-width: 0 @caret-width-large @caret-width-large;\n}\n\n\n// Vertical button groups\n// ----------------------\n\n.btn-group-vertical {\n > .btn,\n > .btn-group,\n > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n }\n\n // Clear floats so dropdown menus can be properly placed\n > .btn-group {\n &:extend(.clearfix all);\n > .btn {\n float: none;\n }\n }\n\n > .btn + .btn,\n > .btn + .btn-group,\n > .btn-group + .btn,\n > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n }\n}\n\n.btn-group-vertical > .btn {\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n &:first-child:not(:last-child) {\n .border-top-radius(@btn-border-radius-base);\n .border-bottom-radius(0);\n }\n &:last-child:not(:first-child) {\n .border-top-radius(0);\n .border-bottom-radius(@btn-border-radius-base);\n }\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) {\n > .btn:last-child,\n > .dropdown-toggle {\n .border-bottom-radius(0);\n }\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n .border-top-radius(0);\n}\n\n\n// Justified button groups\n// ----------------------\n\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n > .btn,\n > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n }\n > .btn-group .btn {\n width: 100%;\n }\n\n > .btn-group .dropdown-menu {\n left: auto;\n }\n}\n\n\n// Checkbox and radio options\n//\n// In order to support the browser's form validation feedback, powered by the\n// `required` attribute, we have to \"hide\" the inputs via `clip`. We cannot use\n// `display: none;` or `visibility: hidden;` as that also hides the popover.\n// Simply visually hiding the inputs via `opacity` would leave them clickable in\n// certain cases which is prevented by using `clip` and `pointer-events`.\n// This way, we ensure a DOM element is visible to position the popover from.\n//\n// See https://github.com/twbs/bootstrap/pull/12794 and\n// https://github.com/twbs/bootstrap/pull/14559 for more information.\n\n[data-toggle=\"buttons\"] {\n > .btn,\n > .btn-group > .btn {\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0,0,0,0);\n pointer-events: none;\n }\n }\n}\n","// Single side border-radius\n\n.border-top-radius(@radius) {\n border-top-right-radius: @radius;\n border-top-left-radius: @radius;\n}\n.border-right-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-top-right-radius: @radius;\n}\n.border-bottom-radius(@radius) {\n border-bottom-right-radius: @radius;\n border-bottom-left-radius: @radius;\n}\n.border-left-radius(@radius) {\n border-bottom-left-radius: @radius;\n border-top-left-radius: @radius;\n}\n","//\n// Input groups\n// --------------------------------------------------\n\n// Base styles\n// -------------------------\n.input-group {\n position: relative; // For dropdowns\n display: table;\n border-collapse: separate; // prevent input groups from inheriting border styles from table cells when placed within a table\n\n // Undo padding and float of grid classes\n &[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n }\n\n .form-control {\n // Ensure that the input is always above the *appended* addon button for\n // proper border colors.\n position: relative;\n z-index: 2;\n\n // IE9 fubars the placeholder attribute in text inputs and the arrows on\n // select elements in input groups. To fix it, we float the input. Details:\n // https://github.com/twbs/bootstrap/issues/11561#issuecomment-28936855\n float: left;\n\n width: 100%;\n margin-bottom: 0;\n \n &:focus {\n z-index: 3;\n }\n }\n}\n\n// Sizing options\n//\n// Remix the default form control sizing classes into new ones for easier\n// manipulation.\n\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n .input-lg();\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n .input-sm();\n}\n\n\n// Display as table-cell\n// -------------------------\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n}\n// Addon and addon wrapper for buttons\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle; // Match the inputs\n}\n\n// Text input groups\n// -------------------------\n.input-group-addon {\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n font-weight: normal;\n line-height: 1;\n color: @input-color;\n text-align: center;\n background-color: @input-group-addon-bg;\n border: 1px solid @input-group-addon-border-color;\n border-radius: @input-border-radius;\n\n // Sizing\n &.input-sm {\n padding: @padding-small-vertical @padding-small-horizontal;\n font-size: @font-size-small;\n border-radius: @input-border-radius-small;\n }\n &.input-lg {\n padding: @padding-large-vertical @padding-large-horizontal;\n font-size: @font-size-large;\n border-radius: @input-border-radius-large;\n }\n\n // Nuke default margins from checkboxes and radios to vertically center within.\n input[type=\"radio\"],\n input[type=\"checkbox\"] {\n margin-top: 0;\n }\n}\n\n// Reset rounded corners\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n .border-right-radius(0);\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n .border-left-radius(0);\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n\n// Button input groups\n// -------------------------\n.input-group-btn {\n position: relative;\n // Jankily prevent input button groups from wrapping with `white-space` and\n // `font-size` in combination with `inline-block` on buttons.\n font-size: 0;\n white-space: nowrap;\n\n // Negative margin for spacing, position for bringing hovered/focused/actived\n // element above the siblings.\n > .btn {\n position: relative;\n + .btn {\n margin-left: -1px;\n }\n // Bring the \"active\" button to the front\n &:hover,\n &:focus,\n &:active {\n z-index: 2;\n }\n }\n\n // Negative margin to only have a 1px border between the two\n &:first-child {\n > .btn,\n > .btn-group {\n margin-right: -1px;\n }\n }\n &:last-child {\n > .btn,\n > .btn-group {\n z-index: 2;\n margin-left: -1px;\n }\n }\n}\n","//\n// Navs\n// --------------------------------------------------\n\n\n// Base class\n// --------------------------------------------------\n\n.nav {\n margin-bottom: 0;\n padding-left: 0; // Override default ul/ol\n list-style: none;\n &:extend(.clearfix all);\n\n > li {\n position: relative;\n display: block;\n\n > a {\n position: relative;\n display: block;\n padding: @nav-link-padding;\n &:hover,\n &:focus {\n text-decoration: none;\n background-color: @nav-link-hover-bg;\n }\n }\n\n // Disabled state sets text to gray and nukes hover/tab effects\n &.disabled > a {\n color: @nav-disabled-link-color;\n\n &:hover,\n &:focus {\n color: @nav-disabled-link-hover-color;\n text-decoration: none;\n background-color: transparent;\n cursor: @cursor-disabled;\n }\n }\n }\n\n // Open dropdowns\n .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @nav-link-hover-bg;\n border-color: @link-color;\n }\n }\n\n // Nav dividers (deprecated with v3.0.1)\n //\n // This should have been removed in v3 with the dropping of `.nav-list`, but\n // we missed it. We don't currently support this anywhere, but in the interest\n // of maintaining backward compatibility in case you use it, it's deprecated.\n .nav-divider {\n .nav-divider();\n }\n\n // Prevent IE8 from misplacing imgs\n //\n // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989\n > li > a > img {\n max-width: none;\n }\n}\n\n\n// Tabs\n// -------------------------\n\n// Give the tabs something to sit on\n.nav-tabs {\n border-bottom: 1px solid @nav-tabs-border-color;\n > li {\n float: left;\n // Make the list-items overlay the bottom border\n margin-bottom: -1px;\n\n // Actual tabs (as links)\n > a {\n margin-right: 2px;\n line-height: @line-height-base;\n border: 1px solid transparent;\n border-radius: @border-radius-base @border-radius-base 0 0;\n &:hover {\n border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;\n }\n }\n\n // Active state, and its :hover to override normal :hover\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-tabs-active-link-hover-color;\n background-color: @nav-tabs-active-link-hover-bg;\n border: 1px solid @nav-tabs-active-link-hover-border-color;\n border-bottom-color: transparent;\n cursor: default;\n }\n }\n }\n // pulling this in mainly for less shorthand\n &.nav-justified {\n .nav-justified();\n .nav-tabs-justified();\n }\n}\n\n\n// Pills\n// -------------------------\n.nav-pills {\n > li {\n float: left;\n\n // Links rendered as pills\n > a {\n border-radius: @nav-pills-border-radius;\n }\n + li {\n margin-left: 2px;\n }\n\n // Active state\n &.active > a {\n &,\n &:hover,\n &:focus {\n color: @nav-pills-active-link-hover-color;\n background-color: @nav-pills-active-link-hover-bg;\n }\n }\n }\n}\n\n\n// Stacked pills\n.nav-stacked {\n > li {\n float: none;\n + li {\n margin-top: 2px;\n margin-left: 0; // no need for this gap between nav items\n }\n }\n}\n\n\n// Nav variations\n// --------------------------------------------------\n\n// Justified nav links\n// -------------------------\n\n.nav-justified {\n width: 100%;\n\n > li {\n float: none;\n > a {\n text-align: center;\n margin-bottom: 5px;\n }\n }\n\n > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n }\n\n @media (min-width: @screen-sm-min) {\n > li {\n display: table-cell;\n width: 1%;\n > a {\n margin-bottom: 0;\n }\n }\n }\n}\n\n// Move borders to anchors instead of bottom of list\n//\n// Mixin for adding on top the shared `.nav-justified` styles for our tabs\n.nav-tabs-justified {\n border-bottom: 0;\n\n > li > a {\n // Override margin from .nav-tabs\n margin-right: 0;\n border-radius: @border-radius-base;\n }\n\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border: 1px solid @nav-tabs-justified-link-border-color;\n }\n\n @media (min-width: @screen-sm-min) {\n > li > a {\n border-bottom: 1px solid @nav-tabs-justified-link-border-color;\n border-radius: @border-radius-base @border-radius-base 0 0;\n }\n > .active > a,\n > .active > a:hover,\n > .active > a:focus {\n border-bottom-color: @nav-tabs-justified-active-link-border-color;\n }\n }\n}\n\n\n// Tabbable tabs\n// -------------------------\n\n// Hide tabbable panes to start, show them when `.active`\n.tab-content {\n > .tab-pane {\n display: none;\n }\n > .active {\n display: block;\n }\n}\n\n\n// Dropdowns\n// -------------------------\n\n// Specific dropdowns\n.nav-tabs .dropdown-menu {\n // make dropdown border overlap tab border\n margin-top: -1px;\n // Remove the top rounded corners here since there is a hard edge above the menu\n .border-top-radius(0);\n}\n","//\n// Navbars\n// --------------------------------------------------\n\n\n// Wrapper and base class\n//\n// Provide a static navbar from which we expand to create full-width, fixed, and\n// other navbar variations.\n\n.navbar {\n position: relative;\n min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)\n margin-bottom: @navbar-margin-bottom;\n border: 1px solid transparent;\n\n // Prevent floats from breaking the navbar\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: @navbar-border-radius;\n }\n}\n\n\n// Navbar heading\n//\n// Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy\n// styling of responsive aspects.\n\n.navbar-header {\n &:extend(.clearfix all);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n }\n}\n\n\n// Navbar collapse (body)\n//\n// Group your navbar content into this for easy collapsing and expanding across\n// various device sizes. By default, this content is collapsed when <768px, but\n// will expand past that for a horizontal display.\n//\n// To start (on mobile devices) the navbar links, forms, and buttons are stacked\n// vertically and include a `max-height` to overflow in case you have too much\n// content for the user's viewport.\n\n.navbar-collapse {\n overflow-x: visible;\n padding-right: @navbar-padding-horizontal;\n padding-left: @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255,255,255,.1);\n &:extend(.clearfix all);\n -webkit-overflow-scrolling: touch;\n\n &.in {\n overflow-y: auto;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border-top: 0;\n box-shadow: none;\n\n &.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0; // Override default setting\n overflow: visible !important;\n }\n\n &.in {\n overflow-y: visible;\n }\n\n // Undo the collapse side padding for navbars with containers to ensure\n // alignment of right-aligned contents.\n .navbar-fixed-top &,\n .navbar-static-top &,\n .navbar-fixed-bottom & {\n padding-left: 0;\n padding-right: 0;\n }\n }\n}\n\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n .navbar-collapse {\n max-height: @navbar-collapse-max-height;\n\n @media (max-device-width: @screen-xs-min) and (orientation: landscape) {\n max-height: 200px;\n }\n }\n}\n\n\n// Both navbar header and collapse\n//\n// When a container is present, change the behavior of the header and collapse.\n\n.container,\n.container-fluid {\n > .navbar-header,\n > .navbar-collapse {\n margin-right: -@navbar-padding-horizontal;\n margin-left: -@navbar-padding-horizontal;\n\n @media (min-width: @grid-float-breakpoint) {\n margin-right: 0;\n margin-left: 0;\n }\n }\n}\n\n\n//\n// Navbar alignment options\n//\n// Display the navbar across the entirety of the page or fixed it to the top or\n// bottom of the page.\n\n// Static top (unfixed, but 100% wide) navbar\n.navbar-static-top {\n z-index: @zindex-navbar;\n border-width: 0 0 1px;\n\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n\n// Fix the top/bottom navbars when screen real estate supports it\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: @zindex-navbar-fixed;\n\n // Undo the rounded corners\n @media (min-width: @grid-float-breakpoint) {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0; // override .navbar defaults\n border-width: 1px 0 0;\n}\n\n\n// Brand/project name\n\n.navbar-brand {\n float: left;\n padding: @navbar-padding-vertical @navbar-padding-horizontal;\n font-size: @font-size-large;\n line-height: @line-height-computed;\n height: @navbar-height;\n\n &:hover,\n &:focus {\n text-decoration: none;\n }\n\n > img {\n display: block;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n .navbar > .container &,\n .navbar > .container-fluid & {\n margin-left: -@navbar-padding-horizontal;\n }\n }\n}\n\n\n// Navbar toggle\n//\n// Custom button for toggling the `.navbar-collapse`, powered by the collapse\n// JavaScript plugin.\n\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: @navbar-padding-horizontal;\n padding: 9px 10px;\n .navbar-vertical-align(34px);\n background-color: transparent;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n border-radius: @border-radius-base;\n\n // We remove the `outline` here, but later compensate by attaching `:hover`\n // styles to `:focus`.\n &:focus {\n outline: 0;\n }\n\n // Bars\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n }\n .icon-bar + .icon-bar {\n margin-top: 4px;\n }\n\n @media (min-width: @grid-float-breakpoint) {\n display: none;\n }\n}\n\n\n// Navbar nav links\n//\n// Builds on top of the `.nav` components with its own modifier class to make\n// the nav the full height of the horizontal nav (above 768px).\n\n.navbar-nav {\n margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;\n\n > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: @line-height-computed;\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n > li > a,\n .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n > li > a {\n line-height: @line-height-computed;\n &:hover,\n &:focus {\n background-image: none;\n }\n }\n }\n }\n\n // Uncollapse the nav\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin: 0;\n\n > li {\n float: left;\n > a {\n padding-top: @navbar-padding-vertical;\n padding-bottom: @navbar-padding-vertical;\n }\n }\n }\n}\n\n\n// Navbar form\n//\n// Extension of the `.form-inline` with some extra flavor for optimum display in\n// our navbars.\n\n.navbar-form {\n margin-left: -@navbar-padding-horizontal;\n margin-right: -@navbar-padding-horizontal;\n padding: 10px @navbar-padding-horizontal;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n\n // Mixin behavior for optimum display\n .form-inline();\n\n .form-group {\n @media (max-width: @grid-float-breakpoint-max) {\n margin-bottom: 5px;\n\n &:last-child {\n margin-bottom: 0;\n }\n }\n }\n\n // Vertically center in expanded, horizontal navbar\n .navbar-vertical-align(@input-height-base);\n\n // Undo 100% width for pull classes\n @media (min-width: @grid-float-breakpoint) {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n .box-shadow(none);\n }\n}\n\n\n// Dropdown menus\n\n// Menu position and menu carets\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n .border-top-radius(0);\n}\n// Menu position and menu caret support for dropups via extra dropup class\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n .border-top-radius(@navbar-border-radius);\n .border-bottom-radius(0);\n}\n\n\n// Buttons in navbars\n//\n// Vertically center a button within a navbar (when *not* in a form).\n\n.navbar-btn {\n .navbar-vertical-align(@input-height-base);\n\n &.btn-sm {\n .navbar-vertical-align(@input-height-small);\n }\n &.btn-xs {\n .navbar-vertical-align(22);\n }\n}\n\n\n// Text in navbars\n//\n// Add a class to make any element properly align itself vertically within the navbars.\n\n.navbar-text {\n .navbar-vertical-align(@line-height-computed);\n\n @media (min-width: @grid-float-breakpoint) {\n float: left;\n margin-left: @navbar-padding-horizontal;\n margin-right: @navbar-padding-horizontal;\n }\n}\n\n\n// Component alignment\n//\n// Repurpose the pull utilities as their own navbar utilities to avoid specificity\n// issues with parents and chaining. Only do this when the navbar is uncollapsed\n// though so that navbar contents properly stack and align in mobile.\n//\n// Declared after the navbar components to ensure more specificity on the margins.\n\n@media (min-width: @grid-float-breakpoint) {\n .navbar-left { .pull-left(); }\n .navbar-right {\n .pull-right();\n margin-right: -@navbar-padding-horizontal;\n\n ~ .navbar-right {\n margin-right: 0;\n }\n }\n}\n\n\n// Alternate navbars\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n background-color: @navbar-default-bg;\n border-color: @navbar-default-border;\n\n .navbar-brand {\n color: @navbar-default-brand-color;\n &:hover,\n &:focus {\n color: @navbar-default-brand-hover-color;\n background-color: @navbar-default-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-default-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-default-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n\n .navbar-toggle {\n border-color: @navbar-default-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-default-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-default-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: @navbar-default-border;\n }\n\n // Dropdown menu items\n .navbar-nav {\n // Remove background color from open dropdown\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-default-link-active-bg;\n color: @navbar-default-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display when collapsed\n .open .dropdown-menu {\n > li > a {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n background-color: @navbar-default-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-active-color;\n background-color: @navbar-default-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n background-color: @navbar-default-link-disabled-bg;\n }\n }\n }\n }\n }\n\n\n // Links in navbars\n //\n // Add a class to ensure links outside the navbar nav are colored correctly.\n\n .navbar-link {\n color: @navbar-default-link-color;\n &:hover {\n color: @navbar-default-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-default-link-color;\n &:hover,\n &:focus {\n color: @navbar-default-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-default-link-disabled-color;\n }\n }\n }\n}\n\n// Inverse navbar\n\n.navbar-inverse {\n background-color: @navbar-inverse-bg;\n border-color: @navbar-inverse-border;\n\n .navbar-brand {\n color: @navbar-inverse-brand-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-brand-hover-color;\n background-color: @navbar-inverse-brand-hover-bg;\n }\n }\n\n .navbar-text {\n color: @navbar-inverse-color;\n }\n\n .navbar-nav {\n > li > a {\n color: @navbar-inverse-link-color;\n\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n\n // Darken the responsive nav toggle\n .navbar-toggle {\n border-color: @navbar-inverse-toggle-border-color;\n &:hover,\n &:focus {\n background-color: @navbar-inverse-toggle-hover-bg;\n }\n .icon-bar {\n background-color: @navbar-inverse-toggle-icon-bar-bg;\n }\n }\n\n .navbar-collapse,\n .navbar-form {\n border-color: darken(@navbar-inverse-bg, 7%);\n }\n\n // Dropdowns\n .navbar-nav {\n > .open > a {\n &,\n &:hover,\n &:focus {\n background-color: @navbar-inverse-link-active-bg;\n color: @navbar-inverse-link-active-color;\n }\n }\n\n @media (max-width: @grid-float-breakpoint-max) {\n // Dropdowns get custom display\n .open .dropdown-menu {\n > .dropdown-header {\n border-color: @navbar-inverse-border;\n }\n .divider {\n background-color: @navbar-inverse-border;\n }\n > li > a {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n background-color: @navbar-inverse-link-hover-bg;\n }\n }\n > .active > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-active-color;\n background-color: @navbar-inverse-link-active-bg;\n }\n }\n > .disabled > a {\n &,\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n background-color: @navbar-inverse-link-disabled-bg;\n }\n }\n }\n }\n }\n\n .navbar-link {\n color: @navbar-inverse-link-color;\n &:hover {\n color: @navbar-inverse-link-hover-color;\n }\n }\n\n .btn-link {\n color: @navbar-inverse-link-color;\n &:hover,\n &:focus {\n color: @navbar-inverse-link-hover-color;\n }\n &[disabled],\n fieldset[disabled] & {\n &:hover,\n &:focus {\n color: @navbar-inverse-link-disabled-color;\n }\n }\n }\n}\n","// Navbar vertical align\n//\n// Vertically center elements in the navbar.\n// Example: an element has a height of 30px, so write out `.navbar-vertical-align(30px);` to calculate the appropriate top margin.\n\n.navbar-vertical-align(@element-height) {\n margin-top: ((@navbar-height - @element-height) / 2);\n margin-bottom: ((@navbar-height - @element-height) / 2);\n}\n","//\n// Utility classes\n// --------------------------------------------------\n\n\n// Floats\n// -------------------------\n\n.clearfix {\n .clearfix();\n}\n.center-block {\n .center-block();\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n\n\n// Toggling content\n// -------------------------\n\n// Note: Deprecated .hide in favor of .hidden or .sr-only (as appropriate) in v3.0.1\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n .text-hide();\n}\n\n\n// Hide from screenreaders and browsers\n//\n// Credit: HTML5 Boilerplate\n\n.hidden {\n display: none !important;\n}\n\n\n// For Affix plugin\n// -------------------------\n\n.affix {\n position: fixed;\n}\n","//\n// Breadcrumbs\n// --------------------------------------------------\n\n\n.breadcrumb {\n padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;\n margin-bottom: @line-height-computed;\n list-style: none;\n background-color: @breadcrumb-bg;\n border-radius: @border-radius-base;\n\n > li {\n display: inline-block;\n\n + li:before {\n content: \"@{breadcrumb-separator}\\00a0\"; // Unicode space added since inline-block means non-collapsing white-space\n padding: 0 5px;\n color: @breadcrumb-color;\n }\n }\n\n > .active {\n color: @breadcrumb-active-color;\n }\n}\n","//\n// Pagination (multiple pages)\n// --------------------------------------------------\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: @line-height-computed 0;\n border-radius: @border-radius-base;\n\n > li {\n display: inline; // Remove list-style and block-level defaults\n > a,\n > span {\n position: relative;\n float: left; // Collapse white-space\n padding: @padding-base-vertical @padding-base-horizontal;\n line-height: @line-height-base;\n text-decoration: none;\n color: @pagination-color;\n background-color: @pagination-bg;\n border: 1px solid @pagination-border;\n margin-left: -1px;\n }\n &:first-child {\n > a,\n > span {\n margin-left: 0;\n .border-left-radius(@border-radius-base);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius-base);\n }\n }\n }\n\n > li > a,\n > li > span {\n &:hover,\n &:focus {\n z-index: 2;\n color: @pagination-hover-color;\n background-color: @pagination-hover-bg;\n border-color: @pagination-hover-border;\n }\n }\n\n > .active > a,\n > .active > span {\n &,\n &:hover,\n &:focus {\n z-index: 3;\n color: @pagination-active-color;\n background-color: @pagination-active-bg;\n border-color: @pagination-active-border;\n cursor: default;\n }\n }\n\n > .disabled {\n > span,\n > span:hover,\n > span:focus,\n > a,\n > a:hover,\n > a:focus {\n color: @pagination-disabled-color;\n background-color: @pagination-disabled-bg;\n border-color: @pagination-disabled-border;\n cursor: @cursor-disabled;\n }\n }\n}\n\n// Sizing\n// --------------------------------------------------\n\n// Large\n.pagination-lg {\n .pagination-size(@padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @border-radius-large);\n}\n\n// Small\n.pagination-sm {\n .pagination-size(@padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @border-radius-small);\n}\n","// Pagination\n\n.pagination-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {\n > li {\n > a,\n > span {\n padding: @padding-vertical @padding-horizontal;\n font-size: @font-size;\n line-height: @line-height;\n }\n &:first-child {\n > a,\n > span {\n .border-left-radius(@border-radius);\n }\n }\n &:last-child {\n > a,\n > span {\n .border-right-radius(@border-radius);\n }\n }\n }\n}\n","//\n// Pager pagination\n// --------------------------------------------------\n\n\n.pager {\n padding-left: 0;\n margin: @line-height-computed 0;\n list-style: none;\n text-align: center;\n &:extend(.clearfix all);\n li {\n display: inline;\n > a,\n > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: @pager-bg;\n border: 1px solid @pager-border;\n border-radius: @pager-border-radius;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: @pager-hover-bg;\n }\n }\n\n .next {\n > a,\n > span {\n float: right;\n }\n }\n\n .previous {\n > a,\n > span {\n float: left;\n }\n }\n\n .disabled {\n > a,\n > a:hover,\n > a:focus,\n > span {\n color: @pager-disabled-color;\n background-color: @pager-bg;\n cursor: @cursor-disabled;\n }\n }\n}\n","//\n// Labels\n// --------------------------------------------------\n\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: @label-color;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n\n // Add hover effects, but only for links\n a& {\n &:hover,\n &:focus {\n color: @label-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Empty labels collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for labels in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n}\n\n// Colors\n// Contextual variations (linked labels get darker on :hover)\n\n.label-default {\n .label-variant(@label-default-bg);\n}\n\n.label-primary {\n .label-variant(@label-primary-bg);\n}\n\n.label-success {\n .label-variant(@label-success-bg);\n}\n\n.label-info {\n .label-variant(@label-info-bg);\n}\n\n.label-warning {\n .label-variant(@label-warning-bg);\n}\n\n.label-danger {\n .label-variant(@label-danger-bg);\n}\n","// Labels\n\n.label-variant(@color) {\n background-color: @color;\n\n &[href] {\n &:hover,\n &:focus {\n background-color: darken(@color, 10%);\n }\n }\n}\n","//\n// Badges\n// --------------------------------------------------\n\n\n// Base class\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: @font-size-small;\n font-weight: @badge-font-weight;\n color: @badge-color;\n line-height: @badge-line-height;\n vertical-align: middle;\n white-space: nowrap;\n text-align: center;\n background-color: @badge-bg;\n border-radius: @badge-border-radius;\n\n // Empty badges collapse automatically (not available in IE8)\n &:empty {\n display: none;\n }\n\n // Quick fix for badges in buttons\n .btn & {\n position: relative;\n top: -1px;\n }\n\n .btn-xs &,\n .btn-group-xs > .btn & {\n top: 0;\n padding: 1px 5px;\n }\n\n // Hover state, but only for links\n a& {\n &:hover,\n &:focus {\n color: @badge-link-hover-color;\n text-decoration: none;\n cursor: pointer;\n }\n }\n\n // Account for badges in navs\n .list-group-item.active > &,\n .nav-pills > .active > a > & {\n color: @badge-active-color;\n background-color: @badge-active-bg;\n }\n\n .list-group-item > & {\n float: right;\n }\n\n .list-group-item > & + & {\n margin-right: 5px;\n }\n\n .nav-pills > li > a > & {\n margin-left: 3px;\n }\n}\n","//\n// Jumbotron\n// --------------------------------------------------\n\n\n.jumbotron {\n padding-top: @jumbotron-padding;\n padding-bottom: @jumbotron-padding;\n margin-bottom: @jumbotron-padding;\n color: @jumbotron-color;\n background-color: @jumbotron-bg;\n\n h1,\n .h1 {\n color: @jumbotron-heading-color;\n }\n\n p {\n margin-bottom: (@jumbotron-padding / 2);\n font-size: @jumbotron-font-size;\n font-weight: 200;\n }\n\n > hr {\n border-top-color: darken(@jumbotron-bg, 10%);\n }\n\n .container &,\n .container-fluid & {\n border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n\n .container {\n max-width: 100%;\n }\n\n @media screen and (min-width: @screen-sm-min) {\n padding-top: (@jumbotron-padding * 1.6);\n padding-bottom: (@jumbotron-padding * 1.6);\n\n .container &,\n .container-fluid & {\n padding-left: (@jumbotron-padding * 2);\n padding-right: (@jumbotron-padding * 2);\n }\n\n h1,\n .h1 {\n font-size: @jumbotron-heading-font-size;\n }\n }\n}\n","//\n// Thumbnails\n// --------------------------------------------------\n\n\n// Mixin and adjust the regular image class\n.thumbnail {\n display: block;\n padding: @thumbnail-padding;\n margin-bottom: @line-height-computed;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(border .2s ease-in-out);\n\n > img,\n a > img {\n &:extend(.img-responsive);\n margin-left: auto;\n margin-right: auto;\n }\n\n // Add a hover state for linked versions only\n a&:hover,\n a&:focus,\n a&.active {\n border-color: @link-color;\n }\n\n // Image captions\n .caption {\n padding: @thumbnail-caption-padding;\n color: @thumbnail-caption-color;\n }\n}\n","//\n// Alerts\n// --------------------------------------------------\n\n\n// Base styles\n// -------------------------\n\n.alert {\n padding: @alert-padding;\n margin-bottom: @line-height-computed;\n border: 1px solid transparent;\n border-radius: @alert-border-radius;\n\n // Headings for larger alerts\n h4 {\n margin-top: 0;\n // Specified for the h4 to prevent conflicts of changing @headings-color\n color: inherit;\n }\n\n // Provide class for links that match alerts\n .alert-link {\n font-weight: @alert-link-font-weight;\n }\n\n // Improve alignment and spacing of inner content\n > p,\n > ul {\n margin-bottom: 0;\n }\n\n > p + p {\n margin-top: 5px;\n }\n}\n\n// Dismissible alerts\n//\n// Expand the right padding and account for the close button's positioning.\n\n.alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.\n.alert-dismissible {\n padding-right: (@alert-padding + 20);\n\n // Adjust close link position\n .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n }\n}\n\n// Alternate styles\n//\n// Generate contextual modifier classes for colorizing the alert.\n\n.alert-success {\n .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);\n}\n\n.alert-info {\n .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);\n}\n\n.alert-warning {\n .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);\n}\n\n.alert-danger {\n .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);\n}\n","// Alerts\n\n.alert-variant(@background; @border; @text-color) {\n background-color: @background;\n border-color: @border;\n color: @text-color;\n\n hr {\n border-top-color: darken(@border, 5%);\n }\n .alert-link {\n color: darken(@text-color, 10%);\n }\n}\n","//\n// Progress bars\n// --------------------------------------------------\n\n\n// Bar animations\n// -------------------------\n\n// WebKit\n@-webkit-keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n// Spec and IE10+\n@keyframes progress-bar-stripes {\n from { background-position: 40px 0; }\n to { background-position: 0 0; }\n}\n\n\n// Bar itself\n// -------------------------\n\n// Outer container\n.progress {\n overflow: hidden;\n height: @line-height-computed;\n margin-bottom: @line-height-computed;\n background-color: @progress-bg;\n border-radius: @progress-border-radius;\n .box-shadow(inset 0 1px 2px rgba(0,0,0,.1));\n}\n\n// Bar of progress\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: @font-size-small;\n line-height: @line-height-computed;\n color: @progress-bar-color;\n text-align: center;\n background-color: @progress-bar-bg;\n .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15));\n .transition(width .6s ease);\n}\n\n// Striped bars\n//\n// `.progress-striped .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar-striped` class, which you just add to an existing\n// `.progress-bar`.\n.progress-striped .progress-bar,\n.progress-bar-striped {\n #gradient > .striped();\n background-size: 40px 40px;\n}\n\n// Call animation for the active one\n//\n// `.progress.active .progress-bar` is deprecated as of v3.2.0 in favor of the\n// `.progress-bar.active` approach.\n.progress.active .progress-bar,\n.progress-bar.active {\n .animation(progress-bar-stripes 2s linear infinite);\n}\n\n\n// Variations\n// -------------------------\n\n.progress-bar-success {\n .progress-bar-variant(@progress-bar-success-bg);\n}\n\n.progress-bar-info {\n .progress-bar-variant(@progress-bar-info-bg);\n}\n\n.progress-bar-warning {\n .progress-bar-variant(@progress-bar-warning-bg);\n}\n\n.progress-bar-danger {\n .progress-bar-variant(@progress-bar-danger-bg);\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Progress bars\n\n.progress-bar-variant(@color) {\n background-color: @color;\n\n // Deprecated parent class requirement as of v3.2.0\n .progress-striped & {\n #gradient > .striped();\n }\n}\n",".media {\n // Proper spacing between instances of .media\n margin-top: 15px;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n\n.media-body {\n width: 10000px;\n}\n\n.media-object {\n display: block;\n\n // Fix collapse in webkit from max-width: 100% and display: table-cell.\n &.img-thumbnail {\n max-width: none;\n }\n}\n\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n\n.media-middle {\n vertical-align: middle;\n}\n\n.media-bottom {\n vertical-align: bottom;\n}\n\n// Reset margins on headings for tighter default spacing\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n\n// Media list variation\n//\n// Undo default ul/ol styles\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n","//\n// List groups\n// --------------------------------------------------\n\n\n// Base class\n//\n// Easily usable on
    +
  1. psmigr_2.html
  2. +
  3. epb1.html
  4. +
  5. raefsky1.html
  6. +
  7. t2d_q9_A_01.html
  8. +
  9. dw8192.html
  10. +