vector.h File Reference

#include "bvector.h"
#include "vec_kern_unr_pref.h"
#include "vec_kern_special.h"

Include dependency graph for vector.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  TBCI
namespace  std

Classes

class  TBCI::TVector< T >
 Temporary Base Class Idiom: Class TVector is used for temporary variables. More...
class  TBCI::TSVector< T >
class  TBCI::Vector< T >

Defines

#define SMP_VECSLICE   16384
#define _SMP_TMPL2V(oper, st, en, a1, a2, a3, a4, a5)   do_##oper <T> (en-st, a1+st, a2+st)
#define _JOB_TMPL2V(oper, st, en, a1, a2, a3, a4, a5)   job_##oper <T>, en-st, a1+st, a2+st
#define _SMP_TMPL2C(oper, st, en, a1, a2, a3, a4, a5)   do_##oper <T> (en-st, a1+st, a2)
#define _JOB_TMPL2C(oper, st, en, a1, a2, a3, a4, a5)   job_##oper <T>, en-st, a1+st, &a2
#define _SMP_TMPL3VV(oper, st, en, a1, a2, a3, a4, a5)   do_##oper <T> (en-st, a1+st, a2+st, a3+st)
#define _JOB_TMPL3VV(oper, st, en, a1, a2, a3, a4, a5)   job_##oper <T>, en-st, a1+st, a2+st, a3+st
#define _SMP_TMPL3VC(oper, st, en, a1, a2, a3, a4, a5)   do_##oper <T> (en-st, a1+st, a2+st, a3)
#define _JOB_TMPL3VC(oper, st, en, a1, a2, a3, a4, a5)   job_##oper <T>, en-st, a1+st, a2+st, &a3
#define _SMP_TMPL3CC(oper, st, en, a1, a2, a3, a4, a5)   do_##oper <T> (en-st, a1+st, a2, a3)
#define _JOB_TMPL3CC(oper, st, en, a1, a2, a3, a4, a5)   job_##oper <T>, en-st, a1+st, &a2, &a3
#define _SMP_TMPL4V(oper, st, en, a1, a2, a3, a4, a5)   do_##oper <T> (en-st, a1+st, a2+st, a3+st, a4)
#define _JOB_TMPL4V(oper, st, en, a1, a2, a3, a4, a5)   job_##oper <T>, en-st, a1+st, a2+st, a3+st, &a4
#define _SMP_TMPL4C(oper, st, en, a1, a2, a3, a4, a5)   do_##oper <T> (en-st, a1+st, a2+st, a3, a4)
#define _JOB_TMPL4C(oper, st, en, a1, a2, a3, a4, a5)   job_##oper <T>, en-st, a1+st, a2+st, &a3, &a4
#define _SMP_TMPL5(oper, st, en, a1, a2, a3, a4, a5)   do_##oper <T> (en-st, a1+st, a2+st, a3+st, a4, a5)
#define _JOB_TMPL5(oper, st, en, a1, a2, a3, a4, a5)   job_##oper <T>, en-st, a1+st, a2+st, a3+st, &a4, &a5
#define STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, a4, a5, SMP_TMPL, JOB_TMPL)
 Template for parallelized stuff (unary) We need the last argument(s) to uniquely handle cases, where it's a pointer into an array or just a number.
