是否有一種方法可以用BLAS,GSL或任何其他高性能庫進行元素向量向量乘法運算?BLAS中元素明智的矢量矢量乘法?
11
A
回答
5
我發現MKL在矢量數學函數庫(VML)中有一整套關於矢量的數學運算,包括v?Mul,它可以做我想做的。它適用於C++數組,所以比GSL更方便我使用。
5
在GSL中,gsl_vector_mul
有竅門。
6
總是存在的std ::的valarray 它定義了經常如果目標支持它們編譯成SIMD指令(英特爾C++ /Quse-intel-optimized-headers
,G ++)的elementwise操作。
這兩種編譯器也會做自動矢量
- http://software.intel.com/en-us/articles/getting-code-ready-for-parallel-execution-with-intel-parallel-composer/
- http://gcc.gnu.org/projects/tree-ssa/vectorization.html
在這種情況下,你可以只寫
#define N 10000
float a[N], b[N], c[N];
void f1() {
for (int i = 1; i < N; i++)
c[i] = a[i] + b[i];
}
,並把它編譯成量化代碼(使用SSE4如)
是的,他們是過時的,往往認爲是過時的,但在實踐中,他們都是標準的,適合的任務非常好。
8
(以該問題的標題字面上...)
是的,它可以單獨使用BLAS來實現(雖然它可能不是最有效的方式。)
的竅門是把一個輸入向量爲對角矩陣的:
⎡a ⎤ ⎡x⎤ ⎡ax⎤
⎢ b ⎥ ⎢y⎥ = ⎢by⎥
⎣ c⎦ ⎣z⎦ ⎣cz⎦
然後可以使用的矩陣 - 向量乘法功能,可以採取一個對角矩陣作爲輸入,而不填充,例如一個SBMV
例子:
void ebeMultiply(const int n, const double *a, const double *x, double *y)
{
extern void dsbmv_(const char *uplo,
const int *n,
const int *k,
const double *alpha,
const double *a,
const int *lda,
const double *x,
const int *incx,
const double *beta,
double *y,
const int *incy);
static const int k = 0; // Just the diagonal; 0 super-diagonal bands
static const double alpha = 1.0;
static const int lda = 1;
static const int incx = 1;
static const double beta = 0.0;
static const int incy = 1;
dsbmv_("L", &n, &k, &alpha, a, &lda, x, &incx, &beta, y, &incy);
}
// Test
#define N 3
static const double a[N] = {1,3,5};
static const double b[N] = {1,10,100};
static double c[N];
int main(int argc, char **argv)
{
ebeMultiply(N, a, b, c);
printf("Result: [%f %f %f]\n", c[0], c[1], c[2]);
return 0;
}
Result: [1.000000 30.000000 500.000000]
相關問題
- 1. 用矢量乘以矩陣(元素明智)Tensorflow
- 2. 矢量模乘法
- 3. 2D矢量乘法
- 4. 矩陣乘矢量乘法
- 5. 矢量元素的乘積之和
- 6. 乘張量矢量
- 7. BLAS中矩陣之間的元素明智乘法?
- 8. BLAS矩陣矢量乘法與矢量矩陣乘法。一個工作;另一個失敗
- 9. 使用GNU Blas子例程的矢量和矩陣之間的元素乘積
- 10. Summatory矢量元素
- 11. CUDA陣列 - 矢量乘法
- 12. 矢量化矩陣乘法
- 13. 矢量矩陣乘法
- 14. 乘法矢量一起MATLAB
- 15. 瞭解矢量乘法
- 16. 矩陣矢量乘法,其中矢量已插入 - Python
- 17. 標量與矢量的乘法
- 18. 1D矢量和3D陣列的乘法求和的矢量化
- 19. 從矢量列表中的元素中提取矢量
- 20. Mxnet元素明智乘法
- 21. 用R中的矢量替換矢量的元素
- 22. 矢量元素的產品
- 23. 比較元素的矢量
- 24. 斯卡拉矢量標量乘法
- 25. 使用二進制矢量選擇矢量中的元素
- 26. 從滿足條件矢量的矢量中擦除元素
- 27. 如何擦除矢量矢量中的元素?
- 28. python中的矢量矩陣乘法?
- 29. 在core.matrix中矩陣和向量的元素明智的乘法
- 30. 矢量矢量乘法來創建一個矩陣
+1 MKL本身 – sehe