Skip to content

Commit

Permalink
Refactoring codes, tests, README
Browse files Browse the repository at this point in the history
* tests & README

* fix README

* remove unnecessary combat entries

* remove manifest from docs
  • Loading branch information
fcdimitr committed Mar 1, 2024
1 parent c15edde commit 32f9e99
Show file tree
Hide file tree
Showing 11 changed files with 524 additions and 465 deletions.
7 changes: 7 additions & 0 deletions .JuliaFormatter.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
style = "blue"
margin = 92
indent = 4
remove_extra_newlines = false
conditional_to_if = true
always_use_return = true
separate_kwargs_with_semicolon = true
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,5 @@
*.jl.mem
/Manifest.toml
/docs/build/
test/Manifest.toml
.vscode/settings.json
11 changes: 10 additions & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,20 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
[compat]
CSB_jll = "1"
DocStringExtensions = "0.8, 0.9"
Documenter = "1.2"
julia = "1"
Libdl = "1"
LinearAlgebra = "1"
SparseArrays = "1"

[extras]
Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
JET = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b"
JuliaFormatter = "98e50ef6-434e-11e9-1051-2b60c6c9e899"
Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

[targets]
test = ["Test", "Random"]
test = ["Aqua", "Documenter", "JET", "JuliaFormatter", "Pkg", "Test", "Random"]
14 changes: 11 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Julia Interface to Matrix-Vector Multiplications in CSB Format

| **Documentation** | **Build Status** | **Contributing** |
|:-------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------:|:-----:|
| [![][docs-stable-img]][docs-stable-url] [![][docs-latest-img]][docs-latest-url] | [![CI][github-action-img]][github-action-url] [![][codecov-img]][codecov-url] | [![][issues-img]][issues-url] [![][license-img]][license-url] |
| **Documentation** | **Build Status** | **Contributing** | **Extras** |
|:-------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------:|:-----:|:------:|
| [![][docs-stable-img]][docs-stable-url] [![][docs-latest-img]][docs-latest-url] | [![CI][github-action-img]][github-action-url] [![][codecov-img]][codecov-url] | [![][issues-img]][issues-url] [![][license-img]][license-url] | [![][style-img]][style-url] [![][aqua-img]][aqua-url] |


We provide a `Julia` interface (a wrapper) to the `Compressed Sparse
Expand Down Expand Up @@ -46,6 +46,8 @@ following command
pkg> add CompressedSparseBlocks
```

> :warning: **CompressedSparseBlocks is currently not working on Windows and native M1 Macs**: Either use WSL2 on Windows or use the package via `Rosetta 2` on the M-processor Macs (that means by using the `x86` and not the `arm64` `julia`).
## Documentation

- [**STABLE**][docs-stable-url] — **most recently tagged version of the documentation.**
Expand Down Expand Up @@ -108,3 +110,9 @@ Aristotle University of Thessaloniki, Thessaloniki 54124, Greece

[issues-img]: https://img.shields.io/github/issues/fcdimitr/CompressedSparseBlocks.jl.svg
[issues-url]: https://github.com/fcdimitr/CompressedSparseBlocks.jl/issues

[style-img]: https://img.shields.io/badge/code%20style-blue-4495d1.svg
[style-url]: https://github.com/invenia/BlueStyle

[aqua-img]: https://raw.githubusercontent.com/JuliaTesting/Aqua.jl/master/badge.svg
[aqua-url]: https://github.com/JuliaTesting/Aqua.jl
153 changes: 84 additions & 69 deletions benchmarks/run_benchmarks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,88 +7,103 @@ using CairoMakie # to enable plotting

function benchmark_csr_mv(sizes, densities, dims)

times_csc = zeros(length(sizes), length(densities), length(dims))
times_csct = zeros(length(sizes), length(densities), length(dims))
times_csb = zeros(length(sizes), length(densities), length(dims))
times_csbt = zeros(length(sizes), length(densities), length(dims))

for (i, n) in enumerate(sizes)
for (j, d) in enumerate(densities)
for (k, r) in enumerate(dims)

@info "Running ($n, $n) with average degree $d and $r RHS vectors"

A = sprand( n, n, d/n );
B = SparseMatrixCSB( A );

if r == 1
x = rand(n )
y1 = zeros(n)
y2 = zeros(n)
y3 = zeros(n)
y4 = zeros(n)
else
x = rand( n, r)
y1 = zeros(n, r)
y2 = zeros(n, r)
y3 = zeros(n, r)
y4 = zeros(n, r)
times_csc = zeros(length(sizes), length(densities), length(dims))
times_csct = zeros(length(sizes), length(densities), length(dims))
times_csb = zeros(length(sizes), length(densities), length(dims))
times_csbt = zeros(length(sizes), length(densities), length(dims))

for (i, n) in enumerate(sizes)
for (j, d) in enumerate(densities)
for (k, r) in enumerate(dims)

@info "Running ($n, $n) with average degree $d and $r RHS vectors"

A = sprand(n, n, d / n)
B = SparseMatrixCSB(A)

