Skip to content

Instantly share code, notes, and snippets.

Avatar

Harmen Stoppels haampie

View GitHub Profile
@haampie
haampie / Dockerfile
Last active January 4, 2023 17:11
Docker build with cache
View Dockerfile
FROM alpine
WORKDIR /root
ENV PATH="/root/spack/bin:$PATH" SPACK_COLOR=always
# Setup spack and its deps
RUN apk add gcc g++ gfortran make file tar curl python3 patch unzip gnupg git xz python3-dev py3-pip linux-headers && \
pip install clingo
@haampie
haampie / Makefile
Created January 25, 2022 23:53
runtime linker
View Makefile
all: exef1 exef2 exef3
EI_OSABI:=7
EI_ABIVERSION:=8
EI_PAD:=9
libf1.so:
echo 'int f(){ return 1; }' | $(CC) -o $@ -shared -Wl,-soname,$@ -x c -
printf '\x0B' | dd of=$@ bs=1 seek=$(EI_OSABI) count=1 conv=notrunc status=none
@haampie
haampie / hack-spack-wrapper.diff
Last active April 16, 2021 15:48
Spack force release mode
View hack-spack-wrapper.diff
diff --git a/lib/spack/env/cc b/lib/spack/env/cc
index 4d8c4644cb..3c4dcb35a7 100755
--- a/lib/spack/env/cc
+++ b/lib/spack/env/cc
@@ -384,6 +384,13 @@ while [ $# -ne 0 ]; do
other_args+=("$1")
fi
;;
+ -O0,-O1,-O2,-O3,-Os,-Ofast,-O)
+ # Always use -O3
@haampie
haampie / harmen_5x8.s
Last active February 1, 2021 23:19
Tiny Transpose {5,6,7,8} x 8
View harmen_5x8.s
vmovups ymm0, ymmword ptr [rsi]
vmovups ymm1, ymmword ptr [rsi + 32]
vmovups ymm2, ymmword ptr [rsi + 64]
vmovups ymm6, ymmword ptr [rsi + 96]
vmovups ymm7, ymmword ptr [rsi + 128]
movabs rcx, offset .rodata.cst32
mov rax, rdi
vmovaps ymm10, ymmword ptr [rcx]
vperm2f128 ymm3, ymm0, ymm1, 33 # ymm3 = ymm0[2,3],ymm1[0,1]
vperm2f128 ymm5, ymm1, ymm2, 33 # ymm5 = ymm1[2,3],ymm2[0,1]
@haampie
haampie / julia.jl
Created July 30, 2020 13:43
expression templates
View julia.jl
using LinearAlgebra, LoopVectorization
function error_norm(u::AbstractArray{T}, v::AbstractArray{T}) where T
result = T(0)
@avx for i = eachindex(u)
result += (u[i] - v[i])^2
end
return sqrt(result)
@haampie
haampie / fast_transpose.jl
Last active May 23, 2020 10:04
fast_transpose.jl
View fast_transpose.jl
using SIMDPirates
canonicalize(A) = A
canonicalize(A::Union{<:SubArray}) = canonicalize(parent(A))
function version_1!(B::AbstractMatrix{Float64}, A::AbstractMatrix{Float64})
m, n = size(A)
Ac = canonicalize(A)
@haampie
haampie / _tri_to_diag_2.jl
Last active May 11, 2020 23:11
tri_to_diag_2.jl
View _tri_to_diag_2.jl
using LinearAlgebra: givensAlgorithm, SymTridiagonal, I, Diagonal
using Base: @propagate_inbounds
import LinearAlgebra: lmul!, rmul!
import Base: Matrix
@propagate_inbounds is_offdiagonal_small(H::SymTridiagonal{T}, i::Int, tol = eps(real(T))) where {T} =
abs(H.ev[i]) ≤ tol*(abs(H.dv[i]) + abs(H.dv[i+1]))
abstract type SmallRotation end
@haampie
haampie / tri_to_diag.jl
Last active May 11, 2020 22:47
tri_to_diag.jl
View tri_to_diag.jl
using LinearAlgebra: givensAlgorithm, SymTridiagonal, I, Diagonal
using Base: @propagate_inbounds
import LinearAlgebra: lmul!, rmul!
import Base: Matrix
@propagate_inbounds is_offdiagonal_small(H::SymTridiagonal{T}, i::Int, tol = eps(real(T))) where {T} =
abs(H.ev[i]) ≤ tol*(abs(H.dv[i]) + abs(H.dv[i+1]))
abstract type SmallRotation end
@haampie
haampie / givens.jl
Created May 10, 2020 19:10
givens.jl
View givens.jl
using SIMD
using BenchmarkTools
using Test
struct Rot{T}
c::T
s::T
end
mul(G::Rot, a, b) = (G.c * a + G.s * b, -G.s * a + G.c * b)
@haampie
haampie / sort_cache_by.jl
Created April 14, 2020 11:05
sort_cache_by.jl
View sort_cache_by.jl
import Base: getindex, setindex, length, isless
struct SortPair{A,B}
x::A
mapped::B
end
struct SortCache{A,B,AV,BV} <: AbstractVector{SortPair{A,B}}
xs::AV
mapped::BV