Try with GNU parallel, which includes an example of how to use it with grep:
grep -rgreps recursively through directories. On multicore CPUs GNU
parallelcan often speed this up.find . -type f | parallel -k -j150% -n 1000 -m grep -H -n STRING {}This will run 1.5 job per core, and give 1000 arguments to
grep.
For big files, it can split it the input in several chunks with the --pipe and --block arguments:
parallel --pipe --block 2M grep foo < bigfile
You could also run it on several different machines through SSH (ssh-agent needed to avoid passwords):
parallel --pipe --sshlogin server.example.com,server2.example.net grep foo < bigfile