Não sei como explicar alguns dos resultados de desempenho do meu código de multiplicação de matrizes paralelizadas
Estou executando esse código no OpenMP para multiplicação de matrizes e medi seus resultados:
#pragma omp for schedule(static)
for (int j = 0; j < COLUMNS; j++)
for (int k = 0; k < COLUMNS; k++)
for (int i = 0; i < ROWS; i++)
matrix_r[i][j] += matrix_a[i][k] * matrix_b[k][j];
Existem diferentes versões do código com base em onde eu coloquei o#pragma omp
diretiva - antes do loop j, do loop k ou do loop i. Além disso, para cada uma dessas variantes, executei versões diferentes para agendamento estático padrão, agendamento estático com os fragmentos 1 e 10 e agendamento dinâmico com os mesmos fragmentos. Também medi o número de acessos ao controlador de domínio, erros de controlador de domínio, relógios da CPU, instruções desativadas e outros indicadores de desempenho no CodeXL. Aqui estão os resultados para a matriz de tamanho 1000x1000 no AMD Phenom I X4 945:
Resultados das medições de desempenho
Ondemultiply_matrices_1_dynamic_1
é uma função com#pragma omp
antes do primeiro loop e agendamento dinâmico com o chunk 1, etc. Aqui estão algumas coisas que eu não entendo muito sobre os resultados e gostaria de receber ajuda:
Além disso, estou confuso sobre a relação entre TLB e cache. Quando o DTLB é usado especificamente? O documento do meu professor diz que todo acesso ao controlador de domínio é uma solicitação DTLB, mas eu não entendo como isso funciona - o número de falhas no TLB é geralmente maior que o número de acessos ao controlador de domínio. Como computo a taxa de perda de TLB? Meu professor diz que é falta de TBL / acesso à CD. Ele também diz que eu posso calcular a localidade temporal pela taxa de acertos do cache e a localidade espacial pela taxa de acertos do TLB. Como isso funciona exatamente?