Provavelmente isso tem a ver com conflitos no cache L2.
As falhas de cache no matice1 não são o problema porque são acessadas sequencialmente. No entanto, para o matice2, se uma coluna completa couber em L2 (ou seja, quando você acessa o matice2 [0, 0], matice2 [1, 0], matice2 [2, 0] ... etc, nada é despejado), não há problema com o cache também falha com o matice2.
Agora, para aprofundar o funcionamento dos caches, se o endereço de bytes da sua variável for X, a linha de cache seria (X >> 6) e (L - 1). Onde L é o número total de linhas de cache em seu cache. L é sempre a potência de 2. Os seis vêm do fato de que 2 ^ 6 == 64 bytes é o tamanho padrão da linha de cache.
Agora, o que isso significa? Bem, isso significa que se eu tiver o endereço X e o endereço Y e (X >> 6) - (Y >> 6) for divisível por L (ou seja, uma grande potência de 2), eles serão armazenados no mesmo cache.
Agora, voltando ao seu problema, qual é a diferença entre 2048 e 2049,
quando 2048 for do seu tamanho:
se você usar & matice2 [x, k] e & matice2 [y, k], a diferença (& matice2 [x, k] >> 6) - (& matice2 [y, k] >> 6) será divisível até 2048 * 4 (tamanho de flutuador). Portanto, uma grande potência de 2.
Assim, dependendo do tamanho do seu L2, você terá muitos conflitos de linha de cache e utilizará apenas uma pequena parte do seu L2 para armazenar uma coluna, assim, na verdade, você não poderá armazenar a coluna completa no cache, obtendo um desempenho ruim. .
Quando o tamanho é 2049, a diferença é 2049 * 4, que não é a potência 2, portanto, você terá menos conflitos e sua coluna caberá com segurança no cache.
Agora, para testar essa teoria, há algumas coisas que você pode fazer:
Aloque sua matriz matice2 como esta matice2 [razmor, 4096] e execute com razmor = 1024, 1025 ou qualquer tamanho, e você verá um desempenho muito ruim comparado ao que tinha antes. Isso ocorre porque você alinha com força todas as colunas para entrar em conflito.
Em seguida, tente o matice2 [razmor, 4097] e execute-o com qualquer tamanho e você verá um desempenho muito melhor.