about 2x speed up from using multiprocessing