diff options
author | 2008-08-20 15:58:01 +0000 | |
---|---|---|
committer | 2008-08-20 15:58:01 +0000 | |
commit | c501c7a4efb78a458c66c1333d52dde429c6e81e (patch) | |
tree | f7faa0de74b11551ea16cb8c508b64074fe0b71e /Eigen/src/Core/CacheFriendlyProduct.h | |
parent | 752ec27293827b5aebf15af54d808656c38f13bf (diff) |
* Fix CMakeLists.txt issue with SVD
* Fix on stack memory allocation issues
Diffstat (limited to 'Eigen/src/Core/CacheFriendlyProduct.h')
-rw-r--r-- | Eigen/src/Core/CacheFriendlyProduct.h | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/Eigen/src/Core/CacheFriendlyProduct.h b/Eigen/src/Core/CacheFriendlyProduct.h index 649b39cdb..320ec8992 100644 --- a/Eigen/src/Core/CacheFriendlyProduct.h +++ b/Eigen/src/Core/CacheFriendlyProduct.h @@ -89,11 +89,10 @@ static void ei_cache_friendly_product( const int l2BlockSizeAligned = (1 + std::max(l2BlockSize,l2BlockCols)/PacketSize)*PacketSize; const bool needRhsCopy = (PacketSize>1) && ((rhsStride%PacketSize!=0) || (size_t(rhs)%16!=0)); Scalar* EIGEN_RESTRICT block = 0; - const int allocBlockSize = sizeof(Scalar)*l2BlockRows*size; - const bool allocBlockUsingAlloca = EIGEN_USE_ALLOCA && allocBlockSize<=16000000; - block = (Scalar*)ei_alloca_or_malloc(allocBlockUsingAlloca, allocBlockSize); + const int allocBlockSize = l2BlockRows*size; + block = ei_alloc_stack(Scalar, allocBlockSize); Scalar* EIGEN_RESTRICT rhsCopy - = (Scalar*)ei_alloca_or_malloc(true, sizeof(Scalar)*l2BlockSizeAligned*l2BlockSizeAligned); + = ei_alloc_stack(Scalar, l2BlockSizeAligned*l2BlockSizeAligned); // loops on each L2 cache friendly blocks of the result for(int l2i=0; l2i<rows; l2i+=l2BlockRows) @@ -334,10 +333,8 @@ static void ei_cache_friendly_product( } } - if (!allocBlockUsingAlloca) - free(block); - if (!EIGEN_USE_ALLOCA) - free(rhsCopy); + ei_free_stack(block, Scalar, allocBlockSize); + ei_free_stack(rhsCopy, Scalar, l2BlockSizeAligned*l2BlockSizeAligned); } #endif // EIGEN_EXTERN_INSTANTIATIONS |