First you should understand that fingerprint matching/comparison per second means amount of one-to-one fingerprint template comparisons per second.

 

For example:
Let's say we have fixed matching speed to 1 comparison per second.
If you would have 10 users registered in database and each one of them with only one finger and you would do FindUser with probe user also with only 1 fingerprint template, you would have to wait 10 seconds because 10 comparisons were needed.
But if each one of the registered users would have 5 fingerprints probe user with 5 fingerprints, overall comparisons count would be 5 (probe user fingerprint templates) x 10(users in database) x 5(database user fingerprint templates), what is 250 comparisons, so it would take 250 seconds.

 

Identification has constant initialization time (IDKit's documentation in chapter "1.4 Identification Speed"). In order to reach similar measurement results as we achieved you need to perform the test on a larger database. About 1-2GB user templates per CPU core is recommended to measure the full speed.
Maximum speed for IDKit SDK was achieved when IdentificationSpeed was set to 4 (Express ID AFIS with speed 7) and MaxRotation to 20.
You should have candidates count (CFG_BEST_CANDIDATES_COUNT) set to at least 5 (or 1 and incrementally increase in find loop until a user with satisfying verification score is found), because after selecting best candidates using fast scan, the identification algorithm would have to perform verification (1:1 matching) of each candidate with the probe user template and this would considerably affect the results.

 

You can see more details in this topic Identification time grows non-linearly with database size of our FAQ.