Avoid zeroing matrices when using BLAS gemm function - gsl-shell.git - gsl-shell

index : gsl-shell.git
gsl-shell
summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrancesco Abbate <francesco.abbate@gmail.com>2013年08月18日 12:31:23 +0200
committerFrancesco Abbate <francesco.abbate@gmail.com>2013年08月18日 12:31:23 +0200
commit25ee7bf05e5f918e3675f5cbd07e8aa45c57bb06 (patch)
tree1fc6d7511217364ca3d50e087fdd3e38297134ad
parent6a1ec4b19fa3b97e88c5ac60a143b0db83e8d978 (diff)
downloadgsl-shell-25ee7bf05e5f918e3675f5cbd07e8aa45c57bb06.tar.gz
Avoid zeroing matrices when using BLAS gemm function
Diffstat
-rw-r--r--matrix-power.lua 12
-rw-r--r--matrix.lua 8
2 files changed, 8 insertions, 12 deletions
diff --git a/matrix-power.lua b/matrix-power.lua
index fc33cb12..a279e84c 100644
--- a/matrix-power.lua
+++ b/matrix-power.lua
@@ -18,8 +18,7 @@ local function power_raw(r, m, n, e)
-- The content of m2 is not needed here.
-- We compute r <- r * m using m2 as a temporary store
gsl.gsl_matrix_memcpy(m2, r)
- gsl.gsl_matrix_set_zero(r)
- gsl.gsl_blas_dgemm(NT, NT, 1, m, m2, 1, r)
+ gsl.gsl_blas_dgemm(NT, NT, 1, m, m2, 0, r)
else
gsl.gsl_matrix_memcpy(r, m)
end
@@ -29,8 +28,7 @@ local function power_raw(r, m, n, e)
if e > 0 then
-- compute m2 <- m * m
- gsl.gsl_matrix_set_zero(m2)
- gsl.gsl_blas_dgemm(NT, NT, 1, m, m, 1, m2)
+ gsl.gsl_blas_dgemm(NT, NT, 1, m, m, 0, m2)
m, m2 = m2, m
end
end
@@ -47,8 +45,7 @@ local function power_complex_raw(r, m, n, e)
-- The content of m2 is not needed here.
-- We compute r <- r * m using m2 as a temporary store
gsl.gsl_matrix_complex_memcpy(m2, r)
- gsl.gsl_matrix_complex_set_zero(r)
- gsl.gsl_blas_zgemm(NT, NT, 1, m, m2, 1, r)
+ gsl.gsl_blas_zgemm(NT, NT, 1, m, m2, 0, r)
else
gsl.gsl_matrix_complex_memcpy(r, m)
end
@@ -58,8 +55,7 @@ local function power_complex_raw(r, m, n, e)
if e > 0 then
-- compute m2 <- m * m
- gsl.gsl_matrix_complex_set_zero(m2)
- gsl.gsl_blas_zgemm(NT, NT, 1, m, m, 1, m2)
+ gsl.gsl_blas_zgemm(NT, NT, 1, m, m, 0, m2)
m, m2 = m2, m
end
end
diff --git a/matrix.lua b/matrix.lua
index b28da49e..8f7d788e 100644
--- a/matrix.lua
+++ b/matrix.lua
@@ -489,17 +489,17 @@ local function vector_op(scalar_op, element_wise, no_inverse)
else
if ra and rb then
local n1, n2 = tonumber(a.size1), tonumber(b.size2)
- local c = matrix_new(n1, n2)
+ local c = matrix_alloc(n1, n2)
local NT = gsl.CblasNoTrans
- gsl_check(gsl.gsl_blas_dgemm(NT, NT, 1, a, b, 1, c))
+ gsl_check(gsl.gsl_blas_dgemm(NT, NT, 1, a, b, 0, c))
return c
else
if ra then a = mat_complex_of_real(a) end
if rb then b = mat_complex_of_real(b) end
local n1, n2 = tonumber(a.size1), tonumber(b.size2)
- local c = matrix_cnew(n1, n2)
+ local c = matrix_calloc(n1, n2)
local NT = gsl.CblasNoTrans
- gsl_check(gsl.gsl_blas_zgemm(NT, NT, 1, a, b, 1, c))
+ gsl_check(gsl.gsl_blas_zgemm(NT, NT, 1, a, b, 0, c))
return c
end
end
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月17日 06:33:44 +0000

AltStyle によって変換されたページ (->オリジナル) /