with 14*195000000 possible seeds
This number still seems to be way bigger than actual possible number of seeds. Are you sure you are only checking the valid ones?
There is a 4 byte checksum in them and although the collision chance of 4 byte out of SHA256 hash is higher but I don't think it is high enough to produce that many variations.
(I'll try to test it in the afternoon when I get back home).Edit: I ended up testing it anyways. With 12 words it seems that about 5% of the combinations are correct. The rest should be rejected. So with your words there should only be around 40 million seeds to check not that huge number you posted.
Also:
I get a speed of around 4kP/s,
Two questions, is it the number of seeds you check per second or is it number of keys that you derive from those seeds per second? If it is the first one then it is very slow, I am getting 16k/s with my c# managed code using only 1 CPU core (corei3)! You should be able to get around 100k at least if you run it on parallel and with a stronger CPU.
I am sorry, I said it was 12 words for simplification. I actually have 14 words (not sure which 2 does not belong there), that's why the amount of possible seeds.
With only 12 words it would not take long at all. As it is a 4 byte checksum every 1/16 word should fit, so it is always 6.25% chance from my understanding. I've already sorted them out prehand.
I am running 24 cores (3x i7) for 4kP/s, but I am checking only valid seeds in the program, checking random seeds give me speeds of up to 100kP/s yes! (Checking valid seeds take about 15x more time)
The amount of possible seeds to check should always be (n!/(n-r)!)*0.0625 where n is the amount of words choosing from and r is the seed-word-length