.
are limited by the hardware spec itself. The main catch is that the number of threads is adjustable, subject to shared memory/register constraint per thread. So if your thread needs to perform memory heavy workload, you simply cannot afford to have too many threads, thus the maximal GPU utilization