added caching mechanism
added benchmark.py