17 #ifndef __utlCoreMKL_h 18 #define __utlCoreMKL_h 33 template <
typename T>
void vAdd(
int n, T* vecIn, T* vecIn2, T* vecOut);
35 template <
typename T>
void vSub(
int n, T* vecIn, T* vecIn2, T* vecOut);
37 template <
typename T>
void vMul(
int n, T* vecIn, T* vecIn2, T* vecOut);
39 template <
typename T>
void vDiv(
int n, T* vecIn, T* vecIn2, T* vecOut);
41 template <
typename T>
void vSqr(
int n, T* vecIn, T* vecOut);
43 template <
typename T>
void vAbs(
int n, T* vecIn, T* vecOut);
45 template <
typename T>
void vExp(
int n, T* vecIn, T* vecOut);
47 template <
typename T>
void vInv(
int n, T* vecIn, T* vecOut);
49 template <
typename T>
void vSqrt(
int n, T* vecIn, T* vecOut);
51 template <
typename T>
void vInvSqrt(
int n, T* vecIn, T* vecOut);
53 template <
typename T>
void vCos(
int n, T* vecIn, T* vecOut);
55 template <
typename T>
void vSin(
int n, T* vecIn, T* vecOut);
61 template <>
inline void 62 vSqr<double>(
int n,
double* vecIn,
double* vecOut)
64 vdSqr(n,vecIn,vecOut);
67 template <>
inline void 68 vSqr<float>(
int n,
float* vecIn,
float* vecOut)
70 vsSqr(n,vecIn,vecOut);
72 template <>
inline void 73 vSqrt<double>(
int n,
double* vecIn,
double* vecOut)
75 vdSqrt(n,vecIn,vecOut);
78 template <>
inline void 79 vSqrt<float>(
int n,
float* vecIn,
float* vecOut)
81 vsSqrt(n,vecIn,vecOut);
83 template <>
inline void 84 vSqrt<std::complex<double> >(
int n, std::complex<double>* vecIn, std::complex<double>* vecOut)
86 vzSqrt(n,vecIn,vecOut);
89 template <>
inline void 90 vSqrt<std::complex<float> >(
int n, std::complex<float>* vecIn, std::complex<float>* vecOut)
92 vcSqrt(n,vecIn,vecOut);
94 template <>
inline void 95 vInvSqrt<double>(
int n,
double* vecIn,
double* vecOut)
97 vdInvSqrt(n,vecIn,vecOut);
100 template <>
inline void 101 vInvSqrt<float>(
int n,
float* vecIn,
float* vecOut)
103 vsInvSqrt(n,vecIn,vecOut);
107 template <>
inline void 108 vSub<double>(
int n,
double* vecIn,
double* vecIn2,
double* vecOut)
110 vdSub(n,vecIn,vecIn2,vecOut);
113 template <>
inline void 114 vSub<float>(
int n,
float* vecIn,
float* vecIn2,
float* vecOut)
116 vsSub(n,vecIn,vecIn2,vecOut);
118 template <>
inline void 119 vSub<std::complex<double> >(
int n, std::complex<double>* vecIn, std::complex<double>* vecIn2, std::complex<double>* vecOut)
121 vzSub(n,vecIn,vecIn2,vecOut);
123 template <>
inline void 124 vSub<std::complex<float> >(
int n, std::complex<float>* vecIn, std::complex<float>* vecIn2, std::complex<float>* vecOut)
126 vcSub(n,vecIn,vecIn2,vecOut);
129 template <>
inline void 130 vDiv<double>(
int n,
double* vecIn,
double* vecIn2,
double* vecOut)
132 vdDiv(n,vecIn,vecIn2,vecOut);
135 template <>
inline void 136 vDiv<float>(
int n,
float* vecIn,
float* vecIn2,
float* vecOut)
138 vsDiv(n,vecIn,vecIn2,vecOut);
140 template <>
inline void 141 vDiv<std::complex<double> >(
int n, std::complex<double>* vecIn, std::complex<double>* vecIn2, std::complex<double>* vecOut)
143 vzDiv(n,vecIn,vecIn2,vecOut);
145 template <>
inline void 146 vDiv<std::complex<float> >(
int n, std::complex<float>* vecIn, std::complex<float>* vecIn2, std::complex<float>* vecOut)
148 vcDiv(n,vecIn,vecIn2,vecOut);
151 template <>
inline void 152 vExp<double>(
int n,
double* vecIn,
double* vecOut)
154 vdExp(n,vecIn,vecOut);
157 template <>
inline void 158 vExp<float>(
int n,
float* vecIn,
float* vecOut)
160 vsExp(n,vecIn,vecOut);
163 template <>
inline void 164 vCos<double>(
int n,
double* vecIn,
double* vecOut)
166 vdCos(n,vecIn,vecOut);
169 template <>
inline void 170 vCos<float>(
int n,
float* vecIn,
float* vecOut)
172 vsCos(n,vecIn,vecOut);
175 template <>
inline void 176 vSin<double>(
int n,
double* vecIn,
double* vecOut)
178 vdSin(n,vecIn,vecOut);
181 template <>
inline void 182 vSin<float>(
int n,
float* vecIn,
float* vecOut)
184 vsSin(n,vecIn,vecOut);
187 template <>
inline void 188 vInv<double>(
int n,
double* vecIn,
double* vecOut)
190 vdInv(n,vecIn,vecOut);
193 template <>
inline void 194 vInv<float>(
int n,
float* vecIn,
float* vecOut)
196 vsInv(n,vecIn,vecOut);
199 template <>
inline void 200 vAdd<double>(
int n,
double* vecIn,
double* vecIn2,
double* vecOut)
202 vdAdd(n,vecIn,vecIn2,vecOut);
205 template <>
inline void 206 vAdd<float>(
int n,
float* vecIn,
float* vecIn2,
float* vecOut)
208 vsAdd(n,vecIn,vecIn2,vecOut);
211 template <>
inline void 212 vMul<double>(
int n,
double* vecIn,
double* vecIn2,
double* vecOut)
214 vdMul(n,vecIn,vecIn2,vecOut);
217 template <>
inline void 218 vMul<float>(
int n,
float* vecIn,
float* vecIn2,
float* vecOut)
220 vsMul(n,vecIn,vecIn2,vecOut);
222 template <>
inline void 223 vMul<std::complex<double> >(
int n, std::complex<double>* vecIn, std::complex<double>* vecIn2, std::complex<double>* vecOut)
225 vzMul(n,vecIn,vecIn2,vecOut);
227 template <>
inline void 228 vMul<std::complex<float> >(
int n, std::complex<float>* vecIn, std::complex<float>* vecIn2, std::complex<float>* vecOut)
230 vcMul(n,vecIn,vecIn2,vecOut);
234 template <>
inline void 235 vAbs(
int n,
double* vecIn,
double* vecOut)
237 vdAbs(n,vecIn,vecOut);
240 template <>
inline void 241 vAbs(
int n,
float* vecIn,
float* vecOut)
243 vsAbs(n,vecIn,vecOut);
246 vAbs(
int n, std::complex<double>* vecIn,
double* vecOut)
248 vzAbs(n,vecIn,vecOut);
251 vAbs(
int n, std::complex<float>* vecIn,
float* vecOut)
253 vcAbs(n,vecIn,vecOut);
258 template <
typename T>
inline void 259 vSqr(
int n, T* vecIn, T* vecOut)
261 for (
int i = 0; i<n; ++i)
262 vecOut[i]=vecIn[i]*vecIn[i];
264 template <
typename T>
inline void 267 for (
int i = 0; i<n; ++i)
268 vecOut[i]=std::sqrt(vecIn[i]);
270 template <
typename T>
inline void 273 for (
int i = 0; i<n; ++i)
274 vecOut[i]=T(1.0)/std::sqrt(vecIn[i]);
278 template <
typename T>
inline void 279 vSub(
int n, T* vecIn1, T* vecIn2, T* vecOut)
281 for (
int i = 0; i<n; ++i)
282 vecOut[i]=vecIn1[i]-vecIn2[i];
285 template <
typename T>
inline void 286 vInv(
int n, T* vecIn, T* vecOut)
288 for (
int i = 0; i<n; ++i)
289 vecOut[i]=1.0/vecIn[i];
292 template <
typename T>
inline void 293 vExp(
int n, T* vecIn, T* vecOut)
295 for (
int i = 0; i<n; ++i)
296 vecOut[i]=std::exp(vecIn[i]);
299 template <
typename T>
inline void 300 vAdd(
int n, T* vecIn1, T* vecIn2, T* vecOut)
302 for (
int i = 0; i<n; ++i)
303 vecOut[i]=vecIn1[i]+vecIn2[i];
306 template <
typename T>
inline void 307 vMul(
int n, T* vecIn1, T* vecIn2, T* vecOut)
309 for (
int i = 0; i<n; ++i)
310 vecOut[i]=vecIn1[i]*vecIn2[i];
313 template <
typename T>
inline void 314 vDiv(
int n, T* vecIn1, T* vecIn2, T* vecOut)
316 for (
int i = 0; i<n; ++i)
317 vecOut[i]=vecIn1[i]/vecIn2[i];
320 template <
typename T>
inline void 321 vAbs(
int n, T* vecIn, T* vecOut)
323 for (
int i = 0; i<n; ++i)
void vMul(int n, T *vecIn, T *vecIn2, T *vecOut)
interface to v*Mul
void vSub(int n, T *vecIn, T *vecIn2, T *vecOut)
interface to v*Sub
void vSqr(int n, T *vecIn, T *vecOut)
interface to v*Sqr
void vAbs(int n, T *vecIn, T *vecOut)
interface to v*Abs
void vAdd(int n, T *vecIn, T *vecIn2, T *vecOut)
interface to v*Add
void vSin(int n, T *vecIn, T *vecOut)
interface to v*Sin
T abs(const T x)
template version of the fabs function
void vSqrt(int n, T *vecIn, T *vecOut)
interface to v*Sqrt
void vInvSqrt(int n, T *vecIn, T *vecOut)
interface to v*InvSqrt
void vCos(int n, T *vecIn, T *vecOut)
interface to v*Cos
void vExp(int n, T *vecIn, T *vecOut)
interface to v*Exp
void vDiv(int n, T *vecIn, T *vecIn2, T *vecOut)
interface to v*Div
void vInv(int n, T *vecIn, T *vecOut)
interface to v*Inv