use c function pointer
update benchmark