-
Notifications
You must be signed in to change notification settings - Fork 41
Description
See this code:
https://github.com/Intel-HLS/GKL/blob/51580c453003bc60e082fa8aaafc97457e0f6057/src/main/native/pairhmm/avx-pairhmm-template.h#L201
M_t_1_y should not be an exact copy of M_t_1, but instead it should be a copy prior to the vector shift. That means it should be initialized to VEC_SET1_VAL(zero) at the start of the stripe.
Background:
I have ported this code to Rust (https://github.com/philipc/gkl-rs), and I have been investigating why the values differ from the scalar implementation. In addition to this bug, there is also a difference due to use of approximations for the match-to-match probability. After addressing both of these, the Rust implementation produces values that very closely match the expected results in https://github.com/Intel-HLS/GKL/blob/master/src/test/resources/pairhmm-testdata.txt