Thanks a lot for this, cool to see that there are so many possibilities to solve this problem!
Eta_Cs solution seems to be quite a bit faster for large tensors (shape [10000,2]):
N=10000
a = torch.rand([N,2])
b = torch.rand([N,2])

from timeit import default_timer as timer
start = timer()
idx = torch.arange(N).unsqueeze(1).expand(-1, 2).reshape(-1)
for _ in range(500):
    ret = a.view(-1, 1, 1) == b

    res = ret[torch.arange(ret.size(0)), idx]
end = timer()
print(end - start)

start2 = timer()
for _ in range(500):
    res = a.repeat_interleave(2, dim=1).reshape(-1, 2) == b.repeat_interleave(2, dim=0)
end2 = timer()
print(end2 - start2)

121.2189056
0.11425909999999817