aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Kummerlaender2019-06-24 23:06:05 +0200
committerAdrian Kummerlaender2019-06-24 23:09:20 +0200
commit198ceb7b8b46442d96fcd99a78a9f179ab9a7a94 (patch)
tree0d78f1985c578c67d2bfc624f1c6a4375a80f9a2
parente096aca2a38141ff0f3e78f3ebadd7a58760f7a6 (diff)
downloadsymlbm_playground-198ceb7b8b46442d96fcd99a78a9f179ab9a7a94.tar
symlbm_playground-198ceb7b8b46442d96fcd99a78a9f179ab9a7a94.tar.gz
symlbm_playground-198ceb7b8b46442d96fcd99a78a9f179ab9a7a94.tar.bz2
symlbm_playground-198ceb7b8b46442d96fcd99a78a9f179ab9a7a94.tar.lz
symlbm_playground-198ceb7b8b46442d96fcd99a78a9f179ab9a7a94.tar.xz
symlbm_playground-198ceb7b8b46442d96fcd99a78a9f179ab9a7a94.tar.zst
symlbm_playground-198ceb7b8b46442d96fcd99a78a9f179ab9a7a94.zip
Add basic benchmark scripts, K2200 results
-rw-r--r--ldc_2d_benchmark.py97
-rw-r--r--ldc_3d_benchmark.py97
-rw-r--r--result/ldc_2d_benchmark.k2200.data1
-rw-r--r--result/ldc_2d_benchmark.k2200.log128
-rw-r--r--result/ldc_3d_benchmark.k2200.data1
-rw-r--r--result/ldc_3d_benchmark.k2200.log112
6 files changed, 436 insertions, 0 deletions
diff --git a/ldc_2d_benchmark.py b/ldc_2d_benchmark.py
new file mode 100644
index 0000000..af2dfa6
--- /dev/null
+++ b/ldc_2d_benchmark.py
@@ -0,0 +1,97 @@
+import numpy
+import time
+from string import Template
+
+from simulation import Lattice, Geometry
+from symbolic.generator import LBM
+
+import symbolic.D2Q9 as D2Q9
+
+import itertools
+
+lid_speed = 0.1
+relaxation_time = 0.52
+
+def MLUPS(cells, steps, time):
+ return cells * steps / time * 1e-6
+
+def cavity(geometry, x, y):
+ if x == 1 or y == 1 or x == geometry.size_x-2:
+ return 2
+ elif y == geometry.size_y-2:
+ return 3
+ else:
+ return 1
+
+boundary = Template("""
+ if ( m == 2 ) {
+ u_0 = 0.0;
+ u_1 = 0.0;
+ }
+ if ( m == 3 ) {
+ u_0 = $lid_speed;
+ u_1 = 0.0;
+ }
+""").substitute({
+ 'lid_speed': lid_speed
+})
+
+sizes = [32, 64, 96, 128, 256, 512, 1024]
+
+precisions = [ 'single', 'double' ]
+
+layouts = [
+ ( 16, 1),
+ ( 24, 1),
+ ( 32, 1),
+ ( 48, 1),
+ ( 64, 1),
+ ( 96, 1),
+ ( 128, 1),
+ ( 256, 1),
+ ( 512, 1),
+ (1024, 1),
+]
+
+configs = list(filter(
+ lambda config: config[0] % config[1][0] == 0 and config[0] % config[1][1] == 0,
+ itertools.product(*[sizes, layouts, precisions, [True, False]])
+))
+
+lbm = LBM(D2Q9)
+
+measurements = []
+
+for size, layout, precision, opti in configs:
+ lattice = Lattice(
+ descriptor = D2Q9,
+ geometry = Geometry(size, size),
+ precision = precision,
+ layout = layout,
+ moments = lbm.moments(optimize = opti),
+ collide = lbm.bgk(f_eq = lbm.equilibrium(), tau = relaxation_time, optimize = opti),
+ boundary_src = boundary)
+ lattice.setup_geometry(cavity)
+
+ nUpdates = 1000
+ nStat = 100
+
+ stats = []
+
+ lastStat = time.time()
+
+ for i in range(1,nUpdates+1):
+ lattice.evolve()
+
+ if i % nStat == 0:
+ lattice.sync()
+ mlups = round(MLUPS(lattice.geometry.volume, nStat, time.time() - lastStat))
+ stats.append(mlups)
+ lastStat = time.time()
+
+ print('%s: ~%d MLUPS' % ((size, layout, precision, opti), numpy.average(stats)))
+ measurements.append(((size, layout, precision, opti), stats))
+ del lattice
+
+with open('result/ldc_2d_benchmark.data', 'w') as f:
+ f.write(str(measurements))
diff --git a/ldc_3d_benchmark.py b/ldc_3d_benchmark.py
new file mode 100644
index 0000000..d066d87
--- /dev/null
+++ b/ldc_3d_benchmark.py
@@ -0,0 +1,97 @@
+import numpy
+import time
+from string import Template
+
+from simulation import Lattice, Geometry
+from symbolic.generator import LBM
+
+import symbolic.D3Q19 as D3Q19
+import symbolic.D3Q27 as D3Q27
+
+import itertools
+
+lid_speed = 0.1
+relaxation_time = 0.52
+
+def MLUPS(cells, steps, time):
+ return cells * steps / time * 1e-6
+
+def cavity(geometry, x, y, z):
+ if x == 1 or y == 1 or z == 1 or x == geometry.size_x-2 or y == geometry.size_y-2:
+ return 2
+ elif z == geometry.size_z-2:
+ return 3
+ else:
+ return 1
+
+boundary = Template("""
+ if ( m == 2 ) {
+ u_0 = 0.0;
+ u_1 = 0.0;
+ u_2 = 0.0;
+ }
+ if ( m == 3 ) {
+ u_0 = $lid_speed;
+ u_1 = 0.0;
+ u_2 = 0.0;
+ }
+""").substitute({
+ 'lid_speed': lid_speed
+})
+
+sizes = [16, 32, 48, 64, 96]
+
+layouts = [
+ ( 16, 1, 1),
+ ( 24, 1, 1),
+ ( 32, 1, 1),
+ ( 48, 1, 1),
+ ( 64, 1, 1),
+ ( 96, 1, 1)
+]
+
+descriptors = [ D3Q19, D3Q27 ]
+
+precisions = [ 'single', 'double' ]
+
+configs = list(filter(
+ lambda config: config[0] % config[1][0] == 0 and config[0] % config[1][1] == 0,
+ itertools.product(*[sizes, layouts, descriptors, precisions, [True, False]])
+))
+
+measurements = []
+
+for size, layout, descriptor, precision, opti in configs:
+ lbm = LBM(descriptor)
+ lattice = Lattice(
+ descriptor = descriptor,
+ geometry = Geometry(size, size, size),
+ precision = precision,
+ layout = layout,
+ moments = lbm.moments(optimize = opti),
+ collide = lbm.bgk(f_eq = lbm.equilibrium(), tau = relaxation_time, optimize = opti),
+ boundary_src = boundary)
+ lattice.setup_geometry(cavity)
+
+ nUpdates = 1000
+ nStat = 100
+
+ stats = []
+
+ lastStat = time.time()
+
+ for i in range(1,nUpdates+1):
+ lattice.evolve()
+
+ if i % nStat == 0:
+ lattice.sync()
+ mlups = round(MLUPS(lattice.geometry.volume, nStat, time.time() - lastStat))
+ stats.append(mlups)
+ lastStat = time.time()
+
+ print('%s: ~%d MLUPS' % ((size, layout, descriptor.__name__, precision, opti), numpy.average(stats)))
+ measurements.append(((size, layout, descriptor.__name__, precision, opti), stats))
+ del lattice, lbm
+
+with open('result/ldc_3d_benchmark.data', 'w') as f:
+ f.write(str(measurements))
diff --git a/result/ldc_2d_benchmark.k2200.data b/result/ldc_2d_benchmark.k2200.data
new file mode 100644
index 0000000..8079473
--- /dev/null
+++ b/result/ldc_2d_benchmark.k2200.data
@@ -0,0 +1 @@
+[((32, (16, 1), 'single', True), [15, 16, 16, 16, 16, 16, 16, 16, 16, 16]), ((32, (16, 1), 'single', False), [16, 16, 16, 16, 16, 16, 16, 16, 16, 16]), ((32, (16, 1), 'double', True), [16, 16, 16, 16, 16, 16, 16, 16, 16, 16]), ((32, (16, 1), 'double', False), [13, 13, 13, 13, 13, 13, 13, 13, 13, 13]), ((32, (32, 1), 'single', True), [16, 16, 16, 16, 16, 16, 16, 16, 16, 16]), ((32, (32, 1), 'single', False), [16, 16, 16, 16, 16, 16, 16, 16, 16, 16]), ((32, (32, 1), 'double', True), [14, 14, 16, 16, 16, 16, 16, 16, 16, 16]), ((32, (32, 1), 'double', False), [14, 14, 14, 14, 14, 14, 14, 14, 14, 14]), ((64, (16, 1), 'single', True), [63, 63, 63, 63, 63, 63, 63, 63, 63, 63]), ((64, (16, 1), 'single', False), [63, 63, 63, 63, 63, 63, 63, 63, 63, 63]), ((64, (16, 1), 'double', True), [62, 63, 63, 63, 63, 63, 63, 63, 63, 63]), ((64, (16, 1), 'double', False), [13, 13, 13, 13, 13, 14, 14, 14, 14, 14]), ((64, (32, 1), 'single', True), [63, 64, 63, 63, 63, 63, 62, 63, 63, 63]), ((64, (32, 1), 'single', False), [63, 63, 63, 63, 63, 63, 63, 63, 63, 63]), ((64, (32, 1), 'double', True), [62, 63, 63, 63, 63, 63, 63, 63, 63, 63]), ((64, (32, 1), 'double', False), [28, 28, 28, 27, 28, 28, 28, 28, 28, 28]), ((64, (64, 1), 'single', True), [62, 63, 63, 63, 63, 63, 63, 63, 63, 63]), ((64, (64, 1), 'single', False), [62, 63, 63, 63, 63, 62, 63, 63, 63, 63]), ((64, (64, 1), 'double', True), [63, 64, 63, 63, 63, 63, 63, 63, 63, 63]), ((64, (64, 1), 'double', False), [27, 27, 27, 27, 27, 27, 27, 27, 27, 27]), ((96, (16, 1), 'single', True), [134, 135, 135, 135, 133, 133, 134, 135, 135, 135]), ((96, (16, 1), 'single', False), [141, 143, 142, 142, 142, 141, 141, 142, 141, 142]), ((96, (16, 1), 'double', True), [140, 141, 141, 141, 141, 141, 140, 141, 141, 142]), ((96, (16, 1), 'double', False), [15, 15, 15, 15, 15, 15, 15, 15, 15, 15]), ((96, (24, 1), 'single', True), [140, 143, 142, 142, 142, 141, 141, 141, 142, 143]), ((96, (24, 1), 'single', False), [139, 141, 142, 140, 141, 141, 141, 141, 141, 141]), ((96, (24, 1), 'double', True), [138, 140, 140, 139, 139, 141, 140, 140, 141, 139]), ((96, (24, 1), 'double', False), [21, 22, 22, 22, 21, 22, 22, 22, 22, 22]), ((96, (32, 1), 'single', True), [139, 140, 139, 139, 138, 138, 140, 140, 140, 141]), ((96, (32, 1), 'single', False), [141, 142, 143, 142, 142, 141, 136, 125, 125, 125]), ((96, (32, 1), 'double', True), [140, 140, 141, 137, 136, 141, 140, 141, 141, 142]), ((96, (32, 1), 'double', False), [28, 28, 28, 28, 28, 28, 28, 28, 28, 28]), ((96, (48, 1), 'single', True), [141, 142, 142, 142, 142, 142, 142, 141, 142, 142]), ((96, (48, 1), 'single', False), [141, 142, 142, 142, 142, 141, 142, 140, 141, 142]), ((96, (48, 1), 'double', True), [139, 142, 141, 141, 141, 142, 141, 142, 141, 141]), ((96, (48, 1), 'double', False), [22, 21, 21, 22, 22, 22, 22, 22, 22, 21]), ((96, (96, 1), 'single', True), [141, 143, 142, 132, 137, 141, 141, 142, 141, 142]), ((96, (96, 1), 'single', False), [141, 141, 142, 140, 142, 141, 141, 141, 141, 142]), ((96, (96, 1), 'double', True), [140, 141, 141, 141, 141, 141, 142, 142, 142, 141]), ((96, (96, 1), 'double', False), [29, 28, 28, 28, 28, 28, 28, 28, 28, 28]), ((128, (16, 1), 'single', True), [251, 254, 254, 253, 253, 253, 254, 253, 253, 253]), ((128, (16, 1), 'single', False), [250, 253, 252, 252, 252, 253, 252, 252, 252, 253]), ((128, (16, 1), 'double', True), [151, 152, 152, 152, 152, 152, 152, 152, 152, 152]), ((128, (16, 1), 'double', False), [16, 15, 15, 15, 15, 15, 15, 15, 15, 15]), ((128, (32, 1), 'single', True), [221, 224, 224, 223, 223, 226, 247, 253, 253, 251]), ((128, (32, 1), 'single', False), [248, 252, 251, 251, 251, 253, 252, 253, 253, 251]), ((128, (32, 1), 'double', True), [248, 252, 251, 251, 251, 251, 251, 250, 252, 249]), ((128, (32, 1), 'double', False), [30, 29, 29, 29, 29, 29, 29, 29, 29, 29]), ((128, (64, 1), 'single', True), [250, 253, 252, 253, 252, 252, 252, 252, 252, 252]), ((128, (64, 1), 'single', False), [251, 253, 253, 253, 253, 253, 253, 252, 253, 253]), ((128, (64, 1), 'double', True), [247, 250, 250, 249, 250, 250, 250, 251, 250, 251]), ((128, (64, 1), 'double', False), [29, 29, 29, 29, 29, 29, 29, 29, 29, 29]), ((128, (128, 1), 'single', True), [250, 253, 253, 252, 253, 252, 252, 253, 253, 253]), ((128, (128, 1), 'single', False), [250, 253, 250, 246, 253, 251, 251, 251, 252, 252]), ((128, (128, 1), 'double', True), [247, 249, 249, 249, 249, 249, 249, 250, 250, 250]), ((128, (128, 1), 'double', False), [29, 28, 28, 28, 28, 28, 28, 28, 28, 28]), ((256, (16, 1), 'single', True), [786, 789, 787, 791, 789, 791, 790, 789, 787, 791]), ((256, (16, 1), 'single', False), [460, 442, 427, 424, 426, 426, 426, 426, 426, 426]), ((256, (16, 1), 'double', True), [161, 161, 161, 161, 161, 161, 160, 161, 161, 161]), ((256, (16, 1), 'double', False), [16, 15, 15, 15, 15, 15, 15, 15, 15, 15]), ((256, (32, 1), 'single', True), [774, 786, 775, 789, 774, 789, 775, 787, 775, 788]), ((256, (32, 1), 'single', False), [763, 774, 763, 770, 761, 771, 761, 772, 760, 769]), ((256, (32, 1), 'double', True), [312, 313, 313, 313, 313, 313, 313, 313, 313, 313]), ((256, (32, 1), 'double', False), [32, 30, 30, 30, 30, 30, 30, 30, 30, 30]), ((256, (64, 1), 'single', True), [759, 772, 764, 770, 760, 772, 762, 774, 761, 775]), ((256, (64, 1), 'single', False), [720, 729, 724, 719, 721, 718, 723, 717, 723, 716]), ((256, (64, 1), 'double', True), [311, 311, 311, 311, 312, 312, 312, 312, 311, 311]), ((256, (64, 1), 'double', False), [32, 30, 30, 30, 30, 30, 30, 30, 30, 30]), ((256, (128, 1), 'single', True), [762, 767, 766, 765, 765, 765, 764, 766, 767, 764]), ((256, (128, 1), 'single', False), [726, 730, 725, 723, 725, 721, 726, 720, 727, 717]), ((256, (128, 1), 'double', True), [311, 311, 311, 311, 312, 311, 312, 312, 311, 312]), ((256, (128, 1), 'double', False), [32, 30, 30, 30, 30, 30, 30, 30, 30, 28]), ((256, (256, 1), 'single', True), [768, 766, 771, 769, 772, 768, 773, 769, 774, 766]), ((256, (256, 1), 'single', False), [733, 736, 733, 732, 732, 732, 731, 732, 731, 735]), ((256, (256, 1), 'double', True), [309, 310, 310, 310, 309, 310, 310, 310, 309, 310]), ((256, (256, 1), 'double', False), [31, 30, 29, 29, 29, 29, 29, 29, 29, 29]), ((512, (16, 1), 'single', True), [822, 824, 826, 824, 824, 824, 824, 823, 823, 824]), ((512, (16, 1), 'single', False), [490, 481, 470, 460, 452, 448, 448, 448, 448, 448]), ((512, (16, 1), 'double', True), [163, 163, 163, 163, 163, 163, 163, 163, 163, 163]), ((512, (16, 1), 'double', False), [17, 16, 15, 15, 15, 15, 15, 15, 15, 15]), ((512, (32, 1), 'single', True), [812, 829, 832, 832, 832, 834, 831, 831, 831, 831]), ((512, (32, 1), 'single', False), [822, 825, 826, 827, 827, 826, 826, 828, 826, 825]), ((512, (32, 1), 'double', True), [319, 323, 323, 323, 323, 323, 316, 323, 320, 323]), ((512, (32, 1), 'double', False), [33, 32, 31, 30, 30, 30, 30, 30, 30, 30]), ((512, (64, 1), 'single', True), [821, 825, 825, 825, 825, 826, 826, 825, 829, 825]), ((512, (64, 1), 'single', False), [806, 804, 803, 802, 802, 800, 799, 800, 800, 800]), ((512, (64, 1), 'double', True), [322, 323, 323, 323, 323, 323, 323, 323, 323, 323]), ((512, (64, 1), 'double', False), [33, 32, 31, 30, 30, 30, 30, 30, 30, 30]), ((512, (128, 1), 'single', True), [823, 825, 825, 826, 828, 825, 824, 825, 825, 824]), ((512, (128, 1), 'single', False), [803, 805, 804, 804, 803, 801, 801, 801, 801, 801]), ((512, (128, 1), 'double', True), [323, 323, 323, 319, 323, 323, 323, 323, 323, 323]), ((512, (128, 1), 'double', False), [33, 32, 31, 30, 30, 30, 30, 30, 30, 30]), ((512, (256, 1), 'single', True), [828, 827, 827, 826, 825, 827, 827, 828, 826, 827]), ((512, (256, 1), 'single', False), [808, 810, 809, 809, 809, 806, 807, 807, 807, 807]), ((512, (256, 1), 'double', True), [323, 323, 323, 323, 323, 323, 323, 323, 323, 319]), ((512, (256, 1), 'double', False), [33, 32, 30, 30, 30, 30, 30, 30, 30, 30]), ((512, (512, 1), 'single', True), [826, 826, 826, 827, 827, 826, 827, 827, 827, 815]), ((512, (512, 1), 'single', False), [815, 813, 813, 812, 812, 810, 811, 810, 785, 810]), ((512, (512, 1), 'double', True), [317, 317, 313, 317, 317, 317, 317, 317, 317, 317]), ((512, (512, 1), 'double', False), [33, 31, 30, 30, 30, 30, 30, 30, 30, 30]), ((1024, (16, 1), 'single', True), [826, 829, 829, 829, 829, 828, 823, 829, 829, 830]), ((1024, (16, 1), 'single', False), [498, 494, 489, 484, 476, 473, 469, 464, 458, 455]), ((1024, (16, 1), 'double', True), [163, 163, 163, 163, 163, 163, 163, 163, 163, 163]), ((1024, (16, 1), 'double', False), [17, 17, 16, 16, 15, 15, 15, 15, 15, 15]), ((1024, (32, 1), 'single', True), [842, 842, 844, 843, 843, 843, 844, 836, 843, 843]), ((1024, (32, 1), 'single', False), [830, 838, 837, 838, 838, 838, 838, 838, 831, 838]), ((1024, (32, 1), 'double', True), [325, 326, 326, 325, 326, 326, 325, 326, 326, 326]), ((1024, (32, 1), 'double', False), [34, 33, 32, 32, 31, 30, 30, 30, 30, 30]), ((1024, (64, 1), 'single', True), [827, 830, 831, 830, 832, 824, 831, 830, 831, 831]), ((1024, (64, 1), 'single', False), [816, 816, 816, 815, 814, 814, 809, 811, 812, 812]), ((1024, (64, 1), 'double', True), [326, 326, 326, 325, 326, 326, 325, 326, 326, 325]), ((1024, (64, 1), 'double', False), [34, 33, 32, 32, 31, 30, 30, 30, 30, 30]), ((1024, (128, 1), 'single', True), [826, 830, 831, 830, 824, 829, 830, 830, 830, 831]), ((1024, (128, 1), 'single', False), [815, 816, 816, 815, 814, 809, 811, 813, 811, 812]), ((1024, (128, 1), 'double', True), [326, 326, 325, 326, 326, 325, 326, 326, 326, 325]), ((1024, (128, 1), 'double', False), [34, 33, 32, 32, 31, 30, 30, 30, 30, 30]), ((1024, (256, 1), 'single', True), [830, 833, 827, 833, 834, 833, 834, 833, 834, 832]), ((1024, (256, 1), 'single', False), [823, 824, 823, 822, 816, 821, 821, 821, 820, 820]), ((1024, (256, 1), 'double', True), [326, 325, 326, 326, 326, 325, 326, 326, 325, 326]), ((1024, (256, 1), 'double', False), [34, 33, 32, 32, 31, 30, 30, 30, 30, 30]), ((1024, (512, 1), 'single', True), [832, 825, 834, 835, 834, 835, 834, 835, 834, 828]), ((1024, (512, 1), 'single', False), [827, 827, 826, 820, 826, 826, 826, 825, 826, 825]), ((1024, (512, 1), 'double', True), [322, 321, 322, 322, 322, 322, 322, 322, 321, 322]), ((1024, (512, 1), 'double', False), [33, 33, 32, 31, 31, 30, 30, 30, 30, 30]), ((1024, (1024, 1), 'single', True), [832, 833, 834, 833, 834, 833, 834, 826, 833, 834]), ((1024, (1024, 1), 'single', False), [827, 819, 824, 821, 818, 815, 813, 811, 810, 800]), ((1024, (1024, 1), 'double', True), [298, 299, 299, 298, 299, 299, 298, 299, 299, 298]), ((1024, (1024, 1), 'double', False), [33, 32, 32, 31, 30, 30, 30, 30, 30, 30])] \ No newline at end of file
diff --git a/result/ldc_2d_benchmark.k2200.log b/result/ldc_2d_benchmark.k2200.log
new file mode 100644
index 0000000..b88df82
--- /dev/null
+++ b/result/ldc_2d_benchmark.k2200.log
@@ -0,0 +1,128 @@
+(32, (16, 1), 'single', True): ~15 MLUPS
+(32, (16, 1), 'single', False): ~16 MLUPS
+(32, (16, 1), 'double', True): ~16 MLUPS
+(32, (16, 1), 'double', False): ~13 MLUPS
+(32, (32, 1), 'single', True): ~16 MLUPS
+(32, (32, 1), 'single', False): ~16 MLUPS
+(32, (32, 1), 'double', True): ~15 MLUPS
+(32, (32, 1), 'double', False): ~14 MLUPS
+(64, (16, 1), 'single', True): ~63 MLUPS
+(64, (16, 1), 'single', False): ~63 MLUPS
+(64, (16, 1), 'double', True): ~62 MLUPS
+(64, (16, 1), 'double', False): ~13 MLUPS
+(64, (32, 1), 'single', True): ~63 MLUPS
+(64, (32, 1), 'single', False): ~63 MLUPS
+(64, (32, 1), 'double', True): ~62 MLUPS
+(64, (32, 1), 'double', False): ~27 MLUPS
+(64, (64, 1), 'single', True): ~62 MLUPS
+(64, (64, 1), 'single', False): ~62 MLUPS
+(64, (64, 1), 'double', True): ~63 MLUPS
+(64, (64, 1), 'double', False): ~27 MLUPS
+(96, (16, 1), 'single', True): ~134 MLUPS
+(96, (16, 1), 'single', False): ~141 MLUPS
+(96, (16, 1), 'double', True): ~140 MLUPS
+(96, (16, 1), 'double', False): ~15 MLUPS
+(96, (24, 1), 'single', True): ~141 MLUPS
+(96, (24, 1), 'single', False): ~140 MLUPS
+(96, (24, 1), 'double', True): ~139 MLUPS
+(96, (24, 1), 'double', False): ~21 MLUPS
+(96, (32, 1), 'single', True): ~139 MLUPS
+(96, (32, 1), 'single', False): ~136 MLUPS
+(96, (32, 1), 'double', True): ~139 MLUPS
+(96, (32, 1), 'double', False): ~28 MLUPS
+(96, (48, 1), 'single', True): ~141 MLUPS
+(96, (48, 1), 'single', False): ~141 MLUPS
+(96, (48, 1), 'double', True): ~141 MLUPS
+(96, (48, 1), 'double', False): ~21 MLUPS
+(96, (96, 1), 'single', True): ~140 MLUPS
+(96, (96, 1), 'single', False): ~141 MLUPS
+(96, (96, 1), 'double', True): ~141 MLUPS
+(96, (96, 1), 'double', False): ~28 MLUPS
+(128, (16, 1), 'single', True): ~253 MLUPS
+(128, (16, 1), 'single', False): ~252 MLUPS
+(128, (16, 1), 'double', True): ~151 MLUPS
+(128, (16, 1), 'double', False): ~15 MLUPS
+(128, (32, 1), 'single', True): ~234 MLUPS
+(128, (32, 1), 'single', False): ~251 MLUPS
+(128, (32, 1), 'double', True): ~250 MLUPS
+(128, (32, 1), 'double', False): ~29 MLUPS
+(128, (64, 1), 'single', True): ~252 MLUPS
+(128, (64, 1), 'single', False): ~252 MLUPS
+(128, (64, 1), 'double', True): ~249 MLUPS
+(128, (64, 1), 'double', False): ~29 MLUPS
+(128, (128, 1), 'single', True): ~252 MLUPS
+(128, (128, 1), 'single', False): ~250 MLUPS
+(128, (128, 1), 'double', True): ~249 MLUPS
+(128, (128, 1), 'double', False): ~28 MLUPS
+(256, (16, 1), 'single', True): ~789 MLUPS
+(256, (16, 1), 'single', False): ~430 MLUPS
+(256, (16, 1), 'double', True): ~160 MLUPS
+(256, (16, 1), 'double', False): ~15 MLUPS
+(256, (32, 1), 'single', True): ~781 MLUPS
+(256, (32, 1), 'single', False): ~766 MLUPS
+(256, (32, 1), 'double', True): ~312 MLUPS
+(256, (32, 1), 'double', False): ~30 MLUPS
+(256, (64, 1), 'single', True): ~766 MLUPS
+(256, (64, 1), 'single', False): ~721 MLUPS
+(256, (64, 1), 'double', True): ~311 MLUPS
+(256, (64, 1), 'double', False): ~30 MLUPS
+(256, (128, 1), 'single', True): ~765 MLUPS
+(256, (128, 1), 'single', False): ~724 MLUPS
+(256, (128, 1), 'double', True): ~311 MLUPS
+(256, (128, 1), 'double', False): ~30 MLUPS
+(256, (256, 1), 'single', True): ~769 MLUPS
+(256, (256, 1), 'single', False): ~732 MLUPS
+(256, (256, 1), 'double', True): ~309 MLUPS
+(256, (256, 1), 'double', False): ~29 MLUPS
+(512, (16, 1), 'single', True): ~823 MLUPS
+(512, (16, 1), 'single', False): ~459 MLUPS
+(512, (16, 1), 'double', True): ~163 MLUPS
+(512, (16, 1), 'double', False): ~15 MLUPS
+(512, (32, 1), 'single', True): ~829 MLUPS
+(512, (32, 1), 'single', False): ~825 MLUPS
+(512, (32, 1), 'double', True): ~321 MLUPS
+(512, (32, 1), 'double', False): ~30 MLUPS
+(512, (64, 1), 'single', True): ~825 MLUPS
+(512, (64, 1), 'single', False): ~801 MLUPS
+(512, (64, 1), 'double', True): ~322 MLUPS
+(512, (64, 1), 'double', False): ~30 MLUPS
+(512, (128, 1), 'single', True): ~825 MLUPS
+(512, (128, 1), 'single', False): ~802 MLUPS
+(512, (128, 1), 'double', True): ~322 MLUPS
+(512, (128, 1), 'double', False): ~30 MLUPS
+(512, (256, 1), 'single', True): ~826 MLUPS
+(512, (256, 1), 'single', False): ~807 MLUPS
+(512, (256, 1), 'double', True): ~322 MLUPS
+(512, (256, 1), 'double', False): ~30 MLUPS
+(512, (512, 1), 'single', True): ~825 MLUPS
+(512, (512, 1), 'single', False): ~809 MLUPS
+(512, (512, 1), 'double', True): ~316 MLUPS
+(512, (512, 1), 'double', False): ~30 MLUPS
+(1024, (16, 1), 'single', True): ~828 MLUPS
+(1024, (16, 1), 'single', False): ~476 MLUPS
+(1024, (16, 1), 'double', True): ~163 MLUPS
+(1024, (16, 1), 'double', False): ~15 MLUPS
+(1024, (32, 1), 'single', True): ~842 MLUPS
+(1024, (32, 1), 'single', False): ~836 MLUPS
+(1024, (32, 1), 'double', True): ~325 MLUPS
+(1024, (32, 1), 'double', False): ~31 MLUPS
+(1024, (64, 1), 'single', True): ~829 MLUPS
+(1024, (64, 1), 'single', False): ~813 MLUPS
+(1024, (64, 1), 'double', True): ~325 MLUPS
+(1024, (64, 1), 'double', False): ~31 MLUPS
+(1024, (128, 1), 'single', True): ~829 MLUPS
+(1024, (128, 1), 'single', False): ~813 MLUPS
+(1024, (128, 1), 'double', True): ~325 MLUPS
+(1024, (128, 1), 'double', False): ~31 MLUPS
+(1024, (256, 1), 'single', True): ~832 MLUPS
+(1024, (256, 1), 'single', False): ~821 MLUPS
+(1024, (256, 1), 'double', True): ~325 MLUPS
+(1024, (256, 1), 'double', False): ~31 MLUPS
+(1024, (512, 1), 'single', True): ~832 MLUPS
+(1024, (512, 1), 'single', False): ~825 MLUPS
+(1024, (512, 1), 'double', True): ~321 MLUPS
+(1024, (512, 1), 'double', False): ~31 MLUPS
+(1024, (1024, 1), 'single', True): ~832 MLUPS
+(1024, (1024, 1), 'single', False): ~815 MLUPS
+(1024, (1024, 1), 'double', True): ~298 MLUPS
+(1024, (1024, 1), 'double', False): ~30 MLUPS
diff --git a/result/ldc_3d_benchmark.k2200.data b/result/ldc_3d_benchmark.k2200.data
new file mode 100644
index 0000000..95150a7
--- /dev/null
+++ b/result/ldc_3d_benchmark.k2200.data
@@ -0,0 +1 @@
+[((16, (16, 1, 1), 'symbolic.D3Q19', 'single', True), [58, 60, 60, 60, 60, 60, 60, 60, 59, 60]), ((16, (16, 1, 1), 'symbolic.D3Q19', 'single', False), [59, 60, 60, 60, 60, 60, 60, 60, 60, 60]), ((16, (16, 1, 1), 'symbolic.D3Q19', 'double', True), [58, 59, 59, 59, 59, 60, 59, 59, 60, 59]), ((16, (16, 1, 1), 'symbolic.D3Q19', 'double', False), [8, 8, 8, 8, 8, 9, 9, 9, 9, 9]), ((16, (16, 1, 1), 'symbolic.D3Q27', 'single', True), [59, 60, 60, 59, 60, 60, 60, 60, 60, 60]), ((16, (16, 1, 1), 'symbolic.D3Q27', 'single', False), [59, 60, 60, 60, 60, 59, 59, 59, 59, 60]), ((16, (16, 1, 1), 'symbolic.D3Q27', 'double', True), [55, 55, 55, 55, 55, 56, 55, 55, 55, 55]), ((16, (16, 1, 1), 'symbolic.D3Q27', 'double', False), [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]), ((32, (16, 1, 1), 'symbolic.D3Q19', 'single', True), [408, 411, 411, 411, 409, 411, 410, 411, 409, 412]), ((32, (16, 1, 1), 'symbolic.D3Q19', 'single', False), [166, 173, 173, 173, 173, 173, 173, 173, 173, 173]), ((32, (16, 1, 1), 'symbolic.D3Q19', 'double', True), [86, 86, 85, 86, 86, 86, 86, 86, 86, 86]), ((32, (16, 1, 1), 'symbolic.D3Q19', 'double', False), [8, 7, 8, 7, 7, 7, 7, 7, 7, 7]), ((32, (16, 1, 1), 'symbolic.D3Q27', 'single', True), [288, 287, 287, 288, 287, 288, 289, 287, 287, 289]), ((32, (16, 1, 1), 'symbolic.D3Q27', 'single', False), [111, 111, 111, 111, 111, 111, 111, 111, 111, 111]), ((32, (16, 1, 1), 'symbolic.D3Q27', 'double', True), [61, 61, 60, 60, 61, 61, 61, 61, 61, 61]), ((32, (16, 1, 1), 'symbolic.D3Q27', 'double', False), [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]), ((32, (32, 1, 1), 'symbolic.D3Q19', 'single', True), [417, 419, 420, 418, 421, 418, 421, 419, 422, 419]), ((32, (32, 1, 1), 'symbolic.D3Q19', 'single', False), [313, 314, 313, 313, 313, 313, 313, 313, 313, 313]), ((32, (32, 1, 1), 'symbolic.D3Q19', 'double', True), [162, 162, 162, 162, 162, 162, 162, 162, 162, 162]), ((32, (32, 1, 1), 'symbolic.D3Q19', 'double', False), [15, 15, 15, 15, 15, 15, 15, 15, 15, 15]), ((32, (32, 1, 1), 'symbolic.D3Q27', 'single', True), [303, 304, 301, 303, 304, 301, 303, 303, 302, 303]), ((32, (32, 1, 1), 'symbolic.D3Q27', 'single', False), [202, 202, 202, 202, 202, 202, 202, 202, 202, 201]), ((32, (32, 1, 1), 'symbolic.D3Q27', 'double', True), [115, 115, 115, 115, 115, 115, 115, 115, 115, 115]), ((32, (32, 1, 1), 'symbolic.D3Q27', 'double', False), [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]), ((48, (16, 1, 1), 'symbolic.D3Q19', 'single', True), [402, 400, 402, 402, 401, 402, 402, 401, 402, 402]), ((48, (16, 1, 1), 'symbolic.D3Q19', 'single', False), [177, 175, 176, 175, 175, 175, 176, 175, 175, 175]), ((48, (16, 1, 1), 'symbolic.D3Q19', 'double', True), [83, 83, 83, 83, 83, 83, 83, 83, 83, 83]), ((48, (16, 1, 1), 'symbolic.D3Q19', 'double', False), [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]), ((48, (16, 1, 1), 'symbolic.D3Q27', 'single', True), [279, 274, 279, 279, 279, 279, 280, 279, 279, 279]), ((48, (16, 1, 1), 'symbolic.D3Q27', 'single', False), [110, 110, 110, 110, 109, 110, 110, 110, 110, 109]), ((48, (16, 1, 1), 'symbolic.D3Q27', 'double', True), [59, 59, 59, 59, 59, 59, 59, 59, 59, 59]), ((48, (16, 1, 1), 'symbolic.D3Q27', 'double', False), [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]), ((48, (24, 1, 1), 'symbolic.D3Q19', 'single', True), [406, 407, 408, 406, 407, 407, 406, 407, 407, 407]), ((48, (24, 1, 1), 'symbolic.D3Q19', 'single', False), [254, 253, 253, 253, 253, 253, 253, 253, 253, 253]), ((48, (24, 1, 1), 'symbolic.D3Q19', 'double', True), [125, 125, 125, 125, 125, 125, 125, 125, 125, 125]), ((48, (24, 1, 1), 'symbolic.D3Q19', 'double', False), [11, 11, 11, 11, 11, 11, 11, 11, 11, 11]), ((48, (24, 1, 1), 'symbolic.D3Q27', 'single', True), [288, 289, 288, 289, 289, 288, 288, 289, 288, 289]), ((48, (24, 1, 1), 'symbolic.D3Q27', 'single', False), [159, 159, 159, 159, 159, 159, 158, 158, 158, 158]), ((48, (24, 1, 1), 'symbolic.D3Q27', 'double', True), [88, 88, 88, 88, 88, 88, 88, 88, 88, 88]), ((48, (24, 1, 1), 'symbolic.D3Q27', 'double', False), [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]), ((48, (48, 1, 1), 'symbolic.D3Q19', 'single', True), [405, 406, 406, 406, 406, 406, 405, 406, 406, 405]), ((48, (48, 1, 1), 'symbolic.D3Q19', 'single', False), [255, 254, 254, 254, 254, 254, 254, 254, 254, 254]), ((48, (48, 1, 1), 'symbolic.D3Q19', 'double', True), [125, 125, 125, 125, 125, 125, 125, 125, 125, 125]), ((48, (48, 1, 1), 'symbolic.D3Q19', 'double', False), [11, 11, 11, 11, 11, 11, 11, 11, 11, 11]), ((48, (48, 1, 1), 'symbolic.D3Q27', 'single', True), [288, 288, 288, 288, 288, 288, 288, 288, 289, 288]), ((48, (48, 1, 1), 'symbolic.D3Q27', 'single', False), [160, 160, 160, 160, 160, 160, 160, 160, 160, 160]), ((48, (48, 1, 1), 'symbolic.D3Q27', 'double', True), [88, 88, 88, 88, 88, 88, 88, 87, 81, 81]), ((48, (48, 1, 1), 'symbolic.D3Q27', 'double', False), [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]), ((64, (16, 1, 1), 'symbolic.D3Q19', 'single', True), [409, 409, 409, 409, 410, 409, 409, 409, 409, 409]), ((64, (16, 1, 1), 'symbolic.D3Q19', 'single', False), [166, 164, 164, 165, 165, 165, 165, 164, 157, 154]), ((64, (16, 1, 1), 'symbolic.D3Q19', 'double', True), [83, 83, 83, 83, 83, 83, 82, 83, 82, 83]), ((64, (16, 1, 1), 'symbolic.D3Q19', 'double', False), [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]), ((64, (16, 1, 1), 'symbolic.D3Q27', 'single', True), [282, 282, 282, 282, 282, 282, 282, 282, 282, 282]), ((64, (16, 1, 1), 'symbolic.D3Q27', 'single', False), [100, 100, 100, 100, 99, 100, 100, 100, 100, 100]), ((64, (16, 1, 1), 'symbolic.D3Q27', 'double', True), [58, 58, 58, 58, 58, 58, 58, 58, 58, 58]), ((64, (16, 1, 1), 'symbolic.D3Q27', 'double', False), [5, 4, 4, 4, 4, 4, 4, 4, 4, 4]), ((64, (32, 1, 1), 'symbolic.D3Q19', 'single', True), [423, 424, 422, 423, 423, 423, 422, 423, 424, 423]), ((64, (32, 1, 1), 'symbolic.D3Q19', 'single', False), [328, 327, 327, 327, 327, 327, 327, 327, 327, 327]), ((64, (32, 1, 1), 'symbolic.D3Q19', 'double', True), [164, 164, 164, 164, 164, 164, 164, 164, 164, 164]), ((64, (32, 1, 1), 'symbolic.D3Q19', 'double', False), [14, 14, 14, 14, 14, 14, 14, 14, 14, 14]), ((64, (32, 1, 1), 'symbolic.D3Q27', 'single', True), [297, 297, 297, 297, 297, 297, 296, 297, 297, 296]), ((64, (32, 1, 1), 'symbolic.D3Q27', 'single', False), [205, 205, 205, 205, 205, 205, 205, 205, 205, 205]), ((64, (32, 1, 1), 'symbolic.D3Q27', 'double', True), [116, 116, 116, 116, 116, 116, 116, 116, 116, 116]), ((64, (32, 1, 1), 'symbolic.D3Q27', 'double', False), [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]), ((64, (64, 1, 1), 'symbolic.D3Q19', 'single', True), [422, 422, 422, 422, 422, 422, 421, 422, 422, 423]), ((64, (64, 1, 1), 'symbolic.D3Q19', 'single', False), [327, 326, 326, 326, 326, 326, 326, 326, 326, 326]), ((64, (64, 1, 1), 'symbolic.D3Q19', 'double', True), [164, 164, 164, 164, 164, 164, 164, 164, 164, 164]), ((64, (64, 1, 1), 'symbolic.D3Q19', 'double', False), [14, 14, 14, 14, 14, 14, 14, 14, 14, 14]), ((64, (64, 1, 1), 'symbolic.D3Q27', 'single', True), [296, 297, 297, 297, 297, 297, 297, 297, 297, 297]), ((64, (64, 1, 1), 'symbolic.D3Q27', 'single', False), [204, 204, 204, 204, 204, 204, 204, 204, 204, 204]), ((64, (64, 1, 1), 'symbolic.D3Q27', 'double', True), [116, 116, 116, 116, 116, 116, 116, 116, 116, 116]), ((64, (64, 1, 1), 'symbolic.D3Q27', 'double', False), [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]), ((96, (16, 1, 1), 'symbolic.D3Q19', 'single', True), [398, 398, 398, 398, 398, 398, 398, 398, 398, 398]), ((96, (16, 1, 1), 'symbolic.D3Q19', 'single', False), [176, 171, 171, 171, 171, 171, 171, 171, 171, 171]), ((96, (16, 1, 1), 'symbolic.D3Q19', 'double', True), [81, 81, 81, 81, 81, 81, 81, 81, 81, 81]), ((96, (16, 1, 1), 'symbolic.D3Q19', 'double', False), [7, 7, 7, 7, 7, 7, 7, 7, 7, 7]), ((96, (16, 1, 1), 'symbolic.D3Q27', 'single', True), [273, 273, 273, 273, 273, 273, 273, 273, 273, 273]), ((96, (16, 1, 1), 'symbolic.D3Q27', 'single', False), [107, 107, 107, 107, 107, 107, 107, 107, 107, 107]), ((96, (16, 1, 1), 'symbolic.D3Q27', 'double', True), [57, 57, 57, 57, 57, 57, 57, 57, 57, 57]), ((96, (16, 1, 1), 'symbolic.D3Q27', 'double', False), [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]), ((96, (24, 1, 1), 'symbolic.D3Q19', 'single', True), [402, 402, 402, 402, 402, 402, 403, 402, 402, 402]), ((96, (24, 1, 1), 'symbolic.D3Q19', 'single', False), [238, 236, 236, 235, 235, 236, 236, 236, 235, 236]), ((96, (24, 1, 1), 'symbolic.D3Q19', 'double', True), [121, 121, 121, 121, 121, 121, 121, 121, 121, 121]), ((96, (24, 1, 1), 'symbolic.D3Q19', 'double', False), [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]), ((96, (24, 1, 1), 'symbolic.D3Q27', 'single', True), [281, 282, 282, 282, 282, 282, 282, 282, 282, 282]), ((96, (24, 1, 1), 'symbolic.D3Q27', 'single', False), [144, 144, 144, 144, 144, 144, 144, 144, 144, 144]), ((96, (24, 1, 1), 'symbolic.D3Q27', 'double', True), [86, 86, 86, 86, 86, 86, 86, 86, 86, 86]), ((96, (24, 1, 1), 'symbolic.D3Q27', 'double', False), [7, 6, 6, 6, 6, 6, 6, 6, 6, 6]), ((96, (32, 1, 1), 'symbolic.D3Q19', 'single', True), [411, 411, 411, 411, 411, 412, 411, 411, 411, 411]), ((96, (32, 1, 1), 'symbolic.D3Q19', 'single', False), [332, 328, 328, 328, 328, 328, 328, 328, 328, 328]), ((96, (32, 1, 1), 'symbolic.D3Q19', 'double', True), [161, 161, 161, 161, 161, 161, 161, 161, 161, 161]), ((96, (32, 1, 1), 'symbolic.D3Q19', 'double', False), [14, 13, 13, 13, 13, 13, 13, 13, 13, 13]), ((96, (32, 1, 1), 'symbolic.D3Q27', 'single', True), [288, 288, 288, 288, 288, 288, 288, 288, 288, 288]), ((96, (32, 1, 1), 'symbolic.D3Q27', 'single', False), [205, 205, 205, 205, 205, 205, 205, 205, 205, 205]), ((96, (32, 1, 1), 'symbolic.D3Q27', 'double', True), [114, 114, 114, 114, 114, 114, 114, 114, 114, 114]), ((96, (32, 1, 1), 'symbolic.D3Q27', 'double', False), [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]), ((96, (48, 1, 1), 'symbolic.D3Q19', 'single', True), [401, 401, 401, 401, 401, 401, 401, 401, 401, 401]), ((96, (48, 1, 1), 'symbolic.D3Q19', 'single', False), [247, 246, 246, 246, 246, 246, 246, 246, 246, 246]), ((96, (48, 1, 1), 'symbolic.D3Q19', 'double', True), [122, 122, 122, 122, 122, 122, 122, 122, 122, 122]), ((96, (48, 1, 1), 'symbolic.D3Q19', 'double', False), [10, 10, 10, 10, 10, 10, 10, 10, 10, 10]), ((96, (48, 1, 1), 'symbolic.D3Q27', 'single', True), [282, 282, 282, 282, 282, 282, 282, 282, 282, 282]), ((96, (48, 1, 1), 'symbolic.D3Q27', 'single', False), [155, 155, 155, 155, 155, 155, 155, 155, 155, 155]), ((96, (48, 1, 1), 'symbolic.D3Q27', 'double', True), [86, 86, 86, 86, 86, 86, 86, 86, 86, 86]), ((96, (48, 1, 1), 'symbolic.D3Q27', 'double', False), [7, 6, 6, 6, 6, 6, 6, 6, 6, 6]), ((96, (96, 1, 1), 'symbolic.D3Q19', 'single', True), [408, 410, 409, 410, 408, 410, 409, 410, 410, 409]), ((96, (96, 1, 1), 'symbolic.D3Q19', 'single', False), [333, 327, 326, 327, 326, 327, 326, 327, 327, 327]), ((96, (96, 1, 1), 'symbolic.D3Q19', 'double', True), [162, 162, 162, 162, 162, 162, 162, 162, 162, 162]), ((96, (96, 1, 1), 'symbolic.D3Q19', 'double', False), [13, 13, 13, 13, 13, 13, 13, 13, 13, 13]), ((96, (96, 1, 1), 'symbolic.D3Q27', 'single', True), [288, 289, 288, 288, 288, 289, 289, 289, 288, 289]), ((96, (96, 1, 1), 'symbolic.D3Q27', 'single', False), [206, 206, 206, 206, 206, 206, 206, 206, 206, 206]), ((96, (96, 1, 1), 'symbolic.D3Q27', 'double', True), [114, 114, 114, 114, 114, 114, 114, 114, 114, 114]), ((96, (96, 1, 1), 'symbolic.D3Q27', 'double', False), [9, 9, 9, 9, 9, 9, 9, 9, 9, 9])] \ No newline at end of file
diff --git a/result/ldc_3d_benchmark.k2200.log b/result/ldc_3d_benchmark.k2200.log
new file mode 100644
index 0000000..7626f87
--- /dev/null
+++ b/result/ldc_3d_benchmark.k2200.log
@@ -0,0 +1,112 @@
+(16, (16, 1, 1), 'symbolic.D3Q19', 'single', True): ~59 MLUPS
+(16, (16, 1, 1), 'symbolic.D3Q19', 'single', False): ~59 MLUPS
+(16, (16, 1, 1), 'symbolic.D3Q19', 'double', True): ~59 MLUPS
+(16, (16, 1, 1), 'symbolic.D3Q19', 'double', False): ~8 MLUPS
+(16, (16, 1, 1), 'symbolic.D3Q27', 'single', True): ~59 MLUPS
+(16, (16, 1, 1), 'symbolic.D3Q27', 'single', False): ~59 MLUPS
+(16, (16, 1, 1), 'symbolic.D3Q27', 'double', True): ~55 MLUPS
+(16, (16, 1, 1), 'symbolic.D3Q27', 'double', False): ~5 MLUPS
+(32, (16, 1, 1), 'symbolic.D3Q19', 'single', True): ~410 MLUPS
+(32, (16, 1, 1), 'symbolic.D3Q19', 'single', False): ~172 MLUPS
+(32, (16, 1, 1), 'symbolic.D3Q19', 'double', True): ~85 MLUPS
+(32, (16, 1, 1), 'symbolic.D3Q19', 'double', False): ~7 MLUPS
+(32, (16, 1, 1), 'symbolic.D3Q27', 'single', True): ~287 MLUPS
+(32, (16, 1, 1), 'symbolic.D3Q27', 'single', False): ~111 MLUPS
+(32, (16, 1, 1), 'symbolic.D3Q27', 'double', True): ~60 MLUPS
+(32, (16, 1, 1), 'symbolic.D3Q27', 'double', False): ~5 MLUPS
+(32, (32, 1, 1), 'symbolic.D3Q19', 'single', True): ~419 MLUPS
+(32, (32, 1, 1), 'symbolic.D3Q19', 'single', False): ~313 MLUPS
+(32, (32, 1, 1), 'symbolic.D3Q19', 'double', True): ~162 MLUPS
+(32, (32, 1, 1), 'symbolic.D3Q19', 'double', False): ~15 MLUPS
+(32, (32, 1, 1), 'symbolic.D3Q27', 'single', True): ~302 MLUPS
+(32, (32, 1, 1), 'symbolic.D3Q27', 'single', False): ~201 MLUPS
+(32, (32, 1, 1), 'symbolic.D3Q27', 'double', True): ~115 MLUPS
+(32, (32, 1, 1), 'symbolic.D3Q27', 'double', False): ~10 MLUPS
+(48, (16, 1, 1), 'symbolic.D3Q19', 'single', True): ~401 MLUPS
+(48, (16, 1, 1), 'symbolic.D3Q19', 'single', False): ~175 MLUPS
+(48, (16, 1, 1), 'symbolic.D3Q19', 'double', True): ~83 MLUPS
+(48, (16, 1, 1), 'symbolic.D3Q19', 'double', False): ~7 MLUPS
+(48, (16, 1, 1), 'symbolic.D3Q27', 'single', True): ~278 MLUPS
+(48, (16, 1, 1), 'symbolic.D3Q27', 'single', False): ~109 MLUPS
+(48, (16, 1, 1), 'symbolic.D3Q27', 'double', True): ~59 MLUPS
+(48, (16, 1, 1), 'symbolic.D3Q27', 'double', False): ~5 MLUPS
+(48, (24, 1, 1), 'symbolic.D3Q19', 'single', True): ~406 MLUPS
+(48, (24, 1, 1), 'symbolic.D3Q19', 'single', False): ~253 MLUPS
+(48, (24, 1, 1), 'symbolic.D3Q19', 'double', True): ~125 MLUPS
+(48, (24, 1, 1), 'symbolic.D3Q19', 'double', False): ~11 MLUPS
+(48, (24, 1, 1), 'symbolic.D3Q27', 'single', True): ~288 MLUPS
+(48, (24, 1, 1), 'symbolic.D3Q27', 'single', False): ~158 MLUPS
+(48, (24, 1, 1), 'symbolic.D3Q27', 'double', True): ~88 MLUPS
+(48, (24, 1, 1), 'symbolic.D3Q27', 'double', False): ~7 MLUPS
+(48, (48, 1, 1), 'symbolic.D3Q19', 'single', True): ~405 MLUPS
+(48, (48, 1, 1), 'symbolic.D3Q19', 'single', False): ~254 MLUPS
+(48, (48, 1, 1), 'symbolic.D3Q19', 'double', True): ~125 MLUPS
+(48, (48, 1, 1), 'symbolic.D3Q19', 'double', False): ~11 MLUPS
+(48, (48, 1, 1), 'symbolic.D3Q27', 'single', True): ~288 MLUPS
+(48, (48, 1, 1), 'symbolic.D3Q27', 'single', False): ~160 MLUPS
+(48, (48, 1, 1), 'symbolic.D3Q27', 'double', True): ~86 MLUPS
+(48, (48, 1, 1), 'symbolic.D3Q27', 'double', False): ~7 MLUPS
+(64, (16, 1, 1), 'symbolic.D3Q19', 'single', True): ~409 MLUPS
+(64, (16, 1, 1), 'symbolic.D3Q19', 'single', False): ~162 MLUPS
+(64, (16, 1, 1), 'symbolic.D3Q19', 'double', True): ~82 MLUPS
+(64, (16, 1, 1), 'symbolic.D3Q19', 'double', False): ~7 MLUPS
+(64, (16, 1, 1), 'symbolic.D3Q27', 'single', True): ~282 MLUPS
+(64, (16, 1, 1), 'symbolic.D3Q27', 'single', False): ~99 MLUPS
+(64, (16, 1, 1), 'symbolic.D3Q27', 'double', True): ~58 MLUPS
+(64, (16, 1, 1), 'symbolic.D3Q27', 'double', False): ~4 MLUPS
+(64, (32, 1, 1), 'symbolic.D3Q19', 'single', True): ~423 MLUPS
+(64, (32, 1, 1), 'symbolic.D3Q19', 'single', False): ~327 MLUPS
+(64, (32, 1, 1), 'symbolic.D3Q19', 'double', True): ~164 MLUPS
+(64, (32, 1, 1), 'symbolic.D3Q19', 'double', False): ~14 MLUPS
+(64, (32, 1, 1), 'symbolic.D3Q27', 'single', True): ~296 MLUPS
+(64, (32, 1, 1), 'symbolic.D3Q27', 'single', False): ~205 MLUPS
+(64, (32, 1, 1), 'symbolic.D3Q27', 'double', True): ~116 MLUPS
+(64, (32, 1, 1), 'symbolic.D3Q27', 'double', False): ~9 MLUPS
+(64, (64, 1, 1), 'symbolic.D3Q19', 'single', True): ~422 MLUPS
+(64, (64, 1, 1), 'symbolic.D3Q19', 'single', False): ~326 MLUPS
+(64, (64, 1, 1), 'symbolic.D3Q19', 'double', True): ~164 MLUPS
+(64, (64, 1, 1), 'symbolic.D3Q19', 'double', False): ~14 MLUPS
+(64, (64, 1, 1), 'symbolic.D3Q27', 'single', True): ~296 MLUPS
+(64, (64, 1, 1), 'symbolic.D3Q27', 'single', False): ~204 MLUPS
+(64, (64, 1, 1), 'symbolic.D3Q27', 'double', True): ~116 MLUPS
+(64, (64, 1, 1), 'symbolic.D3Q27', 'double', False): ~9 MLUPS
+(96, (16, 1, 1), 'symbolic.D3Q19', 'single', True): ~398 MLUPS
+(96, (16, 1, 1), 'symbolic.D3Q19', 'single', False): ~171 MLUPS
+(96, (16, 1, 1), 'symbolic.D3Q19', 'double', True): ~81 MLUPS
+(96, (16, 1, 1), 'symbolic.D3Q19', 'double', False): ~7 MLUPS
+(96, (16, 1, 1), 'symbolic.D3Q27', 'single', True): ~273 MLUPS
+(96, (16, 1, 1), 'symbolic.D3Q27', 'single', False): ~107 MLUPS
+(96, (16, 1, 1), 'symbolic.D3Q27', 'double', True): ~57 MLUPS
+(96, (16, 1, 1), 'symbolic.D3Q27', 'double', False): ~4 MLUPS
+(96, (24, 1, 1), 'symbolic.D3Q19', 'single', True): ~402 MLUPS
+(96, (24, 1, 1), 'symbolic.D3Q19', 'single', False): ~235 MLUPS
+(96, (24, 1, 1), 'symbolic.D3Q19', 'double', True): ~121 MLUPS
+(96, (24, 1, 1), 'symbolic.D3Q19', 'double', False): ~10 MLUPS
+(96, (24, 1, 1), 'symbolic.D3Q27', 'single', True): ~281 MLUPS
+(96, (24, 1, 1), 'symbolic.D3Q27', 'single', False): ~144 MLUPS
+(96, (24, 1, 1), 'symbolic.D3Q27', 'double', True): ~86 MLUPS
+(96, (24, 1, 1), 'symbolic.D3Q27', 'double', False): ~6 MLUPS
+(96, (32, 1, 1), 'symbolic.D3Q19', 'single', True): ~411 MLUPS
+(96, (32, 1, 1), 'symbolic.D3Q19', 'single', False): ~328 MLUPS
+(96, (32, 1, 1), 'symbolic.D3Q19', 'double', True): ~161 MLUPS
+(96, (32, 1, 1), 'symbolic.D3Q19', 'double', False): ~13 MLUPS
+(96, (32, 1, 1), 'symbolic.D3Q27', 'single', True): ~288 MLUPS
+(96, (32, 1, 1), 'symbolic.D3Q27', 'single', False): ~205 MLUPS
+(96, (32, 1, 1), 'symbolic.D3Q27', 'double', True): ~114 MLUPS
+(96, (32, 1, 1), 'symbolic.D3Q27', 'double', False): ~9 MLUPS
+(96, (48, 1, 1), 'symbolic.D3Q19', 'single', True): ~401 MLUPS
+(96, (48, 1, 1), 'symbolic.D3Q19', 'single', False): ~246 MLUPS
+(96, (48, 1, 1), 'symbolic.D3Q19', 'double', True): ~122 MLUPS
+(96, (48, 1, 1), 'symbolic.D3Q19', 'double', False): ~10 MLUPS
+(96, (48, 1, 1), 'symbolic.D3Q27', 'single', True): ~282 MLUPS
+(96, (48, 1, 1), 'symbolic.D3Q27', 'single', False): ~155 MLUPS
+(96, (48, 1, 1), 'symbolic.D3Q27', 'double', True): ~86 MLUPS
+(96, (48, 1, 1), 'symbolic.D3Q27', 'double', False): ~6 MLUPS
+(96, (96, 1, 1), 'symbolic.D3Q19', 'single', True): ~409 MLUPS
+(96, (96, 1, 1), 'symbolic.D3Q19', 'single', False): ~327 MLUPS
+(96, (96, 1, 1), 'symbolic.D3Q19', 'double', True): ~162 MLUPS
+(96, (96, 1, 1), 'symbolic.D3Q19', 'double', False): ~13 MLUPS
+(96, (96, 1, 1), 'symbolic.D3Q27', 'single', True): ~288 MLUPS
+(96, (96, 1, 1), 'symbolic.D3Q27', 'single', False): ~206 MLUPS
+(96, (96, 1, 1), 'symbolic.D3Q27', 'double', True): ~114 MLUPS
+(96, (96, 1, 1), 'symbolic.D3Q27', 'double', False): ~9 MLUPS