Software-Based Cache Coherence with Hardware-Assisted Selective Self-Invalidations Using Bloom Filters