Skip to content

Instantly share code, notes, and snippets.

@serge-sans-paille
serge-sans-paille / argminmax.cpp
Created December 19, 2018 07:40
argmin + xsimd
using vT = xsimd::simd_type<T>;
using iT = xsimd::as_integer_t<T>;
static const size_t vN = vT::size;
const long n = elts.size();
if(n >= std::numeric_limits<iT>::max()) {
return _argminmax_seq<Op>(elts, minmax_elts);
}
auto viter = types::vectorizer_nobroadcast::vbegin(elts),
vend = types::vectorizer_nobroadcast::vend(elts);
@serge-sans-paille
serge-sans-paille / jit.py
Created November 2, 2018 07:01
Pythran-based dummy JIT compiler
import pythran
import inspect
import hashlib
import itertools
import imp
import re
def typename(obj):
# FIXME: only works for some types
return type(obj).__name__
@serge-sans-paille
serge-sans-paille / build.sh
Created December 3, 2017 11:59
pythran conda recipe
#!/bin/bash
sed -i -e 's,CC=,CC=/opt/anaconda1anaconda2anaconda3/bin/gcc-4.9,' -e 's,CXX=,CXX=/opt/anaconda1anaconda2anaconda3/bin/g++-4.9,' -e 's,library_dirs=,library_dirs=/opt/anaconda1anaconda2anaconda3/lib ,' -e 's,include_dirs=,include_dirs=/opt/anaconda1anaconda2anaconda3/include ,' -e 's|ldflags=|ldflags=-Wl,-rpath /opt/anaconda1anaconda2anaconda3/lib64 |' pythran/pythran-linux2.cfg
sed -i -e 's,CC=,CC=/opt/anaconda1anaconda2anaconda3/bin/gcc-4.9,' -e 's,CXX=,CXX=/opt/anaconda1anaconda2anaconda3/bin/g++-4.9,' -e 's,library_dirs=,library_dirs=/opt/anaconda1anaconda2anaconda3/lib ,' -e 's,include_dirs=,include_dirs=/opt/anaconda1anaconda2anaconda3/include ,' -e 's|ldflags=|ldflags=-Wl,-rpath /opt/anaconda1anaconda2anaconda3/lib64 |' pythran/pythran-linux.cfg
$PYTHON setup.py install
#include <string>
#include <cassert>
#include <array>
#include <numeric>
template<std::size_t N, char Seed = 42>
class constexpr_str {
std::array<char, N> data_;
template<std::size_t... Is>
#include <cstdint>
#include <type_traits>
template<class T>
constexpr std::intptr_t index_of() {
return 1;
}
template<class T, class T0, class... Ts>
constexpr std::intptr_t index_of() {
return std::is_same<T, T0>::value ? 0 : (1 + index_of<T, Ts...>());
if(GlobalVariable* GA = M.getGlobalVariable("llvm.global.annotations")) {
// the first operand holds the metadata
for (Value *AOp : GA->operands()) {
// all metadata are stored in an array of struct of metadata
if (ConstantArray *CA = dyn_cast<ConstantArray>(AOp)) {
// so iterate over the operands
for (Value *CAOp : CA->operands()) {
// get the struct, which holds a pointer to the annotated function
// as first field, and the annotation as second field
if (ConstantStruct *CS = dyn_cast<ConstantStruct>(CAOp)) {
import matplotlib.pyplot as plt
import timeit
import hashlib
import gc
import numpy as np
import numexpr as ne
from a import a as pythran
from numba import vectorize, jit
from pythran import compile_pythrancode
@serge-sans-paille
serge-sans-paille / interp.cpp
Created February 23, 2016 10:45
LLVM JIT Smaple
// compile with clang++-3.7 `llvm-config-3.7 --cxxflags --ldflags --libs` -rdynamic` interp.cpp -o interp
#include <iostream>
#include <string>
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/Support/MemoryBuffer.h"
#include <llvm/ExecutionEngine/GenericValue.h>
#include <llvm/ExecutionEngine/Interpreter.h>
#include <llvm/ExecutionEngine/MCJIT.h>
@serge-sans-paille
serge-sans-paille / functional_style.py
Created September 23, 2014 13:15
Python - functional style!
import ast
import sys
import shutil
import unparse
import unittest
import doctest
import StringIO
import os
from copy import deepcopy
diff -cr Python-2.7.6/Include/opcode.h Python-2.7.6-patched/Include/opcode.h
*** Python-2.7.6/Include/opcode.h 2013-11-10 08:36:39.000000000 +0100
--- Python-2.7.6-patched/Include/opcode.h 2014-05-16 16:14:42.885966107 +0200
***************
*** 149,154 ****
--- 149,155 ----
#define SET_ADD 146
#define MAP_ADD 147
+ #define LOAD_FAST_ZERO_LOAD_CONST 148