1. A method for computing a virtual address for a thread group, comprising: receiving components of a complete virtual address associated with a thread group, the components including a thread group address and a thread group identifier; determining that a cache miss occurs indicating that a cache line corresponding to the components is not allocated in a cache; computing, after determining that the cache miss occurred, the complete virtual address using the components; and accessing a location in a memory associated with the complete virtual address to load or store data.