#define STD_SMP_TEMPLATE2V(oper, dm, a1, a2)   STD_SMP_TEMPLATE(oper, dm, a1, a2, X, X, X, _SMP_TMPL2V, _JOB_TMPL2V)
#define STD_SMP_TEMPLATE2C(oper, dm, a1, a2)   STD_SMP_TEMPLATE(oper, dm, a1, a2, X, X, X, _SMP_TMPL2C, _JOB_TMPL2C)
#define STD_SMP_TEMPLATE3VV(oper, dm, a1, a2, a3)   STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, X, X, _SMP_TMPL3VV, _JOB_TMPL3VV)
#define STD_SMP_TEMPLATE3VC(oper, dm, a1, a2, a3)   STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, X, X, _SMP_TMPL3VC, _JOB_TMPL3VC)
#define STD_SMP_TEMPLATE3CC(oper, dm, a1, a2, a3)   STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, X, X, _SMP_TMPL3CC, _JOB_TMPL3CC)
#define STD_SMP_TEMPLATE4V(oper, dm, a1, a2, a3, a4)   STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, a4, X, _SMP_TMPL4V, _JOB_TMPL4V)
#define STD_SMP_TEMPLATE4C(oper, dm, a1, a2, a3, a4)   STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, a4, X, _SMP_TMPL4C, _JOB_TMPL4C)
#define STD_SMP_TEMPLATE5(oper, dm, a1, a2, a3, a4, a5)   STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, a4, a5, _SMP_TMPL5, _JOB_TMPL5)
#define COST_VECFABSSQR(d)   (d*(COST_UNIT_LOAD+COST_MULT+COST_ADD+COST_LOOP))
#define COST_VECSCALAR(d)   (d*(2*COST_UNIT_LOAD+COST_MULT+COST_ADD+COST_LOOP))

Functions

template<typename T>
std::ostream & TBCI::operator<< (std::ostream &os, const TVector< T > &tv)
template<typename T>
void TBCI::job_vec_vec_add (struct thr_ctrl *tc)
 vec = vec + vec;
template<typename T>
void TBCI::job_vec_vec_sub (struct thr_ctrl *tc)
 vec = vec - vec;
template<typename T>
void TBCI::job_vec_add_vec (struct thr_ctrl *tc)
 vec += vec;
template<typename T>
void TBCI::job_vec_sub_vec (struct thr_ctrl *tc)
 vec -= vec;
template<typename T>
void TBCI::job_vec_sub_vec_inv (struct thr_ctrl *tc)
 vec -= vec; vec = -vec;
template<typename T>
void TBCI::job_vec_val_add (struct thr_ctrl *tc)
 vec = vec + val;
template<typename T>
void TBCI::job_vec_val_sub (struct thr_ctrl *tc)
 vec = vec - val;
template<typename T>
void TBCI::job_vec_val_mul (struct thr_ctrl *tc)
 vec = vec * val;
template<typename T>
void TBCI::job_val_vec_mul (struct thr_ctrl *tc)
 vec = val * vec;
template<typename T>
void TBCI::job_val_vec_add (struct thr_ctrl *tc)
 vec = val + vec;
template<typename T>
void TBCI::job_val_vec_sub (struct thr_ctrl *tc)
 vec = val - vec;
template<typename T>
void TBCI::job_val_vec_div (struct thr_ctrl *tc)
 vec = val / vec;
template<typename T>
void TBCI::job_vec_add_val (struct thr_ctrl *tc)
 vec += val;
template<typename T>
void TBCI::job_val_add_vec (struct thr_ctrl *tc)
 vec += val;
template<typename T>
void TBCI::job_vec_sub_val (struct thr_ctrl *tc)
 vec -= val;
template<typename T>
void TBCI::job_val_sub_vec (struct thr_ctrl *tc)
 vec -= val; vec = -vec;
template<typename T>
void TBCI::job_vec_mul_val (struct thr_ctrl *tc)
 vec *= val;
template<typename T>
void TBCI::job_vec_div_val (struct thr_ctrl *tc)
 vec /= val;
template<typename T>
void TBCI::job_val_div_vec (struct thr_ctrl *tc)
 vec = val/self;
template<typename T>
void TBCI::job_vec_svc_add (struct thr_ctrl *tc)
 vec = vec + s*vec;
template<typename T>
void TBCI::job_svc_vec_add (struct thr_ctrl *tc)
 vec = s*vec + vec;
template<typename T>
void TBCI::job_svc_svc_add (struct thr_ctrl *tc)
 vec = s*vec + s*vec;
