M4RI 1.0.1
strassen.h
Go to the documentation of this file.
00001 
00012 #ifndef STRASSEN_H
00013 #define STRASSEN_H
00014 /*******************************************************************
00015 *
00016 *                 M4RI: Linear Algebra over GF(2)
00017 *
00018 *    Copyright (C) 2008 Martin Albrecht <M.R.Albrecht@rhul.ac.uk>
00019 *    Copyright (C) 2008 Clement Pernet <pernet@math.washington.edu>
00020 *
00021 *  Distributed under the terms of the GNU General Public License (GPL)
00022 *  version 2 or higher.
00023 *
00024 *    This code is distributed in the hope that it will be useful,
00025 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00026 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00027 *    General Public License for more details.
00028 *
00029 *  The full text of the GPL is available at:
00030 *
00031 *                  http://www.gnu.org/licenses/
00032 *
00033 ********************************************************************/
00034 
00035 #include <math.h>
00036 #include "misc.h"
00037 #include "packedmatrix.h"
00038 #include "brilliantrussian.h"
00039 
00053 mzd_t *mzd_mul(mzd_t *C, mzd_t *A, mzd_t *B, int cutoff);
00054 
00069 mzd_t *mzd_addmul(mzd_t *C, mzd_t *A, mzd_t *B, int cutoff);
00070 
00089 mzd_t *_mzd_mul_even(mzd_t *C, mzd_t *A, mzd_t *B, int cutoff);
00090 
00110 mzd_t *_mzd_addmul_even(mzd_t *C, mzd_t *A, mzd_t *B, int cutoff);
00111 
00127 mzd_t *_mzd_addmul (mzd_t *C, mzd_t *A, mzd_t *B, int cutoff);
00128 
00137 mzd_t *_mzd_addmul_weird_weird (mzd_t *C, mzd_t *A, mzd_t *B, int cutoff);
00138 
00147 mzd_t *_mzd_addmul_weird_even (mzd_t *C, mzd_t *A, mzd_t *B, int cutoff);
00148 
00157 mzd_t *_mzd_addmul_even_weird (mzd_t *C, mzd_t *A, mzd_t *B, int cutoff);
00158 
00164 #ifndef STRASSEN_MUL_CUTOFF
00165 #define STRASSEN_MUL_CUTOFF MIN(((int)sqrt((double)(4*CPU_L2_CACHE))),4096)
00166 #endif// STRASSEN_MUL_CUTOFF
00167 
00168 #endif //STRASSEN_H