Number of sets$=\dfrac{\text{cache size}}{\text{sizeof a set}}$
Size of a set $=\text{blocksize}\times \text{no. of blocks in a set}$
$= 8 \text{ words}\times 4\text{ (4-way set-associative)}$
$= 8\times 4\times 4\text{ (since a word is 32 bits = 4 bytes)}$
$= 128\text{ bytes}.$
So, number of sets $=\dfrac{16\ KB}{(128\ B)}=128$
Now, we can divide the physical address space equally between these $128$ sets.
So, the number of bytes each set can access
$=\dfrac{4\ GB}{128}$
$={32\ MB}$
$=\dfrac{32}{4}=8\text{ M words}=1 \text{ M blocks. ($2^{20}$ blocks)}$
So, we need $20$ tag bits to identify these $2^{20}$ blocks.