Я думаю, что все, что вам нужно сделать, это постоянно обращаться к памяти постоянно увеличивающимися частями (для определения размера кэша), и я думаю, что вы можете варьировать шаги для определения ассоциативности.
Таким образом, вы начинаете пытаться получить доступ к очень коротким сегментам памяти и удваиваете размер, пока доступ не замедлится. Каждый раз, когда доступ замедляется, вы определяете размер другого уровня кэша.