Last Update: May 13, 2019
Offline Version
The Jax developers optimized a differential equation benchmark in this issue which used DiffEqFlux.jl as a performance baseline. The Julia code from there was updated to include some standard performance tricks and is the benchmark code here. Thus both codes have been optimized by the library developers.
# Electromagnetic simulation at varying timescales - simulation code to make this animation: | |
# https://twitter.com/bencbartlett/status/1369396941730312193 | |
# | |
# Animation idea was inspired by u/cenit997's (Twitter: @__cenit) Reddit post: | |
# https://www.reddit.com/r/Python/comments/hxmhai/a_simulation_of_how_an_incoherent_light_source/ | |
#--- | |
using LinearAlgebra, Base.Threads, BenchmarkTools, LoopVectorization, CSV, DataFrames, Printf, Plots |
preface: Posting these online since it sounds like these notes are somewhat interesting based on a few folks I've shared with. These are semi-rough notes that I basically wrote for myself in case I ever needed to revisit this fix, so keep that in mind.
I recently bought an LG ULTRAGEAR monitor secondhand off of a coworker. I really love it and it's been great so far, but I ran into some minor issues with it in Linux. It works great on both Mac and Windows, but on Linux it displays just a black panel until I use the second monitor to go in and reduce the refresh rate down to 60 Hz.
This has worked decent so far but there's some issues:
- It doesn't work while linux is booting up. The motherboards boot sequence is visible just fine, but as soon as control is handed over to Linux and I'd normally see a splash screen while I'm waiting for my login window, I see nothing.
- It doesn't work on the login screen. This would be fine if login consistently worked on my second screen, but I need to manually switch
#Helpers: | |
"Given some IR generates a MethodInstance suitable for passing to infer_ir!, if you don't already have one with the right argument types" | |
function get_toplevel_mi_from_ir(ir, _module::Module) | |
mi = ccall(:jl_new_method_instance_uninit, Ref{Core.MethodInstance}, ()); | |
mi.specTypes = Tuple{ir.argtypes...} | |
mi.def = _module | |
return mi | |
end | |
"run type inference and constant propagation on the ir" |
# Add this file to ~/.julia/config/ (mkdir config if necessary) | |
try | |
using Revise | |
catch e | |
@warn "Error initializing Revise: trying install" exception=(e, catch_backtrace()) | |
using Pkg | |
Pkg.add("Revise") | |
end |
@recipe(Barplot3D) do scene | |
Attributes( | |
color = theme(scene, :markercolor), | |
colormap = theme(scene, :colormap), | |
) | |
end | |
Makie.conversion_trait(::Type{<:Barplot3D}) = Makie.DiscreteSurface() | |
function Makie.plot!(p::Barplot3D) |
Since writing out ROOT files is currently not possible with UnROOT
, one can write out Arrow files
directly from an UnROOT.LazyTree
object which can be read back in julia.
With some consideration of the chunking, this won't use much memory.
using UnROOT
using Arrow
using Tables
treename = "Events"
filename = "18BCCE71-15B8-194B-8738-EC993C8DD3BD.root"
import time | |
import numpy as np | |
import pandas as pd | |
import uproot | |
from yahist import Hist1D, Hist2D | |
from pandas.core.base import PandasObject | |
from cachetools import cached, LRUCache | |
from cachetools.keys import hashkey | |
def myhasher(*args, **kwargs): |