Тогда мне сразу пришло в голову, что CPython интерпретирует и выполняет «на лету», поэтому я предполагаю, что он не может себе этого позволить. проводить эти функции компилятора, поскольку время компиляции для него эквивалентно времени выполнения, поэтому я провел игрушечный эксперимент ниже:
Код: Выделить всё
import time, random
n = 512
A = [[random.random() for _ in range(n)] for _ in range(n)]
B = [[random.random() for _ in range(n)] for _ in range(n)]
C = [[0] * n for _ in range(n)]
def matMul( A, B, C ):
""" C = A .* B """
for i in range(0, n - 4, 4):
for j in range(0, n - 4, 4):
for k in range(0, n - 4, 4):
C[i][j] = A[i][k] + B[k][j]
C[i + 1][j + 1] = A[i + 1][k + 1] + B[k + 1][j + 1]
C[i + 2][j + 2] = A[i + 2][k + 2] + B[k + 2][j + 2]
C[i + 3][j + 3] = A[i + 3][k + 3] + B[k + 3][j + 3]
C[i + 4][j + 4] = A[i + 4][k + 4] + B[k + 4][j + 4]
# return C
start = time.time()
matMul( A, B, C )
end = time.time()
print( f"Elapsed {end - start}" )
Значит ли это, что нужно обратить внимание и вручную реализовать эти методы выбора при написании кода Python? или Python предлагает оптимизацию при каких-либо специальных настройках?
Подробнее здесь: https://stackoverflow.com/questions/792 ... folding-et