if r == 1
x = rand(n)
y1 = zeros(n)
y2 = zeros(n)
y3 = zeros(n)
y4 = zeros(n)
else
x = rand(n, r)
y1 = zeros(n, r)
y2 = zeros(n, r)
y3 = zeros(n, r)
y4 = zeros(n, r)
end
times_csc[i, j, k] = @belapsed mul!($y1, $A, $x)
times_csct[i, j, k] = @belapsed mul!($y2, $(A'), $x)
times_csb[i, j, k] = @belapsed mul!($y3, $B, $x)
times_csbt[i, j, k] = @belapsed mul!($y4, $(B'), $x)

@assert y1 y3
@assert y2 y4

end
end
times_csc[ i,j,k] = @belapsed mul!($y1, $A, $x)
times_csct[i,j,k] = @belapsed mul!($y2, $(A'), $x)
times_csb[ i,j,k] = @belapsed mul!($y3, $B, $x)
times_csbt[i,j,k] = @belapsed mul!($y4, $(B'), $x)

@assert y1 y3
@assert y2 y4

end
end
end

return times_csc, times_csct, times_csb, times_csbt
return times_csc, times_csct, times_csb, times_csbt

end


function make_figure(
sizes, densities, dims,
times_csc, times_csct, times_csb, times_csbt )

f = Figure( ; resolution = (1600,1200) );

m = length(sizes)
n = length(densities)
l = length(dims)

axs = [
Axis( f[i,j]; xscale = log2, # yscale = log10,
xlabel = i == l ? "matrix size" : "",
ylabel = j == 1 ? "relative speedup over CSC" : "",
title = "avg. degree = $(densities[j]) | $(dims[i]) vectors" )
for i = 1:l, j = 1:n
]

for i = 1 : l
for j = 1:n
# scatterlines!( axs[i,j], sizes, vec( times_csc[: ,j,i] ) .* 1e6; label = "CSC" )
scatterlines!( axs[i,j], sizes, vec( times_csct[:,j,i] ) .\ vec( times_csc[: ,j,i] ); label = "CSC transp." )
scatterlines!( axs[i,j], sizes, vec( times_csb[: ,j,i] ) .\ vec( times_csc[: ,j,i] ); label = "CSB" )
scatterlines!( axs[i,j], sizes, vec( times_csbt[:,j,i] ) .\ vec( times_csc[: ,j,i] ); label = "CSB transp." )
function make_figure(sizes, densities, dims, times_csc, times_csct, times_csb, times_csbt)

f = Figure(; resolution=(1600, 1200))

m = length(sizes)
n = length(densities)
l = length(dims)

axs = [
Axis(
f[i, j];
xscale=log2, # yscale = log10,
xlabel=i == l ? "matrix size" : "",
ylabel=j == 1 ? "relative speedup over CSC" : "",
title="avg. degree = $(densities[j]) | $(dims[i]) vectors",
) for i in 1:l, j in 1:n
]

for i in 1:l
for j in 1:n
# scatterlines!( axs[i,j], sizes, vec( times_csc[: ,j,i] ) .* 1e6; label = "CSC" )
scatterlines!(
axs[i, j],
sizes,
vec(times_csct[:, j, i]) .\ vec(times_csc[:, j, i]);
label="CSC transp.",
)
scatterlines!(
axs[i, j],
sizes,
vec(times_csb[:, j, i]) .\ vec(times_csc[:, j, i]);
label="CSB",
)
scatterlines!(
axs[i, j],
sizes,
vec(times_csbt[:, j, i]) .\ vec(times_csc[:, j, i]);
label="CSB transp.",
)
end
end
end

[linkyaxes!(axs[i,:]...) for i = 1:size(axs,1)]
axislegend( axs[end,end]; position = :lt )
[linkyaxes!(axs[i, :]...) for i in 1:size(axs, 1)]
axislegend(axs[end, end]; position=:lt)

f
return f

end

sizes = 2 .^ (16:2:22)
sizes = 2 .^ (16:2:22)
densities = [10, 15, 20]
dims = [1, 3, 10, 32]
dims = [1, 3, 10, 32]

times = benchmark_csr_mv(sizes, densities, dims)
f = make_figure( sizes, densities, dims, times... )
save( joinpath( @__DIR__, "benchmark-rel-results.png" ), f )
f = make_figure(sizes, densities, dims, times...)
save(joinpath(@__DIR__, "benchmark-rel-results.png"), f)
127 changes: 0 additions & 127 deletions docs/Manifest.toml

This file was deleted.

13 changes: 5 additions & 8 deletions docs/make.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using CompressedSparseBlocks
using Documenter

DocMeta.setdocmeta!(CompressedSparseBlocks, :DocTestSetup, :(using CompressedSparseBlocks); recursive=true)
DocMeta.setdocmeta!(
CompressedSparseBlocks, :DocTestSetup, :(using CompressedSparseBlocks); recursive=true
)

makedocs(;
modules=[CompressedSparseBlocks],
Expand All @@ -13,12 +15,7 @@ makedocs(;
canonical="https://fcdimitr.github.io/CompressedSparseBlocks.jl",
assets=String[],
),
pages=[
"Introduction" => "index.md",
],
pages=["Introduction" => "index.md"],
)

deploydocs(;
repo="github.com/fcdimitr/CompressedSparseBlocks.jl",
devbranch="main",
)
deploydocs(; repo="github.com/fcdimitr/CompressedSparseBlocks.jl", devbranch="main")
Loading

0 comments on commit 32f9e99

Please sign in to comment.