These are chat archives for iambernie/olisms

27th
Jul 2014
tylocus
@tylocus
Jul 27 2014 13:11
Holy shit die is mooi en bovendien helder! Petje af :) Dus we hebben nu ook helical boundary conditions?
iambernie
@iambernie
Jul 27 2014 14:26
Ja, die helical boundary conditions zijn sneller, als je het boek van barkema bij de hand hebt, moet je even paragraaf 13.1.1 lezen. Daar staat uitgelegd waarom.
iambernie
@iambernie
Jul 27 2014 14:33
Ben nu een klein scriptje aan het schrijven om te kijken welke neighbor functie het snelst is. Hier reken ik 1e6 keer de nbrs uit:

Benchmark the calculation of neighbor sites:

Helical BC: 919.3246364593506 milliseconds
periodic_a: 1493.1855201721191 milliseconds
periodic_b: 1180.635929107666 milliseconds
neighbors: 1634.8400115966797 milliseconds

Maar toen bedacht ik me dat je eigenlijk de nbrs maar 1 keer hoeft uit te rekenen, dus als ik de nbrs op sla in een tabel:

Helical neighbor table
{0: (1, 15, 4, 12),
 1: (2, 0, 5, 13),
 2: (3, 1, 6, 14),
 3: (4, 2, 7, 15),
 4: (5, 3, 8, 0),
 5: (6, 4, 9, 1),
 6: (7, 5, 10, 2),
 7: (8, 6, 11, 3),
 8: (9, 7, 12, 4),
 9: (10, 8, 13, 5),
 10: (11, 9, 14, 6),
 11: (12, 10, 15, 7),
 12: (13, 11, 0, 8),
 13: (14, 12, 1, 9),
 14: (15, 13, 2, 10),
 15: (0, 14, 3, 11)}

Periodic neighbor table
{(0, 0): ((1, 0), (3, 0), (0, 1), (0, 3)),
 (0, 1): ((1, 1), (3, 1), (0, 2), (0, 0)),
 (0, 2): ((1, 2), (3, 2), (0, 3), (0, 1)),
 (0, 3): ((1, 3), (3, 3), (0, 0), (0, 2)),
 (1, 0): ((2, 0), (0, 0), (1, 1), (1, 3)),
 (1, 1): ((2, 1), (0, 1), (1, 2), (1, 0)),
 (1, 2): ((2, 2), (0, 2), (1, 3), (1, 1)),
 (1, 3): ((2, 3), (0, 3), (1, 0), (1, 2)),
 (2, 0): ((3, 0), (1, 0), (2, 1), (2, 3)),
 (2, 1): ((3, 1), (1, 1), (2, 2), (2, 0)),
 (2, 2): ((3, 2), (1, 2), (2, 3), (2, 1)),
 (2, 3): ((3, 3), (1, 3), (2, 0), (2, 2)),
 (3, 0): ((0, 0), (2, 0), (3, 1), (3, 3)),
 (3, 1): ((0, 1), (2, 1), (3, 2), (3, 0)),
 (3, 2): ((0, 2), (2, 2), (3, 3), (3, 1)),
 (3, 3): ((0, 3), (2, 3), (3, 0), (3, 2))}

Dan vind ik deze tijden:

Benchmark the access time of neighbor sites from tables:
Helical BC using tables: 118.75295639038086 milliseconds
Periodic BC using tables: 208.4481716156006 milliseconds
iambernie
@iambernie
Jul 27 2014 14:40
(ook 1e6 iteraties)
tylocus
@tylocus
Jul 27 2014 15:01
Holy shit, dat is een orde grootte sneller!
iambernie
@iambernie
Jul 27 2014 15:27

Ja, ik ga het zo verwerken in ising.py, maar het waarschijnlijk weinig uitmaken:
zie: http://home.strw.leidenuniv.nl/~lau/isingprofile.png

Volgens mij is deze regel traag:

d_energy = np.int8(-2)*(-g[site] * (g[below] + g[above] +g[right] +g[left]))