use OpenMP for multithreading