template<typename T>
void TBCI::job_vec_svc_sub (struct thr_ctrl *tc)
 vec = vec - s*vec;
template<typename T>
void TBCI::job_svc_vec_sub (struct thr_ctrl *tc)
 vec = s*vec - vec;
template<typename T>
void TBCI::job_svc_svc_sub (struct thr_ctrl *tc)
 vec = s*vec - s*vec;
template<typename T>
void TBCI::job_vec_add_svc (struct thr_ctrl *tc)
 vec += s*vec;
template<typename T>
void TBCI::job_vec_sub_svc (struct thr_ctrl *tc)
 vec -= s*vec;
template<typename T>
void TBCI::job_vec_sub_svc_inv (struct thr_ctrl *tc)
 vec -= s*vec;
template<typename T>
void TBCI::job_svc_val_add (struct thr_ctrl *tc)
 vec = s*vec + val;
template<typename T>
void TBCI::job_svc_val_sub (struct thr_ctrl *tc)
 vec = s*vec - val;
template<typename T>
void TBCI::job_val_svc_add (struct thr_ctrl *tc)
 vec = val + s*vec;
template<typename T>
void TBCI::job_val_svc_sub (struct thr_ctrl *tc)
 vec = val + s*vec;
template<typename T>
void TBCI::job_val_svc_div (struct thr_ctrl *tc)
 vec = val / s*vec;
template<typename T>
const TVector< T > & TBCI::operator+ (const T &a, const TVector< T > &b)
 TV = T + TV Transformed to TV += T.
template<typename T>
const TVector< T > & TBCI::operator- (const T &a, const TVector< T > &b)
 TV = T - TV Transformed to -TV -= T.
template<typename T>
TSVector< T > TBCI::operator* (const T &a, const TVector< T > &b)
template<typename T>
TSVector< T > TBCI::operator/ (const T &a, TVector< T > b)
template<typename T>
TVector< T > & TBCI::conj (TVector< T > &tv)
template<typename T>
TVector< T > & TBCI::real (TVector< T > &tv)
template<typename T>
TVector< T > & TBCI::imag (TVector< T > &tv)
template<typename T>
TVector< T > TBCI::conj (const Vector< T > &v)
template<typename T>
TVector< T > TBCI::real (const Vector< T > &v)
template<typename T>
TVector< T > TBCI::imag (const Vector< T > &v)
template<typename T>
double TBCI::fabssqr (const Vector< T > &v)
template<typename T>
double std::fabs (const TBCI::Vector< T > &v)
template<typename T>
std::abs (const TBCI::Vector< T > &v)
template<typename T>
double std::fabs (TBCI::TVector< T > tv)
template<typename T>
std::abs (TBCI::TVector< T > tv)
template<typename T>
const TSVector< T > & TBCI::operator* (const T &f, const TSVector< T > &ts)
template<typename T>
TVector< T > TBCI::operator+ (const T &v, const TSVector< T > &tsv)
template<typename T>
TVector< T > TBCI::operator- (const T &v, const TSVector< T > &tsv)
template<typename T>
std::ostream & TBCI::operator<< (std::ostream &os, const TSVector< T > &ts)
template<typename T>
double TBCI::fabssqr (const TSVector< T > &ts)
template<typename T>
double std::fabs (const TBCI::TSVector< T > &ts)
template<typename T>
std::abs (const TBCI::TSVector< T > &ts)
template<typename T>
std::ostream & TBCI::operator<< (std::ostream &os, const Vector< T > &v)
template<typename T>
void TBCI::job_vec_dot (struct thr_ctrl *tc)
template<typename T>
void TBCI::job_vec_mult (struct thr_ctrl *tc)
template<typename T>
TBCI::dot (const Vector< T > &a, const Vector< T > &b)
template<typename T>
void TBCI::job_vv_comp (struct thr_ctrl *tc)
template<typename T>
bool TBCI::par_comp (const Vector< T > &v1, const Vector< T > &v2)
template<typename T>
bool TBCI::par_comp (const Vector< T > &v1, TVector< T > v2)
template<typename T>
bool TBCI::par_comp (TVector< T > v1, const Vector< T > &v2)
template<typename T>
bool TBCI::par_comp (TVector< T > v1, TVector< T > v2)
template<typename T>
TVector< T > TBCI::operator+ (const T &a, const Vector< T > &v)
 TV = T + V.
