Update: a later version with improved get_properties(): $ NUM_THREADS=6 ./llil4vec2 big?.txt big?.txt big?.txt big?.txt big?.txt big?.txt >f4vec.tmp llil4vec2 (fixed string length=6) start use OpenMP use boost sort get properties time : 4.392 secs sort properties time : 4.706 secs vector reduce time : 0.225 secs vector stable sort time : 0.491 secs write stdout time : 0.766 secs total time : 10.593 secs $ NUM_THREADS=6 ./llil4map big?.txt big?.txt big?.txt big?.txt big?.txt big?.txt >f4map.tmp llil4map start use phmap::parallel_flat_hash_map use OpenMP use boost sort get properties time : 10.6884 secs finish merging time : 2.11571 secs vector stable sort time : 1.83454 secs write stdout time : 2.55906 secs total time : 17.198 secs $ diff f4map.tmp f4vec.tmp