Я управляю симуляцией Монте-Карло модели Изинга. В целом код довольно эффективен. Функция ниже вызывается около 10 миллионов раз:
function stepFlip(sim::Ising)
i = rand(1:sim.n)
j = rand(1:sim.n)
dE = dEnergy(i, j, sim)
if dE < 0 || rand() < exp(-dE/sim.T)
sim.spins[i,j] *= -1
end
end
Есть ли способ оптимизировать генерацию случайных чисел, что занимает большую часть времени выполнения? Я знаю, что было бы быстрее предварительно сгенерировать их все и просто прочитать их, как я вызываю stepFlip, но стоит ли выделять всю эту память, если моя цель - производительность?