Skip to content

Instantly share code, notes, and snippets.

View carstenbauer's full-sized avatar
🐰
Deep in the rabbit hole

Carsten Bauer carstenbauer

🐰
Deep in the rabbit hole
View GitHub Profile
@carstenbauer
carstenbauer / matvec_parallel.jl
Last active March 20, 2024 10:33
parallel matrix-vector multiplication
using Test: @test
using Base.Threads: nthreads
using BenchmarkTools: @btime
using OhMyThreads: @tasks, tmap!, tmapreduce, chunks
using ThreadPinning
pinthreads(:cores)
# naive, math implementation
function matvec_row!(y, A, x)
fill!(y, zero(length(y)))
# Equations:
# ∂P/∂t = -k(∂Vx/∂x + ∂Vy/∂y)
# ∂Vx/∂t = -1/ρ ∂P/∂x
# ∂Vy/∂t = -1/ρ ∂P/∂y
# => Update rules:
# Vx = Vx - Δt/ρ ΔP/Δx
# Vy = Vy - Δt/ρ ΔP/Δy
# P = P - Δt*k (Δ(Vx)/Δx + Δ(Vy)/Δy)
@carstenbauer
carstenbauer / pi_error.jl
Last active March 21, 2023 16:52
Monte Carlo Pi Error
function run_experiment(N; saverate=1)
hits = 0
dist = Uniform(-1,1)
is = Int64[]
pis = Float64[]
for i in 1:N
x, y = rand(dist), rand(dist)
# speed-up computation by omiting sqrt
if (x^2 + y^2) <= 1
@carstenbauer
carstenbauer / makie.jl
Last active March 21, 2023 11:40
Makie Animation Pi
function pi_animation()
N = 1000
Random.seed!(123)
# setup figure
f = Figure(resolution = (1000,400))
dart_fig = f[1,1]
dart_ax = Axis(dart_fig, aspect=1, title="Monte-Carlo-Simulation")
approx_fig = f[1,2]
approx_ax = Axis(approx_fig, title="Quality of Approximation")
julia> function vector_dot(B, C)
a = zero(eltype(B))
for i in eachindex(B,C)
@inbounds a += B[i] * C[i]
end
return a
end
vector_dot (generic function with 1 method)
julia> function vector_dot_macro(B, C)
using DelimitedFiles
using LinearAlgebra
using Test
function readqcd(fname::AbstractString; verify=true)
open(fname, "r") do f
header_str = readuntil(f, "END_HEADER\n")
header_mat = readdlm(IOBuffer(header_str), '=')
header = Dict(strip(header_mat[i, 1]) => header_mat[i, 2] for i in 2:size(header_mat, 1))
@carstenbauer
carstenbauer / nvlink_bench.jl
Last active February 8, 2022 20:53
Nvidia NVLink Bandwidth Measurement with Julia
@carstenbauer
carstenbauer / Manifest.toml
Created January 27, 2022 09:48
Attempt to measure core-to-core latency in Julia
# This file is machine-generated - editing it directly is not advised
julia_version = "1.7.1"
manifest_format = "2.0"
[[deps.ArgTools]]
uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
[[deps.Artifacts]]
uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
{
"cells": [
{
"cell_type": "markdown",
"id": "202a91a0-8ac9-4d47-a628-85786980cbb2",
"metadata": {},
"source": [
"# CPU\n",
"\n",
"## Single-threaded sparse mat-vec product"
{
"cells": [
{
"cell_type": "markdown",
"id": "202a91a0-8ac9-4d47-a628-85786980cbb2",
"metadata": {},
"source": [
"# CPU\n",
"\n",
"## Single-threaded sparse mat-vec product"