template<typename T>
TVector< T > TBCI::operator- (const T &a, const Vector< T > &v)
 TV = T - V.
template<typename T>
TSVector< T > TBCI::operator* (const T &a, const Vector< T > &b)
template<typename T>
TSVector< T > TBCI::operator/ (const T &a, const Vector< T > &b)
template<typename T>
void TBCI::job_vec_fabssqr (struct thr_ctrl *tc)
template<typename T>
double TBCI::fabssqr (TVector< T > tv)


Detailed Description

header file templated classes TBCI::Vector, TBCI::TVector, TBCI::TSVector

-------------------------------------------------------------

Author:
A M Bilgic

Kurt Garloff

Date:
1/97
Version:
Id
vector.h,v 1.56.2.133 2010/08/24 11:30:50 garloff Exp
-------------------------------------------------------------

Definition in file vector.h.


Define Documentation

#define _JOB_TMPL2C ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     job_##oper <T>, en-st, a1+st, &a2

Definition at line 607 of file vector.h.

#define _JOB_TMPL2V ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     job_##oper <T>, en-st, a1+st, a2+st

Definition at line 605 of file vector.h.

#define _JOB_TMPL3CC ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     job_##oper <T>, en-st, a1+st, &a2, &a3

Definition at line 613 of file vector.h.

#define _JOB_TMPL3VC ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     job_##oper <T>, en-st, a1+st, a2+st, &a3

Definition at line 611 of file vector.h.

#define _JOB_TMPL3VV ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     job_##oper <T>, en-st, a1+st, a2+st, a3+st

Definition at line 609 of file vector.h.

#define _JOB_TMPL4C ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     job_##oper <T>, en-st, a1+st, a2+st, &a3, &a4

Definition at line 617 of file vector.h.

#define _JOB_TMPL4V ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     job_##oper <T>, en-st, a1+st, a2+st, a3+st, &a4

Definition at line 615 of file vector.h.

#define _JOB_TMPL5 ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     job_##oper <T>, en-st, a1+st, a2+st, a3+st, &a4, &a5

Definition at line 619 of file vector.h.

#define _SMP_TMPL2C ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     do_##oper <T> (en-st, a1+st, a2)

Definition at line 606 of file vector.h.

#define _SMP_TMPL2V ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     do_##oper <T> (en-st, a1+st, a2+st)

Definition at line 604 of file vector.h.

#define _SMP_TMPL3CC ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     do_##oper <T> (en-st, a1+st, a2, a3)

Definition at line 612 of file vector.h.

#define _SMP_TMPL3VC ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     do_##oper <T> (en-st, a1+st, a2+st, a3)

Definition at line 610 of file vector.h.

#define _SMP_TMPL3VV ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     do_##oper <T> (en-st, a1+st, a2+st, a3+st)

Definition at line 608 of file vector.h.

#define _SMP_TMPL4C ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     do_##oper <T> (en-st, a1+st, a2+st, a3, a4)

Definition at line 616 of file vector.h.

#define _SMP_TMPL4V ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     do_##oper <T> (en-st, a1+st, a2+st, a3+st, a4)

Definition at line 614 of file vector.h.

#define _SMP_TMPL5 ( oper,
st,
en,
a1,
a2,
a3,
a4,
a5   )     do_##oper <T> (en-st, a1+st, a2+st, a3+st, a4, a5)

Definition at line 618 of file vector.h.

#define COST_VECFABSSQR (  )     (d*(COST_UNIT_LOAD+COST_MULT+COST_ADD+COST_LOOP))

