M4RI
1.0.1
|
00001 00011 #ifndef M4RI_STRASSEN_H 00012 #define M4RI_STRASSEN_H 00013 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 "mzd.h" 00037 #include "brilliantrussian.h" 00038 00052 mzd_t *mzd_mul(mzd_t *C, mzd_t const *A, mzd_t const *B, int cutoff); 00053 00068 mzd_t *mzd_addmul(mzd_t *C, mzd_t const *A, mzd_t const *B, int cutoff); 00069 00088 mzd_t *_mzd_mul_even(mzd_t *C, mzd_t const *A, mzd_t const *B, int cutoff); 00089 00109 mzd_t *_mzd_addmul_even(mzd_t *C, mzd_t const *A, mzd_t const *B, int cutoff); 00110 00126 mzd_t *_mzd_addmul (mzd_t *C, mzd_t const *A, mzd_t const *B, int cutoff); 00127 00136 mzd_t *_mzd_addmul_weird_weird (mzd_t *C, mzd_t const *A, mzd_t const *B); 00137 00146 mzd_t *_mzd_addmul_weird_even (mzd_t *C, mzd_t const *A, mzd_t const *B, int cutoff); 00147 00156 mzd_t *_mzd_addmul_even_weird (mzd_t *C, mzd_t const *A, mzd_t const *B, int cutoff); 00157 00163 #ifndef __M4RI_STRASSEN_MUL_CUTOFF 00164 #define __M4RI_STRASSEN_MUL_CUTOFF MIN(((int)sqrt((double)(4 * __M4RI_CPU_L2_CACHE))), 4096) 00165 #endif 00166 00167 #endif // M4RI_STRASSEN_H