jadot-bp / fastsum_gpu

Repository for the "FAST" FASTSUM Analysis Software Tools prepared during the 2024 DiRAC GPU Workshop.
1 stars 0 forks source link

Generic Wilson Loop/Line #1

Open RJaBi opened 6 months ago

RJaBi commented 6 months ago

My thought is that transitioning to takes a list of positions, and a list of directions and then multiplies those together is likely to make doing arbitrary wilson loops easier. I.e. feed the function the path and then it goes and calculates.

One would pre-calculate the path, and then i.e. each thread on a GPU/CPU would calculate the wilson line along the path.

This would also be useful for staples if we wanted those for some reason.

Two main requirements:

To do a Wilson Loop, one would probably call a Wilson Line function twice on forward and backward paths (conjugate at end).

Do either of you have any thoughts on this approach?

RJaBi commented 6 months ago

Some of this is now implemented in the branch ryan_gauge.

Specifically, I realised that I don't need to feed in the a vector of pre-calculated positions, so it just feeds in two sets of paths, a forward and a backward path.

// Only forward paths/links are printed. Obviously the calculation does the backwards as well.
Path 1: 
x, y, z, mu, 0 0 0 0 1
link 1: 
x, y, z, mu, 0 1 0 0 2
Path 2: 
x, y, z, mu, 0 0 0 0 1
link 1: 
x, y, z, mu, 0 1 0 0 3
Path 3: 
x, y, z, mu, 0 0 0 0 2
link 1: 
x, y, z, mu, 0 0 1 0 3
Path 4: 
x, y, z, mu, 0 0 0 0 0
link 1: 
x, y, z, mu, 1 0 0 0 1
Path 5: 
x, y, z, mu, 0 0 0 0 0
link 1: 
x, y, z, mu, 1 0 0 0 2
Path 6: 
x, y, z, mu, 0 0 0 0 0
link 1: 
x, y, z, mu, 1 0 0 0 3

 alt plaq calc 10.331249 
Type:       sumReTrP:   nP: Avg:
whole       10.331249   6   1.721875
spatial     3.430829    3   1.143610
temporal    6.900420    3   2.300140
Total execution time: 0.000059s

So you can see that the summed plaquette value in alt plaq calc matches the one in whole

There is now a makefile in the main directory. This makes the driver program bin/project.c. For the generic wilson loop above, I added additional functionality to src/wilsonLoops.c

RJaBi commented 6 months ago

I got generic on-axis loops of size RxT working in #05f26e714dcff46e4ae189acafae935658880246

For off-axis, James Biddle's Phd Thesis: https://digital.library.adelaide.edu.au/dspace/handle/2440/139226 has an 'algorithm'. I don't intend on doing this at this point.

With this latest commit, it would now be possible to do i.e. the static quark potential if one wrote a driver program. Hence we should have enough 'problem' to throw at GPU.

jadot-bp commented 6 months ago

This is great. I will pull the latest copy for testing.

I suggest that we merge this into the main branch. See the pull request raised in #3.

RJaBi commented 5 months ago

I am concerned that the code is wrong. I have not yet tried to determine why. Below I show outputs for the Gen2l_32x32n954.C gaugefield for loops of different (spatial) sizes. The 1x1 value is correct however for larger values it becomes negative, which I don't think it should do?

The path length in 1x1 is 2 for 7041404.350977 
The path length in 2x1 is 3 for 4965128.693432 
The path length in 3x1 is 4 for 3474552.212852 
The path length in 4x1 is 5 for 2429428.223726 
The path length in 5x1 is 6 for 1698631.647353 
The path length in 6x1 is 7 for 1187518.969600 
The path length in 7x1 is 8 for 830423.841434 
The path length in 8x1 is 9 for 580124.167252 
The path length in 9x1 is 10 for 405875.185754 
The path length in 10x1 is 11 for 283102.040386
The path length in 11x1 is 12 for 197049.264610
The path length in 12x1 is 13 for 136595.010094
The path length in 13x1 is 14 for 95317.812246 
The path length in 14x1 is 15 for 66475.951475 
The path length in 15x1 is 16 for 46629.836538 
The path length in 16x1 is 17 for 33168.696719 
The path length in 17x1 is 18 for 23339.349927 
The path length in 18x1 is 19 for 16171.752501 
The path length in 19x1 is 20 for 10978.823137 
The path length in 20x1 is 21 for 7212.705990 
The path length in 21x1 is 22 for 3933.995902 
The path length in 22x1 is 23 for 1604.214373 
The path length in 23x1 is 24 for 888.926611 
The path length in 24x1 is 25 for -922.572816 
The path length in 25x1 is 26 for -2401.802087 
The path length in 26x1 is 27 for -2205.942842 
The path length in 27x1 is 28 for -1756.410139 
The path length in 28x1 is 29 for -1950.350110
jadot-bp commented 5 months ago

Does this issue arise in serial execution?

RJaBi commented 5 months ago

I just tested and the same number is given in serial execution.