Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve Tests #14

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ version = "0.1.0"

[deps]
DelimitedFiles = "8bb1440f-4735-579b-a4ab-409b98df4dab"
InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
Expand Down
11 changes: 10 additions & 1 deletion src/BLIS.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ using Libdl
using blis_jll
using LinearAlgebra

global blis_path = ""
global libblis = C_NULL

__init__() = begin
Expand All @@ -13,13 +14,21 @@ __init__() = begin
@info "Using custom defined BLIS installation instead of blis_jll."
global libblis = dlopen(string(get(ENV, "BLISDIR", ""), "/lib/libblis"))
else
blis_path = blis_jll.blis_path
global blis_path = blis_jll.blis_path
# Use BinaryBuilder provided BLIS library.
@info "blis_jll yields BLIS installation: $blis_path."
global libblis = dlopen(blis_path)
end
end

export switch_blas
switch_blas(; clear=false, verbose=false) = begin
if libblis == C_NULL
throw(ErrorException("BLIS library not found under $blis_path."))
end
BLAS.lbt_forward(blis_path, clear=clear, verbose=verbose)
end

# Data types.
module Types
include("types.jl")
Expand Down
2 changes: 2 additions & 0 deletions src/interface_linalg/level1.jl
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Level-1 LinearAlgebra.BLAS interface.
#

#=
# NOTE: scal! and blascopy! have incx in its parmeter.
# No further StridedVector interface is provided.
macro blis_interface_linalg_lv1_scal(T1, targetfunc, bliname)
Expand Down Expand Up @@ -63,6 +64,7 @@ end
@blis_interface_linalg_lv1_copy Float64 blascopy! copyv!
@blis_interface_linalg_lv1_copy ComplexF32 blascopy! copyv!
@blis_interface_linalg_lv1_copy ComplexF64 blascopy! copyv!
=#

macro blis_interface_linalg_lv1_axpy(Tc1, T1, T2, targetfunc, bliname)

Expand Down
68 changes: 14 additions & 54 deletions src/interface_linalg/level2.jl
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,8 @@ end

