00001 /*! 00002 \mainpage 00003 <!----------------------------------------------------------------------------> 00004 <!----------------------------------------------------------------------------> 00005 <!----------------------------------------------------------------------------> 00006 <hr><hr> 00007 <h2>Important Notice</h2> 00008 Keeping the compatibility with old versions, 00009 CPPScaLapack had been totally revised in 2004. 00010 The packages released in 2003 are all old model versions of CPPScaLapack. 00011 The new CPPScaLapack doesn't have forbidden codes anymore. 00012 The "const" keyword works as it is expected in the new CPPScaLapack. 00013 It is recommended to update to the newest version. 00014 Comprex number support of the new CPPScaLapack is comming soon. 00015 <hr><hr> 00016 00017 <!----------------------------------------------------------------------------> 00018 <!----------------------------------------------------------------------------> 00019 <!----------------------------------------------------------------------------> 00020 <h2>Introduction</h2> 00021 <p> 00022 CPPScaLapack is a c++ class wrapper for BLACS, PBLAS and ScaLAPACK. 00023 </p> 00024 00025 <p> 00026 CPPScaLapack is still an alpha program so far. 00027 It is a shame but there are a lot of bugs 00028 and unsupported PBLAS and ScaLAPACK functions. 00029 If you are going to use CPPScaLapack, please be aware this situation. 00030 Of course, it is very nice if you help us to develop CPPScaLapack. 00031 </p> 00032 00033 <!----------------------------------------------------------------------------> 00034 <!----------------------------------------------------------------------------> 00035 <!----------------------------------------------------------------------------> 00036 <h2>Special Features</h2> 00037 <ul> 00038 <li> 00039 User-friendly interface<br> 00040 [See \ref pg-dco_io "example codes of vector IO" 00041 and \ref pg-dge_io "example codes of matrix IO".] 00042 </li> 00043 <li> 00044 Hi-speed matrix calculations using PBLAS and ScaLAPACK on MPI system<br> 00045 [See \ref pg-dge_lapack "example codes of LAPACK functions".] 00046 </li> 00047 <li> 00048 Minimized number of copy times of objects using "Smart Temporary" system<br> 00049 [See "description of Smart Temporary system" in the CPPLapack Documentation.] 00050 </li> 00051 </ul> 00052 All of the features are hidden in c++ class library 00053 so that programmers are not required to do any special programming. 00054 00055 <!----------------------------------------------------------------------------> 00056 <!----------------------------------------------------------------------------> 00057 <!----------------------------------------------------------------------------> 00058 <h2>Where to Get</h2> 00059 <p> 00060 The official distribution site of CPPScaLapack is 00061 <a href="http://sourceforge.net/projects/cppscalapack/">here</a>. 00062 </p> 00063 00064 <!----------------------------------------------------------------------------> 00065 <!----------------------------------------------------------------------------> 00066 <!----------------------------------------------------------------------------> 00067 <h2>How to Install</h2> 00068 <p> 00069 Actually, you don't need to install CPPScaLapack. 00070 CPPScaLapack is a bunch of c++ header files. 00071 Just expand the package at somewhere you like, 00072 and write a include path in your "Makefile". 00073 All you need to include is only "cppscalapack.h" and "cppscalapack_init.h". 00074 </p> 00075 00076 <p> 00077 But CPPScaLapack needs BLACS, PBLAS and ScaLAPACK installed. 00078 Just make sure these libraries are installed 00079 and modify "Makefile" to include and link to them. 00080 </p> 00081 00082 <p> 00083 What BLAS and LAPACK need to link depends on your platform. 00084 An examples of "Makefile" for the Score platform is prepared. 00085 See \ref pg-makefile "typical Makefiles". 00086 </p> 00087 00088 <!----------------------------------------------------------------------------> 00089 <!----------------------------------------------------------------------------> 00090 <!----------------------------------------------------------------------------> 00091 <h2>Important Specification</h2> 00092 <ul> 00093 <li> 00094 The namespace for CPPScaLapack is "CPPSL". 00095 </li> 00096 00097 <li> 00098 Currently, CPPScaLapack provides the following matrix classes, 00099 dgematrix, dcovector, and drovector. 00100 In the class list, you see other matrix classes, 00101 _dgematrix, _dcovector, and _drovector. 00102 However, theses matrix classes are not for project codes. 00103 You should not and don't need to use these underscored matrix classes. 00104 The underscored classes are called "Smart-Temporary" classes. 00105 The detail of "Smart-Temporary" system is explained 00106 in the CPPLapack documentation. 00107 </li> 00108 00109 <li> 00110 The numbering system of the matrix component is NOT 1-based but 0-based. 00111 In case of m x n matrix, 00112 the element number at the upper left is (0,0), 00113 and the element number at the lower right is (m-1,n-1). 00114 </li> 00115 00116 <li> 00117 The matrix arrays are stored in column-major style. 00118 although most of C programmers like to use row-major style. 00119 This is because of the conventional Fortran LAPACK style. 00120 </li> 00121 00122 <li> 00123 The matrix and vector member objects m, n, l, ml, nl, ll, and array 00124 are the const reference objects 00125 so that they can be used to obtain the data but cannot be overwritten. 00126 </li> 00127 00128 <li> 00129 For easy debugging, "CPPSL_DEBUG" macro is prepared. 00130 When "-DCPPSL_DEBUG" is specified in compilation commands, 00131 verbose debugging messages and matrix bounds checking are enabled. 00132 We recommend you to enable this macro during the program testing, 00133 then recompile codes without this macro for CPPScaLapack's best performance. 00134 </li> 00135 00136 <li> 00137 It is important not to leave out the returned object. 00138 The calculated and returned object must be substituted to an object. 00139 For example, <code>A+B;</code> is not good. 00140 For another example, when 00141 <code>"dcovector f(const dcovector& x){ return 2*x; }"</code>, 00142 <code>f(x);</code> is also not good. 00143 These are because of "Smart-Temporary" system. 00144 </li> 00145 00146 </ul> 00147 00148 <!----------------------------------------------------------------------------> 00149 <!----------------------------------------------------------------------------> 00150 <!----------------------------------------------------------------------------> 00151 <h2>Test Programs</h2> 00152 Test programs to check the operations are there in "test" directory. 00153 They are also easy examples for you to learn how to use CPPScaLapack. 00154 00155 <!----------------------------------------------------------------------------> 00156 <!----------------------------------------------------------------------------> 00157 <!----------------------------------------------------------------------------> 00158 <h2>Benchmark Programs</h2> 00159 <p> 00160 Some programs to estimate the speed of CPPScaLapack are prepared 00161 in "benchmark" directory. 00162 </p> 00163 00164 <p> 00165 The performance of CPPScaLapack is almost the same as the performance 00166 of original PBLAS and ScaLAPACK. 00167 However, some of arguments of PBLAS and ScaLAPACK functions such as 00168 alpha, beta, Transpose, and so on are fixed at certain values. 00169 When you want to make the full-use of PBLAS and ScaLAPACK functions, 00170 you can call their functions directory in codes of CPPScaLapack as usual. 00171 </p> 00172 00173 <!----------------------------------------------------------------------------> 00174 <!----------------------------------------------------------------------------> 00175 <!----------------------------------------------------------------------------> 00176 <h2>FAQ</h2> 00177 <p> 00178 (Q)I found my program using CPPScaLapack consuming the memory larger and larger 00179 in a loop. Why does this happen? 00180 <br> 00181 (A)Most likely, you leave out some returned matrix or vector object in the loop. 00182 Please read "Important Specification" section carefully. 00183 </p> 00184 00185 00186 <p> 00187 (Q)When I print components of a matrix or vector, 00188 I sometimes see "nan" printed. What is the possible reason? 00189 <br> 00190 (A)First of all, please make sure that your objects are initialized. 00191 The constructor with size arguments such as 00192 <code>"CPPSL::dgematrix A(5,10);"</code> 00193 does NOT initialize its array components. 00194 The "resize" function does NOT initialize, neither. 00195 Please initialize objects using substitutions, 00196 or use "identity" or "zero" function to initialize them. 00197 </p> 00198 00199 <p> 00200 (Q)I see a lot of same outputs for each "cout" and "cerr" functions. 00201 How can I restrain these annoying outputs? 00202 <br> 00203 (A)Use "CPPSL::cout" and "CPPSL::cerr" instead of "std::cout" and "std::cerr". 00204 I will see only one output of the 0th node. 00205 </p> 00206 00207 <!----------------------------------------------------------------------------> 00208 <!----------------------------------------------------------------------------> 00209 <!----------------------------------------------------------------------------> 00210 <h2>License</h2> 00211 CPPScaLapack is an open-source, free, and unguaranteed software. 00212 00213 <!----------------------------------------------------------------------------> 00214 <!----------------------------------------------------------------------------> 00215 <!----------------------------------------------------------------------------> 00216 <h2>Author and Cooperators</h2> 00217 Author: 00218 Yuki ONISHI<br> 00219 Cooperator: 00220 Masafumi IAI, 00221 Toshiyasu SHIMIZU 00222 00223 <!----------------------------------------------------------------------------> 00224 <!----------------------------------------------------------------------------> 00225 <!----------------------------------------------------------------------------> 00226 <h2>Bug Report</h2> 00227 Please send bug reports to 00228 <a href="mailto:yuki.onishi@nifty.com">yuki.onishi@nifty.com</a>. 00229 I also welcome any kind of comments. 00230 00231 <!----------------------------------------------------------------------------> 00232 <!----------------------------------------------------------------------------> 00233 <!----------------------------------------------------------------------------> 00234 <h2>Links</h2> 00235 The sister project of CPPScaLapack: 00236 <ul> 00237 <li><a target="out" href="http://sourceforge.net/projects/cpplapack/"> 00238 CPPLapack</a></li> 00239 </ul> 00240 00241 CPPScaLapack is based on and thanks to: 00242 <ul> 00243 <li><a target="out" href="http://netlib.caspur.it/blacs/"> 00244 BLACS</a></li> 00245 <li><a target="out" href="http://www.netlib.org/scalapack/"> 00246 PBLAS and ScaLapack</a></li> 00247 <br> 00248 <li><a target="out" href="http://www.mpack.com/"> 00249 NEC MathKeisan Library (MPACK)</a></li> 00250 <br> 00251 <li><a target="out" href="http://www.a.mei.titech.ac.jp/"> 00252 Tokyo Institute of Technology Kenji Amaya's Lab</a></li> 00253 <li><a target="out" href="http://www.gsic.titech.ac.jp/English/index.html"> 00254 Tokyo Institute of Technology 00255 Global Scientific Information and Computing Center</a></li> 00256 </ul> 00257 <!----------------------------------------------------------------------------> 00258 <!----------------------------------------------------------------------------> 00259 <!----------------------------------------------------------------------------> 00260 <center><h3>Have fun.</h3></center> 00261 00262 */