Both hash functions and PRNGs produce deterministic yet apparently unpredictable outputs. However, they are designed with different goals in mind.
- Many PRNGs are optimized for good statistical behavior when a single generator is advanced sequentially, but they can exhibit noticeable artifacts when many streams are run in parallel with related seeds.
- Hash functions are specifically designed to handle related input (the avalanche effect)
For GPU applications, it is thus useful to hash the input seeds first before feeding them to a PRNG. Alternatively, one can just use hash functions instead of traditional PRNG