ngnrsaa / qflex

Flexible Quantum Circuit Simulator (qFlex) implements an efficient tensor network, CPU-based simulator of large quantum circuits.
Apache License 2.0
97 stars 25 forks source link

Move from GSL CBLAS --> OpenBLAS. #264

Closed s-mandra closed 4 years ago

s-mandra commented 4 years ago

If openBLAS is not present, openBLAS is cloned from its git repository and installed locally.

s-mandra commented 4 years ago

Runtime is greatly improved using OpenBLAS (for Rochester, it's 10x faster!).

With OpenBLAS (single core):

./src/qflex.x -c config/circuits/rochester_53_20_0_pABC.txt     -g config/grid/rochester_53.txt     -o config/ordering/rochester_53.txt     -v 1 -t 1 -m 5GB
Maximum allowed memory: 5 GB
Time spent making contraction ordering: 0.000334773s
Time spent creating 3D grid of tensors from file: 0.013086864s
Time spent allocating scratch space for 2D grid: 0.007309674s
[Mon Jan 27 18:39:02 2020] Memory usage: 265.1 MB (Peak: 265.1 MB)
[Mon Jan 27 18:39:03 2020] Memory usage: 408.98 MB (Peak: 408.98 MB)
Time spent creating 2D grid of tensors from 3D one: 1.545219207s
Allocating 2.41 GB for this simulation.
[Mon Jan 27 18:39:04 2020] Memory usage: 2.78 GB (Peak: 2.78 GB)
[Mon Jan 27 18:39:05 2020] Memory usage: 2.78 GB (Peak: 2.78 GB)
Total time: 3.845483581s
[Mon Jan 27 18:39:05 2020] Memory usage: 532.21 MB (Peak: 2.78 GB)
00000000000000000000000000000000000000000000000000000 --> 00000000000000000000000000000000000000000000000000000: 3.35139e-09 9.21908e-09

With GSL (single core):

./src/qflex.x -c config/circuits/rochester_53_20_0_pABC.txt     -g config/grid/rochester_53.txt     -o config/ordering/rochester_53.txt     -v 1 -t 1 -m 5GB
Maximum allowed memory: 5 GB
Time spent making contraction ordering: 0.000315473s
Time spent creating 3D grid of tensors from file: 0.007400086s
Time spent allocating scratch space for 2D grid: 0.003159757s
[Tue Jan 28 08:38:39 2020] Memory usage: 166.08 MB (Peak: 166.08 MB)
[Tue Jan 28 08:38:40 2020] Memory usage: 278.06 MB (Peak: 278.06 MB)
[Tue Jan 28 08:38:41 2020] Memory usage: 381.95 MB (Peak: 381.95 MB)
Time spent creating 2D grid of tensors from 3D one: 3.137210768s
Allocating 2.41 GB for this simulation.
[Tue Jan 28 08:38:42 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:43 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:44 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:45 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:46 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:47 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:48 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:49 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:50 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:51 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:52 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:53 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:54 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:55 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:56 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:57 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:58 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:38:59 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:39:00 2020] Memory usage: 2.74 GB (Peak: 2.74 GB)
[Tue Jan 28 08:39:01 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:02 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:03 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:04 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:05 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:06 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:07 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:08 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:09 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:10 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:11 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:12 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:13 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:14 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:15 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:16 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:17 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:18 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
^[[1;5D[Tue Jan 28 08:39:19 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:20 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:21 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:22 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:23 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:24 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:25 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:26 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:27 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:28 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:29 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:30 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:31 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:32 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:33 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:34 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:35 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:36 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
[Tue Jan 28 08:39:37 2020] Memory usage: 2.75 GB (Peak: 2.75 GB)
Total time: 58.834239515s
[Tue Jan 28 08:39:37 2020] Memory usage: 502.39 MB (Peak: 2.75 GB)
00000000000000000000000000000000000000000000000000000 --> 00000000000000000000000000000000000000000000000000000: 3.35135e-09 9.21903e-09
s-mandra commented 4 years ago

This is great! Do you see any value in maintaining support for GSL, or is OpenBLAS universally better?

@DmitryLyakh suggests that GSL might not be compatible with qFlex Apache 2.0 licence, given that GSL is GPL. On the contrary, OpenBLAS is BSD and compatible with Apache 2.0. Also, OpenBLAS performance is so outstanding compared to GSL that there is no reason to maintain GSL at this point.

alexandrupaler commented 4 years ago

Thank you. I understand your answer. I was asking from the perspective of having a hybrid simulator capable of cluster/hpc.

s-mandra commented 4 years ago

Everything should work now!