Changeset 18 for include/fflas-ffpack/fflas.h
- Timestamp:
- 04/28/07 20:58:32 (2 years ago)
- Files:
-
- 1 modified
-
include/fflas-ffpack/fflas.h (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
include/fflas-ffpack/fflas.h
r14 r18 38 38 39 39 #define DOUBLE_MANTISSA 53 40 #define FLOAT_MANTISSA 24 40 41 41 42 class FFLAS { … … 47 48 enum FFLAS_SIDE { FflasLeft=141, FflasRight = 142 }; 48 49 50 typedef UnparametricField<float> FloatDomain; 51 49 52 typedef UnparametricField<double> DoubleDomain; 53 54 55 50 56 51 57 //--------------------------------------------------------------------- … … 224 230 */ 225 231 template<class Field> 226 static typename Field::Element* fgemm (const Field& F, 227 const enum FFLAS_TRANSPOSE ta, 228 const enum FFLAS_TRANSPOSE tb, 229 const size_t m, 230 const size_t n, 231 const size_t k, 232 const typename Field::Element alpha, 233 const typename Field::Element* A, 234 const size_t lda, 235 const typename Field::Element* B, 236 const size_t ldb, 237 const typename Field::Element beta, 238 typename Field::Element* C, 239 const size_t ldc){ 232 static typename Field::Element* 233 fgemm (const Field& F, 234 const enum FFLAS_TRANSPOSE ta, 235 const enum FFLAS_TRANSPOSE tb, 236 const size_t m, 237 const size_t n, 238 const size_t k, 239 const typename Field::Element alpha, 240 const typename Field::Element* A, 241 const size_t lda, 242 const typename Field::Element* B, 243 const size_t ldb, 244 const typename Field::Element beta, 245 typename Field::Element* C, 246 const size_t ldc){ 240 247 size_t ws =0; 241 248 if ( (ta==FflasNoTrans) && (tb==FflasNoTrans)) { … … 305 312 } 306 313 } 314 //--------------------------------------------------------------------- 315 // Finite Field matrix => float matrix 316 //--------------------------------------------------------------------- 317 template<class Field> 318 static void MatF2MatFl (const Field& F, 319 FloatDomain::Element* S, const size_t lds, 320 const typename Field::Element* E, 321 const size_t lde,const size_t m, const size_t n){ 322 323 const typename Field::Element* Ei = E; 324 FloatDomain::Element *Si=S; 325 size_t j; 326 for (; Ei < E+lde*m; Ei+=lde, Si += lds) 327 for ( j=0; j<n; ++j){ 328 F.convert(*(Si+j),*(Ei+j)); 329 } 330 } 307 331 308 332 //--------------------------------------------------------------------- … … 324 348 F.convert(*(Si+j),*(Ei+j)); 325 349 } 350 351 //--------------------------------------------------------------------- 352 // Finite Field matrix => float matrix 353 // Special design for upper-triangular matrices 354 //--------------------------------------------------------------------- 355 template<class Field> 356 static void MatF2MatFl_Triangular (const Field& F, 357 typename FloatDomain::Element* S, const size_t lds, 358 const typename Field::Element* const E, 359 const size_t lde, 360 const size_t m, const size_t n){ 361 362 const typename Field::Element* Ei = E; 363 typename FloatDomain::Element* Si = S; 364 size_t i=0, j; 365 for ( ; i<m;++i, Ei+=lde, Si+=lds) 366 for ( j=i; j<n;++j) 367 F.convert(*(Si+j),*(Ei+j)); 368 } 326 369 327 370 //--------------------------------------------------------------------- … … 336 379 typename Field::Element* Si = S; 337 380 const DoubleDomain::Element* Ei =E; 381 size_t j; 382 for ( ; Si < S+m*lds; Si += lds, Ei+= lde){ 383 for ( j=0; j<n;++j) 384 F.init( *(Si+j), *(Ei+j) ); 385 } 386 } 387 388 //--------------------------------------------------------------------- 389 // float matrix => Finite Field matrix 390 //--------------------------------------------------------------------- 391 template<class Field> 392 static void MatFl2MatF (const Field& F, 393 typename Field::Element* S, const size_t lds, 394 const typename FloatDomain::Element* E, const size_t lde, 395 const size_t m, const size_t n){ 396 397 typename Field::Element* Si = S; 398 const FloatDomain::Element* Ei =E; 338 399 size_t j; 339 400 for ( ; Si < S+m*lds; Si += lds, Ei+= lde){ … … 358 419 const typename Field::Element& beta); 359 420 421 template <class Field> 422 static size_t DotProdBoundCompute (const Field& F, const size_t w, 423 const typename Field::Element& beta); 424 425 template <class Element> 426 class callDotProdBoundCompute; 427 360 428 /** @brief Bound for the delayed modulus triangular system solving 361 429 * … … 369 437 template <class Field> 370 438 static size_t TRSMBound (const Field& F); 371 439 440 template <class Element> 441 class callTRSMBound; 372 442 373 443 template <class Field> … … 430 500 typename Field::Element * C, const size_t ldc, 431 501 const size_t kmax, const size_t w); 432 template<bool AreEq> 502 503 504 template<class Element> 433 505 class callWinoMain; 434 506 435 template< bool AreEq>507 template<class Element> 436 508 class callClassicMatmul; 437 509 438 template< bool AreEq>510 template<class Element> 439 511 class callFsquare; 440 512 441 template< bool AreEq>513 template<class Element> 442 514 class callMatVectProd; 443 515 … … 464 536 typename Field::Element * B, const size_t ldb, 465 537 const size_t nmax); 466 template< bool AreEq>538 template<class Element> 467 539 class callFtrsmLeftLowNoTrans; 468 540 469 template< bool AreEq>541 template<class Element> 470 542 class callFtrsmRightUpNoTrans; 471 543 472 template< bool AreEq>544 template<class Element> 473 545 class callFtrmmLeftUpNoTrans; 474 546 475 template< bool AreEq>547 template<class Element> 476 548 class callFtrmmLeftUpTrans; 477 549 478 template< bool AreEq>550 template<class Element> 479 551 class callFtrmmLeftLowNoTrans; 480 552 481 template< bool AreEq>553 template<class Element> 482 554 class callFtrmmLeftLowTrans; 483 555 484 template< bool AreEq>556 template<class Element> 485 557 class callFtrmmRightUpNoTrans; 486 558 487 template< bool AreEq>559 template<class Element> 488 560 class callFtrmmRightUpTrans; 489 561 490 template< bool AreEq>562 template<class Element> 491 563 class callFtrmmRightLowNoTrans; 492 564 493 template< bool AreEq>565 template<class Element> 494 566 class callFtrmmRightLowTrans; 495 567