@doc """
gemv!(tA, α, A, x, β, y)
BLIS-based GEMV with strides support & mixed-precision.
BLIS-based GEMV with strides support.
""" gemv!
@blis_interface_linalg_lv2_gemv(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
gemv!, gemv!)
@blis_interface_linalg_lv2_gemv Float32 Float32 Float32 Float32 Float32 gemv! gemv!
@blis_interface_linalg_lv2_gemv Float64 Float64 Float64 Float64 Float64 gemv! gemv!
@blis_interface_linalg_lv2_gemv ComplexF32 ComplexF32 ComplexF32 ComplexF32 ComplexF32 gemv! gemv!
Expand Down Expand Up @@ -94,7 +88,7 @@ macro blis_interface_linalg_lv2_hemv(Tc1, T1, T2, Tc2, T3, targetfunc, bliname,
oβ = BliObj(β)
oy = BliObj(y)

ObjectBackend.bli_obj_set_uplo!(bli_ul, oA)
ObjectBackend.bli_obj_set_uplo!(bli_ul, oA.obj)
ObjectBackend.bli_obj_set_struc!($bli_struc, oA.obj)
$blifunc(oα, oA, ox, oβ, oy)
y
Expand All @@ -105,31 +99,17 @@ end

@doc """
hemv!(ul, α, A, x, β, y)
BLIS-based HEMV with strides support & mixed-precision.
BLIS-based HEMV with strides support.
""" hemv!
@blis_interface_linalg_lv2_hemv(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
hemv!, hemv!,
BLIS_HERMITIAN)
@blis_interface_linalg_lv2_hemv Float32 Float32 Float32 Float32 Float32 hemv! hemv! BLIS_HERMITIAN
@blis_interface_linalg_lv2_hemv Float64 Float64 Float64 Float64 Float64 hemv! hemv! BLIS_HERMITIAN
@blis_interface_linalg_lv2_hemv ComplexF32 ComplexF32 ComplexF32 ComplexF32 ComplexF32 hemv! hemv! BLIS_HERMITIAN
@blis_interface_linalg_lv2_hemv ComplexF64 ComplexF64 ComplexF64 ComplexF64 ComplexF64 hemv! hemv! BLIS_HERMITIAN

@doc """
symv!(ul, α, A, x, β, y)
BLIS-based SYMV with strides support & mixed-precision.
BLIS-based SYMV with strides support.
""" symv!
@blis_interface_linalg_lv2_hemv(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
symv!, symv!,
BLIS_SYMMETRIC)
@blis_interface_linalg_lv2_hemv Float32 Float32 Float32 Float32 Float32 symv! symv! BLIS_SYMMETRIC
@blis_interface_linalg_lv2_hemv Float64 Float64 Float64 Float64 Float64 symv! symv! BLIS_SYMMETRIC
@blis_interface_linalg_lv2_hemv ComplexF32 ComplexF32 ComplexF32 ComplexF32 ComplexF32 symv! symv! BLIS_SYMMETRIC
Expand Down Expand Up @@ -162,9 +142,10 @@ macro blis_interface_linalg_lv2_trmv(T1, T2, targetfunc, bliname)
oA = BliObj(A)
ob = BliObj(b)

ObjectBackend.bli_obj_set_uplo!(bli_ul, oA)
ObjectBackend.bli_obj_set_diag!(bli_dA, oA)
ObjectBackend.bli_obj_set_onlytrans!(bli_tA, oA)
ObjectBackend.bli_obj_set_uplo!(bli_ul, oA.obj)
ObjectBackend.bli_obj_set_diag!(bli_dA, oA.obj)
ObjectBackend.bli_obj_set_onlytrans!(bli_tA, oA.obj)
ObjectBackend.bli_obj_set_struc!(BLIS_TRIANGULAR, oA.obj)
$blifunc(oα, oA, ob)
b

Expand All @@ -174,23 +155,17 @@ end

@doc """
trmv!(ul, tA, dA, A, b)
BLIS-based TRMV with strides support & mixed-precision.
BLIS-based TRMV with strides support.
"""
@blis_interface_linalg_lv2_trmv(BliCompatibleType,
BliCompatibleType,
trmv!, trmv!)
@blis_interface_linalg_lv2_trmv Float32 Float32 trmv! trmv!
@blis_interface_linalg_lv2_trmv Float64 Float64 trmv! trmv!
@blis_interface_linalg_lv2_trmv ComplexF32 ComplexF32 trmv! trmv!
@blis_interface_linalg_lv2_trmv ComplexF64 ComplexF64 trmv! trmv!

@doc """
trsv!(ul, tA, dA, A, b)
BLIS-based TRSV with strides support & mixed-precision.
BLIS-based TRSV with strides support.
"""
@blis_interface_linalg_lv2_trmv(BliCompatibleType,
BliCompatibleType,
trsv!, trsv!)
@blis_interface_linalg_lv2_trmv Float32 Float32 trsv! trsv!
@blis_interface_linalg_lv2_trmv Float64 Float64 trsv! trsv!
@blis_interface_linalg_lv2_trmv ComplexF32 ComplexF32 trsv! trsv!
Expand Down Expand Up @@ -228,13 +203,8 @@ end

@doc """
ger!(α, x, y, A)
BLIS-based GER with strides support & mixed-precision.
BLIS-based GER with strides support.
""" ger!
@blis_interface_linalg_lv2_ger(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
ger!, ger!)
@blis_interface_linalg_lv2_ger Float32 Float32 Float32 Float32 ger! ger!
@blis_interface_linalg_lv2_ger Float64 Float64 Float64 Float64 ger! ger!
@blis_interface_linalg_lv2_ger ComplexF32 ComplexF32 ComplexF32 ComplexF32 ger! ger!
Expand Down Expand Up @@ -264,7 +234,7 @@ macro blis_interface_linalg_lv2_her(Tc1, T1, T2, targetfunc, bliname, bli_struc)
ox = BliObj(x)
oA = BliObj(A)

ObjectBackend.bli_obj_set_uplo!(bli_ul, oA)
ObjectBackend.bli_obj_set_uplo!(bli_ul, oA.obj)
ObjectBackend.bli_obj_set_struc!($bli_struc, oA.obj)
$blifunc(oα, ox, oA)
A
Expand All @@ -275,27 +245,17 @@ end

@doc """
her!(uplo, α, x, A)
BLIS-based HER with strides support & mixed-precision.
BLIS-based HER with strides support.
""" her!
@blis_interface_linalg_lv2_her(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
her!, her!,
BLIS_HERMITIAN)
@blis_interface_linalg_lv2_her Float32 Float32 Float32 her! her! BLIS_HERMITIAN
@blis_interface_linalg_lv2_her Float64 Float64 Float64 her! her! BLIS_HERMITIAN
@blis_interface_linalg_lv2_her Float32 ComplexF32 ComplexF32 her! her! BLIS_HERMITIAN
@blis_interface_linalg_lv2_her Float64 ComplexF64 ComplexF64 her! her! BLIS_HERMITIAN

@doc """
syr!(uplo, α, x, A)
BLIS-based SYR with strides support & mixed-precision.
BLIS-based SYR with strides support.
""" syr!
@blis_interface_linalg_lv2_her(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
syr!, syr!,
BLIS_SYMMETRIC)
@blis_interface_linalg_lv2_her Float32 Float32 Float32 syr! syr! BLIS_SYMMETRIC
@blis_interface_linalg_lv2_her Float64 Float64 Float64 syr! syr! BLIS_SYMMETRIC
@blis_interface_linalg_lv2_her ComplexF32 ComplexF32 ComplexF32 syr! syr! BLIS_SYMMETRIC
Expand Down
64 changes: 8 additions & 56 deletions src/interface_linalg/level3.jl
Original file line number Diff line number Diff line change
Expand Up @@ -165,16 +165,9 @@ end
if "hemm" ∉ blacklist
@doc """
hemm!(side, uplo, α, A, B, β, C)
BLIS-based HEMM with generic strides & mixed precision directly supported.
BLIS-based HEMM with generic strides directly supported.
`A` expresses a `Hermitian` matrix with its `uplo` triangle.
""" hemm!
@blis_interface_linalg_lv3_hemm(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
hemm!, hemm!,
BLIS_HERMITIAN)
@blis_interface_linalg_lv3_hemm Float32 Float32 Float32 Float32 Float32 hemm! hemm! BLIS_HERMITIAN
@blis_interface_linalg_lv3_hemm Float64 Float64 Float64 Float64 Float64 hemm! hemm! BLIS_HERMITIAN
@blis_interface_linalg_lv3_hemm ComplexF32 ComplexF32 ComplexF32 ComplexF32 ComplexF32 hemm! hemm! BLIS_HERMITIAN
Expand All @@ -184,16 +177,9 @@ end
if "symm" ∉ blacklist
@doc """
symm!(side, uplo, α, A, B, β, C)
BLIS-based SYMM with generic strides & mixed precision directly supported.
BLIS-based SYMM with generic strides directly supported.
`A` expresses a `Symmetric` matrix with its `uplo` triangle.
""" symm!
@blis_interface_linalg_lv3_hemm(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
symm!, symm!,
BLIS_SYMMETRIC)
@blis_interface_linalg_lv3_hemm Float32 Float32 Float32 Float32 Float32 symm! symm! BLIS_SYMMETRIC
@blis_interface_linalg_lv3_hemm Float64 Float64 Float64 Float64 Float64 symm! symm! BLIS_SYMMETRIC
@blis_interface_linalg_lv3_hemm ComplexF32 ComplexF32 ComplexF32 ComplexF32 ComplexF32 symm! symm! BLIS_SYMMETRIC
Expand Down Expand Up @@ -244,19 +230,12 @@ end
if "her2k" ∉ blacklist
@doc """
her2k!(uplo, tAB, α, A, B, β, C)
BLIS-based HER2K with generic strides & mixed precision directly supported.
BLIS-based HER2K with generic strides directly supported.
Performs rank-2k update on `Hermitian` matrix `C` (expressed by `uplo`-triangle):
```math
C = β C + (α A B^† + \\bar α B A^†)^{tAB}
```
""" her2k!
@blis_interface_linalg_lv3_her2k(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
her2k!, her2k!,
BLIS_HERMITIAN)
@blis_interface_linalg_lv3_her2k Float32 Float32 Float32 Float32 Float32 her2k! her2k! BLIS_HERMITIAN
@blis_interface_linalg_lv3_her2k Float64 Float64 Float64 Float64 Float64 her2k! her2k! BLIS_HERMITIAN
@blis_interface_linalg_lv3_her2k ComplexF32 ComplexF32 ComplexF32 Float32 ComplexF32 her2k! her2k! BLIS_HERMITIAN
Expand All @@ -266,19 +245,12 @@ end
if "syr2k" ∉ blacklist
@doc """
syr2k!(uplo, tAB, α, A, B, β, C)
BLIS-based SYR2K with generic strides & mixed precision directly supported.
BLIS-based SYR2K with generic strides directly supported.
Performs rank-2k update on `Symmetric` matrix `C` (expressed by `uplo`-triangle):
```math
C = β C + (α A B^T + \\bar α B A^T)^{tAB}
```
""" syr2k!
@blis_interface_linalg_lv3_her2k(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
syr2k!, syr2k!,
BLIS_SYMMETRIC)
@blis_interface_linalg_lv3_her2k Float32 Float32 Float32 Float32 Float32 syr2k! syr2k! BLIS_SYMMETRIC
@blis_interface_linalg_lv3_her2k Float64 Float64 Float64 Float64 Float64 syr2k! syr2k! BLIS_SYMMETRIC
@blis_interface_linalg_lv3_her2k ComplexF32 ComplexF32 ComplexF32 ComplexF32 ComplexF32 syr2k! syr2k! BLIS_SYMMETRIC
Expand Down Expand Up @@ -326,15 +298,9 @@ end
if "herk" ∉ blacklist
@doc """
herk!(uplo, tA, α, A, β, C)
BLIS-based HERK with generic strides & mixed precision directly supported.
BLIS-based HERK with generic strides directly supported.
Performs rank-k update on `Hermitian` matrix `C` (expressed by `uplo`-triangle).
""" herk!
@blis_interface_linalg_lv3_herk(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
herk!, herk!,
BLIS_HERMITIAN)
@blis_interface_linalg_lv3_herk Float32 Float32 Float32 Float32 herk! herk! BLIS_HERMITIAN
@blis_interface_linalg_lv3_herk Float64 Float64 Float64 Float64 herk! herk! BLIS_HERMITIAN
@blis_interface_linalg_lv3_herk Float32 ComplexF32 Float32 ComplexF32 herk! herk! BLIS_HERMITIAN
Expand All @@ -344,15 +310,9 @@ end
if "syrk" ∉ blacklist
@doc """
syrk!(uplo, tA, α, A, β, C)
BLIS-based SYRK with generic strides & mixed precision directly supported.
BLIS-based SYRK with generic strides directly supported.
Performs rank-k update on `Symmetric` matrix `C` (expressed by `uplo`-triangle).
""" syrk!
@blis_interface_linalg_lv3_herk(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
syrk!, syrk!,
BLIS_SYMMETRIC)
@blis_interface_linalg_lv3_herk Float32 Float32 Float32 Float32 syrk! syrk! BLIS_SYMMETRIC
@blis_interface_linalg_lv3_herk Float64 Float64 Float64 Float64 syrk! syrk! BLIS_SYMMETRIC
@blis_interface_linalg_lv3_herk ComplexF32 ComplexF32 ComplexF32 ComplexF32 syrk! syrk! BLIS_SYMMETRIC
Expand Down Expand Up @@ -410,12 +370,8 @@ end
if "trmm" ∉ blacklist
@doc """
trmm!(side, uplo, tA, dA, α, A, B)
BLIS-based TRMM with generic strides & mixed precision directly supported.
BLIS-based TRMM with generic strides directly supported.
""" trmm!
@blis_interface_linalg_lv3_trmm(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
trmm!, trmm!)
@blis_interface_linalg_lv3_trmm Float32 Float32 Float32 trmm! trmm!
@blis_interface_linalg_lv3_trmm Float64 Float64 Float64 trmm! trmm!
@blis_interface_linalg_lv3_trmm ComplexF32 ComplexF32 ComplexF32 trmm! trmm!
Expand All @@ -425,12 +381,8 @@ end
if "trsm" ∉ blacklist
@doc """
trsm!(side, uplo, tA, dA, α, A, B)
BLIS-based TRSM with generic strides & mixed precision directly supported.
BLIS-based TRSM with generic strides directly supported.
""" trsm!
@blis_interface_linalg_lv3_trmm(BliCompatibleType,
BliCompatibleType,
BliCompatibleType,
trsm!, trsm!)
@blis_interface_linalg_lv3_trmm Float32 Float32 Float32 trsm! trsm!
@blis_interface_linalg_lv3_trmm Float64 Float64 Float64 trsm! trsm!
@blis_interface_linalg_lv3_trmm ComplexF32 ComplexF32 ComplexF32 trsm! trsm!
Expand Down
Empty file removed src/switch_blas.jl
Empty file.
Loading