Definition at line 2305 of file vector.h.

#define COST_VECSCALAR (  )     (d*(2*COST_UNIT_LOAD+COST_MULT+COST_ADD+COST_LOOP))

Definition at line 2306 of file vector.h.

#define SMP_VECSLICE   16384

#define STD_SMP_TEMPLATE ( oper,
dm,
a1,
a2,
a3,
a4,
a5,
SMP_TMPL,
JOB_TMPL   ) 

Value:

/* use some heuristic to decide for the num of threads */               \
        const unsigned n_thr = threads_avail (dm / SMP_VECSLICE);               \
        if (LIKELY(n_thr < 2)) {                                                                                \
                SMP_TMPL(oper, 0, dm, a1, a2, a3, a4, a5);                                      \
        } else {                                                                                                                \
                PREFETCH_R(a1, 3); /*PREFETCH_R(a2, 3);*/                                       \
                const unsigned long first = slice_offset(1, n_thr, dm, a1);     \
                unsigned long st, en = first;                                                           \
                unsigned _t;                                                                                            \
                /* smp_barrier(); */                                                                            \
                /* Start threads */                                                                                     \
                for (_t = 0; _t < n_thr-1; ++_t) {                                                      \
                        st = en; en = slice_offset(_t+2, n_thr, dm, a1);                \
                        thread_start (_t, JOB_TMPL(oper, st, en, a1, a2, a3, a4, a5), (void*)0); \
                }                                                                                                                       \
                /* The first slice is handled by the main thread */                     \
                SMP_TMPL(oper, 0UL, first, a1, a2, a3, a4, a5);                         \
                /* sched_yield (); */                                                                           \
                /* Wait for the end */                                                                          \
                for (_t = 0; _t < n_thr-1; ++_t)                                                        \
                        thread_wait (_t);                                                                               \
        }
Template for parallelized stuff (unary) We need the last argument(s) to uniquely handle cases, where it's a pointer into an array or just a number.

Definition at line 626 of file vector.h.

#define STD_SMP_TEMPLATE2C ( oper,
dm,
a1,
a2   )     STD_SMP_TEMPLATE(oper, dm, a1, a2, X, X, X, _SMP_TMPL2C, _JOB_TMPL2C)

#define STD_SMP_TEMPLATE2V ( oper,
dm,
a1,
a2   )     STD_SMP_TEMPLATE(oper, dm, a1, a2, X, X, X, _SMP_TMPL2V, _JOB_TMPL2V)

#define STD_SMP_TEMPLATE3CC ( oper,
dm,
a1,
a2,
a3   )     STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, X, X, _SMP_TMPL3CC, _JOB_TMPL3CC)

Definition at line 658 of file vector.h.

#define STD_SMP_TEMPLATE3VC ( oper,
dm,
a1,
a2,
a3   )     STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, X, X, _SMP_TMPL3VC, _JOB_TMPL3VC)

#define STD_SMP_TEMPLATE3VV ( oper,
dm,
a1,
a2,
a3   )     STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, X, X, _SMP_TMPL3VV, _JOB_TMPL3VV)

#define STD_SMP_TEMPLATE4C ( oper,
dm,
a1,
a2,
a3,
a4   )     STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, a4, X, _SMP_TMPL4C, _JOB_TMPL4C)

#define STD_SMP_TEMPLATE4V ( oper,
dm,
a1,
a2,
a3,
a4   )     STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, a4, X, _SMP_TMPL4V, _JOB_TMPL4V)

#define STD_SMP_TEMPLATE5 ( oper,
dm,
a1,
a2,
a3,
a4,
a5   )     STD_SMP_TEMPLATE(oper, dm, a1, a2, a3, a4, a5, _SMP_TMPL5, _JOB_TMPL5)


Generated on Wed Nov 20 09:28:55 2013 for TBCI Numerical high perf. C++ Library by  doxygen 1.5.6