Skip to content

Commit

Permalink
Update armadillo version 14.0.2
Browse files Browse the repository at this point in the history
  • Loading branch information
TLCFEM committed Aug 7, 2024
1 parent 2554288 commit b449f93
Show file tree
Hide file tree
Showing 15 changed files with 34 additions and 103 deletions.
3 changes: 2 additions & 1 deletion Include/armadillo/armadillo
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include <cmath>
#include <ctime>

#include <memory>
#include <iostream>
#include <fstream>
#include <sstream>
Expand All @@ -52,7 +53,7 @@
#include <chrono>
#include <atomic>

#if !defined(ARMA_DONT_USE_STD_MUTEX)
#if defined(ARMA_USE_STD_MUTEX)
#include <mutex>
#endif

Expand Down
4 changes: 2 additions & 2 deletions Include/armadillo/armadillo_bits/Cube_meat.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3562,7 +3562,7 @@ Cube<eT>::operator() (const uword in_row, const uword in_col, const uword in_sli
//! element accessor; no bounds check
template<typename eT>
arma_inline
eT&
eT&
Cube<eT>::operator[] (const uword in_row, const uword in_col, const uword in_slice)
{
return access::rw( mem[in_slice*n_elem_slice + in_col*n_rows + in_row] );
Expand All @@ -3573,7 +3573,7 @@ Cube<eT>::operator() (const uword in_row, const uword in_col, const uword in_sli
//! element accessor; no bounds check
template<typename eT>
arma_inline
const eT&
const eT&
Cube<eT>::operator[] (const uword in_row, const uword in_col, const uword in_slice) const
{
return mem[in_slice*n_elem_slice + in_col*n_rows + in_row];
Expand Down
4 changes: 2 additions & 2 deletions Include/armadillo/armadillo_bits/Mat_meat.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -6500,7 +6500,7 @@ Mat<eT>::at(const uword in_row, const uword in_col) const
//! element accessor; no bounds check
template<typename eT>
arma_inline
eT&
eT&
Mat<eT>::operator[] (const uword in_row, const uword in_col)
{
return access::rw( mem[in_row + in_col*n_rows] );
Expand All @@ -6511,7 +6511,7 @@ Mat<eT>::at(const uword in_row, const uword in_col) const
//! element accessor; no bounds check
template<typename eT>
arma_inline
const eT&
const eT&
Mat<eT>::operator[] (const uword in_row, const uword in_col) const
{
return mem[in_row + in_col*n_rows];
Expand Down
4 changes: 2 additions & 2 deletions Include/armadillo/armadillo_bits/SpMat_meat.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3374,7 +3374,7 @@ SpMat<eT>::operator()(const uword i) const

template<typename eT>
arma_inline
SpMat_MapMat_val<eT>
SpMat_MapMat_val<eT>
SpMat<eT>::operator[] (const uword in_row, const uword in_col)
{
return SpMat_MapMat_val<eT>((*this), cache, in_row, in_col);
Expand All @@ -3384,7 +3384,7 @@ SpMat<eT>::operator()(const uword i) const

template<typename eT>
arma_inline
eT
eT
SpMat<eT>::operator[] (const uword in_row, const uword in_col) const
{
return get_value(in_row, in_col);
Expand Down
2 changes: 1 addition & 1 deletion Include/armadillo/armadillo_bits/arma_version.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

#define ARMA_VERSION_MAJOR 14
#define ARMA_VERSION_MINOR 0
#define ARMA_VERSION_PATCH 1
#define ARMA_VERSION_PATCH 2
#define ARMA_VERSION_NAME "Stochastic Parrot"


Expand Down
2 changes: 0 additions & 2 deletions Include/armadillo/armadillo_bits/compiler_setup.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -304,8 +304,6 @@
#endif

#undef ARMA_HAVE_GCC_ASSUME_ALIGNED
#undef ARMA_HAVE_ICC_ASSUME_ALIGNED
#define ARMA_HAVE_ICC_ASSUME_ALIGNED

#endif

Expand Down
16 changes: 8 additions & 8 deletions Include/armadillo/armadillo_bits/diskio_meat.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1062,7 +1062,7 @@ diskio::save_coord_ascii(const Mat<eT>& x, std::ostream& f)
f.put('\n');
}

// make sure it's possible to figure out the matrix size later
// make sure it's possible to determine the matrix size
if( (x.n_rows > 0) && (x.n_cols > 0) )
{
const uword max_row = (x.n_rows > 0) ? x.n_rows-1 : 0;
Expand Down Expand Up @@ -1125,7 +1125,7 @@ diskio::save_coord_ascii(const Mat< std::complex<T> >& x, std::ostream& f)
f.put('\n');
}

// make sure it's possible to figure out the matrix size later
// make sure it's possible to determine the matrix size
if( (x.n_rows > 0) && (x.n_cols > 0) )
{
const uword max_row = (x.n_rows > 0) ? x.n_rows-1 : 0;
Expand Down Expand Up @@ -1319,8 +1319,8 @@ diskio::save_hdf5_binary(const Mat<eT>& x, const hdf5_name& spec, std::string& e
hid_t dataspace = H5Screate_simple(2, dims, NULL); // treat the matrix as a 2d array dataspace
hid_t datatype = hdf5_misc::get_hdf5_type<eT>();

// If this returned something invalid, well, it's time to crash.
arma_check(datatype == -1, "Mat::save(): unknown datatype for HDF5");
// fail if we can't handle the datatype
if(datatype == -1) { err_msg = "unknown datatype for HDF5"; return false; }

// MATLAB forces the users to specify a name at save time for HDF5;
// Octave will use the default of 'dataset' unless otherwise specified.
Expand Down Expand Up @@ -3065,7 +3065,7 @@ diskio::save_coord_ascii(const SpMat<eT>& x, std::ostream& f)
}


// make sure it's possible to figure out the matrix size later
// make sure it's possible to determine the matrix size
if( (x.n_rows > 0) && (x.n_cols > 0) )
{
const uword max_row = (x.n_rows > 0) ? x.n_rows-1 : 0;
Expand Down Expand Up @@ -3128,7 +3128,7 @@ diskio::save_coord_ascii(const SpMat< std::complex<T> >& x, std::ostream& f)
f.put('\n');
}

// make sure it's possible to figure out the matrix size later
// make sure it's possible to determine the matrix size
if( (x.n_rows > 0) && (x.n_cols > 0) )
{
const uword max_row = (x.n_rows > 0) ? x.n_rows-1 : 0;
Expand Down Expand Up @@ -4016,8 +4016,8 @@ diskio::save_hdf5_binary(const Cube<eT>& x, const hdf5_name& spec, std::string&
hid_t dataspace = H5Screate_simple(3, dims, NULL); // treat the cube as a 3d array dataspace
hid_t datatype = hdf5_misc::get_hdf5_type<eT>();

// If this returned something invalid, well, it's time to crash.
arma_check(datatype == -1, "Cube::save(): unknown datatype for HDF5");
// fail if we can't handle the datatype
if(datatype == -1) { err_msg = "unknown datatype for HDF5"; return false; }

// MATLAB forces the users to specify a name at save time for HDF5;
// Octave will use the default of 'dataset' unless otherwise specified.
Expand Down
4 changes: 2 additions & 2 deletions Include/armadillo/armadillo_bits/field_meat.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -614,7 +614,7 @@ field<oT>::operator() (const uword in_row, const uword in_col, const uword in_sl
//! element accessor; no bounds check
template<typename oT>
arma_inline
oT&
oT&
field<oT>::operator[] (const uword in_row, const uword in_col)
{
return (*mem[in_row + in_col*n_rows]);
Expand All @@ -625,7 +625,7 @@ field<oT>::operator() (const uword in_row, const uword in_col, const uword in_sl
//! element accessor; no bounds check
template<typename oT>
arma_inline
const oT&
const oT&
field<oT>::operator[] (const uword in_row, const uword in_col) const
{
return (*mem[in_row + in_col*n_rows]);
Expand Down
53 changes: 0 additions & 53 deletions Include/armadillo/armadillo_bits/fn_accu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -272,59 +272,6 @@ accu(const T1& X)



//! explicit handling of dot product expressed as matrix multiplication
template<typename T1, typename T2>
arma_warn_unused
inline
typename T1::elem_type
accu(const Glue<T1,T2,glue_times>& expr)
{
arma_debug_sigprint();

typedef typename T1::elem_type eT;

if( (is_cx<eT>::no) && (resolves_to_rowvector<T1>::value && resolves_to_colvector<T2>::value) )
{
arma_debug_print("accu(): dot product optimisation");

constexpr bool proxy_is_mat = (is_Mat<typename Proxy<T1>::stored_type>::value && is_Mat<typename Proxy<T2>::stored_type>::value);

constexpr bool use_at = (Proxy<T1>::use_at) || (Proxy<T2>::use_at);

constexpr bool fast_unwrap = (partial_unwrap<T1>::is_fast && partial_unwrap<T2>::is_fast);

if(proxy_is_mat || use_at || fast_unwrap)
{
const partial_unwrap<T1> UA(expr.A);
const partial_unwrap<T2> UB(expr.B);

const typename partial_unwrap<T1>::stored_type& A = UA.M;
const typename partial_unwrap<T2>::stored_type& B = UB.M;

arma_conform_assert_mul_size(A, B, UA.do_trans, UB.do_trans, "matrix multiplication");

const eT val = op_dot::direct_dot(A.n_elem, A.memptr(), B.memptr());

return (UA.do_times || UB.do_times) ? (val * UA.get_val() * UB.get_val()) : val;
}
else
{
const Proxy<T1> PA(expr.A);
const Proxy<T2> PB(expr.B);

arma_conform_assert_mul_size(PA.get_n_rows(), PA.get_n_cols(), PB.get_n_rows(), PB.get_n_cols(), "matrix multiplication");

return op_dot::apply_proxy_linear(PA,PB);
}
}

const Mat<eT> tmp(expr);

return arrayops::accumulate( tmp.memptr(), tmp.n_elem );
}



//! explicit handling of multiply-and-accumulate
template<typename T1, typename T2>
arma_warn_unused
Expand Down
32 changes: 9 additions & 23 deletions Include/armadillo/armadillo_bits/memory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ arma_inline
bool
memory::is_aligned(const eT* mem)
{
#if (defined(ARMA_HAVE_ICC_ASSUME_ALIGNED) || defined(ARMA_HAVE_GCC_ASSUME_ALIGNED)) && !defined(ARMA_DONT_CHECK_ALIGNMENT)
#if (defined(ARMA_HAVE_GCC_ASSUME_ALIGNED) || defined(__cpp_lib_assume_aligned)) && !defined(ARMA_DONT_CHECK_ALIGNMENT)
{
return (sizeof(std::size_t) >= sizeof(eT*)) ? ((std::size_t(mem) & 0x0F) == 0) : false;
}
Expand All @@ -168,33 +168,19 @@ arma_inline
void
memory::mark_as_aligned(eT*& mem)
{
#if defined(ARMA_HAVE_ICC_ASSUME_ALIGNED)
#if defined(ARMA_HAVE_GCC_ASSUME_ALIGNED)
{
__assume_aligned(mem, 16);
mem = (eT*)__builtin_assume_aligned(mem, 16);
}
#elif defined(ARMA_HAVE_GCC_ASSUME_ALIGNED)
#elif defined(__cpp_lib_assume_aligned)
{
mem = (eT*)__builtin_assume_aligned(mem, 16);
mem = (eT*)std::assume_aligned<16>(mem);
}
#else
{
arma_ignore(mem);
}
#endif

// TODO: look into C++20 std::assume_aligned()
// TODO: https://en.cppreference.com/w/cpp/memory/assume_aligned

// TODO: MSVC? __assume( (mem & 0x0F) == 0 );
//
// http://comments.gmane.org/gmane.comp.gcc.patches/239430
// GCC __builtin_assume_aligned is similar to ICC's __assume_aligned,
// so for lvalue first argument ICC's __assume_aligned can be emulated using
// #define __assume_aligned(lvalueptr, align) lvalueptr = __builtin_assume_aligned (lvalueptr, align)
//
// http://www.inf.ethz.ch/personal/markusp/teaching/263-2300-ETH-spring11/slides/class19.pdf
// http://software.intel.com/sites/products/documentation/hpc/composerxe/en-us/cpp/lin/index.htm
// http://d3f8ykwhia686p.cloudfront.net/1live/intel/CompilerAutovectorizationGuide.pdf
}


Expand All @@ -204,13 +190,13 @@ arma_inline
void
memory::mark_as_aligned(const eT*& mem)
{
#if defined(ARMA_HAVE_ICC_ASSUME_ALIGNED)
#if defined(ARMA_HAVE_GCC_ASSUME_ALIGNED)
{
__assume_aligned(mem, 16);
mem = (const eT*)__builtin_assume_aligned(mem, 16);
}
#elif defined(ARMA_HAVE_GCC_ASSUME_ALIGNED)
#elif defined(__cpp_lib_assume_aligned)
{
mem = (const eT*)__builtin_assume_aligned(mem, 16);
mem = (const eT*)std::assume_aligned<16>(mem);
}
#else
{
Expand Down
4 changes: 2 additions & 2 deletions Include/armadillo/armadillo_bits/mul_gemm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -316,8 +316,8 @@ class gemm

const eT local_beta = (use_beta) ? beta : eT(0);

arma_debug_print( arma_str::format("blas::gemm(): trans_A = %c") % trans_A );
arma_debug_print( arma_str::format("blas::gemm(): trans_B = %c") % trans_B );
arma_debug_print( arma_str::format("blas::gemm(): trans_A: %c") % trans_A );
arma_debug_print( arma_str::format("blas::gemm(): trans_B: %c") % trans_B );

blas::gemm<eT>
(
Expand Down
2 changes: 1 addition & 1 deletion Include/armadillo/armadillo_bits/mul_gemv.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@ class gemv
const blas_int inc = blas_int(1);
const eT local_beta = (use_beta) ? beta : eT(0);

arma_debug_print( arma_str::format("blas::gemv(): trans_A = %c") % trans_A );
arma_debug_print( arma_str::format("blas::gemv(): trans_A: %c") % trans_A );

blas::gemv<eT>
(
Expand Down
2 changes: 1 addition & 1 deletion Include/armadillo/armadillo_bits/mul_herk.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -405,7 +405,7 @@ class herk

const blas_int lda = (do_trans_A) ? k : n;

arma_debug_print( arma_str::format("blas::herk(): trans_A = %c") % trans_A );
arma_debug_print( arma_str::format("blas::herk(): trans_A: %c") % trans_A );

blas::herk<T>
(
Expand Down
2 changes: 1 addition & 1 deletion Include/armadillo/armadillo_bits/mul_syrk.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ class syrk

const blas_int lda = (do_trans_A) ? k : n;

arma_debug_print( arma_str::format("blas::syrk(): trans_A = %c") % trans_A );
arma_debug_print( arma_str::format("blas::syrk(): trans_A: %c") % trans_A );

blas::syrk<eT>
(
Expand Down
3 changes: 1 addition & 2 deletions Include/armadillo/armadillo_bits/subview_field_meat.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ subview_field<oT>::extract(field<oT>& actual_out, const subview_field<oT>& in)

out.set_size(n_rows, n_cols, n_slices);

arma_debug_print(arma_str::format("out.n_rows: %u; out.n_cols: %u; out.n_slices: %u; n.m.n_rows: %u; in.m.n_cols: %u; in.m.n_slices: %u") % out.n_rows % out.n_cols % out.n_slices % in.f.n_rows % in.f.n_cols % in.f.n_slices);
arma_debug_print(arma_str::format("out.n_rows: %u; out.n_cols: %u; out.n_slices: %u; in.f.n_rows: %u; in.f.n_cols: %u; in.f.n_slices: %u") % out.n_rows % out.n_cols % out.n_slices % in.f.n_rows % in.f.n_cols % in.f.n_slices);

if(n_slices == 1)
{
Expand All @@ -550,7 +550,6 @@ subview_field<oT>::extract(field<oT>& actual_out, const subview_field<oT>& in)
actual_out = out;
delete tmp;
}

}


Expand Down

0 comments on commit b449f93

Please sign in to comment.